马士兵 MCA 架构师课程笔记(七十六)

系列 6:P2:10种垃圾回收器(一) - 马士兵学堂 - BV1RY4y1Q7DL

好了呃,当我们讲完这个之后呢,下面我们就来聊呢,就是在java horse one里面啊,注意啊,我现在跟大家聊的都是hot spot这个小小的概念,需要你理解一下,就是我们平时所说的jvm啊。

它是一个规范,我刚才说过了,规范是什么东西啊,又是个标准吗,真正的具体的实现是每个厂商自己去实现的,各种厂商都有自己的实现,最流传最广泛的实现当然就是oracle的实现,它叫做hotspot。

当然oracle还收购了ba va公司的,原来的实现叫做grocket火箭,这哥们儿这俩被合并了,合并到一起啊,目前的都叫做hosport呃,当然还有ibm的g9 啊,还有那个如果公司的zm啊。

这是号称世界上最快的gbm了,但是它是收费的啊,嗯还有那个那个你像淘宝淘宝的淘宝vm啊等等,这些个都叫做jvm,因为它是符合jvm规范的,今天我们要讲的内容,大多数我所说我一说这vm指的是谁呢。

特定的啊,指的就是hot smart,就是oracle自带的这个,那么在oracle自带里面呢,由于呢他要进行各种各样的垃圾回收,所以在oracle自带里面呢,我给大家总结了一些一些一些东西啊。

就是oracle呢到现在为止,从jdk一点零一直到现在的jdk 14,一共诞生了十种垃圾回收器,而这个图的话呢,我希望你背过,你跟面试官要聊的时候,需要侃侃而谈啊,需要了解这些内容。

有些东西呢你就算原理性的东西还不理解,但是你必须得知道他的名字,cdc谁能给我absolute,我们先说结论,目前在做大多数的啊,我不是特指某个人,而是指在座的诸位嗯,开个玩笑。

你们你们在你们在线上系统里头啊,都会有垃圾,你们线上系统多数用的都是哪个版本,你们自己了解吗,多数用的应该都是1。8啊,还有依然依然少数的是1。7,超级少数的是1。6,比这小的感觉就少了,1。8的居多。

所谓的垃圾回收,所谓的j v m调优,大家听我说,你如果在线上系统要进行调优的话,第一步你需要做的就是你,你要确定你们现在用的是哪个版本,你们现在用的是哪种垃圾回收器,这个影响是超级巨大的。

不同的垃圾回收器它对内存的管理是不一样的,jvm的内存管理是由垃圾回收器来决定的,到现在为止一共有十种垃圾回收器都可以用的,我们先简单过一下,前面六种叫做分带模型,就是内存里头能分成两代,叫分带模型。

用到的垃圾回收器,后面这三种g one呢叫逻辑分带,物理不分带z dc叫逻辑不分带,物理也不分担,shindo跟z dc是竞争关系,他们两个算法差不了太多,excell是jdk 11新出的这个东西。

测试用,以及在特殊情况下不需要垃圾回收的时候使用,你就只管分配,不管回收,他什么事都没干,这是非常特殊的一个啊,今天我跟大家聊的,其实我跟大家聊清楚前面六个就很不错,作为咱们来说呢。

你如果不理解前面六个的话,你后面这三个也很难也很难理解嗯,尤其是你不理解c m s,你根本就理解不了g one,所以我们看今天时间啊,而且尤其由于大多数同学啊,你们在真正的线上系统里头。

如果你没有没有做过任何的调优,没有做过任何的设置的话,默认的是这个组合叫po skyline以及pyo,有同学说老师我怎么知道我用的是哪种啊,一般情况下你有好多工具可以用来定位它。

教大家一个实战的小命令,比如我们要起个java虚拟机,不都这么起了,这么version,只要你敲一个java命令,直接一程序,它就启动了一个java虚拟机,嗯一般大家现在用的最多的就是1。8,那么1。

8它默认的垃圾回收器是什么呢,用这个命令可以把它给找出来,java杠嗯,嗯x x print cmon flags,jership呃,你会看到呢他有这么一个组合叫use parallegic。

这是它自带的默认启动了自带的参数,这个参数呢叫use paralyc,使用的是并行gc,当你看到这个参数的时候。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对应的就是parallel scavenge以及parallel old,那有同学说老师这我哪知道啊,我看到他的参数,我也不知道他是哪种组合呀,没关系,叶老师这么贴心的人,一定会告诉你会给你做总结。

所以呢大家不用担心呃,在这里呢我给大家做了总结啊,你找找常见的垃圾回收器组合参数的设定,1。8的,比如说你用了seridc指的是什么,用的是png c指的是什么。

用的是concurrent mark swift gc又指的是什么啊,g ug one g ci又指的是什么,k linux底下怎么查,windows底下怎么查,都给你记清楚了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以我的今天敲的命令,如果大家没有跟上,不用担心,明天听完课,这个文档就发大家了好吗,来可以继续的给老师扣一,文档呢我有时候会调一下啊,所以咱们听完课统一发,好要聊清楚这些垃圾回收器的话。

我们先聊清楚这个分带模型,分带模型,注意我再说一遍啊,你如果你没调过你的垃圾,回你的那个线上的系统的垃圾回收器啊,就是分带模型,所以你先理解分带模型,分带模型是什么意思,分带模型是说。

这个垃圾垃圾回收器在管理整个空间的时候,整个你们的内存空间啊,你家这块地归你妈妈管,说这块地专门扔白线团,这块地专门扔黑线团啊等等,这个是归他管的,那么呃作为流传最广的g d一点八。

默认的它的一种垃圾回收器的组合,叫p s加p o好,这种组合对于整个内存的管理是分带的,叫分带分带模型,分类模型是什么意思呢,就是他会把内存这么大块,那么大块内存分成两大部分。

一大部分呢就这部分叫做新生代,或者叫什么年轻代,第二部分叫什么叫老年代,那有的同学可能会说,这东西为什么叫新生,这东西为什么叫老年,很简单,当我们新诞生一个对象的时候。

尿出来一个刚刚的比较新的新对象的时候,扔到年轻的,每经过一次垃圾回收,它的年龄往上涨一岁啊,这里刚有一个新生代的,经过一次垃圾回收,这哥们儿加一经过一次垃圾回收,这哥们儿加二好到一定的年龄之后。

说这哥们儿太顽固了,经历过了好多次的垃圾回收都回收不掉,它进入老年代,老年代空间空间表达,什么时候老年代空间站满了,再也分配不下新的对象的时候,整体性的开始回收,o这是新生代和老年代的概念呃。

那么在这里呢新生代和老年代呢,由于它的这种特性不一样啊,然后呢他的采用的算法也不一样,呃这个算法是什么样的呢,听我给大家解释,作为新生代来说,根据大多数的程序的统计,这个新生代的对象啊。

在经过一次垃圾回收之后,当然这个垃圾回收叫做新生代垃圾回收,由于它叫y,所以一般呢我们读文章的时候,也会看到这个词的缩写叫什么呀,叫y g c叫年轻代gc,这叫做年轻代的垃圾回收,年轻的垃圾回收。

一般的情况下会回收掉大量的对象,也就是说一个对象啊经过年轻的对象,经过垃圾回收的时候,大概率的会被清掉,为什么呢,比方说我们经常你看啊,这种for循环里边产生的各种的,但是for完了之后。

new new完了之后大家知道吗,for循环结束之后,里边的里里里里里里边的对象都没用啊,对不对,只要没有引用指向它就没用了,像大量的这样的一些个对象,经过一次垃圾回收,它就会被清掉。

那这种呢叫yg c,由于大量的对象会被清掉,根据以前的多数的程序的一个统计结果啊,90%以上的新生代对象,在垃圾回收之后都会被清掉,那会剩多少了,10%,那如果是这样的话,我们采用什么样的算法合适呢。

我们采用mark sweep合适吗,采用mark compact合适吗,都不合适,因为mark wap和mac的,你都要从根上开始搜搜搜特特别特别多,你才能把这个对象的都给搜出来,但是存活对象都特别少。

非常少,我问我显然就没必要这么干,那么这时候他怎么办呢,他都要都要都要,这时候他怎么办呢,他是这么办的啊,既然啊他在呃就是年轻代里头呢,在进行了一系列的小分区,这个小分区是怎么分的呢。

大多数都存活的对象进入到叫一个伊甸园里头,叫伊甸区人类人类诞生的地方,刚才我们说过,我们说呃一个对象了,这十个对象一次回收很可能干掉其中的九个,就剩一个,那如果就剩这一个的话,你们你们好好考虑一下。

如果这时候用mark sweep或者mark compact都不合适,为什么你需要再标记出来,把这把这九个全标记出来,再清理一遍,太浪费了,太费太费时间了,效率不高,所以这时候怎么办呢。

它采用的是叫做拷贝算法,它采用的是第二种拷贝算了,在拷贝的时候就是把拷贝你们还记得吗,就是把那个活着的拷到另外一个地方,有没有印象,把这个活对象考到另一个地方,那活着对象考到哪去呢。

活着的对象直接拷到另外一个区,这个区呢叫silver silver区,我再说一遍,一个新的对象诞生,经过一次拦截回收之后啊,其余的哥们儿都被回收了,这哥们活着,这哥们儿活着呢。

会直接给拷贝到另外一个区域里头,这个区域叫survivor,拷过来,考回来之后,整个区域咔嚓就全部回收了,所以这个效率非常高,当然咔嚓回收了之后,下一次又有新的对象诞生了,这个对要有新的意思。

那就回收来了,这个呃对象呢又被回收一次,这时候它会又拷贝一次,拷贝到哪去呢,拷贝到survival 2,拷贝到这里,然后这个survivor唉整整体清理一遍,所以这东西呢它的效率就会非常高,为什么呢。

因为他只需要遍历到那些有用的就可以了,便利贴有用的就只占了10%嘛,把这11%拷贝,我就不需要去标记那些没有没有没有用的,那些没有用的又特别多,所以我的效率就会比较高,这是拷贝算法。

因此在年轻代里面使用的就是拷贝算吧,但老年代不一样,老年代是那些特别顽固的,老是回收不掉的啊,这种的特别顽固的,那这时候呢你采用的算法呢,就不能像年轻人一样,不能够拷贝来拷贝去,那怎么办呀。

采用的就是mark compact或者是mark sweep,就是从根上找,找出来之后,这个有用的,找着了没用的标记出来清掉,采用的是这样的算作,因为为什么不能用拷贝,你如果这里用拷贝的话。

你每次拷贝的东西太多了,他们都太顽固了,100个对象里头有90个需要拷贝,你的效率显然就变低了,所以我再回顾一下,我记得我刚刚讲的这段内容啊,这是最基本的jvm的理论呃,如果这个都不了解的话。

你跟面试官肯定是没得聊,所以你从这儿开始好不好,我再说一遍,内存呢一般嗯对内存分成两大部分,第一部分呢叫年轻代,第二部分叫老年代,也就是说比例是多少,默认一比二,你自己可以设。

那么年轻代里头呢又分三个小3333个分区,这三个分区呢分别叫依恋区,s区,s区,当然有人叫s0 s1 ,有人叫s1 s2 ,有人叫from to,无所谓,他叫啥都没关系,指的都是一回事儿,好了。

让大家更理解这个算法,我用一个动画让大家更理解这个算法,一个对象产生了之后,它会进入到stack,当然stack比较超级,有点细节了,我们先把它略过好吧,我们不去管它,总而言之,一个对象产生之后呢。

它会进入到一店区,如果这个对象被回收一次,会进入到s1 ,好如果这个对象再被回收一次,会进入s2 ,如果这对象再未回收一次,又进入s1 ,如果这对象再回收呢,又进入s2 ,什么时候它会进入到old区呢。

年龄够了,这个年龄是跟特定的垃圾回收器有关系的,年龄多大才能进呢,可以通过参数进行设置,max tenure and resu,ok一般的普通的垃圾回收器的组合,他的年龄默认值15c m s的默认值六。

啊都给我讲,到现在为止,不知道大家是不是,能理解这种基础的分类模型了,来能够get到来老师扣个一好不好,但是里面还有好多好多好多好多小小的细节啊,我还是那句话,但学东西呢暂时要忽略细节。

然后回过头来再去找细节,先学梗概,先学脉络。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

系列 6:P20:小程序演示 - 马士兵学堂 - BV1RY4y1Q7DL

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

两秒九,这是毫秒,两秒九,大概三秒钟左右吧,有同学说老师你想干嘛。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个这个刚才这小程序能跟得上的,来给给老师扣个一,没问题吧,小程序比较简单啊,简单解释了一下好,同样的程序我做了一个小小的修改啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意看啊,这个小修改呢干了这么一件事,还是那个x,只不过呢我在前面怼了一堆的p一到p7 ,long类型的,我在后面怼了一堆的p9 到p 15 long类型的,这些值都没用,就是用来占空间的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其他的代码都没变,依然是1亿次的循环。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

依然是第一个线程就改第一个x,第二个线程就改第二个x跑一下,一秒三诶,刚才是多少,两秒九,现在一秒三,what what’s up,发生了什么,好,同学们拿大腿给我好好想一下问题到底出在哪。

为什么会有这么明显的效率的不同,为什么,问题出在这儿,同学们,你们想想第一种模型的情况下,这个x一和这个x2 挨着发现没有,他们挨着注意,这是long类型,long类型是八个字节。

一个long类型是八字节对吧,这也是八字节,我们还记得呢一个缓存行是64字节,所以这时候极有可能发生一种情况,这哥儿俩位于同一行里头,在同一个块里头,很有可能这个块第一个线程嘛。

