Java设计之道:色即是空,空即是色
0.引子
我们的这个世界上,存在这么一种东西:
- 第一:它不占据任何3D之体积,即它没有Volume
- 第二:它也不占据任何2D之面积,即它没有Area
- 第三:它也不占据任何1D之长度,即它没有Length
总之,从空间的角度看,它不具有任何尺寸。
而且,从通用哲学的角度来讲,这种东西,不是一种精神实体;从专业哲学的角度讲,它也不是一种物理学意义上的物质实体。它不是物理意义上的物质,也不具有空间尺寸,但它确实存在,而且不是存在我们头脑的想像当中,因为它不是精神实体,但它确实存在,客观存在,而且某种意义上讲它们都是独立存在的。
你可能就要问我了,这是啥东西,那我们可以告诉你,它就是时空意义上的点(point)。 - 时间意义上的点,是如此的;
- 空间意义上的点,也是如此的;
不容否认,它们是客观存在的,某种意义上讲,也是独立存在的。因此,从哲学角度上讲,时空上的点(point)可以归类为客观实体的一种。
这种点,我说的这种——点(point),给人一种佛教所说的“空”的感觉,空,不是绝对的无,空,也是一种存在。
- 你说它空吧,佛家说,色即是空,万法皆空,只要是色,即是空,它真的很空;
- 你要说它空吧,佛家说空即时色,空就是色呀,你说它空也不空。
于是乎,很多人对于佛家说的空,一头雾水。比我说的,不占据任何体积、面积甚至几何尺寸的东西——点,还要玄乎,令人难以理解。但那人却在那里使劲说,它存在,它真的存在,而且独立地存在。
1.Java之空
1.1 寻找空的感觉,寻找对立的范畴
Java在设计上,或编程要求上,也有一种空,叫面向抽象编程,或面向接口编程。
这是一种设计之道,编程之道,其道就是“空”。
如果你理解“空”,对“空”特别敏感,特别有感觉,你就会发现,Java明明大行其道,反复强调的一种东西,叫OOP,是面向对象编程,而对象是具体的,不是抽象的,再次强调,是具象的。因此,应当叫面向具象编程,而不是面向抽象编程呀?当我说面向抽象编程时,你一定马上就要反驳我了呀,但我说,如果你对“空”天生有感觉,你就会会心一笑。因为你知道,Java之道,其道为“空”。
你会发现,OOP,精髓叫做“面向对象编程”的Java,一旦你要编程时,你更多地,是在设计,所谓编程,叫编程设计,设计点体现在哪?体现在一个东西上面,叫做“类(Class)“。
从哲学意义上讲,一般来说,类(Class)和对象(Object),是天然的一对范畴。
- 类(Class)——代表的是抽象,是空泛的存在,是共性的抽取,是公共的表达
- 对象(Object)——代表的是具象,是具体的存在,是个性的存在,是独立的表达
通常在学Java面向对象内容之初。我们通常喜欢举这样一些例子:
【1】比如说,狗,是一种类;那一条黄狗,则是一个对象,是具体的一条狗;
【2】又比如,在这个世界上,你找不到任何“树”这种东西,因为“树”是一种类;在这个世界上,你只能找到一棵棵的树,而看不到“树”本身。
【3】还有呀,老师还会说,类(Class)就像造车的图纸,对象(Object)就是具体的一辆辆车子,一个个铁皮盒子
所以呀,一个车子的类(Car),可以对应一辆车子( car),也可以对应两辆车子(two cars),还可以对应几十辆车子(dozens of cars)、成百上千或成千上万辆车子(thousands of cars)、许许多多车子(many cars or numerous cars),甚至无数辆车子(Countless cars),…嗯?好奇怪呀。
是的,如果对于哲学无感的人,当老师在那讲,“树”在这个世界上是不存在的时候,就会觉着好奇怪呀,这类人,如果你和他讲“白马非马”这种哲学命题,就会变得非常困难,因为他的脑子在抽象与具象和共性与个性之间转不过弯来,而且他们往往在语言的精微表达控制方面水平不是很高。但如果你对哲学略有那么一点感觉,即使你最初觉着奇怪,你也会马上反应过来,你会觉着,其实,一点都不其怪。原因很简单:
- 类:是一种归纳和抽象,所谓抽象,就是把象去掉了,抽象掉了,个性化的东西去掉,保留的是共性,论的是性,而不是摆弄具体的一件件、一样一样的东西
- 对象:才是那个独立存在的、分散的开来的,千千万万的实在的东西,那个一个个的充满个性的象,差异化的象,那一个个的体
归结起来,我们会发现——类和对象,有这样一些相对的或相反的特征
- 0------------------类--------------------------------------------------------对象
- 1------------------共性-----------------------------------------------------个性
- 2------------------抽象-----------------------------------------------------具象
- 3------------------1或少----------------------------------------------------多
- 4------------------类似模具、图像,处于上层、源头---------------类似产品,下层、产物
- 5------------------时间上的先有,空间逻辑上的前者---------------时间上的后有,空间或逻辑上的后者
- 6------------------聚合性---------------------------------------------------散落性
- 7------------------非真实存在,或另一种存在-----------------------真实存在,具体存在,一个个地存在
- 8------------------空泛-----------------------------------------------------实有
你可能会找到更多的感觉,或相对的范畴或特征,来分别对应类(Class)和对象(Object)
1.2 我们再来看两样东西
1.2.1 消失的点:最后,连影子都没有了
第一个:是来看一个美术上的知识,叫透视。
在西洋画的焦点透视画法,那个聚焦的焦点,叫消失点,也叫没影点。往往一副画,就是一个视角下的一方世界,但无论画什么,只要是焦点透视画法,无论是一个焦点,还是两个焦点,还是多个焦点,你会发现,在一定的视角下,事物好像具有某种趋势,向着某个方向对齐,并不断由近及远归于虚、归于空,甚至有点归于无的样子。那些个聚焦的焦点,可是叫消失点,没影点哦,开始你看到的是美丽的画面,看到是象,看着看着,就看到了背景,看到了远方,看到了不断聚拢的趋势,不断缩小的范围,最后越来越虚,变成了影子,变成了点,最后,再认真一想,点也没了,于是,你才会对没影点或消失点会心一笑。
这会让人想起一个古老的故事:一个老师拿来一个容器(比如一个罐子),容器里装满了大石头,老师就问学生容器有没有装满,起初无感的大部分学生就说,装满了,大石头的顶部都已经超出来容器口了,可是老师又往容器里放了很多小石头进去,又问学生满了没有,还有许多无感的学生又在说,满了满了,老师又往里边放沙子,又问。。。老师又放了些烟尘灰土进去。。。又问。。。又往里倒水。。。
是的,最后水也溢出来了,到底满了没有满,还装不装得下?
大石头–>小石头–>沙子–>灰尘–>水
满了没有满,还装不装得下?还震撼不震撼,震惊不震惊?
就像压缩文件一样,已经压缩了好多次了,那个搞压缩技术的人还在不断地思考着:可不可以再压缩10%,再压缩…
把地球、月亮、太阳、整个银河系,不,把整个宇宙,压缩到一个点上,放进一个小小的罐子那么小的容器里边,可不可以,而且要把99%的容器空间腾出来,可不可以?
如果你接触过宇宙大爆炸理论,即便你先前没有思考过类似的问题,你也许也会追问起来:
时间的原点,宇宙的奇点,有没有找到,自己的想像力枯竭了没有,还有没有胆子再往下想像一下,这可能吗?依据究竟为何?
没有翅膀的人,可不可以想像自己也能飞翔,并最终像白天鹅一样御风飞起来呢,翱翔于长空,又或者翱翔于太空,行不行
木质化的、缺乏灵性的脑袋,是很难理解和想像那些天才的科学家、发明家是如何思考问题的,就像很难理解一个优秀的诗人写下的诗句一样;但那些稍有灵性的人,只要有人稍加点拨,便也能理解什么是天使来过,那个天赋异禀的人就开了挂了。天才和伟大的人物,与普通的人往往只差几步的距离——关键的几步——每一步都是质变、或突变,是灵光乍现,是革命性的转折。上帝说要有光,于是就有了光。有些人对此很难理解。有的人对此则会拈花一笑,不是吗?…
水里的鱼,天上的鸟,云影下河岸上的人,究竟谁真正站在岸上,谁真正在理想的王国里飞翔,又或者说谁在更高的维度里拥有可能性,比如想像与创造的能力,又比如说,抽象的能力,不,不只是简单地抽象,而是反复地抽象
也许有人又要问了:抽象了为什么还要反复地抽象,不是抽象过了吗?我就会对那人说:你不要扑腾到水里边去,弄得自己浑身湿漉漉的,你要站到岸上来,看鱼在水中游,看云影天光,就像人类要创造的牛B克拉斯的元宇宙一样,你要一手创造的一切的一切都在元宇宙——这个宇宙——之中,但你要在元宇宙之外,然后再像上帝一样,道成肉身(这是基督教的语言,另一个译法是:言成肉身),入世作为。
是呀,道成肉身(或言成肉身)呀,就像你在写程序时,你有没有一种创世的感觉,那时你就是上帝,自己给了自己一个任务,7天创建宇宙,创建整个世界和人类,最后一天还得有时间休息一下。然后,你就在那里噼里啪啦地敲代码,确切地说,是敲一行一行的语句(statement),包括流控制语句之类的各种语句,总之,设一行语句,就像说一句话,而这些语句堆砌之下,最终就产生了各种功能,就像一个巫师在言语,他召唤的一切会在他念咒的时候,纷纷来到他的身边。不过,当你敲出一个类似CS或CF那样射击游戏的时候,你会发现,游戏里的人,只能射死游戏里的人,永远射不到你,因为,你站在更高的维度,站在岸上,而大海奔流、热辣滚烫,无论游戏如何喧嚣与沸腾,那都是游戏自身在喧嚣与沸腾,而你,应当像发明Java的高司令(高斯林)一样,抽身于想像的风暴之外,悠哉游哉地端起一杯coffee,品味着时光的味道…
你知道吗?当你站在更高的维度、站在高岸上的时候。你就相当于变成了前面提到的画面中地平线上的一个点,或者变成背景,又或者变成了背景背后的存在,或者说,此刻,你变成了上帝,或上帝一般的存在。只有你能够理解什么是绝对的无中生有,什么是宇宙大爆炸的奇点或绝对原点,理解一个点包含的所有内容
下面,我举个例子,希望你在看了后边的内容之后,能理解我在说什么:
- 场景1:一个IT的小领导走到他的小迷弟跟前,说:那里有个接口(Interface),你把接口实现(implements)一下
- 场景2:另一个IT领导,对它的小弟是这样说的:小李啊,你去写个接口,然后,把它实现一下
- 场景3:一个较大的IT领导,拍着桌子对它的手下说:小欧呀,这件事情,你自己就不要去做了,你好歹也是一个领导了,你可以把这件事交给小李去做呀,也可以交给小王去做呀,你部门人手够不够,不够你打个申请,我给你加人呀,只要合理我一定会给你批的,你应当做安排分配任务、居间协调、检查进度和质量情况、跟进优化这些工作,然后定时汇报反馈就好,像这么初级的代码,这种具体的工作,你以后就不要写、不要去做了,你是领导呀,这种事情以后就不要我来教你怎么做了呀
- 场景4:有人在了解过和熟知前面3种场景之后,他在想这样几个问题:1)放手而不甩手 2)拍桌子、发脾气和提要求的本质,通常是一样的,即“强制”,也可以叫做“绝对任务” ,他甚至会思考这样的问题 3)要不要把时间卖给自己:如果把时间卖给自己,虽然失去了现在的工作和饭碗,但得到了自由呀…以后,我可不可以也拍拍桌子,然后一切就OK了…如果这也能成,那这一切的本质是什么,还需要在现有的条件或水平上,增加些什么,做出哪些改变、优化或创新,能不能列出一份实现这一切的清单,清单中包括整个可以达成的充要条件
1.2.2 足够抽象之后:时间在进步,历史在发展
第二个:是来追寻一个时间线与道路问题
这是副楼梯的图
但也有人会这样想,这是道路的一种,因为它是人用来走路的。
然后,就会有人在想,这楼梯有什么特点呀,有什么共性没有?
结论就是,如果从上楼梯之前的角度看的话,楼梯都是向上
那,又有人会想,楼梯是道路,道路是不是都是向上的呀?
好像真是的,你看这登山的路,不就是向上的吗?
可是?会有太多的人马上反驳
你看,这楼梯不是向下的吗?不是向下的?你瞎吗?
这道路不是曲折的吗?上山是向上,下山是向下呀,有高也有低呀
而且不同的人走在不同的道路上,人的道路是不一样的呀
但是黑格尔不这样想,黑格尔不这么想。就像中国人学过一点哲学后,都知道一句话:
道路是曲折的,但前途是光明的。是的,据说最早发现这一点的,就是黑格尔。
黑格尔发现所有的人,都行走在一条相同的道路上,这就是时间线,时间的道路。
而且,黑格尔还发现了时间的变化之道,人类的时间这条道路不是完全直线的,
而是曲折的,是的道路是曲折,但这个曲折是一种象,一种表象,一种现象,
这不是人类所拥有的时间的本质,人类拥有的时间的本质,是一条道路,
一种波浪式前进、螺旋式上升的道路,所以,它的前途是光明的,
因为这条道路的趋势是前进和向上的,是充满希望的,所以,人们的时间,
这条道路,拥有了另一个名字,叫:历史。
时间在改变,但风云变幻的历史,在黑格尔的眼中,却有一条主线,叫发展。
黑格尔或马克思称它为:历史在进步!
就像达尔文心中的进化论
就像是旅途中的某个你,发现了真理!
就像 奥古斯丁 说的那样:大地上有无数的溪流,有的向南,有的向北,有的向西,有的向东,甚至流向各个方向,但最终,它们都会不断汇聚,无论向哪个方向流动,它们最终都是在流向前。就像中国人说的:大河奔腾,百川归海!是的,这是趋势,当社会不断发展,当人们不断地觉醒,当越来越多的人地拥有了生活的希望,每个人的心中,都有一片大海。
注:奥古斯丁,古代的一位天主教神学家、思想家,天主教圣师,教父哲学代表人物。其地位,有点类似于儒家(孔教)的孔子、亚圣孟子、王阳明之类的人物,就是在宗教方面,其思想的光辉照耀大地,后脑勺闪闪发光的那种人,大宗师级别的人物。
1.3 Java设计之道:空的趋势
相对于对象来说,类是抽象的;相对于普通的类来说,抽象类更加地抽象;相对于类而言,接口是一种特殊的类,它特别特别地抽象。
所以,我们可以画一个图,对Java的整个体系的设计,会看得更加地清楚:
所以:
- Java的面向抽象编程,并不是简单地说可以说成是面向抽象类编程。佛家有一种说法,叫着象,如果你把面向抽象编程,说成是面向抽象类编程,就有一点着象了,不太准确了
- 但Java的面向抽象编程,说成面向接口编程是可以的。因为三点:
- 一是Java语言整个设计体系结构中,接口是最抽象的,在抽象方面,是最具代表性的;
- 二是Java语言的整个体系结构中(接口-抽象类-类-对象),某种意义上讲,接口可以说是处于最上层的;
- 三是接口的本质,是一堆待实现或待完成的功能或任务清单,是一堆抽象方法的集合,更多地体现出强制性来;
你听懂了我的意思没有?
就是说,接口,就像单位里的领导,越大的领导,越不干活(不干具体的活、不干脏活累活),大领导都是个啥样子?两点:
- 越大的领导,越是神龙见首不见尾
- 越大的领导,越是不干活,反过,只是给下面的人派任务清单
真应了《道德经》说的话,叫:大象无形,大什么如何如何,总之大体都一个意思
扯的有点远,我们还是回归到哲学的话题,或Java技术的话题吧
总之,就是Java的设计,或对Java程序员的要求就是,要面向接口,面向抽象编程
当你抬头的时候,你会发现,你头顶的,是比大海还要大的天空
尤其是深晚,而且夜越晚,天空越深,同样的那片天空,变成了深不见底的深空,黑窟窿冬
总之,呀,领导务虚,你务实。如果你也要成为领导,你也就要学会务虚
这就叫:历史在进步,社会在发展,那么,亲你在干什么?
2.色即是空,空即是色
学了OOP,学了面向接口编程,学了一堆Java知识之后:
作为Java程序员的你,在那里干什么?一会色即是空,一会空即是色吗?
- 色即是空:面向接口编程,设计或编写一堆类和接口
- 空即是色:new出千千万万的对象,各种API调用,忙得天昏地暗,还是忙的不亦乐乎?
好像还形成了闭环?那是不是死循环?还走不走得出去?跳不跳得出来
3.接口的另一个别名,叫:规范
接口,有三性:
- 一曰空性:—— 自己不实现(一堆方法,空在那里)
- 二曰强制:—— 约束性
- 三曰规范:—— 一致性
3.1 所谓空性
这个是前面讲的:
- 接口一般就是提供一堆抽象方法;
- 抽象方法都是没有主体或实体的方法,是功能上没有实现的方法
- 即除了自身的声明之外,是不包含任何其它语句的方法;
3.2 所谓强制性
就是如果哪个普通类声明自己要实现某个接口,它就要想办法去实现接口声明的那堆抽象方法,否则该类仍然具有抽象性,是一个抽象类,它的后代最终也得将未实现的抽象方法都给实现了,否则不能实例化对象,不能入世,因为你new不出对象,也就不能实际调用方法,实现客观功能和作用,只能在天上飘着。
接口的强制性,根上讲,就是如果一个类implements了某个接口,只要不家一个抽象方法它没有实现,如果你想用它来new对象,那么编译器就会报错,怎么滴你让用不了,类就像图纸,你不能new对象,就相当于这份图纸(你写的类)被束之高阁了,被搁置不能用了。
强制性,就是叫你好好做人的意思,一定要满足人家的要求。
3.3 所谓一致性
所谓一致性,就是指接口是一种标准(standard),或者叫做是一种规范(specification),而且是强制性的。
这个标准或规范,目的就是实现社会协作,自动趋一,提高效率。
接口的这三点,总而言之,其实就是说它是规范。啥是规范,其实规范,就是一种契约
规范是高级形式的契约;标准是高级形式的规范。
规范化、标准化,是人类走向工业社会,是社会近现代化的一个产物及标志。
是近现代社会,实现大范围的社会化协作和规模化生产的一种先进生产方式及基于其上的管理方式。
而现代编程中的接口或对外暴露的API,更多地是一种技术性或技术型的规范化和标准化,尤其像Java这样的顶级现代化的高级编程语言,在这方面尤其突出和典型。接口规范,极大地降低了市场相关产品设计和出产上的混乱性、无目的性和不良竞争与相关消耗,极大地提高了生产效率,促进了生产力的发展。
4.接口的发展:空之又空
4.1 函数式接口与函数式编程
我们都知道:
- 接口是一种特殊的类;
- 相对于对象而言,类本身就是抽象的,因为它是蓝图;
- 接口是一种特殊的类,接近于所有的方法都是抽象方法的抽象类(当然又不等同于抽象类,比如接口之间可多继承,类与接口之间可多实现,但类与类之间的继承或扩展是单一的,这点要注意);
- 通常来讲,接口就是一堆抽象类的集合
- 抽象方法,是没有主体或实体的一种方法(即不带花括号{})
所以,看起来,接口是很抽象很抽象的,也是很空很空的。
但随着技术的发展,Java的接口的发展衍化并没有停止它进步的脚步,比如后期又出现了函数式接口,而Java对函数式接口的支持,是Lambda表达式的基础,也是Stream流式编程的基础,还是方式引用的基石,总之,函数式接口,是Java实现支持函数式编程的关键技术或基石,原因是函数式编程的本质,是基于一个原则,这个原则就叫:可推导可省略,而可推导的前提是提供足够或充分的确定性,在很多时候,要提供这种确定性,说白了就是需要保证唯一性。所以,函数式接口,就相当于只有唯一抽象方法的接口的别名。
终于,就像前面提到的西洋绘画的焦点透视绘画法一样,Java语言在设计上也类似:
对象--->类--->抽象类--->接口--->函数式接口
4.2 标记性接口
从对象到函数式接口,终于从多到少,从具象到抽象,抽象走向尽头自然是空之又空,从多到少,少到最后当然是只有一个方法,这个方法什么也不做,是一具抽象方法,最后产生了Lambda表达式,空之又空,简之又简,仿佛已经极空极简了。
其实并不完然,其实还有一种更加空与简的接口。
你没想起来吗?那就是标记性接口呀,它连任务清单都没有,它只是一个标记而已,你实现它,并不用重写和实现任何抽象方法。
Java中最知名的标记性接口,就是序列化Serializable接口了,它常用于对象的序列化存储需求场景。
除了Serializable,还有像Runnable、Cloneable、RandomAccess等几个接口,也是标记性接口。
还记得我们在文章最前面提到的“点(pointer)”的概念吗?标记性接口,从设计理念上讲,就接近我们说的那一个点了,像不像,快像了吧。学无止境,技术如展亦如是,当技术变得越是细腻、精确,技术往往也就变得越是高级,是的技术发展到最后,都在走向模块化、单元化、细化、细粒化、元子化,然后,人们再基于这样的特性的技术,重构他们的世界,不是吗?
5.小结
啰嗦了这么多,说什么色即是空,空即是色,谈了一堆抽象和接口的问题,其实我就是想和你说这么几层意思:
对于Java和Java编程
- (0)不要只是站在技术的角度上看问题,尤其是单一技术角度看问题
- (1)可以站在Java设计者的角度看问题,比如高斯林的角度,换位思考一下
- (2)你可以站在厂商或甲方、乙方、第三方的角度,换位思考一下
- (3)你可以站在公司领导或项目经理与架构师的角度,换位思考一下
- (4)你可以站在哲学的角度,整体地看一下
- (5)你也可以站在社会需求的角度,思考一下
- (6)你还可以站在历史的角度,思考一下
- (7)你甚至可以站在美学的角度,审视一下
- 就像审视战斗机一样,也许你会发现或思考,越是先进的战机,为什么流线性的设计越是如此丝滑
然后,你就会对设计模式、最佳实战、数据结构、算法这类的课程或主题甚至它背后相关的其他内容,更加地感兴趣,对Java的本质越能深刻地去理解和把握,并动态地、与时俱进地和Java共同成长。因为,就像写诗一样,有一些东西,功夫在诗外,在其它或更高的维度之上
附:sun联想图
相关文章:
Java设计之道:色即是空,空即是色
0.引子 我们的这个世界上,存在这么一种东西: 第一:它不占据任何3D之体积,即它没有Volume第二:它也不占据任何2D之面积,即它没有Area第三:它也不占据任何1D之长度,即它没有Length 总…...
深度学习:基于PyTorch的模型解释工具Captum
深度学习:基于PyTorch的模型解释工具Captum 引言简介示例安装解释模型的预测解释文本模型情绪分析问答 解释视觉模型特征分析特征消融鲁棒性 解释多模态模型 引言 当我们训练神经网络模型时,我们通常只关注模型的整体性能,例如准确率或损失函…...
公司官网怎么才会被百度收录
在互联网时代,公司官网是企业展示自身形象、产品与服务的重要窗口。然而,即使拥有精美的官网,如果不被搜索引擎收录,就无法被用户发现。本文将介绍公司官网如何被百度收录的一些方法和步骤。 1. 创建和提交网站地图 创建网站地图…...
机器学习模型——SVM(支持向量机)
基本概念: Support Vector Machine (支持向量机): 支持向量:支持或支撑平面上把两类类别划分开来的超平面的向量点。 机:一个算法 SVM是基于统计学习理论的一种机器学习方法。简单地说,就是将数据单元…...
服务器CPU使用过高的原因
大多使用服务器的站长都会碰见这样的问题,在长时间使用后,系统越来越慢,甚至出现卡死或强制重启的情况。打开后台 才发现,CPU使用率已经快要到达90%。那么,我告诉你哪些因素会导致服务器CPU高使用率,从而严…...
基于tensorflow和kereas的孪生网络推理图片相似性
一、环境搭建 基础环境:cuda 11.2 python3.8.13 linux ubuntu18.04 pip install tensorflow-gpu2.11.0 验证:# 查看tensorflow版本 import tensorflow as tf tf.__version__ # 是否能够成功启动GPU from tensorflow.python.client import device_lib pr…...
day4|gin的中间件和路由分组
中间件其实是一个方法, 在.use就可以调用中间件函数 r : gin.Default()v1 : r.Group("v1")//v1 : r.Group("v1").Use()v1.GET("test", func(c *gin.Context) {fmt.Println("get into the test")c.JSON(200, gin.H{"…...
nodejs的express负载均衡
我们知道nodejs是单线程的,在特定场合是不能利用CPU多核的优势的。一般有两种方式来解决,一种是利用nodejs的cluster模块创建多个子进程来处理请求以充分利用cpu的多核,还有一种是nodejs运行多个服务分别监听在不同的port,利用nginx创建一个u…...
计算机网络-HTTP相关知识-RSA和ECDHE及优化
HTTPS建立基本流程 客户端向服务器索要并验证服务器的公钥。通过密钥交换算法(如RSA或ECDHE)协商会话秘钥,这个过程被称为“握手”。双方采用会话秘钥进行加密通信。 RSA流程 RSA流程包括四次握手: 第一次握手:客户…...
axios 封装 http 请求详解
前言 Axios 是一个基于 Promise 的 HTTP 库,它的概念及使用方法本文不过多赘述,请参考:axios传送门 本文重点讲述下在项目中是如何利用 axios 封装 http 请求。 一、预设全局变量 在 /const/preset.js 中配置预先设置一些全局变量 window.…...
牛客2024年愚人节比赛(A-K)
比赛链接 毕竟是娱乐场,放平心态打吧。。。 只有A一个考了数学期望,其他的基本都是acmer特有的脑筋急转弯,看个乐呵即可。 A 我是欧皇,赚到盆满钵满! 思路: 我们有 p 1 p_1 p1 的概率直接拿到一件实…...
loadbalancer 引入与使用
在消费中pom中引入 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> 请求调用加 LoadBalanced 注解 进行服务调用 默认负载均衡是轮训模式 想要切换…...
Yolov5封装detect.py面向对象
主要目标是适应摄像头rtsp流的检测 如果是普通文件夹或者图片,run中的while True去掉即可。 web_client是根据需求创建的客户端,将检测到的数据打包发送给服务器 # YOLOv5 🚀 by Ultralytics, GPL-3.0 license """ Run inf…...
入门级深度学习主机组装过程
一 配置 先附上电脑配置图,如下: 利用公司的办公电脑对配置进行升级改造完成。除了显卡和电源,其他硬件都是公司电脑原装。 二 显卡 有钱直接上 RTX4090,也不能复用公司的电脑,其他配置跟不上。 进行深度学习&…...
python爬虫之selenium4使用(万字讲解)
文章目录 一、前言二、selenium的介绍1、优点:2、缺点: 三、selenium环境搭建1、安装python模块2、selenium4新特性3、安装驱动WebDriver驱动选择驱动安装和测试 基础操作1、属性和方法2、单个元素定位通过id定位通过class_name定位一个元素通过xpath定位…...
【ARM 嵌入式 C 头文件系列 22 -- 头文件 stdint.h 介绍】
请阅读【嵌入式开发学习必备专栏 】 文章目录 C 头文件 stdint.h定长整数类型最小宽度整数类型最快最小宽度整数类型整数指针类型最大整数类型 C 头文件 stdint.h 在 C 语言中,头文件 <stdint.h> 是 C99 标准的一部分,旨在提供一组明确的整数类型…...
LabVIEW专栏三、探针和断点
探针和断点是LabVIEW调试的常用手段,该节以上一节的"测试耗时"为例 探针可以打在有线条的任何地方,打上后,经过这条线的所有最后一次的数值都会显示在探针窗口。断点可以打在程序框图的所有G代码对象,包括结构…...
Transformer模型-softmax的简明介绍
今天介绍transformer模型的softmax softmax的定义和目的: softmax:常用于神经网络的输出层,以将原始的输出值转化为概率分布,从而使得每个类别的概率值在0到1之间,并且所有类别的概率之和为1。这使得Softmax函数特别适…...
记录一下做工厂的打印pdf程序
功能:在网页点击按钮调起本地的打印程序 本人想到的就是直接调起方式,网上大佬们说用注册表的形式来进行。 后面想到一种,在电脑开机时就开启,并在后台运行,等到有人去网页里面进行触发,这时候就有个问题&a…...
Linux网络编程一(协议、TCP协议、UDP、socket编程、TCP服务器端及客户端)
文章目录 协议1、分层模型结构2、网络应用程序设计模式3、ARP协议4、IP协议5、UDP协议6、TCP协议 Socket编程1、网络套接字(socket)2、网络字节序3、IP地址转换4、一系列函数5、TCP通信流程分析 第二次更新,自己再重新梳理一遍… 协议 协议:指一组规则&…...
Python读取Excel根据每行信息生成一个PDF——并自定义添加文本,可用于制作准考证
文章目录 有点小bug的:最终代码(无换行):有换行最终代码无bug根据Excel自动生成PDF,目录结构如上 有点小bug的: # coding=utf-8 import pandas as pd from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter from reportlab.pdfbase import pdf…...
http: server gave HTTP response to HTTPS client 分析一下这个问题如何解决中文告诉我详细的解决方案
这个错误信息表明 Docker 客户端在尝试通过 HTTPS 协议连接到 Docker 仓库时,但是服务器却返回了一个 HTTP 响应。这通常意味着 Docker 仓库没有正确配置为使用 HTTPS,或者客户端没有正确配置以信任仓库的 SSL 证书。以下是几种可能的解决方案࿱…...
Flume学习笔记
视频地址:https://www.bilibili.com/video/BV1wf4y1G7EQ/ 定义 Flume是一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。 Flume高最要的作用就是实时读取服务器本地磁盘的数据,将数据写入HDFS。 官网:https://flume.apache.org/releases/content/1.9.0/…...
数据库系统概论(超详解!!!) 第三节 关系数据库标准语言SQL(Ⅳ)
1.集合查询 集合操作的种类 并操作UNION 交操作INTERSECT 差操作EXCEPT 参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同 查询计算机科学系的学生及年龄不大于19岁的学生。SELECT *FROM StudentWHERE Sdept CSUNIONSELECT *FROM StudentWHERE Sage&l…...
与谷歌“分家”两年后,SandboxAQ推出统一加密管理平台
3月27日,SandboxAQ宣布其AQtive Guard平台现已全面可用(GA),适用于所有行业,以防范人工智能驱动和量子攻击的威胁。前者是在两年前3月从谷歌母公司Alphabet分拆出来的初创公司,并在当时获得了“九位数”的融…...
【卫星家族】 | 高分六号卫星影像及获取
1. 卫星简介 高分六号卫星(GF-6)于2018年6月2日在酒泉卫星发射中心成功发射,是高分专项中的一颗低轨光学遥感卫星,也是我国首颗精准农业观测的高分卫星,具有高分辨率、宽覆盖、高质量成像、高效能成像、国产化率高等特…...
XML与Xpath
XML与Xpath XML是一种具有某种层次结构的文件,Xpath则是解析这种文件的工具 接下来将会解释XML文件的结构和Xpath的基本使用,并且用Java语言进行操作展示。 XML结构 XML(可扩展标记语言)文件具有一种层次结构,由标签…...
【c++20】CPP-20-STL-Cookbook 学习笔记
Cpp20-STL-Cookbook-src简单的阅读笔记。c++20更好用了,比如STL 包含了一些这样的辅助函数,比如 make_pair() 和make_tuple() 等。 这些代码现在已经过时了,但是为了与旧代码兼容,会保留这些代码。比如 可以声明是一个std的string:Sum s1 {1u, 2.0, 3, 4.0f }?...
Python 之 Flask 框架学习
毕业那会使用过这个轻量级的框架,最近再来回看一下,依赖相关的就不多说了,直接从例子开始。下面示例中的 html 模板,千万记得要放到 templates 目录下。 Flask基础示例 hello world from flask import Flask, jsonify, url_fora…...
精品丨PowerBI负载测试和容量规划
当选择Power BI作为业务报表平台时,如何判断许可证的选择是否符合业务需求,价格占了主导因素。 Power BI的定价是基于SKU和服务器内核决定的,但是很多IT的负责人都不确定自己公司业务具体需要多少。 不幸的是,Power BI的容量和预期…...
做旅游网站会遇到什么问题/什么是网络推广营销
Python相比于C语言、PHP、Java等编程语言,更加简单易学,很多没有编程经验或者对编程一知半解的人员往往会选择Python作为入门编程语言,Python虽然入门简单,但是要想更深入的掌握Python知识和技能,还需要下一番苦功&…...
太原网站建设推广/免费站推广网站在线
String、StringBuffer与StringBuilder 的区别 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象; 而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变…...
通过ip直连打开网站要怎么做/百度竞价推广培训
一、echo 命令 1. 显示普通字符 echo "It is a test" # 输出 It is a test 2. 显示转义字符 echo "\"It is a test\"" # 输出 "It is a test" 3. 显示变量 read name echo "Im ${name}" read 命令是一个一个词组地接收输…...
大鹏网站建设公司/网页制作平台有哪些
1). 在面向对象的方法中,一个对象请求另一个对象为其服务的方式是通过发送A.调用语句B.命令C.口令D.消息正确答案:D2). 下列的( )原始类型在使用流时可以互换。A.byte和booleanB.char和intC.byte和charD.String和char正确答案:B答案解析&…...
做网站实习日志/青岛百度推广优化
SQL 目录:https://blog.csdn.net/dkbnull/article/details/87932858 1、打开Workbench如下图,点击红色框后登录 2、输入密码后进入用户界面 3、点击 1 所示按钮创建数据库,出现 2 所示界面,输入数据库名,点击 3 所示…...
网站建设的设备/希爱力双效片副作用
在输入框中输入我们想要输入的信息就会出现其他与其相关的提示信息,这种效果在Android中是用AutoCompleteTextView实现的。 <AutoCompleteTextView android:layout_width"match_parent"android:layout_height"wrap_content"android:id&qu…...