被缓存到了第一颗cpu里,这个块与此同时又被缓存到了第二个cpu里,那么由于我第一个线程玩了命的改x1 ,我改完x一是不是得通知你另外一颗线程啊,说我这个行失效了,你是不是得存内存里头重新读啊。

大哥我通知你一遍,你得给我重新读一遍,我通知你一遍,你给我重新读一遍,这哥俩位于同一行,互相之间修改之后会造成效率上的降低,居然而第二种编程方式,第二种编程方式是这样的,注意看这是我们的x1 。

可是很不幸的是,诶前面这个x前面怼了七个long,我刚才说一个long类已经八个字节,七个long一共是56个字节,他在后面又怼了七个浪,又是56个字节,他自己占多少八字减。

所以这哥们无论跟前面组合跟后面组合,跟中间组合,无论如何,都不可能和其他的另外一个x2 位于同一行,那既然不位于同一行的话,你们拿大腿想一下,作为第一个cpu来说,我只改x1 。

反正不可能有其他的那个行,有其他那个cpu跟我这个x一做共享,那我还用通知你吗,你改你的x2 ,你跟我有半毛钱关系吗,就在缓存里玩命改,改完之后刷回内存就可以了,而第一个呢就是玩命给x一刷分。

你用我不用通知另外一行说失效了,所以这个效率非常的高,o,好能get到这点,同学老师扣一,有同学可能会说,老师真的有人这么来编程吗。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

真的有有一个著名的框架,这个框架呢叫this raptor闪电,我说有没有没有人听说这框架,如果你面试的时候能把这个东西给说出来,那面试官肯定是高看一眼,this roger闪电好,闪电的意思是什么。

就是那个最单机最快的mq,应该说它的核心呢是一个你像别人家的缓存呃,都是一个呃,不管你是链表还是数组,一个一个头指针,一个尾指针来做你的缓存,但是mq吗存消息吗,但是这哥们儿是一个环形列表,环形队列。

环形队列它只有一个指针,这个指针来回的转,你知道吧,转到了头之后,转到尾之后就从头开始来回转,它只有一个指针,而且多线程访问的时候,他对这个指针做了一个优化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

做了什么优化呢,看一眼,呃disruption,这是他的那个环形环形缓存,叫rain buffer,rain的意思是环buffer是缓存环形缓存,你们看他的代码。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点进去之后,你会发现一个奇奇怪的代码,这哥们儿后面怼了p一到p7 ,看到了七个long,半毛钱没用,就怼在这用的这个叫缓存行的对齐,好来看这里有同学说他只在后面对了,前面有没有怼啊。

你们看你们看这个rain buffer他是从谁继承的,从呃rain buffer fields继承,我们看他的父亲,remember fields又是从rebuffer pad继承。

而remember pad本身没有别的七个类型的long,所以他前面对了七个,后面得了七个缓存行的对齐,还真有人这么写程序,因为作为disruption来说,他追求的就是效率上的完美提升,追求极致效率。

这就是现在有人在招招聘成员的时候,经常会说对代码有洁癖,什么叫代码洁癖,ok这个算一种对cpu的性能要压榨到极致,什么叫压榨到极致好,这是一种,当然如果你读过jdk,1。7的源码,jdk的作者道个理。

这大哥就在1。7的concurrent hashmap里面,就用这种写法了,就是强迫这个值不和其他值位于同一行,橘啊,橘猫这样大橘这样也会存在浪费吧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我告诉你局,这个我是我这事得报了你啊,报了你这个局啊,开个玩笑,那个,空间换时间,这是经常提高效率时候的使用的一种方式啊,经常经常经常使用的用空间换时间,好多时候那个面试题。

算法题里头非常多的这种应用的形式啊,你要想到这一点,不存在一种说非常完美能解决问题,而且也不多多消耗资源的,不存在没有,如果那样的话,就有银弹了,不可能好了,看这里,当然jdk一点八之后呢。

其实又增加了一个一个。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个其实讲起来就没啥意思了,因为jdk一点九又把它给删了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

就增加了这么一个注解,看看啊,啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么jdk一点八呢增加了一个注解,这个注解呢大家理解有这么一个东西都可以诶。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我是放在哪儿了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

fty sharing,这个注解呢叫contented啊,就是这个注解,这注解呢只有1。8能用,你过了这版本还不给你用了,呃,这个注解呢就是我绝绝对的,让我下面这两个值问不是位于同一行。

那这个呢也能明显的体现出来他们的差距,但我建议大家呢也不要不要不要用,这个没啥意思,给大家讲一下这个注解吧,简单说一下啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

呃一般来说除了面试,没有人会问这玩意儿还是同一个程序啊,大家注意看,我依然是这个t里边有个x,然后一个线程不断的改x1 ,另外一个线程不断的改x2 ,现在呢我跑一下这小程序,两秒一。

假如我要把这个注解打开a,同时呢你还得开一个参数,必须打开这个参数叫restrict contained,这时候它的效率呢就会明显提升一秒二,看到了吧,当然呃这种就是属于什么级别呢,奇技淫巧啊。

这属于就是俗称的奇技淫巧,这个这个这个这个东西,但不建议大家去呃,用在你真正的编程里头用这玩意儿,还是那句话啊,面试官你你你把它调起来打就可以了,你了解了之后呢,吊打面试官就行。

没有必要在你实际场景之中用这个好吧,这有点过了就好了,我讲到现在为止,我相信大家应该能理解。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个缓存行的一致的概念了,到底什么意思了,呃还是那句话。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

就是好多东西呢,你得通过编程来才能够深入透彻理解,就是我们学代码的得通过代码来展现好了,缓存好这个概念,我就讲到现在为止来可以继续的给老师扣个一,呃下面我们来聊另外一个非常重要的概念,这才是比较难的。

经常会被问到的问题就是volatile,还有一个作用还记得吗,volatile第一个作用叫保持线程可见性,第二个作用叫什么,第二个作用叫做禁止指令,重排序,下面我们来聊重排序这个概念,什么叫重排序。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

重排序就是乱序执行。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

系列 6:P200:说一说RabbitMQ中的AMQP - 马士兵学堂 - BV1RY4y1Q7DL

我们再来看一下这样的一道面试题,说一说rappingQ当中的AMQP。这道面试题呢来自于阿里巴巴薪资是25K对应的是高级开发。那么你要讲清楚这道面试题的话,首先我们需要去讲清楚两个点。

第一个AMQP是什么,第二个q当中的MQP是什么?首先啊我给大家进行一个对应的分析。作为AMQP的话呢,本质上面它是一个协议。就是QP它的英文全称叫做ad messageq就是高级消息队列协议。

这个协议呢它是通用的啊,它也不是说是q专有的,只是说q里面呢,它是默认情况使用的是AMQP这种协议。😊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以我们可以看到,如果你要在rapq当中去讲清楚MQP的话,首先你要画出一个rapQ。好,假设这个地方是一个rapQ。那么在这个rapq当中,你为了去完成这样的一个协议。一般情况下面呢,它会有两种角色。

一种外部的角色叫做生产者。除此之外的话呢,还有一种角色叫做消费者。其实作为生产者和消费者,他都是rappingq的一个客户客户端。那么rappingq它就是一个服务器。那么首先消息它当然是要进行发布的。

所以当我们生产者去发布消息的时候,作为AMQP协议,它会有一个东西要做,就是他需要去把这个东西对接到里面一个叫做交换器的东西。交换器。所以在rappingq当中有一个很重要的组件叫做交换器啊。

英文单词叫做exchange。好,那么我们去生产发送消息的时候,就发送给这个exchange。注意在发送的时候呢,我们称之为消息的发布。在消息发布里面,你的这一条消息一般都要带上一个路由件。

这称之为叫做。Root。就是你每发送一条消息,你必须要指定一个K啊,这个称之为路由器。那么发送完之后的话呢,在这个交换器里面,它会做一个什么事情呢?它会跟我们的这一个Q这个队列进行绑定。

比如说这个地方它有一个队列一。😊,对列,然后呢是Q。好,那么我们在rapq当中,一般来说会建立我们的一个队列和交换器的一个绑定关系。我们称之为帮定。这个绑定关系呢,它是这样的,在很多情况下面。

它也是通过一个叫做绑定。的路由。贱啊。来进行处理的。举个例子啊,在reconQ当中它会有几类这种交换器。这个交换器的话呢,举个例子它会有一种叫做直接交换器。😊,直接交换器叫做drick的交换器。

那么这种交换器的话呢啊比如说路由件里面这个键值是多少?😊,是李景。好,那么你就绑定一个键李紧,然后绑定到我们的队列一啊,这是我们的Q1。这个时候你发送消息,比如说这条消息里面你的这个root key。

😊,啊,简称T啊,它等于李锦的话,那么这条消息就会被我们的交换器,然后把它路由到我们的队列一当中。也就是说你在发消息的时候,如果通过一个direct直接交换器,那么绑定了一个对列一。

那么对绑定的这一个键的名字是李锦的话,那么你去发送一个路由件,对不对?这个时候他带了李锦的标识,那这条消息消息就会被路由到我们的对列一OK啊,当然如果你发送的这个路由件里面,你放了一个李锦2。😊。

不好意思。😡,这个地方它识别不到,或者你发送的一个叉叉叉,这个东西跟我们的路由件没有绑定关系,或者是说在我们的rapq当中,我们找不到对应的交换器和我们队列的绑定关系。那么这条消息它就丢失了。😊。

就是你发送的时候,他就找不到对应的绑定关系。OK那么除此之外的话呢,作为MQP的话,我们要是我们要进行消费。那消费者他就会进行对应的一个投递,对不对?比如说把这个对列一的东西投递给我们的这个消费者一。

那么这个时候的话呢,这一个Q等于李紧的这条消息就会从这个Q,然后投递给我们的消费者一。所以呢这就是AMQP它的一个整体。😊,其实AMQP它的一个整体的关系有几个核心的组件。第一个交换器。第二个队列。

第三个的话呢,交换器和我们的队列当中会建立绑定关系。😊,当然这个绑定关系的话呢,它会有跟交换器它就会有不同。因为交换器里面呢,它可以有direct直接交换器,也可以有这种主题交换器。

就是支持我们的这个正则表达式的。比如说你配置一个新可能匹配的所有啊,然后呢你还可以配置一些其他的啊绑定关系的话呢,也不是说单纯一种可以有多种。

与此同时你的队列也可能有多个可以去根据你的路由去建立不同的绑定关系。然后呢,让我们的生成者根据你发送的时候的不同的路由件,然后根据绑定关系投递到不同的队列当中。然后这个队列的话呢。

就可以去交给我们的某一个消费者来进行消费。所以这就是AMQP在rapQ当中它的一个整体流程。😊,所以回到我们的这个面试题,说一说rappingQ当中的AMQP。

首先你必须要知道AMQP是一个消息队列协议。然后呢,在rappingQ当中它是怎么实现的。它的核心有交换器,有队列,有绑定关系。同时你去发布消息的时候,有路由件。

然后根据你的路由件再去找合适的这样的一个绑定关系,让我们通过这个交换器啊,给它进行对应的投递啊,投递到对应的Q之后的话,每一个Q啊都可以去指定一个消费者,然后进行对应的一个消费。所以这道面试题的话呢。

它考核的点,第一个是协议。第二个是考核你对rappingQ它的内部机制是不是熟悉。😊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

系列 6:P21:CPU乱序执行 - 马士兵学堂 - BV1RY4y1Q7DL

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我给大家画个图,小小的图,好听我说这是我们的第一颗cpu,现在呢我假设这个cpu呢目前正在执行指令,执行两条指令,这是第一条,这是第二条,仔细听,现在呢大家写程序的时候,我上面写一条指令。

下面写一条指令,我们往往会认为说我的,我的前面这条指令应该是先被执行,后面这条指令应该是后备执行,我们往往是这么来认为的,这个很正常对吧,你第一个写的写的代码和第二行写的代码,你往往会认为第一行先执行。

第二行后执行,但实际当中是这样的吗,我先告诉大家,结论,在你实际在cpu里运行的时候,很可能第二行先运行了,很可能第一行跑到第二行后面来了,这种呢叫做乱序执行,当然乱序执行的时候呢。

需要他有一点点的呃这种约束条件啊,就是你前后不能有依赖关系,你不能说第一行代码是x等于一,第二行代码是x加加,这肯定不行,因为我x加加需要依赖于你前面这个值,所以在你编译器经过了一系列的优化之后。

认为你前面前后这两条指令不存在,依赖关系的情况下,这两条指令有可能会被换顺序,这叫乱序执行,为什么要有这个东西,是为了提升效率,为什么要提升效率,我们假设第一条指令,第一条指令是去内存里头读一个数据。

而第一条指令是一个简单的计算,第一条指第一啊,第一条啊是一个内存里读数据啊,y等b第二条指令x加加好,我这是一个左简单的计算,我x这已经缓存进来了,我直接做计算就可以。

y等于b我需要找到b那个位置赋值给y,我需要从内存里头把这个b这个值读回来,大家应该知道我刚才说过,我们cpu的速度比内存的速度快100倍,那我等你回来,这个速度我有99个时钟周期,我是在这里浪费的。

如果在这个99个时钟周期,我就在这干等着,我的效率当然就低了,那我可以怎么干呢,我发现后面这条指令,这哥们儿跟前面这条指令没有直接关系,怎么办,先拿你过来执行,这个很简单。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个道理,好这块能理解的同学来给老师扣个一,有问题你直接说啊,有同学可能会说,老师真的会存在乱序吗,真的会存在,老师你能证明吗。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

完全可以,凡是不能被证明的理论,那个都不是理论啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

都不是很好的理论,看这里。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里有一个经典的小程序,我先跟大家一个小程序,这个小程序不是我发明的,这个小程序是以老外写的,是最早是拿那个c语言写的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最早是拿c语言写的这个m那个项目里头。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

好看这里啊最早是拿c语言写的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

后来呢嗯有人拿java它修改了一下,然后我拿过来给大家做演示而已,我觉得小程序设计的非常的精妙,我再说一遍,下面这个小程序向你证明有乱序存在,如果这里面会牵扯到一点点的逻辑推理,如果这话你听着费劲的话。

你就记住结论就可以了,就是确确实实会有乱序存在,好仔细看这个小程序是怎么证明的呢,他这么来证明有四个值x等于零,y等于零,a等于零,b等零,然后不停的死循环启动两个线程,这是第一个线程,这是第二个线程。

第一个线程干了件什么事,设这个值a等于一,x等于b,第二线程干了一件事,b等于一,y等于a,好证明来了好听证明是怎么来的呢,才这么来的,那个就说我们来推算一下,如果这两个线程放在我们cpu里执行的时候。

最终出现的x和y的结果会是多少,会有可能是多少,我们第一个假设叫不存在重排序,就是不存在乱序,不存在乱序的意思就是a等于一,一并发生在x等b前面,b等于一定发生在y等于a的前面,那么我们来推推算一下。

这四条指令最终执行的结果会是什么样呢,有可能是这种这种组合a等于一,x等于b,接下来b等于一,y等于a来推算一下这种结果的情况下,最终的结果值是多少,x等于零,y等于一,没问题吧,y等于a吗。

a已经等于一了,当然哇,杨琪琪啊,翔啊,这这个杨茜茜同学果然快啊,这带翔的东西太快了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

哈哈杨茜茜,对排列组合00011011啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你虽然很快不便秘,但是不好意思,你的结论不对,为什么,因为我们排列组合一下,只要不发生重排序,会是这种情况或者是什么情况呀,a等于一,b等于一,x等于a y等于b啊,x等于b y等于a无所谓啊。

反正这种情况总而言之,x值或是减x等于一,y等于一,当然还有其他的组合情况,还有其他什么组合呢,就是呃b等于一先执行,然后呢就反过来嘛,这哥俩最后你算来算去,会是这么几种组合,011110。

绝对不可能出现x等于零,y等于零,那反过来说啊,我讲到这儿能跟上吗,能跟上同学给老师扣个一,没问题吧,你你只要认真听啊,就这块都是这个推,这个推理呢,差不多就是一个初中高中的一个水平。

当然你实在听着费劲就算了啊,这总而言之,这四条语句你就当成四条指令,这四条语句有可能发生重排序,但是我们假设它不发生,如果不发生的情况呢,绝对不可能出现最终x等于零,y等于零的情况,不可能出现这种情况。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果出现这种情况了,那只能证明一点,要么x等于b跑a等于一前面去了,要么y等于a跑b等于一前面去了,要么这哥俩都跑前面去了,听懂这意思了吗,那它会出现x等于0y等零吗,跑一下,这个看运气,运气好的话。

分分钟就出现了,运气不好的话,十几分钟才能出现,今天运气不好,这两天水逆,直接给大家看结论吧,就是我原来曾经跑的时候啊,大概我我曾经我截过截过两个图呃,第一次跑的时候,272万次的循环才出现了零零。

第二次呢是11万次的循环就出现零零,所以这个东西呢就得看看看人品了好吧,我们可以放在他这边,先让他等着他执行,一会儿,一会儿你会亲眼看到零和零零的出现,o说一下catch,ok啊,不论如何。

通过这个小程序,你完全可以证明一点,就是确确实实cpu会存在乱序执行,那有同学可能就会说了,老师这乱序执行会有什么问题吗,当然会有问题,以前有好多那个特别面试的时候,特别变态的程序啊。

我在这儿我就不专门给你讲了,主要就是由于乱序执行的存在,今天讲一个比较变态的面试题,这边变态的面试题呢叫呃,d c l要不要加volati呃,这个是超级变态的一道面试题啊,特别恶心。

因为这里面概念特别多,什么叫dc l,你要知道volatile禁止重排序,就是volatile呢可以禁止指令,让他不要给我重新排序,这两条指令我先写的,必须给我先执行,我后写的不可以给不可以跑到前面去。

好吧好仔细听这个过程讲给大家听,诶今天运气这么不好吗,这么长时间了,还没执行出来,放一边吧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

先让他跑着好,一会儿我们就会看到结果啊,不管你好听,这里面有好多好多非常麻烦的概念。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我一点点扣给大家听,什么叫d c l啊,什么叫那个呃volatile是怎么禁止的,为什么要加volatile等等,好看这里。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

感觉有点多啊,你做好心理准备,不要走神,我先解释什么叫tcl好吧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

dco呢是双重检查单例哈。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

deca double check lock,为了给大家解释清楚。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我从那个从最开始开始给大家解释什么叫单例,需要我需要我讲吗,需要我讲的,给老师扣二,什么叫单例,单例也需要什么,各位大哥,你们真的需要加强了,技术太弱了啊,大家看这里单位是啥意思,单例是最简单的解释。

当我有一个class,我不允许他new好多个对象出来,我只能允许他new一个有且只有一个对象,这个叫单例,单例模式,好单例模式是什么一个概念呢,大家看这里单例模式的概念就是诶,你看啊最简单的一个写法。

manager 01定义一个instance,new一个manager对象出来,我上来二话不说,先把它new出来,这是最简单的写法,你不是要一个单例吗,我就把它给弄出来。

然后我把它的构造方法设为private,我不让别人扭,只让我自己,我自己已经扭完了,那么谁来访问我这个对象呢,访问我这个对象的时候,提供一个方法叫get instance,谁要是访问的时候。

麻烦你调我这方法就可以了,我返回的永远都是同一个这个对象,所以不管你调我的方法调多少次,一次两次,最后得出来的结论一定是同一个对象好,这是单例的最简单的写法,来读懂这个小程序的老师扣一。

这个比较相对简单一些对吧,应该都能读懂,这就是单列最简单的写法,但这个单列最简单的写法呢会有人有意见,尤其是我们处女座的人,他们比较龟毛,然后追求完美,他会挑毛病,他会说大哥我还没用到这个单位了。

你干嘛就直接把它给弄出来,你new出来不要消耗资源吗,不要占空间吗,不要占时间吗,能不能等我用到它的时候再给我new,不用到它,你不要给我new,所以就诞生了第二种解法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第二种解法什么意思,第二种解法就是就是这样来玩。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我给它定义这个变量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但是我并不把它new出来,什么时候把它new出来呢,谁要是调用我这个get instance方法,我上来先判断哥们儿,你是不是依然为空呢,没有人溜过你啊,如果没有人扭过你的话,我把你弄出来。

如果有人扭过了的话,我直接返回就可以了好了,这种就叫懒汉式的,我特别懒,什么时候用到我了,我才把它弄出来,ok这是懒汉式的,这是第二种写法,这个写法没问题吧,当然这个写法的问题在于在于什么呢。

处女座的人又来了,说哥们儿,你这个不能保证线程多线程的一致性啊对吧,这你能保证一致性吗,不可以,最简单的道理嘛,一个线程一个线程来了,判断你是不是为空,是为空,一个线程先暂停,第二个线程来了。

判断你是不是为空,依然为空,所以第二个线程new了一个出来,第一个线程继续执行的时候又new了第二个出来,因此在多线程访问的情况下,很难保证你拿到的是同一个实例,那怎么保证多线程的抑制性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

拿大腿想想最简单的办法不就上锁吗,所以我给这个方法上把锁,synchronize,get instance,这个就保证了谁要来访问这个方法的时候,同一个时间段只能有一个线程,那等得等我这个方法执行完了。

另外一个线程才能继续去访问,这个肯定没问题,10000%都没问题,但是处女座的人又来了,他会说哥们儿,你这把锁的力度太粗了,什么叫左右太粗,就是你锁定的是整个方法,如果你这个方法里面有些业务逻辑。

这些代码是完全没有必要,放在我们的被锁的代码里边了,你能不能把锁的力度给它变细,这叫锁的细化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以就诞生了下面这种写法,我相信大家这块应该能读懂,给大家十秒钟,你读一读这个力度就放弃了,就是我拿到这个数值的时候,get instance,拿拿这个对象的时候,判断它为空,诶,你为空,我在上锁。

我上把锁,接下来我们还new出来,我不在整个方法上锁,你如果你原来有些业务代码没关系。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我不给你锁定,ok我想问大家的是。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这种方方案能不能解决一致性,可以不可以,我拿到的对象是同一个吗,唉大多数人都知道是不行没错。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为什么不行啊,想一下嘛,第一个线程来了,判断哥们儿,你是不是依然为空,是为空,第一个线程先暂停,第二线程来了访问哥们儿,你是不是为空啊,是为空,然后第二个线程继续运行,申请这把锁,没有人跟他抢,没问题。

上锁锁住new了一个对象出来,所以这哥们已经new了一个对象出来了,ok没问题,然后释放锁,第二个线程退出,注意它已经初始化了,第一个线程继续往下运行,第一个线程继续申请,这把锁能锁住吗,完全可以。

为什么,第二线程已经释放了呀,完全可以,所以第一个线程继续往下运行,又new了一个对象,因此这哥们儿扭了俩new了两次,最后执行的测试结果也能够证明这一点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我起了100个线程,每个线程都调用get instance方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后把他的hash code值打印出来跑一下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后你看到它不是一个high code值,肯定不是同一对象。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

好了,同学们这块能跟上来给老师扣个一,那怎么改进这个代码呢,既要求要的效率要高啊,还是得懒汉式的,还得那个线程安全怎么改进呢。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

好改进就在于下面这种写法,这种写法听我说啊,这种写法呢就是d c l这种写法,你可以认为它就是一种模式吗,好多好多的呃,这种这种开源软件用到的都是都是这种模式,比cl用的用的挺多的。

这tcl的杠杆是怎么干的,就是我一个线程来了,我判断哥们儿你是不是为空,是为空,我上锁,上完锁之后,我再判断一个底片,哥们儿,你是不是依然为空,如果你依然为空,那么说明我在上锁的这段过程中没有人改过。

你没有第二个线程把你给弄出来好,这样的一个方式是完全能够解决问题的,反复确认你是不是依然为空。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

说为什么叫d c l啊,大哥double check lock。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

check检查第一重检查,第二重检查两个check,中间加了一个lock,这叫double check lock,叫d c l,就这意思好,这是dcr单例,我相信大家应该能理解。

d c l单例到底是什么意思了,当然关于d cl单例,以前有同学有好多有疑问的地方,说,你干脆就别判断外面这层判断了吗,你不要判断了吗,你直接上锁不就完了吗,你上厕所之后判断它为空。

然后搞定不就可以了吗,来有这样疑问的同学,老师扣个一,有没有,给大家十秒钟思考一下,运用你们的大腿,听我说一句,这东西呢主要是为了提升效率的,你们知道吗,上锁这个操作它是一个非常重量级的操作。

判断这个操作只需要几个纳秒,非常简单的一个操作,现在假设有1万个线程同时来调用这个方法,同学们,你们拿大腿想一下,最终的结果会只有一个线程得到锁,把它给弄出来,如果上来我们就加锁。

剩下的9999个都要参与上锁的过程,效率就低了,但是如果我们在前面加了一重判断,那么剩下的9999个只用判断一次,我加锁的过程就可以省略了,因此效率就高了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来能get到这一点吗,可以继续,同学老师,可以,好我们继续,但是这道题你只是明白了dcel单列也不行,这道题问题就出在他问你要不要加volatile,要不要在这里加volatile,为什么结论必须要加。

为什么这里边就比较深入一些,你们先得就等着这个答案,我先把代码呢给大家复制一下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一会儿我们拿这个代码做参考。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

好代码我先放一边,为了讲清楚这个问题,我们还得讲一个比较简单的理论啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个小理论非常的简单,讲给大家听就行了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

随便写个小程序,就这个小程序啊,来这个诶,同学们看到了吗,第30万次循环的时候出现的00k,所以已经证明了乱序存在了,这个就不多说了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

总而言之,你只要让他跑,他肯定能证明往这看,现在呢我写了这样一个非常难的一个小程序,小程序特别难,看看你能不能读懂,ok,好的,看这里,这里面也是一道辩论题,叫做创建一个对象的过程是什么样子的,好听。

当我们new出一个对象来的时候,背后他到底执行了哪些操作呃,为了观察到这个过程,我需要看到它的二进制码,它的字节码by code。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

view show by code with the class library,这是一个小插件啊,直接拿来用就行,比较简单,这是main方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

找到我们的方法里面的main方法的一个实现,code好,这是翻译成字节码之后的这么多指令,就是java里面的这些指令,五条new一个对象需要在java内部执行五条指令,这五条这点字体比较小。

我给大家复制到ppt里。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

打开,就这五条指令啊。

系列 6:P22:volatile如何阻断乱序的内存屏障 - 马士兵学堂 - BV1RY4y1Q7DL

比如说呢我们有一个class p,那么它呢有一个成员变量,好它有一成员变量呃,印度雷霆的m嗯,然后呢,当我new t t小t等于new t的时候,他执行的过程到底是什么样的。

刚才我们看到了他有五条指令构成,这条指令分别是new指令,duplicate,复制指令,这个先不管它跟咱们现在要讨论的东西没关系,还有一个指令叫invoke special。

还有一个指令叫a store,最后return指令跟咱们讨论的没关系,所以最核心的是这三条指令,这三条指令分别叫new invoke special和a store,现在大家还能跟上吗。

能跟上的老师扣个一,好可以是吧,可以我我我我要调整一下速度啊,好看这里这个new指令和呃,invoke special和a store,这三条指令构成了new一个对象的核心,这三条指令分别是什么意思。

仔细听我说这个new指令呢,大家知道我们有一个任何一个对象的时候,都是需要在内存里头开辟一块空间的,我得往里头装这个小m呀,我得装那个mark word呀,装那个class pointer啊等等,好。

我总是需要一块空间的,所以这个new指令就是申请一块空间,这是第一条,但是同学们你们需要了解到的一点是什么,当我们申请到这块空间之后,这块空间里一定有一个小m值存在好,这个m的值是几,如果是c。

如果是c加加这个m的值是不能确定的,是原来程序遗留的值,但是如果是java这个值是确定的,这个值叫做成员变量的默认值,这默认值是几呢,它是零,这个我觉得你你你学过最初级的jy c,应该就了解。

那默认值是零,所以当我们new出一个对象来的时候,他这个m的默认值是几呢,是零好,接下来下一步叫invoke,special叫特殊调用,invoke调用special,特殊特殊调用调用了一个方法。

这个方法是哪个方法呢,initialize方法,你说这个方法叫啥,构造方法,构造方法就是把成员变量初始化的,初始化的值是几呢,是八,所以在这个过程中,他会把零改成八好,第三步叫a store。

a s store的意思是小t,和真正的对象建立关联,把这个对象的地址值存到小t里,好看一下这个执行过程,当我们执行到new对象的时候,他会首先在内存里头开发空间,这个值几是零。

当我们执行到invoke special的时候,这个值才会真正的变成八,所以一个对象的诞生中间有一个半初始化状态,什么叫半初始化,就是m的值为默认值是零的这个状态,这个状态叫半初始化。

叫half initialized,好看,这里,接下来a a store的意思就是a这哥俩建立关联,第三条,有同学说老师您讲了半天,这东西跟那个volatile有半毛钱关系吗,有认真听。

这是刚才我们那段代码,我们刚刚证明了指令可以重新排序,我们刚刚证明了d c l必须前后都要加check,我们刚刚证明了你有一个对象,它由三条指令,最核心的三条指令构成,那么现在我们来仔细看一下。

如果发生了这种情况,对照代码,现在第一个线程过来的时候,现在我们要new那个单立状态的那个单位啊,比如说我们在new new这个单立状态的单位的时候,第一个线程来了,哥们儿,你是不是为空啊,是为空。

那他就上锁,上完锁初始化对吧,你这个对象吗,好new,当他new到一半的时候,申请了内存里边的值是一个默认值是零的时候,好在这个时候,正好在这个时候发生了指令重排序,啥意思。

就是下面这两条指令发生重排序了诶,再看一遍,我们现在正在new这个单例对象啊,new到一半的时候,第一个线程来了,上锁上完锁new new new到一半的时候,发生了指令的重排序。

看这里这个指令重排序发生的非常有意思,他会把a store one和inbox special调个个,有可能,那真正会发生一种什么情形啊,同学们,你们想想看a store one什么意思,叫建立关联吗。

那也就是说这个小t执行到这里的时候,here,这个小t已经指向了一个半初始化状态的对象,好这块还能跟上同学给老师扣一,那有同学可能就会说了,同学们,你们想想看,正好在这个时候,第二个线程来了。

第二线程上来先判断诶,哥们儿,你是不是为空啊,如果为空的话,我就再new你啊,但是你要你需要了解的是,这个t为空吗,不为空,但是很不幸的是,它使用的是一个半初始化当状态对象,结果第二个线程来了。

判断你已经不为空了,那干嘛,哎我就直接拿过来用了,结果我就用到了m等于零,这个值我本来想用的这个值是m等于八,这里面正好记录着双11的秒杀,成立了100万订单,正好记住了100万这个值。

结果来的时候本清零了,当然这种情况呢,其实呃绝大多数情况下不太可能发生,但是理论上是有这种情况存在的,好会问老师再看一遍呃,由于double check lock比较特殊,由于cpu会执行这种乱序执行。

它会存在这种现象,由于在java里面,你有一个对象的时候,需要分成三步来做,所以理论上会存在这样一种情形,第一个线程先上来判断哥们儿,你是不是依然为空,视为空,我就new你扭到一半的时候发生指令重排序。

结果t就已经不为空了,不为空了,我另外一个线程来判断,我就直接拿到了半初始化状态的对象,好,好了,所以必须要加volatile来这块能get到的,老师扣个一能理解吗,应该应该应该能听懂吧,好。

当然我估计会有同学,有各方面的各种各样的疑问,那个有些疑问的话,那我们一会再聊,好不好,a store依赖invoke,为何还要重排,对,其实你在问一个问题,我相信多少同学会有这个问题,好好听啊。

好好听,下面是面试中,经常经常经常会被问到的一些专业名词,这些专业名词有有人见过,但是都不理解什么意思,我讲给你听,认真听,第一第一个问题,什么样的指令允许重排序,就是有一些指令是允许前后重排的。

有一些指令是不允许的,那么你怎么知道这两条指令是允许重排序的,来有这个问题的老师,扣一就是重排序的规则到底是什么样的,好大家听我说大家听我说,这个呢有一个专业的名词叫happens。

before有有有有有人见过这个名词吧,应该就是在jvm里面,它规定了八种情形,这八种情形要求绝对不能重排序,除了这八种之外,其他的指令随便你排,这种不存在于这八种里头,如果你想了解自己去搜。

那么还有一个专业名词叫as if serial,还有这种又是什么意思,看上去像序列化执行,实际当中是乱序执行的,只要最终结果不变就可以,这里指的是单线程,如果能理解能理解,不能理解就算了,不管他。

因为下面我要给大家讲的是,怎么才能禁止指令重排序,好听,我说好,我们可以继续吗,可以继续,同学有点可以,为什么加了volatile,它就不重排序了,为什么y,好看这里为什么加了volatile。

就是那个就就就就就可以呃,不发生重排序了,首先你要理解作为硬件的底层来讲啊,所以硬件底层来讲,它到底是怎么禁止这两条指令不能重排序的,好听我说怎么定制这条这两条指令重排序呢,其实非常非常简单。

一个道理就是我在你哥俩中间加一道屏障,你不能越过这道屏障,指令一指令二不允许你重排序怎么办,诶,加一道屏障好,这道屏障被称之为memory barrier,内存屏障好,关于这个内存屏障。

在很多很多cpu里面的实现是不一样的,作为jvm它规定了一种规范的要求,好能理解吧,就是我要在两条指令之间加屏障,就这个就这个可以就禁止你的两条指令,就可以重排序了,不允许你重排。

但是呢很多网上的文章呢会把这个东西啊,java的实现跟你那个底层的实现完全混在一起讲,实际当中远远不是这么回事儿,你好好听,认真听,作为jvm级别的内存屏障,注意这是jvm级别,什么叫jvm级别。

就是我的java的规范里,要求任何一个实现了jvm虚拟机的,这样的虚拟机,虚拟机规范的这样的虚拟机,你都要给我去实现这四种屏障,这四种凭证我花五秒就能给你解释清楚,你不要看它特别复杂。

这四种名字分别叫load,load store store,load store store,load load叫读,store,叫写,凡是你看到这种屏障,load load就是指的是一条指令。

是low的,一条指令也是漏的,这两条指令中间加一个load load屏障,其他的还需要我解释吗,唉能理解这四种屏障了吗,能get到的,老师扣个一,没超过五秒吧,没理解是吧,威力,这还不能理解。

就是load load是一种屏障,这种屏障屏蔽的是哪两种指令,不能重排序,第一个load,第二个load中间加一个load load屏障,这两条load是不可能重排序的,那其他的呢。

store store呢还用我解释吗,上面有一个写,下面有个写,中间加一个s屏障,这哥俩不能不会进行重排序,load是什么,load是读store是什么,store是弦,明白了吗,屏障是自动发生的吗。

no作为java虚拟机来说,规范里头要求你必须给我实现这四种屏障,具体怎么实现呢,我跟你讲,我跟你讲实现具体就是你只要加volatile就可以,就这么简单,对volatile所修饰的任何的一个变量。

其实就是修饰的这块内存吗,volatile修饰的变量不就是修饰的这块内存吗,对这块内存任何的读取操作,任何的写操作都要在前后加屏障,前后加平章的意思是怎么加呢,这么来加的。

当然这个细节我记得只有阿里考过,其他的呢,没有人考过这玩意儿,只有阿里阿里,因为他们面试官的自由度比较高,按着一个问题之后呢,往深里问,随便你问多深,所以只有他们考过,其他人呢基本上没考过。

所以大致了解就可以,jvm层面规范上要求,对于volatile修饰的任何内存,你要对这块内存进行写的时候,前面加一个store store barrier,同学们,你们拿大腿想一下。

这意思不就是说我要对它进行写了,不就store吗,那你前面的store必须给我写完了,我这个写才会执行,等别人全写完我才写,这哥俩不可以重排序,下面叫什么,前面叫store load。

store load的意思是等我写完其他的load才能去读,保证你读到的是最新的值,所以就保持了线程的可见性,ok就这意思,那要是读操作呢,读操作是前面我要读,我等我读完了其他人才能读。

load load barrier,等我读完了其他人才能写load store berry啊,k,大致的volatile的一个一个具体的实现,它是这么要求的,好了,这块能大致理解就可以了。

没有必要去深究它的一个细节,基本上面试也没人没人会问到这个程度,但是实际当中的问题是在于这里,虽然啊这是jvm规范的要求,再强调一遍,这是jvm的规范的要求,specification。

具体你们怎么去实现这些屏障,那是你们具体cpu的事情,我再强调一遍,这东西是一个虚的,是一个标准,实际当中我们用什么指令去实现它,那才是真真正正的实现这块概念,能理解吗,才能理解给老师扣个一。

因为网上很多文章会把这部分的实现,跟你的硬件实现全混在一起讲,所以你会混淆,你听我讲就行了,z o m a n a怎么说,先不聊它啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

听讲就行了,嗯到目前为止呢,这么说,这个各种的cpu,它对于内存瓶装的实现是不一样的,什么意思呢。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

就是给你举个最简单的例子,就是如果你是x86 的cpu这种的,我用的是最多的了,呃它本身呢就支持三种不同的指令,这个指令呢分别叫fence,fence就是里边的意思l fm fans。

那s就是store load,就是那l就是load了,就是一个一个写一个读m的,是所有的,ok好,他其实本身就是在cpu指令这个级别,它是支持这三条指令的,那么有同学可能会想当然地认为你。

jvm不是要求必须实现内存屏障吗,那四种类l l s s l和s对吧,你不都得支持那几种内存屏障吗,既然你都得支持那几种内存屏障的话,你本质上你是不是应该用这个指令来实现啊,那是这样的吗。

讲到这还能跟上吗,同学们,学完这节去面试要多少钱,30万以上是正常的啊,咱们讲一下实际当中是这么实现的吗,然而并不是因为不同的cpu,像这种指令它是不一样的,你不能写一个完全统一的。

所以hosport实际上是偷了个懒,那这个指令是怎么实现的,你得去看他hosport实现啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个hosport实现的话呢。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

系列 6:P23:阿里一道关于CF的面试题 - 马士兵学堂 - BV1RY4y1Q7DL

你得去读什么呢,去读那个那个呃,你你你,你得去读那个那个那个整个,你只要把虚拟机对于字节码的解释,那个文件啊,解释执行的run time,解释运行时啊,就是你看他自己节码是怎么被解释执行的。

你得去读这个文件,这个文件呢比较复杂,我能非常贴心的给大家介绍了,笔记里就是这么贴心贴心大姐姐,我是贴心老爷爷,当去读它的时候,你会发现呢它是这么来做的,你要去看他的bad code。

interpreter,bike code,字节码,interpreter解释器,字节码解释器是怎么执行的,java是解释执行的,对不对,然后解释执行的时候,是由于这个c加加的代码来实现的。

它怎么进行呢,他判判断是if catch volatile,如果你这个catch volatile,那就要求你前后要加屏障,前后加篇章怎么加的呢,是调用了这个方法,这个类的fans方法。

fans就里面的意思,order access order顺序,access访问顺序访问你,你你你你不要给我乱序执行fans方法,那这fans方法是怎么实现呢,下面是它的实现,大家看看大致能不能看懂。

啊这个这个最最终的实现是怎么实现的呢,汇编语言的实现,汇编的时间,这条指令loadl,rookie还是lo,大家还记不记得那个synchronized的,是用什么来实现的。

siri怎么是怎么实现lock compare and exchange,对吧哎对,而且这个thing of volatile怎么实现lock adl,有同学可能就会说了,大哥这个洛克怎么什么都管啊。

没错,因为这个洛克他是一条锁总线的指令,同学们,你们想想看,我去访问这个东西的时候,别的cpu都访问不了,我怎么访问,随便我,而且lock指令还能够干一件事,把当前处理器的对应缓存内容刷新到内存。

也就是进行一个内存同步,那么大家你拿大腿想一下,只要有一条lock指令,是不是就能实现了线程可见性了,线程可见,并且使其他处理器对应的缓存失效,啥意思啊,你那边失效了,你是不是得重新去内存读啊。

所以一条洛克指令把这事儿全干了,线程可见性指令重排序,你排不了序,我把我把总线给你锁了,你怎么排序,没法排序,所以这哥们儿干了所有的东西,就是这条lock指令,所以有人在问你volatile怎么实现的。

直接拿一把锁lock扔给他,好面试在问你volatile的时候,你是不是能理解了,来能get到这点,同学老师扣一,索总监效率不高啊对啊,我也想要让他效率高。

我也想让他用那个x86 那种fm fm fans等等,但是他不用啊,他偷懒吗,我不说就是hosport实现它偷了懒吗,那有同学可能就会说了,说老师啊,这个lock为什么adl是个什么东西啊。

为什么要at他呀,为什么lock这条指令呢,你前面的那个lock compare cs操作,我还能我还能理解,对不对,那是要上锁吗,要改里边直的,我这dl是个什么东东,好仔细听,我说这个i d l呢。

是往e s p这个寄存器上加了个零的歌,就是你往某个寄存器里的值,甭管它是几,你往上加了个零,说明没有任何操作,所以这就是一个空操作,只要他中心思想是要这条路,而不是要后面这条指令。

所以这条指令就随便来了一下,就这么回事,那有同学可能就会说了,老实啊,空操作,我学过汇编,我知道啊,汇编里面有一个空操作呀,来有没有同学知道汇编的空操作的,对啊很op吗。

no or no operation,对不对,没有没有没有操作,但是很不幸的是,这条指令如果你去查x86 的,它的汇编的那个指令集的时候,说明你会发现这条指令无法被锁定,这条指令你不能这么写。

lock l p直接就直接就不可能的,不允许,所以没有办法,他就lock了一条加零指令,没有做任何操作,这就是他偷懒的地方,为什么不能不做,问英特尔去,不要问我,为啥我不知道,但给我讲完了。

你还不知道啊,我都讲到这个程度了,你还不知道,还还还不知道,你还要让我怎么说,当然下面我们还有一些实践,这个实践的比较复杂,我今天就不给大家做演示了,关于理论性的东西,我们就聊到这儿,下面讲到面试题吧。

好吧,我们稍微回顾一下我讲讲过的内容啊,看看今天大家是不是有收获,今天讲的内容也是比较多的,就是有很多底层的东西一旦通过之后呢,就各种语言啊,各种那种那种应用级的应用层面的东西,对你来说。

那就是一层窗户纸,一捅就透了,呃我们今天讲了cpu的内存,缓存,有cpu和内存打交道,中间有好多级缓存,一共有三级,回想一下那张图,l one l two是存在我cpu和内部。

l three是存在一颗cpu内部,而我们的内存是多颗cpu共享,那缓存一行往里头缓存的时候,按照一块一块来,这个专业名词叫缓存行,关于这个缓存行来说,那么呃大小呢现在呃是约定俗成的,是64个字节。

因因此呢他们会诞生了这种缓存一致性,要保持一致嘛,缓存一致性协议,英特尔的叫m e s i,其他的和这个不一样,还诞生了一些编程的技巧,这种技巧以前人用的比较多。

后来以至于jdk一点八专门发明了一个注解,来教你,怎么样把这些不同的内容放到不同的缓存行里,cpu呢讲了乱序执行这个概念,也向大家证明了这一点,dcl为什么不能乱序,为什么要加volatile。

刚才给大家解释了,首先你要理解什么是tcl,其次你要理解你有一个对象的时候,它是有好多步骤构成,而且这些步骤之间互相之间的顺序能打断,第三一个volatile是如何到底阻止乱序的,jvm级别的要求。

那四种屏障,low low,the store store load和store store lol,为什么能同时实现volatile两个作用,volatile内敛哪两个作用,线程可见性,指令重排序。

你拿大腿想想,这哥们儿一一log的话,就直接把内存全部都刷新了,得缓存全部刷新,通知其他缓存行失效,你下次要去读的时候,一定得去内存读,保证线程可见性,同时它锁住总线,绝对不可能让你发生重排序。

我都锁总线了,你其他指令想体现执行不可能的,所以一条指令干掉了volatile的两个作用,ok,好能够继续同学老师可以去哪学汇编,去老师这儿来学不就行了吗,老师讲东西讲的这么透彻和清楚,学完就让你掌心。

看这里,听得快忘得快没错,你不做不做总结肯定会忘的,快拿张纸记下来嘛,随便拿张纸记下来,饭前饭后便前便后好好看看他,你只要你别那个变后用了,饭前又用啊,这个不合适,好看这里啊。

这个呢今天再给大家讲一讲那个线程池的问题,呃,以前呢我计划有时间可以给大家讲讲线程池,结果每次都发现,其实讲先生池呢需要给大家讲很多很多的概念,你才能理解线程池,对作为线程师来说呢。

你首先要理解什么是colorable呃,什么是future呃,什么是阻塞队列,blocking to呃,什么是那个线程池的七七个七个七个,那什么啊,还有线程池各种组织的模型。

呃这个呢一两天确实这样讲不清楚啊,vip里面讲的非常详细好听,我说呃最近呢也刚刚遇到一道题,大家可以审一下这道题,看看大家能不能答得出来,这是阿里面试,大概在p6 p6 p7 这样一个水平的时候。

一道面试题看你能不能答得出来,呃其实作为阿里来说呢,很多人可能不太了解啊,这个阿里的p5 其实约等于p6 ,这是啥意思呢,应届生在校的学生进去之后,往往是屁股开始社招生进阿里1~3年左右的。

3年左右的大概是p6 ,一般来说你到了p5 之后呢,再稍微攒攒时间,就可以到p6 了,多页的程序,这辈子不可能这么牛,你给自己这么负面的心理暗示,那我还能说啥呢,这辈子我都不可能赚更多的钱。

那你就真的就赚不了,我觉得你行,你至少试试,好看这里啊,仔细看一下,看这道题大家能不能理解啊,有没有同学有思路的这道题啊,是一个什么问题呢,实际上本质上是是是是一个设计模式的问题,当然你需要理解这道题。

多线程分解多个任务,如果所有校验的结果中均为处处,如果只要一个返回false返回false,最关键的是在这叫尽量快尽量快,什么叫电量快,举个例子,我们下面一个是一个总任务,这个是总任务,张三儿去买水。

李四去买肉,光武去买锅,最后我给他做火锅,这是我们总任务,派出三个县城去干这件事,张三买水需要1年,李sir李sir买过这个王五,买锅需要三秒,李四买肉需要十秒好,现在的问题就是说所有的都买回来。

那表示为true完成了,那么我这个总的程序就算完成,如果说其中有一个返回false了,比如说这哥们儿执行了两秒,就发现我买不着锅,锅没有,所以我给你返回一个false,那么这个时候作为这哥们儿来说。

要通知所有线程cancel掉,cancel掉,整个任务结束要尽量的快,尽量快的,意思是你不能等他执行完1年之后再给他结束,只要有人断了,所有人全给我cancel掉,这其实是一个分布式事物的一个玩法。

如果你能理解这个本质的话,就分布式事物手工实现该怎么去实现,它说不准叫colorable,闪电闪电骑士啊,这个不错,相当不错,forejoin叫color,你能想到这一点,very good,好听。

我说大家如果能理解什么叫future,这道题如果能听懂就听,听不懂就算了,算是附赠给大家的,好吧,呃如果能理解什么什么是future,应该就能理解,这future呢就是一个任务要求。

可以有返回值的这样的这种任务啊,这这就是那个任务的返回值,好关于这个任务的返回值,就是我返回之后呢,要去要要求马上给出反馈,同学们听我说啊,就是那个作为java来说,他原来并没有提供这种模型。

如果有人用过future的话,这个future什么时候才有结果呀,是不是我得调用这个future的get方法呀,我才能知道它这个结果对不对,好听我说这个get方法是什么操作,各位同学,这个叫阻塞操作。

阻塞啥叫阻塞,阻塞的意思就是我在那傻等着,一直等他有了结果为止,那么你拿大腿想一下,有一哥们出去了1年,你在这里get得等他1年才能回来,结果有另外一个哥们已经返回,结果是false了。

你应该把它cancel掉,你怎么cancel掉它,你开脱不掉它,因为这是阻塞,阻塞在这里了,所以这是它的一个核心点的要求非常快,正是由于意识到了,说那个jdk原来的提供的类库里头并没有这种。

等返回来之后,我马上就做出反馈的这样的一个future,所以有没有听说过这个类库瓜子,有听说吗,挂吧,googoogle专门给java做的扩展类库,对不对,google的对好。

这个类库就扩展了一个叫什么叫什么future呢,叫listenable future,有没有听说过这个的叫listenable future,如果你能达到这个very good,很好。

而且呢还乐于学习更多的这种内裤,ok,好这就叫类似的future listener,future出来了之后,就是你一回来,我马上就有反馈意,我不用在那里阻塞着,我,只要注册一个quebec就可以了。

回调监听器对它本质上是一个什么东西呢,observer设计模式,所以设计模式是你长技术内功的第一要义,observer这种设计模式观察者吗,那,当然我们继续讲,这里边还有点深入啊,估计好多同学听不懂了。

听不懂了,我很快讲完啊,听听到什么程度算什么程度,那后来呢jdk一点八说,哎呦不错哟,google谷歌,你不错哟,你居然拓展了我很想拓展的这么一个东西,好,我学你,所以在jdk一点八之后。

有一个future诞生了,这个future叫compatable future,complable完成完成之后就有反馈的这样的一个future,来看这里吧,我简单给大家写了一点小利的程序,不是很完善。

我讲给讲给大家听,future啊,这是listenable future,completable future,看这里啊,这个我做了一个小的模拟,我有三个任务,test one。

test to test three,第一个是三秒,第四秒,第三个是一秒,它会返回false,然后我用completable future怎么玩呢,这么来玩,completable future。

supply is sink,执行第一个任务,执行完了之后会调用我的call back,也就是说任何一个任务执行完,都会调用我的call back,我call back怎么执行啊。

只要有任何一个任务返回给我的false cancel,处理结束流程,让所有其他线程结束,通知其他线程结束,最好你能写回滚roll back,超时处理怎么玩,把这个都写好,这个教会你自己去写。

这就是completable future,它的核心是什么,刚才那小伙说了,小伙水平不错啊,它的核心是fork join pro,加上考了不,效果不错啊,阿里欢迎你,对分支,当然这里面呢还有这种细节。

这种细节呢留给你自己好好思考思考好吧,怎么处理,结束流程就是有一秒的已经回来了,那1年的都得给我,你得给我cancel了呀,对不对,你不能随随便便的还搁那执行1年怎么开走,我告诉你。

cancel这件事让一个线程半途中结束挺困难的,不太容易,你们好好思考一下,通知其他线程回滚,你执行的一些操作都得给我做好日志,由于我先我任务取消了,你是不是该把钱退给我呀,所有的东西做回滚。

如果说做了我,我比方说远程的分布式的事物,那我超时了之后怎么处理,写到这一点的时候,阿里欢迎你,interrupt完成不了interrupt,你得去catch那个exception才可以行进,好。

我们今天就聊到这儿,好吧,记住了东西,我们就聊到这啊,这个一时半会真的聊不完,8月份呢我会重新讲新的整个的线程,我觉得我第一版讲的还可以,但其实呢第二版我想加的内容更多,请允许我介绍介绍我们的课程好吧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

呃课程的深度以及我们的这种知识点的深度,其实呢我相信大家伙应该可见一斑啊,我一直强调就是大家伙在学习的时候,有一个非常重要的东西,不要浪费时间,你个人的精力啊非常的宝贵。

有很多人上学的时候的精力用在去学什么,福特圣呃,学点什么这个设计那个设计啊,学linux的各种命令,学点黑客,然后呢再学点编程,其实你根本就不知道它的整个的多赚钱的点,到底在哪里,能理解吗。

就是说如果你要学photoshop时间,我教你学别的地儿,你可能多赚好多钱,所以组织好你自己的精力和时间,是能够让你的职业生涯变得可预测,而且比较有效,向前看对,但你不愿意向前看的话,我就无所谓啊。

马老这里的课程基本上是以向前看为主,在这里等等,这也是为什么在我们的呃,整个的我们指导的学员里面呢,嗯基本上是短时间之内呢,就能让他有一个不错的薪水上的提升,这是面试突击四个月啊。

这四个月其实还算是比较长的,嗯这是咱们上海的学员,我们老师的面试指导之后,总报80万啊,我周老师的周老师的系列的指导,嗯两个offer是吧,上海应届生15k,上海西安涨了四次签的应届生拿了9k。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

虽然不太多,但还可以哈哈,怎么说呢,就是原来是找不着的呃,从时间角度讲呢,这是武汉半个月,就是这是效率啊,我们就我们讲的,我们写程效率,我们找工作涨涨薪水也需要效率。

你非要说我搞个3年我才能涨2000 3000,那就效率太低了,三个月两个offer继续啊,这这就是效率呃,十天突击,为什么十天突击能搞定工作呀,背哈说难听一点就是背搞我们的突击班,背面试题。

当然你也要知道面试题经常会问什么,对不对,突击应该突击什么,好吧好了,整个课程的内容需要做个简单介绍吗,需要的扣个一有十个我就介绍,没有十个我内容就不介绍了,我希望大家伙呢我介绍也不介绍也好。

大家能把咱们的课程内容,要从咱们的小姐姐身边啊,要要走这个课程内容啊,呃其实是其实是这样的,就是说我们是经过了那种,非常非常细致的设计啊,才把这个整个课程内容给他给大家设计出来。

然后哪怕你就算是自己自学也好,自学也好,你看到这个内容自己对照模块去学习的时候,其实你会发现你的条理性也比较好,因为我非常担心,各位同学们的学习呢是这种碎片化的,今儿唠一知识点,明日落一知识点啊。

今儿是关于shell的名人,关于并发的,后天关于数据库的,在后天关于优化的,在后天关于节架构的,后天再来一大数据的,看上去你在这里每天都在这里瞎忙活,忙活完了之后呢,别人拿你简历来一看。

一个给力的项目都没有,是不是有量的吗,就是每天搞点随便画的,有没有,有的扣个扣个一认识一下好不好啊,不要怕丢人,这种男的学习效率就非常非常低了,你叫做战术上特别忙活,忽略了战略上的问题,请大家注意。

所有的学习一定要有一个短期目标,或者涨薪,或者跳槽,或者入行,或者进大厂,以这个来驱动学习,而我们整体的设计呢就是从你最底层开始啊,计算机的基础的必修课,尤尤其是那种非计算机专业的转行过来的。

今天给大家讲了好多,其实就是操作系统的是吧,组成原理的,然后编译原理的这些内容啊,呃大厂必考的内容啊,到基础做项目很关键,项目驱动就是你的你的简历上写一堆项目,才是最重要的,是不是数据库,网页框架。

做项目好常用的软件和开发基础啊,然后做项目,分布式微服务,做项目做项目想进大厂,算法与数据结构工作的软实力,其实到这里的时候呢,就是从零就可以入门了呃,大多数线下的机构讲的逃不出我们这部分内容。

第一部分在这部分内容基础之上,我今天给大家讲的是java底层的一些知识,性能调优的知识,并发的知识原理和源码层面的知识,中间件的运用,综合的项目开发优势项目是吧,然后架构的设计理论,具体的设计方案。

案例的专题,那么这部分内容是带大家进入高新设计内容的,前面的大多数内容是讲落地,从这里开始,我们讲设计设计,我给你举举具体案例吧,学生的具体案例来举例子啊,你就大概知道设计内容是什么内容了。

这是我曾经带过的一个学员,他原来是50多万的年薪,我带他90万干进腾讯,腾讯的典型的面试题,就是一道,刚才我说我给大家讲过的一些,跟大家伙对照课程大纲的这部分内容的题,架构设计题。

大概就是对应的就是这个啊架构的案例专题,这个呢还是挺难设计的啊,一般来讲建议呃2年左右程序员开始涉足,如果你刚开始入行的同学呢,作为兴趣去研究,但是你现在短期可能还用不太上好吧,2年以上开始涉足。

怎么提薪,这个哥们儿是90万拿了腾讯的年薪,但是你学历可能不如他,不过你的技能只要到位了,搞个中间的六七十万,五六十万总是问题不大,微服务的专题设计模式的心法,到呃比较流行的新的微服务云。

原生云原声的落地,这个我们讲现在的架构是不用云,不用云,这个现在是不太现实了啊,呃软件测试啊,大数据的内容,go on的内容啊,如果你要愿意,可以去考试c k的认证和c k s的认证,然后技术的管理。

技术的规划,技术的选型,还有我们就业的,就是帮大家怎么去一一对一的去提升,怎么去提升这个学习,怎么去提升这个面试的突击,帮大家做好潜力的指导,面试的指导啊,如果明天在座的诸位要是愿意的话。

也可以把你们的这个简历拎出来啊,来帮你们改改简历,自我吹牛逼一点点,请老师改过的简历,其他你任何都不需要有,每个月2000块钱以上的涨幅,就是不干别的,改完简历嗯。

每个月2000块钱以上的涨幅白来了好吧,只要改完简历就有啊,然后呢贴近于我们上面所拥有的所有技术的呃,各种项目,这样方便你在简历上写出来,各种各样的项目,写到简历上,好了呃,呃这是给大家呢深入总结的。

作为一个优秀的技术人员,应该掌握的技术站技术突破,兔子虾兄弟们只是这样的啊,有没有问那种软性问题,我没有办法一一帮你解答呃。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关于软性问题,大概我们总结有70个左右。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这部分问题呢,我们总结在了我们的第一次的面试突击里面。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我登录一下就算了,不登了,我登录一下吧,微信扫一下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

行,那么这个教师呢到现在为止,我们一共为大家提供了226门课,3800个左右小时的时长,这是已经讲完的,不包括正在直播的呃,基本上每天都有直播,直播课的内容也在不断更新,在这其中呢。

我们在我们第一次的面试突击里面,给大家讲了一系列的这些个小细节的,软性的内容,这部分内容呢其实我说起来的话呢,也不太好回答是吧,你那个到底你要不要编啊啊或者怎么样啊,你这跳槽怎么看呀是吧。

你你为什么要离职啊,你还是模拟要问吗,工作失误怎么办啊,你怎么理解你这个岗位,你为什么要离职啊等等,这些各位兄弟们关于hr的70个软件问题,这里都有,我在这里就不想展开了,你要编或者不要编。

其实是去跟你的具体的工作内容有关系,这也是为什么我们学生的面试成功率比较高,很简单是由老师在这里陪跑陪着你,你到底有什么地方呢,觉着没没没答对了,哪怕你回头找老师问或者录音录下来。

老师告诉你什么地方拿的不好,下一次不要犯这种错误就ok了,因为这种成功率比较高的原因,我只会算法提供管理系统啊,那你就永远会是吗,所以我跟你,我跟你们一直说,你们是一个不断成长的过程,你现在只会这个。

难道说代表着你就以后这辈子只会这个吗,学习嘛,对不对,差什么学什么不就ok了,三期外包怎么规划,首先第一步定目标,长远目标不好定,你可以定短期目标,短期目标一般以两种方式为主,第一种是我要成为某个岗位。

第二种是我要多赚多少钱,出来之后还能听懂不,所以自己定好我要多长时间之内多挣多少钱,这是最简单的目标,定完目标之后呢,就知道学习该怎么学了,差哪些该怎么补了,只有你定完这个老师才能给到你具体的路线。

这是为什么,我报完名之后呢,就是有一个老师帮你梳理的这个过程啊,然后后期呢帮你陪跑,这个过程我学习涨了七个,就是你可以给自己定目标,你说我三个月我想让5000老师。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我现在这个目标是这样的,老师你看看我现在以我现在的情况合适不合适,35岁,40万年薪涨到了70万,开不开心自己想啊,自己琢磨开不开心是不是很爽。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1年多赚了30万,我们整个学费多少钱,1万出头而已,投资记住给我记住这一点就是投资自己,投资自己是你这辈子永远最值得投资的事情,作为男人也好,作为女人也好,作为男人投资你自己,让你自己变得更强。

你才能吸引更优秀的女性,记住这一点,女生不是追来的,是吸引来的,所以女生也是一样的,你有自立的能力,你就不会不会依附于某一些质量特别差的男性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

西施玩到手也就50多,你有吗啊就更经我没法跟你聊的,你关注点永远这么奇葩是吧,他说我关注点是他从40万到手二到手30万,涨到了70万,到手50多万,你的关注点是70万哦,才到才50万,卷少鸡腿往上涨了。

好的好的好了,今天呢有一个很重要的环节,就是有不少同学是要我改,帮我改一下简历啊,兄弟们,这个这个简历是怎么怎么提给我的呀,我们小姐姐已经提给我了啊,我来,下载一下,找几份简历给大家看看啊。

有时候怼大家两句,也不要往心里去,给大家两句呢,是让大家伙理解这个社会的险恶,以及你思路上的偏颇,把思路给我纠正过来,就是你你自己琢磨一件事情,那就是非常简单,你要不要多赚点钱,如果你这个欲望没有。

就不要找我,如果这个预告有老师就有办法,他说70万的不多,虾皮年薪850000加股票年薪百万还不够是吧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

还不够,还要更高的,就是大小伙儿啊,都是一个慢慢成长的过程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你知道哪天说你刚毕业,这是我们迄今为止最牛逼的学生,30岁,公司给了5000万的股票,已经变现,也就是说他的现金资产就已经5000万,30岁啊,一个普普通通没有背景的程序员。

这是他总结的关于p p7 的部分应该做什么,当然你的上嘴唇一碰,下嘴唇不就才5000万吗,因为目标都都还很远是吧,你不用跟我聊啊,你很牛逼啊,这个cpu吧,不是cpu,使他运气比较好。

他正常年薪是在120万左右,赶上公司上市,但是他技术水平确实比较好,老罗小姐给我提了一份简历,又抽烟,24届应应届校招的简历,柴哥的悉尼大学,on the resume。

嗯master i t南京好多23应届生资源科技,首先你要问清楚一点啊,就是这个很重要的一点呃,你是在国内找还是在国外找,在国外和国内呢它的内容是不一样的,你写的中文我估计是在国内啊。

我们以国内来举例子好吧,然后我们目标薪水是多少,目标薪水也没有写,那边薪水没有写二维设计游戏,举点性收集信息科技雅思,你这次你嗯那个各位应届生的同学啊,你这么写东西是不行的,好吧,嗯听我说啊。

就是各位应届生同学呢,我们以以什么来举例子,我以一个就是咱们南京教育呢,这个这个是有线下班,这个大家可能也知道是吧,先下班呢我们是不收学费,然后等你毕业之后再来付学费的啊,主要是解决第一你要用时间来学。

第二呢你没有多少钱,嗯然后呢等你赚到钱之后呢,我们再来收你这个学费啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这也是比较良心的,呃这个呢目前呢是县中心是有两个地方,一是上海。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一是长沙,我们现在长沙内容是一样的啊,嗯这个方向是以java大数据为主。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后我们线下版在整个的去年。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在上海那边的就业,我给他抽烟。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

回来瞅一眼,我们线下班在上海这边的一个就业情况啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是去年呃,一丁点不夸张啊,我可以负责任拍胸脯的相机讲,这里头的数据没有一丁点水分,这是我们整个去年一整年的,在上海这边大概就600 600人左右,这200元呢一部分是中专高中的最低年薪,拿了15万。

然后呢凡是大专起步的18万以上,没有低于18万的,然后50%呢是在就是你本科的,差不多就20万以上啊,就这样,那么这个它会涉及到一个重度的简历,润色过程哈。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我都不能叫环,叫包装,叫润色,这个简历呢应届生的简历。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你要想拿到比较好的薪水啊,如果你目标只是找个什么6k的,7k的,8k的,找个外包。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那就无所谓,你随便写,你像这种简历差很远的地方在于什么地方呢,你的知识点会哪些不会哪些不知道啊,看不出来看到了吗,你博客历史啊,什么决定啊,跟我跟我没关系啊,参加了口周赛挺好,这个是这个是重要的。

热爱唱歌,你说有意义吗,一点意义没有,就是说你整个的东西能偏了嗯,雅思多邻国的份,这个意义也不大,还有呢又擅长这个语言,又删除这个语言,偏了散了,记住了,想拿高薪一定是聚焦聚焦,聚焦聚焦你们入行的时候。

想拿高薪是1米宽,1百米深这样的一个知识体系,随着你整个成长的,你慢慢又变成1百米宽,56米深,越来越宽的知识体系,所以这时候你要聚焦,我的目标是java后端这些东西啊。

什么a p f x swagger postman意义不大,我的目标如果是java端,你给我写这里写python意义不大,你跟我这里写什么嗯,这个多少分,这多少分往后放,你你要愿意的话,往后放。

能理解就重点往往前突出,还有非常重要一点,如果以我们闲下来举例子,一个应届生要想当很好的薪资,四个项目,1234,前面这两个分布式微服务的比这个差的有点多,但是你的优势在哪里,你的优势是在这学校不错。

学校不错,学历不错,这个一张这个你可能会拿到一些面试机会,可能会拿到一些对应的薪水,但是看着这份简历正常的,你按照老师的模板给你改完的那种,如果你拿18000,你这份简历可能只能拿到12000。

差百分之差1/3吧,所以重点在什么地方呢,我再跟你说一遍,第一重点突出,重点突出就代表着你知道什么是值钱的东西,你跟我这说什么,有运维经验,跟我这说,了解shell语言对我来说没有意义,你知道吗。

因为我要招的人是什么,一定要站在我的角度考虑问题,而不是站在你自己的角度,我再重复一遍,简历是什么,简历是广告,广告是什么,广告是我是我厂商要什么,你要往上写什么,我厂商重视什么,一定是往前提前写什么。

能不能理解我现在厂商重视的时候,我要找一个比较牛逼的实实实习生算法什么的,前提是吧,我这个那个那个那个那个你还这个解释了,解释了一些什么乱七八糟的东西,不要解释这些东西都没意义,对我来说。

你成就成够就够,我们你这个水平够了,没拉你过来,水平不够,你就就不拉你,你想办法把自己水平写够了就行啊,系列的精通,熟悉重点的知识点,要了解哪些是重要的,哪些是不重要的,哪些是我们企业看重。

哪些是不看重的,这些个呢你分开要分开,你要知道的是他看重的那些不看重哪些啊,seo server不看重的mq可以往后放,分布式微服务,这里没有是吧,然后如果对应项目的话。

四个项目为什么会有那些二本的学生,在我们线下会拿到40万年薪以上,刚毕业很给力,就是项目写的很给力,知识写的很给力,但是我不我就不给你展示他们的,他们的这种这种简历的那个具体的内容了啊。

所以这个是需要你大量的积累之后,你才能写的写的上去,四个项目,前两个分布式微服,后面两个写什么,后面两个可以稍微的就是,就是相当于你你可以稍微的把标准降低一些,可以写单机版的游戏的后端,实在不知道的话。

从我们这里挑,就是我们为什么在我们整课程体系里头,给大家提供一系列的项目,从这里挑就行了,前面写两个写音乐,音乐音乐水中心或者写我们的网约车,ok后面再写两个写什么就写游戏,后端这个也很给力。

ok写个何佳芸不就行了吗,你说清楚了吧,来看看这个吧,换一个吧,这个写法要比要比上一个稍微好一好一点点啊,呃二次的离职就是我至少知道呢,我专业技能我是什么,我要稍微排练一下,前面那同学。

你不要认为你是你是学生,就按照那种对自己的要求放松,你一定是按按照一个专业专业的人,职业的人要求自己啊,这个知识常用的ok spring cloud sql,ok我觉得他这个排列还可以啊,排列还可以。

就是我我最烦的是什么样的一种写法呢,上来先写a tml css js会idea或eclipse会get,你这东西都是都是都是边缘性质的啊,我搞一个较好的人,我上来,你这些东西强不强,跟我有毛线关系吗。

这些都是夹缝线,往后放啊,你看他这个就放到最后,他这个你看idea eclipse maven放到最后看到了吗,重点往前放刺,就是最差,往后放,这是最最普通最简单朴素的原理吗。

你第一个你最最最拿得出手的点,是不是第一个让人家看见呀,恶灵力哪个哪哪哪哪,跳槽有点多啊,兄弟这三个就跳了1年不到,实习不说了,记住啊,这跳槽这件事情对你们将来非常的重要。

你们一定要一定要找到我加入进去啊,非常的重要,是怎么说呢,5年两跳,大厂能接受,过去任何一家工作经验超过3年,大厂能接受,除了两种情况之外,很多大厂就直接把你家给pass了,clb环境。

smart oa,spring cloud and sql,呃,这种的都往后放,应该是先把这块儿往前,把这块往前放,这是业务的描述,职责的描述,买了你这个为什么测试提交bug,然后呢进行全方位调用。

你这个听我说啊,就是说各民族大学为了教育职业学院自我评价,你别写这么多自我评价啊,你得听我说啊,就是说你这份简历呢,我觉得是一个中规中矩的简历,这都是同学带我来,这是一份中规中矩的简历。

但是你这份简历呢值钱不高,值钱度不高呃有很多时候我们批改简历的时候,有个很重要的参考点,就是你的你这份简历想要拿到多少钱,在哪个城市,这个呢特别特别重要,我再重复一遍,就这个简历你扔出去。

你说我找一份普通的工作,拿一份外包的那个薪资,这个是没有问题的,这份简历没有问题,但是我们一般改简历的时候都有两个前提,第一个前提是你是在哪个城市,你想用这份简历拿到多少钱,我给你做个假设。

如果你是在北京,你这份简历想拿到25000,那你这个简历就差多了,听懂了吗,如果你是在北京这份简历,我想拿13000,这个简历没问题,可以拿到,我们以25000来举例子,这个简历就差不少了。

好差在什么地方呢,第一个呢这个项目不是很给力,起码我们要看到这个项目牛逼的点,就是你一定要知道,你要你要让别人看到我比较值钱的点,到底在哪里,我这么跟你说,整个的在市场上来讲比较值钱的有以下几点。

第一个叫原理的理解和源码的阅读,就是你对于底层的了解,原理的理解,源码的阅读,如果你想突出的话,尽量突出这个,第二个如果想要还要往上提示什么东西,是架构的设计和理解,听懂了吧。

好第三个就是你特别牛逼的项目,什么叫牛逼的项目呀,大并发量,高弹性,分布式大数据量,云原生落地,要体现这个第四个各种的优化知识,jvm的优化,ngx的优化,数据库的优化,架构的各种调优。

你这个呢稍有体现,但不够突出出,你别在这儿呢,在这呢进行全方位调优,组长的带领参与一下干嘛,你自己干不了是吗,为什么这么谦虚,你应该怎么写,我进行了一个什么样的调优,把原来的并发知识量从8000q p。

给它提升到了20000q ps用数据来说话,这么说,能不能理解兄弟们,就是为什么在我们的课程体系里面,我们会给大家设计一个什么东西啊,就这个啊大厂的架构质量保障,生产事故分享课,这是为什么呀。

你们可能不知道为什么,就是我们设计课程的时候,其实实际是苦心竭虑,但是很可能很多人理解不了,专门这种课,还要拿一个课程出来分享,为什么呀,因为在你们面试的时候,绝大多数都会被问到一个问题。

你们项目中遇到过什么难点,痛点没有,说白了就是你的亮点在哪里,你整个你的简历的支持的,让人让人眼前一亮的东西在哪里,我告诉你就在于这些地方线上工厂出了什么,怎么排查的,cpu标高怎么办呢。

虚拟化的问题出了什么问题怎么办呢,年级时出了问题怎么办呢,性能优化的时候,你踩不到坑,上续环算法重复ready锁失效等等,能理解吗,这就是在咱们原来的京东和新浪的一个老师,原来在京东后来就行了。

他们在线上,京东的线上,先和那个新浪的线上,真正遇到过的问题的实际分享,就是你听完这个课,你就会知道该怎么去跟面试官谈,该怎么把你这个项目说的特别牛逼了,来这边听懂了,给老师敲个一两个q vs大项目了。

对照从文说明这个还是接触过的不错,就这些东西其实老师早就把你们一扫,就把你们考虑好了啊,甘老师扎实过来学涨薪是很轻松的,我带给你的更好的那个收获呢,是你长远的职业发展的旅顺,这样比那个重要的多。

嗯所以这个这个简历再重复一遍,给我简历的时候就要说清楚你是要在哪个城市,想要这份简历拿到多少钱,这是我们调优简历的第一个前提好吧,如果你就想拿个12000,15000左右,可以可以就可以拿这个去拼。

还有啊这种这种废话呀,嗯基本上打动不了谁,只能打动你自己,这样吧,我给大家看一个比较牛逼的简历,就刚才那个年薪120万的简历,你们想看看吗,我还说那牛逼的学生拿拿拿5000万已经套现了。

然后当时的薪水是1000 1120万,你想看看吗,想看漂个一来我来看,就是说,这个就基本上就是那个纯技术类的天花板了,好吧,纯技术类天花板,你们不要担心说你们达不到他这个水平,你们记住了。

他这水平也不是说天生会的,他在大学的时候也不也不是也达不到这种水平,都是一步一步地学习实战,一步一步过来的,马斯克呢可以直接带你到这个水平啊,找一下,呃自己看这个评价,跟你跟刚才那个同学的评价比较。

你们看看这两个的区别到底在哪里,刚才那同学的评价,我找找跑哪儿来了,这个是吧,这是在抒情啊,这是在写小论文,在抒情,感动你自己,但是不职业,你们自己比较就行了,5年多少经验,3年以上的大型系统架构设计。

3年以上的团队管理,分布式高并发,高可用大数据量的系统架构设计和研发,对什么什么开源软件深度阅读,并且能够定制开发,好了很简短,最核心的竞争力已经出来了,这个是什么,这个是在说我很努力。

我愿意从从事这份大哥,不重要啊,不重要,听懂了吗,不要玩自己感动自己的事情,个人技能他永远不会把那个什么html css写前面吧,好了,京东什么阅读过什么分布式,因为你要知道。

如果你真正的理解现在企业看重什么,你就知道他这个排练的前后前后顺序的原因了,非常简单,大家伙看中的排在最前面,分别是to b c t c c,优化中间件集群的搭建分布式吗,对不对。

e中间件消息中间件是吧,负载均衡好,整个的项目经验呢,是以纯技术的列表的形式来体现,分布式的系统架构,当时是怎么来完成的,海量数据的架构以什么来完成,没那么多乱七八糟的业务上的介绍。

业务介绍对我来说不重要啊,高并发的系统,高可用的架构,高性能架构,可这是解密当时120万年薪,各位同学也不要太过于说嗯,哇我什么时候才能到这种程度,其实我跟你讲啊,如果按照一个粗略的先系统化了解。

再去慢慢了解细节的这种学习方法来看的话,只需要六个月的业余时间,老师就能带你把刚才那份简历所涉及到的内容,全部走一遍,但是你说有细节上我能记住多少,背过多少突击,我能搞定多少。

去面试这个东西的话是一个概率问题,掌握10%有10%的机会,掌握20%有2%的机会,但是最重要的知识体系化,跟着我们的各种走,这部分就没问题啊,全全包裹啊,他那个简历里面的东西全包裹,放心。

这里全要这硬度测定分不是破译的,很帅,是的,说明他透彻理解了嗯,好的简历老师手里有很多,但我会告诉你这个简历差在什么地方,我们再来看看嗯,应该我再再再来看看其他的这个同学的简历啊。

起码发过来我给大家瞅瞅好吧,大概的,其实马马老师给给大家改一份简历啊,来来回三天左右时间才能改完一份,就是我为什么毫不夸张的说,就是我们老师给大家改完简历,什么都不用动,你整个薪水凭空增加2000块。

这个大家有信心吗,有信心的飘个一就是你什么都不用动,你什么知识都不用学,就给你改完简历,你整个薪水估计都要2000块钱,一个月1年2万多完全没问题,核心的一点就是你要知道企业要什么,各位兄弟们。

不要老想着自己为什么一定要把这个给我给我,给我给我弄明白了啊,还有一定要理解我所说的简历是什么,是广告,还有一个呢知识点是什么东西,是概率哈哈哈,不是说非要掌握多少啊。

3年java开发端庄高并发分布式挺好,你看他这个他就知道哪些东西是值钱的嘛,对不对嗯,开发框架这可以啊,简短有力啊,比那个写一堆呢还要强不少,当然有一些呢就是有些写的比较细会更好。

有些写的稍微粗一点更好,我一会再给大家看一个细一点的例子好吧,那个那个哥们是24岁,拿了60万年薪啊,想看不能看的太丑,一眼就是关于这部分怎么写,专业技能这部分怎么写,好打开来瞅一眼啊,简单的。

嗯找一下啊,这个,这个你自己看啊,这个是整个专业的技能,它是一个接近应届生的,一个一个一个一个条件啊,你们看到的这面很宽,并且很深,这个是最重要的啊,京东什么属于什么,了解什么是吧,哪个最重要往上写啊。

这个呢是在24岁,大概才工作2年,2年左右,经验2年左右是可以达到这种水平的,兄弟们不要害怕啊,你要这跟我们走,我就能带你到这种水平,然后60万当时拿了60万年薪,我发多少。

你还在看这个刚才那个同学的简历啊,太原科技2020年4月至今good,你看20年4月到现在没跳过槽,没跳过槽就不要跳了,20年到现在2年多,2年多不到3年,我刚才讲过,想杀大涨什么条件来着。

在一个公司工作满3年,别跳啊,别跳就不要跳了,一定是准备好再跳,你吓一跳的话,能够拿一个很好很好的涨幅,王老师这个涨幅不限啊,你不要老让老实说,那我涨幅就是人家就只能超过30%多了,不给那是你傻。

这个你看这种的相对的介绍呢,呃就相对来说偏业务一点,发现了没有,相对来说偏业务一点,不是说不太好啊,如果你想突出你的技术水平的话,那就不要太做过多的关于偏业务层面的东西。

比方说你项目的微服务好这些个呢你可以列,但是你没有必要说把那些后面的细节全列出来,另外呢你列入为服务来为服务很普通啊,那你的优势是什么呢,你这个微服务互相之间的耦合度怎么样,你是怎么组织它的。

是用了什么样的优秀的设计方式吗,d d d吗,怎么拆分它呢,你这些东西没写出来,嘿嘿是不是,还有呢以后不要写html,也不要写前端的东西尽量少啊,跟日子还还包括测试干嘛,这个职责这块就明显不太对了。

职责这块一定是设计类的,往上写牛逼代码的落地,我负责的网上写有一些在线的bug的调整,网上写有一些特定结构的优化,往上写,现在这种配合测试了什么代码,检查了这些东西呢,不值钱,就尽量的不要往上写。

听懂了吗,现在预购每天租房顶的物流,后面就不看了啊,大概是这样的啊,那个还是一句话,就是你想拿这份简历拿到多少钱,如果这份简历放在放在放在北京的话,估计是在2万~25000之间,这应该问题不大。

这个还可以回去,再加上他这个加上他这个没没没怎么跳过槽,这手啊,毕竟还可以啊,看看运气,有可能能还能到3万,这是有可能的,但是如果你想比较有把握的拿到年薪,30万~50万左右的这个区间。

比较有把握的拿到要增加,我给你所说的就是你的项目呀,天天一过网是能够很容易做包装润色的项目,做哪方面的包装润色是不是流量大,并发量大,数据量大,结构复杂,是不在线的,日志的跟踪啊,呃链链链路的追踪啊。

这个这个除了日之外呢,还有这个这个这个呃,呃整个的这个负载这部分了,呃优化这部分了,然后什么缓存这部分了,就是你突出这些点能理解啊,突出你用了redis,redis承载了多少多少东西啊。

中间有没有崩过呀,理论是怎么调优的呀,突出这些啊,这个会让你的会让你这个项目变得更值钱,所以剩下就是往细节里优化,你就能达到下一个吸水的高度,让我说清楚没有,我们从来都看到这了,看这个这个东西。

后端的实习,你这个不是看到这种的,我就不想看了,你知道吗,我学过哪些课,你这个对我来说有你就一定写简历,一定要思考一点,出发点是让对方看到了,愿意继续往下看,以及愿意来拉拉你这个人过来过来。

我们聊聊对方想要啥,对方你既然是想找jva后端时期,一定是对方想要java后端,你看看这里面跟张浩德有半毛钱关系吗,大学英语高数,谁不学安卓嵌入式网页设计,python c sharp。

mysql c加加,跟他们java一个关系都没有的,一个跟java关系都没有,还有我的大哥呀,这后面的我还怎么看,你就自己想去,我第一眼看到的是跟我java后端一点关系没有,我为什么会让你来。

我想要看到的是不是应该是项目相关的呀,是不是应该是和这个相关的呀,兄弟们,fly local说的很对啊,牛肉店看到是大专家没用的课,他说的非常对,fly local他应该也是面试过人的。

就是你的目标是java后端实习啊,兄弟然后你让我第一眼看到的是,第一你学的不太好,第二你学的东西跟java无关,对你要学会隐藏对自己不利的信息,学会突出对方想要的信息,就没什么可说的,你项目经验也不够。

选个权限管理,这不是搞笑的事吗,这是所有项目里面都包含的一个模块而已,比如说你没做过完整的项目,对完整项目长什么样,能不理解,要学会包装这一点啊,你记住啊,就找实习生啊,给你找正式工作。

本质上区别不大的,ok实习生,你如果过去想干真真正正的,对你以后工作有利的事情,而不是说过去打个杂,端个茶,倒个水,就一定把它当成按正式工作去找,正式工作的简历怎么写,你就该怎么写。

这是我们在校生太容易犯的错误了,就这种简历扔出去,你要有反馈,我就太佩服你了啊行吧,就这啊,没没没已经没法就往下看了,ok扬长避短,还不如写在线下培训,不知道吧,对没错,你还真不如写这个。

你说我在哪哪哪,我参加过培训,但人家让你来实习的时候还还非常有可能的,我跟你讲明白吧,好了呃,这边发了我四分,我看看有没有其他同学发给我的,再重新,如果有的话,那就再再再多讲两分好吧。

炎炎老师发了一个抽烟,这个,诶这是那个呃就这种玩法呢,一看就是经过那个专业培训的包装的,我感觉是啊,不知道不呃这个不知道我为什么没有,不知道我理解的对不对啊,这个同学的放大不了啊,烦人啥情况。

我得下载下来吗,好吧,我稍微下载一下,要不然这个放大不了啊,这个看起来太烦了,我来看这个这个这个兄弟的啊,这个感觉是经过有一些人的指点的,车,看上去就比较这种简历呢,就是大概是你呃没有经验的那些个hr。

或者是那些面试官,他会被这样,他会非常喜欢这样的简历,为什么他现在很详细发现了没有显得很细,而且大概流行的什么都懂,哎这就说明我挺需要的,这样的人是我需要的这样的人,但是对一些对于一些有相相对来说。

面食店比较丰富的,这样的话,你就有可能不一定能够能够看得了他,所以这时候呢我们为什么讲这个,你看为什么我们说那个120万年薪的简历,他优秀的原因在于什么地方,你好好自己琢磨一下。

就他第一个上来之后的自我介绍是要转眼球的,就他上来之后的第一份呢就是他的自我介绍,而并不是说个人的概况啊,我知道啊,我知道,我知道你们呢呃,就是你们这些都是模板弄下来的。

但是呢你要想方设法的是要抓对方眼球的,你就这点能理解,一定要理解啊,抓对方眼球,所以你要想办法在前面加你这种,让对方看见眼前一亮的东西,这样可以清平刚刚的求助,籍贯四川成都呃。

6年本科17k6 年17k的话,目前12更新20期望目前不是6年12,你听我说啊,那个以后写期望薪资就不要写5000多少了哈哈,还有一个一定就是大家要钱的时候,要钱的时候务必要了解市场。

市场在什么地方呢,我现在多少年,我是一个什么学历,决定了我现在正常的拿的薪资是多少,我这么跟你讲吧,如果你是在成都,你6年的一个本科生,你现在拿的最少应该是20以上,是最少的啊。

最少20以上要20k以上,有2万 2万块钱,你目前的期望薪资17k,我hr的第一想法是你现在的薪资到不了17k,我的第一个想法是你水平差,所以你到不了你能理解吗,所以不要写自己的水。

你薪水低就不要写出来,另外呢要薪资这块的一个原则叫什么东西啊,叫宁可要跑,不能要少,我给你几个,举个最简单的案例,有个人的真实水平,a和b的真实水平,这个人的真实水平是80,这个外号的真实水平是60。

这个那个什么一点的吧,这个人的真实水平是100,这个人的真实水平是60,这个人的信心不足比较谦虚,我们不能叫信心不足,就比较谦虚,追求那种有把握的事情,一个面试我要争取能通过,给我感觉很爽。

我一定要通过通过概概率比较高,所以呢我会谦虚的往上写东西,希望别人能够认识我这个珠玉,然后呢我正常的往上面写80的水平,往简历上往简历上写80水平,别人怎么灭,我都能看得出我很爽的,我面的过程很爽。

但是需要注意的是,你这双是5万的水平,80别人是看不到你那个100的水平的,我只能在我的眼睛里,我只能给你4万的薪资,因为我不能够判断你这个人的真实水平,我只能通过简历来判断你,我这我又跟你不认识。

我又不是你肚子里蛔虫,我哪知道你有100的水平,这时候你能拿到的是4万的薪资,但是你很爽,你练了十家,你会乘八家,这八家你都能拿到4万的薪资,你会很开心,但是我们换另外一个人,他是真正的水平只有60。

也就是他最真正的水平只能拿3万,但是他蹬着脚都往上写,使劲儿的往上要,还要留给别人砍价的空间,他要45000,最后给他砍成4万 4万,他最后呢念十家只能乘两家,你面十家成了八家,他面十家成了两家。

最后的薪资你们都拿了4万,这是你们真实水平,你拿大腿好好给我想想,是谁哭飞了,是谁赚大了,记住要钱这块儿就体现了你的水平的一部分了,已经给你两瓶2222瓶洗面奶,这个1000块钱一瓶,这个十块钱两瓶。

你告诉我,你下意识认为哪个洗面奶的质量更高,涨幅太高了,企业会认为被宰了,你赢了好吧,我们目前最高跨度的涨幅,长沙6000块,跑到杭州拿25000,企业人家没有没有任何被宰啊,送你们两个,送你们两个字。

傻帽啊,好吧哈哈哈,你要是真正的想多赚点钱,你就不会认为那老是在骂你啊,谁要是老师在开导你,点开你啊,又要少了好吧,直接写啊,我再跟你讲,再跟你说一遍,你真实水平什么样,没人知道啊。

就是你你简历你想写到在长沙,在成都这边,我想写到4万的水平,老师也有办法让你的简历写到,那剩下的不就是说你能cover住这份简历,是不是你就能拿到4万,你好好琢磨这事儿不就这么简单的事吗。

你不要老想着说我真是值多少钱一个人啊,给你确定一个人的薪水靠什么来确定,我在没有见过你的时候,只能根据你简历来确定,如果没有见过你,我跟你简历觉得你值4万块钱,来了之后面试4万的内容。

你过了我就给你4万,知道吗,他给大家公司说的肯定不是6k,说的是6k,只不过当时对方公司确实急着要他水平,人家面他的时候就是按照25k的水平面的,人家过了,能理解吗,当然你要是采用极端方案。

你说的你可以说不是6k啊,我原来18000,现在涨25000,很正常,就是你们好多时候吧你们的认知,你们的认知在于你的想象,你知道吗,就是你们好多认知是在你你们自己的想象,我想象的是这事干不成。

所以我就认为他干不成,你们从来没有试过啊,啊不多说了啊,就是你整个简历看上去很牛逼,但这一份就直接给就给你就给你,把你的水平拉低了,我就这么跟你说啊,好还有很重要一点叫做前后端综合工程师,这叫什么。

全站所有的大公司都没有这个梗,如果有都是打杂的,搞所有的中小公司,有的有这种岗的,基本上就属于想玩命的省成本的,一个人当两个人用的,所以这个东西不值钱,搞后端努力搞好后端,搞前端,努力搞好前端。

前端搞起来也有架构,前端架构师,后端搞起来有后端架构师,不要强调自己是前后端都干,所有前后端各都干的人,在一个老油条的眼睛里,看上去就是一个啥都会,啥都不精的人,没有重点的人。

什么时候你可以突出你前后端都知道呢,开始迈向技术加管理岗的时候,说清楚了没有,所以呢把你这种3年前端开发经验,全部都给我干掉,没有舍就没有得,该舍的要舍掉,注册用户多少,注册用户不重要。

并发量多少才重要,ok搞这些细节我就不再仔细看了,看他们没玩了,都不留给出平台,大量的业务描述不太好,少量的业务描述,重点技术描述,重点责任描述,诶这个写的不错,性能调优几秒提升到一秒。

报表5万提升到百呃,最高百万,ok这是不是就就相对来说比较值钱了对吧,这是优化,如果还有并发,还有那个那个高弹,那就更好了,听听懂了吗,所以重点往这方面引的话就行,并发高谈云原生这些问的都是可以发的。

但是我觉得你整你这个个简历,要比其他的几分好的多啊,要好得多,这个简历而且呢弹性空间很大,做细节优化做好了之后呢,可以大幅度提升薪水,都说的这几几点吧,好好改一改,把这种hydnet之类的边去掉啊。

不值钱,就是要理解现在什么值钱,什么不值钱,可,好吧我们简历简历就讲了这么多吧,尽量不要说上家工资和期望差太多吧,一般来说不要进大厂的时候,大厂会做背调,也很难弄,瞒得过去,广州末流本科5年真实工作。

连毕业7年可以要多少,24x12,24x12,大概在25万左右,35万~40万之间,建议建议这么来,要,各位要薪水这件事我再给大家重复一遍,我再给大家重复一遍,就是你们老是考虑薪水的时候。

你们是一般是一般是这么来考虑啊,我的真实水平什么样,所以我应该对应我真实水平的薪水,但实际当中呢是没有人知道你这种水平的,就你有时候真水问题未必能展现的出来,也嗯嗯各位能听懂吗,能听懂挑个音。

我这不是在教你们歪门邪道,而且只要你每一个认知就是你们啊,放弃你们以自我为中心的想法,一定要考虑,我作为面试官,或者我作为用人单位,我不认识你这个人,我跟你也不熟,我评价你这个人值多少钱,我怎么评价。

你,好好想,我怎么评价我只有一个办法,就是拿到你的简历,看你这份简历值多少钱,听懂的飘逸,所以你下一个工作想拿多少钱,就写值多少钱的简历,自己判断的不好,为什么老师的东西就在这儿呢。

也老师会帮你搞定这份简历,你应该只搞钱,然后剩下的你要干的事情就是cover住这份简历,所谓的cover住,也并不一定说这份简历所有的内容全部百分百,扎扎实实,从头到尾全做过,全掌握住no。

针对这份简历,他会问什么,能够答出来这份薪水你就拿到了,肺腑之言,听进去的扣个一,怎么走捷径就在这儿呢,你呢是有些老师可以让你很简单的走捷径,有些呢老师让你扎扎实实的从头到尾的提升。

所有的一切在于咱们的这个课程大纲,以及咱们的服务模式,一对一的服务,一对一的评估,一对一的指导,面试的陪跑,简历的优化,职业发展的陪伴,还是那句话,你们平时学个四级,知道报个班有用,学个雅思。

知道报个班有用,反而在你们安身立命,涉及到你们每个月多赚多少钱的问题上,不愿意找一个专业教练就太傻了,投资自己永远是你这辈子最应该做的投资。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

它会让你翻个五倍,十倍百倍的回报。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让你翻回来,这是我们所取得的一些效果,咱们的女同学涨薪500%,涨薪50%概念,京东的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

咱们的32岁的程序员,2年没参加工作,带娃出来拿40万年薪。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

比她老公都高,咱们的女成员,原来11k我们给他带到19。5,大概也就用了三个月左右时间,马老师这里的课不仅不单单是深,而且最关键是我们讲求方法,还能快快速见效,这是过年的一下突击,春节没有好好过春节。

春节期间就好好去学习了,原来拿19,现在拿28,大家都说,如果说按明年再说,明年就比今年多拿了七八万块钱,它不香吗,四个月涨了12k,1年14万,大专学历受到大厂的offer,突击了一周。

就用了一周时间,我们帮他改完简历,3500,就这么快。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

修改完简历,两天十几个面试,原来没有面试。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1年没上班,信心满满,回到了ok,两个月薪水涨了66%,拿到55万年薪,敲个牛逼出来吧,这不是一个人,一堆人都能拿到这样的收益,这就是投资自己所带来的,明天最后一天是我们抽奖的最后一天。

明天也是我们的白金卡的最后一天,明天也是我们涨价前夕的最后一天,明天也是我们双旦优惠的最后一天,不要错过,记住早一天开始,其实你的成功的概率就早得多,不要想着撞了你的南墙之后啊,非得等明年过了年。

过了年之后呢,撞南墙,撞了南墙之后呢,发现自己确实比较差,才想着学习了,那是不是又晚了十好几天呢,你知道十几天能学习多少,你知道在马老师这里,一周之内的能长新的学位有多少,我给你,我给你找一找。

一周到两周就涨薪有多少,你搜一下啊,直接搜一周,这里有1000多位好吧,1000多位学员,一周就是一周,ok就干了一周报名了一周,成都20k可以吧,就一周面试前突击了,一周5。5,本科突击了一周。

1年涨了12万,我就不给你一看了,除了一周的两周的,我跟你讲,报名3月啊,实际学了两周,年限涨了6万,一个月5000,其实我跟你讲啊,真正开始学习的时候,如果按照正确的学习方案。

如果按照我们以目标驱动的学习方式,掌心这件事,马老师这里是板上钉钉,我想知道那个带丸子怎么写的简历,简历都这么写,精通什么会什么,写过什么项目都这么写,你知道那个有有毛线用。

每个人情况和每个人情况不一样,这事儿你就交给老师就行了好吧,你拷贝拷贝不来那个那个东西,如果所有的简历都千篇一律,用人单位早晚会意识到这个简历是模板,我们为什么说要每个人不同的简历。

每个人呢老师带着简历为为你陪跑,让你与众不同。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值