系列 1:P16:马士兵深入浅出java虚拟机⑥为什么一个百万级TPS系统会频繁GC? - 马士兵官方号 - BV1mu411r78p
昨天讲的内容吧,好不好,简单回顾一下啊,我们稍微回顾一下,昨天呢我带大家呢主要是过了一遍这个东西,就是常见的垃圾回收器,垃圾回收器的一些常见组合诶,哪些呢是分带的,哪些是不分带的,哪些是逻辑上分。
在物理上不分带的,讲了这个东西嗯,然后呢我教了大家几个简单的命令来观察一下咱们这边的一些情况,观察一下dc的一些信息的给他列出来啊,交了那么几个简单的命令,然后昨天呢我运行了一个小程序。
这个小程序呢就是唉这个小程序,这个小程序呢是模拟了一个呃对于信用卡模型来做模型匹配,来做风险控制来呃做的这么一个小程序,了解小程序呢它本身是有些问题的,昨天呢呃大家伙也都看到了,然后在昨天结束之前呢。
我跟大家说过,我说呢呃在我们实际当中调优的时候呢,我们还有一个特别好用的工具,就是谁呢,阿里开源的这个arth呃,其实来教大家做操作这个事儿相对简单的多,呃我今天给大家讲完操作之后。
能让你的简历上能够大体写上有过jvm调优经验之后,看看能尝试给大家讲一点理论好吧,理论其实相对难好难好多呃,面试的时候问理论问的比较多,实际上你只要有个操作,那么别人问你的时候,你是做的什么操作呀。
什么情况下你做调优啊,这个东西能说得出来的时候,ok你这个简历唉就值钱了,今天他特别过分,我以前的学生啊,就是从做线上教育以来,学了我们课程的学生少着,大概学完课3~6月左右,少人能往上涨5000块钱。
今今天今天特别过分啊,今天有个学生只涨了2000,还好意思跟我说,太过分了,实在是太过分了吧,打破了我们一个记录,本来我们是原来的学生,差不多啊,每个月涨5000块钱,今天有一个只涨了2000。
但是他只报名,只报名了三天,哈哈哈,虽然他破了我们几个,我们还是很高兴的啊,好开玩笑啊,来看这里,那今天呢我主要给大家讲这个office的在线拍照工具。
ok回来回顾我们这个小程序怎么用啊,稍微回顾一下,我们首先呢把我们的利益程序跑起来,还是这个小程序让他跑起来,大家还记得吗,我们others怎么起来啊,就这个小程序呢,它有问题,昨天呢大家也看到了。
我们首先用top命令能观察出来它内存在不断增长,所以你的网管肯定会过来找你一个大耳刮子呼上来说,你这怎么回事,你赶紧给我调去好,你就给他调,你怎么调呢,哎你用几个命令来调。
当然昨天讲的那个几个命令都比较土,今天呢给大家也是java自带的,但它比较分散,比较土,用起来不方便,今天带大家呃用一个核武器,就是那个阿里开源的这个alice,首先所以啊这是这是原。
来我们需要需要调试的这个进程啊,需要调试的这个进程,他在这跑着,然后这个阿瑟斯怎么工作呢,阿瑟斯他自己也是个进程,他起来之后呢会attach到挂在上面去观察它里面的一些运行情况。
这里面呢是java自带的一个编程接口,叫jvm t i,如果你感兴趣可以去看一眼,就是others是拿什么写的,是这个接口叫jv m t i。
全称叫java virtumachine to interface,工具接口就是你可以为jvm写一些工具,通过这个gm ti来写的,就是就是拿这个写成的,我看这里,来不了,直接点了,这刚站。
呃os 5点站,挪一边去啊,好我们挂到这个进程上,这个进程是2176敲一,那么当你看到f4 这个界面的时候,ok你已经知道了啊,已经挂上去了,s命令有很多,我推荐大家呢,你直接到others的主页上。
就github那个主页上去看他的中文写的注释写的很详细很好,也不用去专门找找些书什么的,看,没必要,还有一个呢你就是用了一个help help,写的也不错,非常好呃,我一般就直接看help help。
它就会列出来,在下面呢你可以运行哪些个相应的与相应的这种命令,哪些命令都有这么多,还不key map s我就不一念了,特别多呃,我教大家几个好玩的,这个比较常用的,首先第一个呢叫dashboard。
dashboard仪表盘,仪表盘是什么意思,你敲回车的时候,你会发现诶出了一个用命令行模拟的图形界面,他每隔5000应该是每隔五秒钟刷新一次,如果没记错的话,当然这是可以指定的。
这里面给你显示的是什么内容呢,我想你一看就应该明白上面列出的是什么,最繁忙的县城有哪些这些现成的状态,它写成的名字,还有呢关于内存的一些信息,对诶占了百分之多少啊,一边去百分之多少。
survivor区多少,tenure的generation,昨天我讲过tenure的generation,就是o的区域,老年代占多少了,这个还有呢下面是一些运行时信息啊,操作系统的名字。
操作系统的version java version java home,这就这就不说了,好这个比较好玩儿,呃当然这个是看一个大体的情况,除了dashboard之外呢,就是dashboard。
你可以远程的去看它什么呢,哎去看动态的去观察它,看看这哥们儿老年代是不是不断的在增长啊,是不是老回收不了啊,堆的占用是不是不断在增长啊,去看这些,去看这些信息,还有哪个线程是最忙的,占了cpu占了多少。
这闲聊的名字是哪个,到底什么情况,他在干嘛,如果有人有线程不断的占占cpu诶,ok这个县城一定是有问题的,线程都占了百分之百了,查他怼的,ok这dashboard就干这个事的,来get到同学给老师扣一。
这个比较简单啊,不难,好我们再加help,然后呃在这个就是这java就是阿里的这个东西呢特别强大,他除了有一个命令没有弄完之外,其他的基本上全都全都全都完成了,好大家看这里啊,来我们再来。
我再来教大家另外一个命令,就看这个吧,jvm呃,display the target of information,大家还记得吗,昨天我教了大家一命令叫a fer,那我看出这位的相关信息。
阿里的这个gbm啊,这个命令其实比昨天我给大家教大家那个jinfer那个命令,它显示的更加的详细啊,他比那个要详细的多,呃,最好的是呢它能够显示出来,你到你现在到底用的是哪些个垃圾回收算法。
比garbage collectors,你现在用的是哪个copy market summary compact,ok你现在用的是拷贝,拷贝完了之后呢,是一个mark sweep。
再加上压缩所有有就是简单的说就是我们原来的ps加po,他的算法当然还有一些其他的信息啊,这个你自己去看就行了,这个不难,ok,啊没有clear跳,好我们说我下面我下面来教大家呢,教教他什么呢。
教大家怎么定位我们这个程序的问题啊,我们这个小程序一定是有问题的,当然他现在还没有显示出来,但是它有问题有什么问题呢,我现在教大家怎么定位,昨天大家观察这个小程序的时候。
你会发现他一会执行一段时间之后呢,对不对啊,这还得看一看,一会儿他我就一会儿等他频繁dc之后,我再来看他信息啊,你就了解了,我先教你别的命令吧,一会儿我们,回来看这个信息再看啊,呃教你一些别的命令啊。
你比如说,thread,这也是一个很有用的命令和,read的是把这个java进程里面所有的线程全给你拽出来,昨天我们讲过jdk,大家还记得吗,jdk是干嘛的,也是观察那些现成的信息的好。
阿里的这个thread和jdk的完成的功能一模一样,但是它用起来更好用一些,比方说我想观察16号这个线程,它的一堆栈的调用,并且呢thread 16 ok就可以了,你就会知道哦,这个16这个线程在干嘛。
他是在一个什么状态,它是在运行哪个方法,这个方法的标准站是什么,当然如果你一个程序里面现成非常多,你还可以进行过滤,thread说,may比方说may may may里面开的线程啊,全全都给他列出来。
ok全列出来,单位呢呃如果你像阿里的那个要求,每一个线程你都起了正确的名字的话,那么你就可以用名字来进行过滤,如果县城有谁是,比方说它是持有锁,产生了这种死锁的现象。
直接一个命令thread当b而我这是没有锁的啊,就是没有组没有会产没有产生死锁的线程,所以你杠b是看不见的,如果你产生死锁,你自己去写,你用它来挂上去的时候。
thday杠b就直接会把那个县城哪个县城搜索都给你找出来,thread呢还有一些其他的参数,任何一个命令后面调杠help回车,ok你就知道这个命令的用法,这个命令到底是什么意思。
他说display infer threstack,然后它有一些个examples,一些告诉你的用法,比方说gb gb是什么意思呢,find the threat。
who is holding a log that blocks,the most number of threads,一读就明白了是吧,find the threat,找到那个县城谁啊。
with holding log,他正在拿着一把锁,阻塞了其他人,阻塞了其他见证,它导致了思索,把这线条给我揪出来,fly刚毕a是不是用起来特别简单,感受到了没有在一个界面里面把所有的问题。
所有的问题全解决了,巴特的会影响被监控性进程的性能吗,必须得会,如果不影响他怎么去拿到那些信息呢,必须得会影响啊,好我们继续往下接受命令,等他等一会儿他要死机的时候,我们再来看他的信息,好吧。
再介绍几个啊,这里面的命令我就不完完全全的从头到尾已经介绍完了,这个就没意思了,呃我觉得多数人大多数的人应该更看外面的文档,看呃呃帮助的信息应该都能完成是吧,我觉得应该有啊。
参加过任何1年半年的工作的这些乘务员,这都不是问题,咱俩就再给大家介绍一命是什么呢,这个呢我倒是我这几个命令啊,我建议你可以了解一下这个命令还是挺好玩的呃。
第一个呢叫search classes loaded的百gb m s c c,什么也叫search class sc sc呢,当然他的命令的方式有特别多,你如果你直接求c的话,他就会把。
他就会把i c c它就会把所有的这种面,你它里边加载的这些类全都弄出来,当然你可以这么来写,扣两码是零诶,这是我们自己加载的那个类,你看到除了我们的主力之外呢,还有三个line的表达式是吧。
两两个栏目的表达式啊,两个内部类啊,一个是有名的内部类,一个是匿名内部类,ok,有人说了,老师你把这个类的名字找来,有什么有什么用吗,是因为呢它会下一个方法做准备,下一个方法叫什么呢。
下一方向sm sm别扭,这名字起的全称是什么,loaded by,这边去查什么查方法,找到那方法,你们俩那视频这样,如果是这样的话呢,它会把这个类下面的所有的方法全都给你列出来呃。
当然你要查那个main方法的话,你就可以直接按这样的格式来写com马视频j mj c啊,把这个麦给给给搞出来呃,只是查类名查方法,这个东西呢没什么意思,其实它最重要的是干嘛呢。
最重要有两个命令是跟在这两个命令之后面的,就是sc,你你有几百个类,我用sc把我关心的那个类找出来,这个是需求是经常有的,几百个类里头把这,个类给我找出来,这类里头有好多比较关键的方法。
忘了方法名叫什么了,搜完了之后主要是干嘛呢,一定是这个方法有bug或者有问题,我想观察他,你说对不对啊,同学们,这是肯定的,那下一步呢哎有几个观察的命令开始服dc了啊,这就快了,有几个观察的命令。
这几个命令值得大家拥有,你值得拥有呃,这几个命令是什么呢,第一个呢是trace,他说你看这里啊,他叫trace,the execution。
time of specified method invocation,这是什么意思啊,读一下你们理解trees,后面要跟参数的啊,如果你不知道它怎么用,很简单,敲help。
看他的examples就行了,你看啊,比方说它trees某一个类下面的is blank方法,看到了吧,这个trees是干嘛呢,这个trace是跟踪时间的。
看这里trace the execution time specifmethod of vacation,你指定一个方法的调用,它来跟踪这个执行时间,这个就是执行效率,你比方说你写了一个很关键的方法。
放上去之后,这个方法呢肯定会让用户不断的调用,不断的调用,不断的调用不调用,如果这是你的wea wea web application的话,那这个方法会不会用户不断调用,这个方法是一个很关键的方法。
要求它性能,比较高,但是你会发现这方法性能不到位怎么办,观察到位没到位啊,用这个trace直接跟他看他的方法执行了多长时间,但是我们这个小程序呢没有这种不断执行的方法啊,不停的执行。
又来一个来一个请求执行一次,来一个请求执行一次,所以这个呢目前用不到,但是在你们自己写的web application里头,一定有这样的方法,你比如说你写了一个什么service订单的service。
service里面有一个方法叫make an order是吧,设施给他成成交一个订单好,这个方法呢和数据库打交道,和硬盘打交道,和缓存打交道打交道完了之后也反馈回来,你可以跟踪这个方法的执行时间。
如果你发现他是执行时间特别长,一定有问题,有一次用这个东西跟他跟他跟晕了,真晕了,说明你不了解这,命令到底是怎么用的,这个很难吗,很简单,应该是好,讲,到这里能跟得上的同学给老师扣一来。
好那除了这个trace之外,trace很有用之外,还有一个跟踪方法也挺有用的,哪个哪个呢,知道的就简单对老师把这层窗户纸给捅破了啊,你就觉得没那么难了,有好多时候叫会诊,不难,难者不会给你捅破了。
你就觉得没那么难了,还有一个呢叫monitor,这个也挺好玩的,也挺有用的,你看一眼就是monitor method,execution,statistics,for example。
total success,fa count average,my favorite等等等等,这是干嘛的呢,它是跟踪这个方法的运行数据,这是什么意思,monitor,好简单说一下,这已经抄不进去了。
因为那边那个进程已经死掉了,呃这monitor是什么意思呢,monitor的意思是当你跟踪某一个方法的时候,这个方法是哪些值被传进去了,传进去的那些个参数值,哪些值被返回了,它的一个执行过程。
这些数据全都能给你跟踪起来,那这个对于你定位问题来说也特别特别的好玩儿是吧,也特别好用啊,spring调文章很深,你为什么要跟spring的方法呀,你不应该跟自己的方法吗。
好到现在为止呢,其实还有一个关键的命令我还没有讲莫及,下面我来讲这个关键的命令,这个关键命令是什么呢,就是一旦你的程序发生问题之后,你看啊,现在看我现在这个不停的复dc,看到了吧,不停的刷新。
不停的刷新负dc特别频繁,而且你看到了这哥们其实已经死掉了,他只不过有些遗留的线程还在不同的不停的输出而已,那个输出线程啊还还没有输出完,其实已经死掉了,已经oom了,我说这个程序的bug就已经出来了。
程序bug会是什么样的呢,内存不断增长到一定程度之后,频繁f g c评分ftc之后,再过一段就有可能产生l o m好,这是这个小程序的问题,那下面呢我们就来定位这个问题,我先把这个给停掉。
大家需要注意的,有有有一有一点呃,在这儿其实有一些细节我已经略过它了,因为呢那些细节对咱们今天的实战来说不是特别重要,在你实际的工作场合也是特别重要的,如果有面试官问你,你日志的设置的这种参数。
你要是回答的有问题的话,我告诉你面试官一眼就能看出来你的水平到底是高还是低,那什么意思呢,这个我在笔记里呢也给大家记了,主要怕大家看不懂,我多说两句,日志的话,好看,这里你设置个日制参数的时候。
一定要好好设,有很多人啊在设这个日志参数的时候,它就直接呢就指定指定一个日志文件,知道吗,然后就不管了,我告诉你,凡是指定一个日志文件都是业余干法,有面试官要问你说你们有几个日志文件。
就一个死大耳刮子直接给你抽上来,为什么,因为你自己想想看这个日志它会不断的增长,不断的增长,不断的增长,大哥的日志要是增长到四五个g的这种日志,你想分析里面的数据,你累不累啊,累死你,所以我告诉你。
真正的日志参数,按照文档里,头这么设,自己设好日志的名字,自动生成,这个日志是一个滚动日志,叫log for rotation,一共有多少个日志文件,五个,这个数你是可以自己设的啊。
五个十个你自己看着办,每个日志文件是多少,20什么意思呢,产生五个日志文件,每个日志文件最大20兆,由于它是滚动的,最后一个日志,满了之后写第一个,第一个就被覆盖了,这样的话总共就100兆。
你要搞一个日志文件不断增长,面试官肯定会问你,那是有问题的啊,好来刚才我讲的这一小段街道同学老师口音,主要是让你知道你怎么跟面试官聊天,这个日志的信息,这里给的信息叫做非常初级的信息。
如果你设日志的时候,一定要设置的特别详细的那种,我们要给大家讲日志文件的解读,主要第一比较容易,第二呢跟我们实战的关系并不是特别大,今天所以呢我们先把它放在一边,但实际上每一个不同的垃圾回收器的日志。
它实际还是还是很复杂的,呃你真正要把它看懂的话,你得确确实实了解啊,就是这里面每个日志它到底是产生了什么意思,这个我有一些整理啊。
你自己尝试看就行了,呃在这儿呢就不花时间讲那个了,比较,枯燥啊,也没什么意思,先把它放一边,当你在日志里头发现就定位一个日志问题的时候。
系列 1:P17:马士兵深入浅出java虚拟机⑦用jps定位虚拟机进程 - 马士兵官方号 - BV1mu411r78p
哦他现在已经有问题了,什么问题呢,他才不断的频繁的产生fg的,最关键的是在这,你往这儿看好,这是最关键的啊,这是什么意思呢,这个的意思就是说当经历了一次负dc之后。
整体回收内存从原来的19198015k回到了1980,198015k哎,这个是198015k回到19198014k只回收了1k,你一个f g c下来,您老人家只回收1k或者0k在干嘛,他在干什么。
基本不减少,对啊,为什么我,好这里面一定是它回收不掉,回收不掉,什么意思啊,你们分析一下,这是我们的old的区,这里面内存满了,我做回收的时候本来正常有有有的对象应该都死了,但是他回收一遍。
居然里边没有死对象,没有垃圾,没有有任何有垃圾的地儿,说明里边对象全有用全有用,就代表着有的所有的人都有引用指向的,回收不掉啊,这个叫做内存的泄漏,内存的溢出好,我这里澄清两个概念,以免有同学不了解。
第一个叫memory leak,memory league,叫内存泄漏,第二个叫out of memory,内存泄漏是什么,内存泄漏是说你你在这块内存里有一个对象站在那儿,他就站那不动了,没什么用。
但是他就跟那站着也不释放,产生了内存泄漏之后才会产生内存溢出,如果这样的对象多了,内存就溢出了,但是如果只有那么一两个,他就在内存里站着,他也不他也不释放,它就占那么大地儿,但是你其他内存还够用。
这个时候就不会产生out of the memory,所以内存溢出和内存泄漏它是两个概念,好get到同学给老师扣一,对那个毛鹏飞说的对啊,站站站着桌子不吃饭啊,属于这样的。
ok从最后的我们的分析结果来看,它一定是发生了内存的泄漏,并且泄漏越来越严重,然后产生了内存溢出,那这时候我就要分析了,到底是什么样的对象占了这么大的空间好,所以我们这个逻辑很清楚吧。
这个逻辑我们看日志日志发现他回收不了这个空间,那就分析里边有一定有泄漏,里边有泄漏的话,就是一定有对象的不断产生,在占着空间,而且还不释放啊,占占着茅坑啊是吧。
然后所以下面呢我就要看到底是哪些对象干的这件事啊,这个逻辑到现在为止应该比较清晰,对不对,那好当这个逻辑表清晰之后,下面我们就来分析到底这里面哪些对象被占了呢,在这个进程已经死了,我重新把它跑起来。
好我在另外一个窗口里教大家弄这个命令。
ok,j mac啊,昨天没给大家讲的这个命令叫什么呢,叫j map,好看这里啊,在这儿在这儿啊。
就这些命令呢我不建议大家都背过。
你手边有一条小的那个呃手册放旁边就可以了,你用多了呢,其实面试官问你,你一定能说出这个命令的名字来,但是参数你不一定记得住,这个事很正常,你要把参数都记住的话,反正这事儿就不对了,说明你背过来看这里啊。
分析哈,procedure啊,或者叫project或者叫program,或者叫什么嗯,就是分析内存用的来,j map这个命令呢,它会干一件什么事,他会干这么一件事,他会直接进去进到那个那个。
那个正在跑这个内存里面,帮你去把那个里面那些对象,一个人又给你揪出来做一个分析,这个很牛,这些零命令之前我首先得知道它的进程id号gp 2310,嗯history gram生成一个分析图,2310回撤。
当然这个,呃就就就就那它的内容太长了,所以我们给它加一个限制符,head杠20,我把前20行给打出来,ok同学们,你们仔细看,这里列出来的是什么呢。
这里列出来的就是在这个这个m里面有哪些个类所产生了多少个对象,好比如说有这么一个冷知数组,这个是数组,你不去管它,它本身只占用了344个对象,呃,我们来看这里。
在这里呢有一个scared future test,你看到了吗,好它产生多少个对象呢,14万多,而我们的abstract cute chier,这是我们的所产生了28万个,big decimal。
是我们的cut info那个类里面的成员变量产生了14万个,下面呢都一样的,14万多个最主要的类型在哪呢,其实在这儿看到了吗,cut info居然cut info在里面有,14万个对象,大家记住这个数。
目前是14万,来再执行一遍,你你会发现它已经变20万了,看到了吗,再执行一遍,你会发现它已经变21万了,嗯同学们看出问题来了吗,来get到问题,同学给老师扣一问题在哪里啊,对有一个对象在不断的充电。
这样你是不是就把它揪出来了,同学们只增加不减少,对不对,唉当然我告诉你,你只是把这个对象给揪出来之后还没完事儿,你得去查你这个程序的bug到底在哪里产生的,一直没有释放,对啊没错啊。
就是这个程序的问题在哪里呢。
图的问题在哪里,如果你没有学过线程池这个问题,你还是找不出来,所以暂时我就先给你扔在那儿好吧,你自己去查,当然你要听过老师讲的多线程高并发这个书上的内容,这个这个你,很容易一眼就看出来了。
但你要没没学过这个问题,你找你也得找半天了。
嗯,我还是那句话,昨天呢也跟大家说过这些问题了,就是另外一个问题,用这种方式呢,目前看起来并不是特别难,其实oom问题我跟你讲这个问题不难,不是很难,他的步骤也是死的,知道吧。
就是你运行起来这map一下,然后看看哪个对象占的最多诶,接下来就把这个对象呢,跟到你的代码里面看看哪里在不断的产生这个对象就行了,找你的代码的bug去已经定位出来了,这个不难。
但实际上呢呃你想找这个bug出来,也没有,你远远没有你想的那么容易,有一些业务逻辑的写得非常的复杂,所以在这个时候呢,呃bgm问题,这就是一个相对一个死的步骤了,我们来稍微回顾一下,其实相当简单啊。
别人说你你这个你们原来产生过om问题,你在简历里说,那为什么问你,你你怎么对它进行定位的呀,唉你就说你就别说你用了什么,那个那个自己的那个,java自带的那些命令,你就直接说我用了iph,用了一些命令。
然后呢我还用了什么,我还用了gmap这个命令,j map不是ars自带的os,没有这个命令,只有这个命令,它的功能没有实现,其他命令全实现了,所以用了这个就ok了,找出来哪些对象呢,在不断的占内存。
然后呢我回去回过头去找bug啊,我发现bug到底出在哪,是有一个现成的东西,线程池的东西没写,对好了,搞定,这是最简单的,最初级的,还有这个流程清楚的同学给老师扣一,那,现在的问题就又来了。
我跟你说这map这个命令,如果面试官要问到你的话,这里面坑也特别多,首先第一点,我现在堆特别小,200兆,我只剩一个j max,他花的时间很短,如果你们家堆100个g,你一个g卖不上去。
这哥们儿里面就暂停了,听懂了吗,好我再说一遍,如果你们家堆特别大,你一个j map命令直接扑上去的话,你们家这堆就直接暂停了,对j map会把你的现在的进程给你停掉,这个事儿一般是不被允许的。
所以你这个命令你如果说你用过这办法命令,你还得要好好的,把这事给圆过去好,怎么圆呢。
有好多种方式啊,这种细节老师都帮你想好了好吧,看这里啊,有四种说法,你自己挑一种灰度,对灰度也可以,你看比如说你你有很多台服务器做了高可用了,你停掉这台服务器,对其他服务器不影响,这个牛不牛,这可以吧。
唉这个可以,当然这map还能干一件事,就是直接把内存全导出来,其实它直接就是堆转出好吧,对当你说了这句话之后,a面试官一想,我靠这哥们儿可以啊,不仅懂这边的调优哎,他还在用过高可用的这样的环境啊。
做个集群嗯,可以给他讲个2000块钱,涨个2000块钱没问题啊,好看这里或者是什么,或者呢你执行了这么一个东西,设定了一个参数叫黑单on out of the memory,一般的情况。
任何的这种实际当中的运行环境,这个参数一般都要设记住了,在你实际运行一个你的应用程序的时候啊,这个参数一般都要设这个参数叫什么,看这里叫hdmp on out of memory error。
就是如果一旦产生了out of my memory error,之后呢它会直接产生一个内存转储文件,内存转储文件的意思就是说这个jvm里的堆里面的内存,原封不动的给你存到一个硬盘上,放到一个文件里以后。
你就可以拿着这个文件直接来做分析了,关于怎么分析内存转储文件这件事,网上一堆一堆又一堆的内容特别多,有讲mit的,有讲jvo vm的,有讲,当然这个讲的很少,heap alysis to,大家听我说。
你们觉得有必要给你们弄一个对文件,让你们看看吗,有必要吗,好那就弄一个,但是啊记住实际当中不是这么干的啊。
一定要听清楚,虽然可以弄一个,虽然说往上挖,把那堆车弄出来,传转出来给你弄出来,可是这个事儿你定要圆过去才可以,要理解这一点呃,生成堆转储文件呢有好多命令都可以生成啊。
比较简单,这个你就你就记就行了,就g map gdp for mgb five,等于什么p i d就完了,就特别简单,一个gmap命令就生成。
那呃除了它可以生成之外,office也可以直接生成,搬到我们的那个哦,没有来挂上,我们用os中轴好吧,我在这里啊啊,来阿萨,这里面有一个命令,你一看就明白这个命令叫啥,hit them。
就是把那堆诶你给我导出来,导成一个文件里,get down,要看他用法,he弹刚刚live什么什么什么,ok就这么用,我就不敲了,可以吗,太简单了,因为所以他不会因此for dc吗,会的。
他会把那个没用的先给你收掉,要不然的话你导出来的东西太多了,看这里,hdmp刚刚live活着的对象,转储到哪个文件里面去,tm目录下面的dmb。hp h process这个文件,这个命令会暂停线程吗。
会的会的,莫急啊,我一会给你讲这个命令呢,它背后的意思让你圆过去这件事儿,好吧好,这个命令很简单,我就不敲了,可以吧,同学们,它生成了之后,我还得从linux上下载下来,下载下来之后呢。
哎我下载到windows上,下载windows上之后呢,我在用jvo vm版打开。
对这是运维的必备课程的,很简单一件事情啊,主要是太太简单了啊,那也就是说你把这个jvo vm打开,我现在假设你已经从你的linux服务器上已经把这个文件给下,载下来了,这样这个假设大家能接受吧。
能接受同学给老师扣一啊,然后呢你就把这个文件打开来分析就可以了,文件,装入,找到下载下来的文件,找找忘了下载到哪了,就原来下载过的啊,呃work,because it。
在你组成原理操作系统好像是这里面是有一个的啊,找那个什么呢,找那个呃堆的dmp文件好,这里有一个叫tm。h process这个文件的后缀名啊,其实你用哪个都可以,用什么都可以,后缀名没有,你也可以。
选中打开好,这个时候呢他就会把这个整个堆转储文件给打开,我这个堆特别小,所以打开起来特别容易,我再跟你说一遍,一个堆特别大,这个文件就在我的机器上分析起来,一天可能都分析不完,我们曾经有一个小伙伴儿。
嗯是什么vip的学员,他是那个鸡肉,昨天我我我聊过我,我跟大家聊过,他一个对帧数文件下来,他们平分f g c,他们的办法就是重启一一直不停的重启,后来他们受不了了,说必须得把这事给解决了,然后我就说呢。
等他那个宕机之后,你一定要把那个当铺文件给我拿下来,结果呢他就把大剑拿下来了,那个弹幕文件多大了十个g,然后我教他怎么怎么样进行分析,然后呢第二天我再问他分析完了没有,他说还没执行完呢,哈哈,所以。
这段文件特别大,个的时候,你是很难很难做对他所分析的啊,我看这里呃,这是生成了一个概要吧,这就不多说了啊,好看这个lay这个图你就会发现已经从这就能看出来它的big dino,它的实力数特别大,特别多。
大小呢占了多少的内存,在这里都有显示date有多少个实例,16万个什么eagger lamba表达式,cut infer一堆,所以只要这个图一出现,你就会知道哦,哪些个类占的实在是太多了。
这个分析就很容易分析了,但文件不能限制大小吗,但文件是你的内存的堆内存里边全部给你导出来,那你堆内存多大,你当文件就得多大呀,但是我说的是那个堆内存里面占了多大吗,实例数它最好玩的,还有一个什么呢。
还有一个这个q l控制台,哎这是很好玩的一件事情,就是你完全可以通过类似于一条sql语句的东西去来查询这些个实力,我想想那个命令还记不记得你,比如说我的。
我要查里边的各种各样的string类型的那些实例,每个实例都都什么样子给我拿出来,select nbm,再挖点儿,慢点儿,spring s看是不是这样子写的啊,唉对看到了吗。
就是那个哎把你的这个string类型的各个实力全给你救出来,它是位于哪个类里面的好,这个实例里面是一个什么情况,它里面的那个属性是什么,值是什么,你怀疑哪个实力不对,你就点进去看。
这是你有了堆专属文件的一个好处,就是你可以用更先进的工具图形化的这一类的诶,来看它里边的内容。
好了,这专程文件怎么分析,大概的一个过程该到了吧,网上很多讲那个用mt的啊,那个没什么没什么先进的,我不知道为什么有很多人用mt啊,不知道为啥比jvm不比这vo vm也没有强到哪去。
其实最好的工具是叫做j profiler,不过这哥们儿收费的好像还挺贵的,所以我不太清楚网上为什么很多人讲mt啊,你可以完全可以不用,好那好,现在的问题就来了。
我到底能不能够随时的就把这个堆可以导出一个,导成一个文件导出来,在生产环境里头能不能这么干,绝大多数情况下是不被允许的,除非你们说你们整个的服务器是可以被暂停的,如果是那样的话不行。
是其他情况肯定都不行啊,你不能说淘宝这边在对外卖货呢,这边订单还在跑着呢,你直接一个j map或者一个hipdp,直接就把那个堆给干暂停了,你这边有整个暂停了,暂停在干嘛,不停的往外倒数据。
十个g32 个g,刚才有同学是19个g多少,多长时间,半个小时以上,这事儿你能这么干吗,所以你要跟面试官讲说。
我是把这个堆专属文件给导出来的,大哥你一定要圆过去,怎么圆过去啊,有几个说法可以说,最专业的是很多服务器做备份的是高可用的,你听到这台服务器对其他服务器是不影响的啊,这时候呢你需要架构的知识。
需要了解高考用的这种配置好,接下来设定了he dump on out of memory error,就我刚才说了那个东西是什么呢,那个东西是一旦产生了om之后,会自动产生对转头文件好。
这个可以说就是它确实产生om了,但是我告诉你,这个说法呢并不是非常的专业,中小公司你可以这么聊,大公司,你说oom了才会产生对专属文件,别扯所有的都有监控,他都监控到你内存在不断增长了。
马上就会告诉你有问题了,你这个时候还等他o o m呀,不是很专业,但是可以说,因为,多有,内存增长,就会破掉,但是中小型公司可以说你们中小型公司没有监控啊,没关系,o o m了之后,他才他才报警了。
这个可以,这个没有问题,我看这里在线定位,推荐大家用office进行在线定位,你怀疑哪个类,哪个哪个程序有问题了,去观察他方法的执行情况,去观察它整个那个类的各种各样的一些信息,去观察它的代码。
还有什么你在测试环境中压测,这个也可以说,你说呢你观察到了它的om,就是它内存在不断增长,但是我没有定位出来在哪,我们生产环境中又又不能够随便停,我这时候怎么办呢,我把同样的程序部署到一个服务器上。
然后呢我在测试环境中对它进行压测,压测之中发现它的内存确实在不断增长,这个时候我可以把它导出来,这是没问题了,好了,今天在听的有面试官吗,用什么做颜色,jmeter run runner。
面试官可以撤了啊,拜拜,好几种说法都可以聊好吧。
至少你让面试官知道啊,你去了解这个命令,那么大家听我说,在你生产环境之中,你怀疑一个代码有问题的时候看这里,又死了,先把屁股掉,p2310 ,好再跑下来,我们再把othy,好在过了之后呢,还有一个命令。
这个命令呢它是ars的王炸,很牛啊,这个命令超牛,这个命令是什么呢,这个命令就叫做j a d,第2j a d啊,你看看这描述是什么东西呢,叫the compleclass,这个很简单。
就是来给他干嘛的呢,做反编译,cad呢其实原来是一个工具的名称啊,他后来用了这个名字了,所以原来那个g a d呢是一个也是一个反编译工具,现在呢其实大家应该都知道啊,就是java自带都有反编译。
jav杠p就可以啊,java p就可以呃,它为什么在自带一个反编译的功能呢,这是为什么呢,我们先来看这个反编译功能是干嘛的,呃比如说我们还是,要么名称啊等等类的名称把拿下来复制,然后呢。
后面跟我们类的名称粘贴回车,诶你会发现他干了一件什么事呢,他把这个代码全给你列出来了,看到了吧,那有同学就会说了,说大哥你在搞笑呢,这代码我自己都有啊,我还用它在g a d在那列出来好,你说是不是啊。
同学们来有这个问题,同学给老师扣二,凡是扣二的都是在小p公司工作了,做的都是小p项目,为什么呢,因为大项目你一般用不上,大项目没大项目才能用得上啊,sorry,大项目才能用得上哎这是什么意思呢,同学们。
你们想想看,作为一个超级大型的项目来说,你部署到生产环境的话,你本身就会有好多好多的程序,好多程序员拿着好多的程序网上部署,而且呢我告诉你,你写的程序很可能被其他人所依赖。
也许你在这个把自己的新版本扔上去之后,结果呢其他人在网上那个什么的时候,get get get往上往上传的时候,他很可能直接把你原来那个那个老老的版本,把你现在这个版本就覆盖成老的了,push的时候啊。
对所以你,版本follow了,版本不对了,那么你现在运行的到底叫的是哪个版本啊,这时候怎么办,好用这个命令来观察你到底是哪个版本,git覆盖对大家听听懂这个意思了吗,尤其是做中小型公司小p项目的同学。
所以这个命令还是很牛的。
那我跟你讲啊,这个g的覆盖代码这件事是经常发生的。
gto是杠f嘛,是吧嗯,一个一个f管你乱七八糟的,直接就给你干掉再说,还有这个代码里头不写注释的这种,给你查一个新闻,看能不能找出来。
好玩的呢,突然想起来了啊,你咋回事,美国成员枪杀同事,来自己看看,一名成员拿一把伴奏手枪,周平四门,四名同学开火。
是因为这个程序员不写注释,不遵循驼峰规则,括号换行还天天的gto,是gf激怒了行凶者。
哈哈哈,不知道真的假的啊,就聊天聊着玩哈,应该应该是假的,开玩笑的,哈哈哈,ok ok ok好知道这两种回事就行了啊,嗯嗯同时连锁定都没有是吗,没事中国没枪,ok好不多说了,好回来回来回来回来。
所以这个命令是直接可以直a d,但是只有这个命令的话,我告诉你还不算牛,你这你你们自己想想看,我就算查出来这个代码,这个代码其中有bug,我能怎么办呀,他已经上线了,哎同学们,你们平时你们自己写个项目。
然后部署到生产环境之后,里边确实有bug了,你们怎么办,你告诉我你们怎么办,你是不是把这个代码本地改好,重新编译好,编译好之后呢,再布置上去,是这样的吗,同学们没错,打补丁哎,重新上,换下去,回滚对。
系列 1:P18:马士兵深入浅出java虚拟机⑧用jstack定位问题线程 - 马士兵官方号 - BV1mu411r78p
要回滚没错,回滚到回滚到上呃,上一个运行环境去啊,替换等等,但是所有人要是有人要是说说,我自己写个代码,马上把原来那个代码给他替换掉的,凡是这样的,全是中小公司小p项目,唉我告诉你。
大公司的这个事儿是不允许干的,你已经上线了,你还能随便的把服务器停掉,然后在部署上好多好多的部门,协调好的这些个程序上去,你在开玩笑呢,你知道大型公司一次性的部署,要花多长时间。
预备要预备一星期往上部署要花一两天,所以那里有提供了这个功能,这个功能叫做refine,诶,又死了,不会吧,还没死,这个功能叫什么,叫redefine,refine,refine什么意思啊。
refine的意思相当简单,就是你直接在内存里头,把那个源码给改过来,然后编译好又放回内存,不惊动线下的代码,演示一下好不好,内存里直接改代码对,当然这个是应急性的操作。
不是说所有的正规的操作都是这么干的,这是应急性的啊,应急我明天马上就要双11了,今天发现了一个代码,有一行写错了,本来应该是个二,要写成三的,给我给写错了,我的我的折扣要打0。99折,哎。
里边写了一个0。01折,完蛋了,我要是现在下线不行不行,不方便,那我就现在我我怎么办啊,应急用的记住了吗,所以不要太过于去苛求它,这是应急用的,我给你演示一下啊,大家看这个小程序。
我这里有一个小程序叫t4 点java,这小程序特别简单,我觉得我就不用我解释了,有一个m方法打印一个二出来,就这么简单没了,然后我还有一个小程序叫t。java,自己看,我在这个t。
java里头一个main方法,这个may方法里头不断循环,循环的时候在干嘛呢,cpdinner read,我读一个字符进来的时候,我就new一个tt调用一下他m方法,小人太简单了,就想起来这个t,回中。
但是我回一下车,他就输出一个二,我回家之后再输出一个二,回下车后他输出一个二,好这小程序到现在能理解吧,来get到同学给老师扣一小程序,很简单,就是我们扔了一个二上去,现在呢我现在上了线之后。
我发现这个二写错了,我要重新编译,再往上传,我的整个项目组,是不允许你这么重新发布的,不可以,那怎么办,我想在线的直接就把它改成,把这个二改成一,可以不可以呢,可以怎么干,这么干,原来tp点燃了。
首先你把这t点加了这个二,先改成一,改成一分半,最初叫做ca tt,转成好,编译好了,大家注意啊,这个时候是什么情况呢,你们要理解,现在有一个程序已经上线了,这个程序叫tt,这个tt里面输出的是一个二。
后来我发现这个二有问题,我现在在线下,我改了一份新的代码,这个叫tt。class,在这个t件class里面,我把它改成一了,现在我直接要把它替换掉,在不停整个服务器的情况下,直接把它给替换掉。
听清楚这个流程了吧,来听清楚同学给老师扣一,这里面其实呢如果稍微往深里讲一些的话,大家知道任何一个类呢,在jvm里面都是被class loader给漏进去的。
在指标里面可以用各种各样的class loader,给load进去,class loader,如果你听过老师课,老师是讲过class loader,怎么样自己重新定义自己的class loader。
它里面有一个方法叫什么呢,叫define,这个define的方法呢,其实你自己去读一下,就是把一个一对字节数组,给它翻译成一个类,给它定义成一个类,一个对象啊,一个类,所以我们现在要干这么一件事。
就调用在阿瑟斯里面调这个命令,其中一我在os里面调这个命令,调什么命令呢,叫re design,重新定义,重新定义是重新定义每个class root。tt的class。
我把这个新的class扔到内存里替换掉,原来那老的回车好看,这里redefine success已经成了,我回到原来这个界面去敲回车,看见了吗,这程序我可没停,直接变一了,好这是阿萨德干的事儿。
还是挺牛的,这是临时的补bug用的,那以前有同学抬杠说,老师这个里边你你要是错了,十处十个文件的100个文件全错了吗,大哥您100个文件全错了,那你还不重新发布啊,你还在线还真在线改啊。
还有同学说老师我改完这个代码之后,那老的版本还是还是有问题的,那怎么办,大集群怎么办,大集群你就不能同时替换呀,写一个脚本直接就同时替换了,没有问题的啊,不要认为大清军干不了,你直接替换掉一个类啊。
类似于热部署,热部署,你是要把那个项目停掉,再部署上去,再启动那个项目,这个是直接类级别的热部署,可以这么来理解,当然这里面呢它有一些个限制,就是有什么限制呢,你不能够修改属性,你说这个类里面有个属性。
这属性原来叫m,你给他给他删了,还这不行,你给他加一个,这也不行,现在这个这个版本不行,据说阿斯下个版本要把这事儿给加上,你给你添加了属性可以没关系,凡是涉及到的我都给他改完,你把这属性删了。
其他代码牵扯到的我都给你改的机会,据说要这么干,但是我还没见着,还有一个不能干,你不能改方法名,你说原来的m这方法叫m,你非得改成叫美眉不行不可以,为什么,因为有别的类也用到了这方法了。
人家直接调的就是m,不过据说下个版本也可以,行不行不行了好吧,这个类正在被调用,会出现什么现象,原来从二变成一了,你跟正跟着打折,刷了个0。9000。01折,你正真的美呢,一下单的时候啵变成0。99了。
这酸爽,ok,关于艾克斯,我就就讲到这里了,好不好,我们就聊到这里,呃更详细的一些其他的功能的话,大家自己去翻吧,我觉得一个工具的话,那我教给你最主要的就可以了。
而且工具这个东西没什么可教的,自学都能搞得定的东西,对不对,我主要教教你他的思想在哪里啊,他能干一些什么样的事情,那么到现在为止,我觉得你的简历上应该是可以写这件事了,不知道你们敢不敢是哪件事呢,就是。
诶跑哪去了,这件事不知道大家敢不敢写,给大家演示了,反正就是我在项目之中有过调优的实际经,验,定位jvm的这种o m的溢出,这种经验,这边是调优实战经验,可以写了吗,敢敢不敢写,好同学们,听我说。
作为一份简历来说,有的人水平是100,他敢写80哇,太牛了,任何人去面试的,你放心,因为他水平100,问你80,他就写80,大多数人问他就是80的问题,顶多问你90 100的问题好,这个时候我靠。
太牛了,他居然肯定能肯定能拿下这份岗位,这份岗位月薪25000,但是很不幸的是,这哥们本来值3万,知道吧,结果他拿了2万吧,他自己还很美好,水平就2万的水平,60写80 十个减十个,十次面试挂了八次。
这个呢是十次面试成了八次诶,这个是十次面试挂了八次好,最后成了两次,这两次拿到25000来,同学们告诉我一下,你说谁亏了,唉醍醐灌顶对吧,你为什么有的人报名了两天,他就涨了2000块钱。
为什么有的人经过我们批完面批,批完他的简历啊,他就直接涨2000块钱,你现在是不是有那么点感觉了。
好我看刚才有同学说了,说老师不是有十个案例吗,对是有十个a你自己去体会好不好,就别让我在这儿从头到尾的讲给你听了,案例汇总一堆啊,我给你讲个比较好玩儿的吗。
面试官不给面试官不给面试官看,我跟你讲比较好玩的好不好,来看这里,讲一个比较好玩的诶,这好玩的是什么呢。
这是实际当中确实发生过的,而且这家公司叫小米,这家公司有一批城有20c加加的,然后由于呢他们项目转了java,所以他们呢从c过来写java,他们写完java之后产生了频繁的g,产生了内存的溢出。
听懂了吗,那为什么,原因是什么,好你们仔细仔细思考一下,他干了这么一件事儿,他重写了类的finalize,final finalize方法,大家知道那里面有一个方法叫finalize,finalize。
有印象吗,大家知道java程序员都知道那个类,那个方法是不建议你重写它的,对不对,唉结果呢ci成员就把它重写了,第一个我问你第一个问题,第一个问题,为什么c加加乘以r会重写finalize,为什么y。
原因是什么对因为c加加是乘员,他们写惯了手动释放内存,手动释放内存,你要delete掉,要在你的类里面写析构函数,就是那个函数啊,小小小波浪线加一个名字,而他们认为java里面应该有一个函数。
也是析构函数,看到了finalize,欣喜若狂,我靠终于有析构函数了,攻击给它写进去,既然是虚构,我肯定要释放资源,在里面释放各种各样的文件,打开的内容啊,啊什么各种各样锁呀,各种各样的数据库的连接呀。
好全全放到这里头去,接下来你们自己想想看,本来这个finalize呢一个垃圾回收器,回收这个垃圾的时候,他要执行这个方法的,这方法执行的时候本来不费什么时间,结果它里边放了一大堆费时间的东西。
本来的一个对象我要回收的时候一个毫秒,结果他放了这么一堆东西之后呢,十秒钟才能回收一对象,但有点夸张,然后你内存肯定会越来越多,你分配对象速度又比较快,内存很快就占满了,这是它产生溢出的原因。
好不知道大家听清楚没有,这是实际当中有人犯过这种错误的,当然你如果还不知道,你如果还不知道面试官怎么说,你就写一最土的,你说我我有一个同事,你千万别说你自己他写了一个类似的,然后他就不断的往里装装内容。
他不释放,唉,这个可以吧,当然谁写这么土的代码啊,哈哈哈哈,当然我就不说了啊,十个案例你自己挑,自己去挑,都是相对土一些的案例啊,还有十个案例是给vip准备的,我就不说了,o,那么到现在为止呢。
没人问问你们能不called the review吗,called the review,另外一个同事,他比较睡得昏昏沉沉的啊,眼眼迷迷瞪瞪的,code review,没有review过,有什么关系吗。
好,呃其实到现在为止呢,实战部分内容呢,就大体的非常粗的一个流程,我就我就给大家讲完了,呃我们简单的稍微的回顾一下啊,这份文档的内容比较多,我只是挑了其中的比较粗的流程,来讲给大家听的。
但是至少我觉得你到现在为止,应该是有这样的一个收获,第一你弄明白了,原来垃圾会说其实有很多种,第二你调优的时候,一定是针对某种垃圾回收器回回收调优的,第3o o m的问题。
你至少应该知道用什么样的工具去定位它,面试官问到你的时候,你用什么样的说法去说服面试,官好有这方面收获的同学给老师扣一,这个文档会发吗,会的没有问题啊,那我下面讲一点比较难的,我就不讲女的了,好吧。
我讲一点比较难的,这个比较难的问题呢,呃目前面试官问的还不多,但是今天有面试官在场,所以他们可能就会问了,那这个比较难的问题是什么呢,这个比较难的问题是我昨天讲ccm的时候,有同学已经特别感兴趣了。
问了我好几遍了,追问了好几遍,说老师这个c m c m s里面不说cms里面,不是说我的工作线程和我的垃圾回收线程,是同时进行的,对不对啊,三色标记,我的工作线程和垃圾回收线程,是同时进行的。
那么我垃圾回收线程,在回收这个对象的时候,很可能被工作线程,又又把这个对象变成不是垃圾了,那这种情况怎么进行处理,目前也只有美团问到过这个问题,括阿里也没有问到好,如果说到这一点的话。
你能够说的偷偷彻彻详详细细的,那么肯定会,得高分啊,非常高的分啊,当然对不起啊,应该是也问到过,因为他这个问题呢问的不是特别直接,就是关于这类的问题,我给你看一眼啊。
呃其实这一类的问题,这类的问题呢都是比较难的,讲一个最熟悉的来就会说算法,那么你如果你讲三色标记,我去这就牛了啊,你要讲一个最熟悉的,讲一个什么拷贝,那那太简单了,还有一个其实还有一个。
我记得有一个问题是问的什么呢,就是呃,你能不能把cms和g一的这个垃圾回收算法,你你给我,你给我说一下,忘了是哪个公司问的了,就是凡是问到这一类的问题的,都是超难的,还有一个就是这一类比较葛的问题。
某个有病的企业,某个有病的面试官,就说用一句话证明你这个水平很牛,我就教他嘛,我说十种垃圾回收器,所有算法都明白,我靠太牛了,十种垃圾回收器所有算法全明白。
好吧算你狠好,估计除了老师之外,没有人敢这么说,哈哈哈哈好,下面我们讲可以加高分的这样的一个算法,好,大家看这里,嗯就是强软弱虚指针打开错误。
唉呀为了给大家讲清楚,这个专门给大家画了一个动画,动画画起来很难演示,三分钟就演示完了,好首先请大家记住这个名字,这个算法的名称叫做三色标记,好看这里三色标记,三色标记是什么概念,这是我们首先定义啊。
这个三色标记呢,就是当垃圾回收器去标记那些个对象的时,候,他得把那个对象给标出来,哪个是垃圾,哪个不是垃圾啊,这个垃圾这个飞垃圾,这个垃圾这个飞垃圾好,他得干这件事,得识别出来,那么它到底怎么实现的呢。
在尤其是这种并发级别实现,如果是那种不是并发的,说你所有的工作线程你都给我停了啊,一边给我待着去,那就随便标了对吧,每个对象还是怕他找就行了,找出来的全都不是垃圾,没找着的全都是垃圾,这就是最简单的。
但是实际当中现在的这个需求是什么,现在需求是你一边干活儿,我一边标识,那肯定会有标错的情况,这是肯定的,我们再来我们看它实际当中是怎么实现的,这种情况呢叫做三色标记,三色标记是什么概念。
首先第一点先认清楚这个概念,它会把对象在逻辑上分成三种颜色,三种颜色其实对象不是真正的一个颜色,对象全是零一了,它有一个标记位啊,你说零一代表就是黑的啊,一零代表就是灰的,零零代表就是白的等等。
就是干这个使的,那三色标记是什么,一个什么概念的逻辑概念,它分成三种类型的对象,哪哪三种,黑色的,灰色的,白色的,黑白灰三种,黑白灰三种的概念是什么,就是我在找到这个对象了,我找这个对象。
但是呢我还没有识别它,它到底是不是垃圾,我还没有识别它,我们说还没有对这个对象做标记好,这种对象称之为白色对象,好我又找到了一个对象,这个对象呢我已经识别了这个对象了,它不是垃圾,确认它已经不是垃圾了。
而且呢我确认它不是垃圾之后呢,我得顺着这个对象的成员变量去,顺着往下找,但是我还没有进行这一步,我还没有找它的成员变量,到底它是不是垃圾,成员变量指向这些对象到底是不是垃圾,我还没有找到这步,好。
这个叫灰色的,如果我找到一个对象,这个对象我已经确认它不是垃圾,并且它的成员变量我也找完了,这两个变量我也就标出来了,这两个变量找出来了,标完了,是灰色的还是白色的,全都标完了,这种的叫做黑色。
黑色对象叫黑白灰,黑的叫什么,自己标完了,儿子也标完了,这个叫做黑色,灰的叫什么,灰的叫自己标,完了指向的对象还没有标,这个叫灰色,好没有标到的对象叫白色,黑白灰,来理解的同学给老师扣一。
好这叫三色标记,那么假如说我们在整个的整个我们程序,我们g y m的线程,也就是我们垃圾回收线程,在回收的过程是做标记的过程之中,我已经标成了a啊,确实是黑色的了,b是灰色的,他的b的孩子还没有标好。
在这种情况之下,突然之间我们整个应用程序,因为应用程序也是在不断的运行的,它用运行的过程之中呢,他把b指向d的这个引用给消失了,就转成一个什么电视没了,假如发生这样一种情况,b指向d的引用消失,同学们。
你们想一下,注意啊,这个d还没有被标注呢,没,有被标注,同学们,你们这样想一下会不会产生问题,这种情况会不会产生问题,仔细想想,因为这里头相对难一些,全是算法,全是抽象的问题,会产生问题吗。
其实是不会的,唉为什么呢,为什么不会呢,因为这个东西呢叫做floating garbage,咱们的这个垃圾回收啊,它是一轮一轮的,还记得那个可中断垃圾回收吗,没处理吗,哎他是一轮一轮的一轮一轮进行。
我这轮儿标到这儿之后,然后没有把你这个地给你找出来,因为刚才你还连着呢,但是呢下一轮来了之后,我就找不着你这个d了,你这个d就变成垃,圾了我就把你给清了,所以没有关系,这是一个浮动垃圾。
浮动垃圾的意思就是诶这轮没把它给干掉,下一轮再把它给干掉,让你多活一小会儿,所以这个没事儿,这种情况下是没有任何关系的,好刚才这小段听明白了,给老师扣一,就是说他可以他早晚被清掉。
只是早一会儿晚一会儿的问题,有一种问题是什么问题呢,看这种这种就比较麻烦了,这种情况是这样的,你仔细看,假如在被垃圾回收的过程之中,标了a和ba是黑,b是灰,还没有标到d在这个过程之中。
另外我们的工作线程干了一,件事他把b指向d的引用给弄没了,与此同时a有一个引用指向d了,再看一遍,这两个是都是必要的条件啊,b指向的d的已经没了,与此同时a指向d了,看到了吗,这时候会产生什么现象。
来仔细看一眼,同学们,你们想一下a的颜色是什么颜色,a的颜色是黑色,黑色代表什么,黑色代表已经标记完了,那下一轮垃圾回收器在进行的时候,下一轮来的时候,它还会标记这个a下面的成员变量吗,还会标记吗。
不会了,结果这哥们儿就被回收了,知道吧,因为呢,垃圾回收器已经认为,没有任何引用指向性了,因为我不再会去找a下面的成员变量了,与此同时,所有指向你的其他的那些引用也都没了,再看一眼,这就是问题的所在。
只有在这种情况下好,它会产生问题,它就会产生漏标,漏标就会产生内存泄漏,b指向d的应用没了,同时增,同时a指向d的引用增加了一个,b b没关系啊,b是灰色的,如果那就b没关系啊,b它是不是灰色的吗。
灰色的,我下一次来的时候,还是要去找他的孩子们的,对不对,他的孩子没有必要呢,结果他现在孩子这个孩子已经没了,他可能有别的孩子,如果有的话,那就直接去找,如果没有的话,就把它变成黑色了。
这哥们儿就成黑了,黑的就可以直接回就可就就是弄完了,已经结束了,好了,好这个过程大家听明白了,对不对,注意还没完啊,因为这个这个里边算法特别深,我得一步一步确认,你们都明白了。
就是说灰的纸箱白的也就没了,黑的增加了一个,由于黑的已经不再被扫描他的孩子,所以这个地不会被扫描到了,再出问题了,ok我们继续可以继续同学给老师扣一,为何a添加了指向d。
那a里面有个成员变量a点小a等于d,这不很正常吗,你写这么一个代码不就完了吗,正好执行这段代码吗,这种问题还卡嗯,不对啊,喝口水,为什么执行力因为业务逻辑变了,业务逻辑在运行,你自己写代码的时候。
会不会写你自己写代码的时候,会不会写这种代码,a。b等于new什么,或者等于某list里面get什么,会不会写,好看这里,我们现在要解决这个问题,要解决这个问题怎么办,解决这个问题有两种方案。
认真听这两种方案,好第一种方案,第一种方案就是c m s的解决方案,c盘解决方案就是叫他的名字叫什么呢,叫做incremental update,所以听我说,三色标记是一种中性词,三色标记会产生问题。
cms,对于三次标题解决问题的方案,叫做incremental update,好什么意思,看他是怎么解决的,他是这么来干的,b指向d的,没了,a指向d的诞生了,好这个时候干了一件什么事呢。
他就把a标成灰色,就干这么一件事儿,很简单,那么下一轮我们的垃圾回收器,再来下一轮的时候,它会扫灰色的,因为灰色的还没他的孩子们还没扫完呢,所以他肯定会把灰色的都扫一遍,就这么简单搞定了,非常直观好。
这就是cms,对于三色标记算法的一个改进方案啊,一个更正方案叫做incremental update,搞定了,那他是怎么让黑色变成灰色,我的妈呀,你想气死我是吗。
系列 1:P19:马士兵深入浅出java虚拟机⑨手动实战 - 马士兵官方号 - BV1mu411r78p
就问这种特别触及问题的,我只能认为你的基础确实特别差,我就稍微照顾照顾你,首先黑白灰是一个逻辑裸机上的概念,并不是他那个你打开电脑,它里边真的有黑色对象,比如说它有一个标志位。
这个标志位写的零一就代表黑色,这个标志位写的一零就代表灰色,写的零零就代表白色,到这里能get到吧,怎么把黑色,把黑色变成白色,你就把零一改成一零不就完了吗,气死我,好啊,朋友也不能回答。
因为所有人都是从小白过来的啊,刚才那个小白你也不用怕老师怼了,越被老师怼的人成长越快,所以怼两下又怎么了,不就丢点人吗,谁也不认识他,对不对,那个人叫什么,你们还能看,你们还能找得出来吗。
你就找不出来人名了,都所以他丢人就丢了,也就丢到了这个小小的直播间,这有什么不能承受的,别问了,再问一遍,老师生气了,受不了了,要炸了,黑色的不会再扫描,因为黑色已经扫描过了,不是所有黑色的标记成灰色。
只有新的黑色的诞生了,指向了新的对象,有新的对象指向的时候,这个时候说明它产生了新的引用,这个黑色的就得变成灰色的了,灰色的在下一轮的时候要重新扫描,黑色的已经被扫描过了,ok看这里,这怎么完成的。
它叫做right barrier,叫写屏障,咱们先把它略过吧,那个真的有点稍难了啊,我们先把主干讲清楚,注意看incremental,实际上它有一个非常隐蔽的问题,incremental update。
由于这个方案特别简单,但实际上这个方案呢会有特别隐蔽的问题,看你能不能听听得懂,认真听啊,在并发标记的时候依然会产生漏标,what它把它变成灰色的了,居然还会产生漏标,原因是什么呢。
变成黑色的下轮就不再不再扫描了,变成灰色的下轮会继续扫描啊,我看这里为什么会产生呢,a里面,如果这时候a有两个成员变量,我分别用一和二来指代它,这个时候呢一这个成员变量指向了d。
大家都知道a要变成灰色好,a要变成规则,这个比较简单,但这个时候啊,你假如有另外一个线程,这个线程是什么呢,哎有人来就会说线程垃圾回收线程在这轮是并发的,会有好多个垃圾回收线程。
那么这个垃圾回收线程干了一件什么事呢,他正在标记这个,a呢这标题这个a标记到哪,标到什么程度呢,已经把这个一给标完了,注意它已经标完了的情况,已经标完了,然后正标那个属性二呢这个属性二指向某一个对象。
正在标这个在这个过程之中,在这个过程之中,注意一已经标完了,接下来标完了之后,又指向了这个白对象,被一个线程给标,把这个一标完了,标完了之后又指向了一个白对象。
就是另外一个另外一个线程把属性一又执行了白色对象,这个线程已经把a的属性一给标完了,哎但是呢另外一个线程又把这个一给指向了一个白色对象,然后呢另外一个线程把a标成灰色,那就会出现成标成灰色,为什么。
因为它指向白色对象了嘛,所以把它变成灰色,然后这个县城原来标这个现状,他继续,因为他标完一了,他马上又标完二了,把二标完了之后,唉又把它变成黑色了,因为他这个县城认为一个对象已经标完了,我把一也标完了。
我我把二也标完了,这个线程肯定会认为这哥们儿已经是变成黑的了,对不对,他实际上不知道,在他把一标完的这个过程之中,另外的这个一指向了一个白的,然后呢它已经变灰了。
结果呢他二话不说又把它给变成变回是纯黑色了,一个二什么成员变量,好这段没听懂就算了,好不好,有点绕,对于有经验的小伙能听懂,对于没经验小伙呢都走不走,没关系啊,呃这种问题也没人问,听懂了吗。
没有面试官问,放心啊,没有人面试官问这个面试官问他主要问什么问题,就说incremental update,为什么cm里面用,为什么g一里面不用这种解决方案了,原因就在于这儿。
因为它依然会产生漏标的问题,而在cms,cm呢他自己也知道它会产生楼标的问题,所以在cm s的最后的remark阶段,在这个阶段应该得从头把那个什么的都扫描一遍,当然由于它进行了一些个清理了。
所以这个扫描的过程呢没那么复杂啊,比原来那个简单很多好,所以他的s t w时间就没有那么长,但是如果你的内存越来越大的时候,这个阶段它依然时间会慢慢的变得非常长。
所以cms incremental update这个解决方案已经被close了,这个解决方案不再存在价值了,cms也在1。9之后被踢出去了,cm这个东西已经过时了,我这么直接讲,大家能理,解了吧,那好。
啊下面我们来看g一的解决方案,还讲了太难了,就讲到这儿吧,要不然好不好,讲完级我们就不讲,不讲那个cdc了啊,cdc有十十个阶段,那个太难了,要讲完,咱今天晚上就别睡觉了啊,好看这里啊。
积累解决方案是什么,积极的解决方案叫做i s a t b,所以请大家记住几个名词,你跟面试官聊天,名词越多,面试官越蒙,三色标记,incremental update s t b。
snapshot at the beginning,snapshot,快照at the beginning,刚开始的时候来个快照,这个呢呃这个这个这个解决方案相对就简也也比较简单,他是怎么干的呢。
他干脆就没有给a和d,就没没没在这种a指向d的这个引用上啊,这个指针上没在这上面考虑问题,他考,虑的是哪个呢,他考虑的是b指向地消失的这部分,这个指针b指向d消失了。
就是说有可能你指向d的这个东西再也不会被扫描掉了,我只要保证这个地被扫描到就可以,所以呢它采用了一种解决简单的解决方案,这种简单的解决方案是什么呢,是这个,其实指的是做个快照,当b和d消失的时候。
把这个指针注意是把这个指针给保存一下,保存到哪里去,能保存到一个站里面去,我不管你这个d有没有被别人指向,没有关系,我只需要在下次扫描的时候,我能扫描到你这个d就行了,我看你这个d有没有被别人。
有没有被别人指向,你不就行了吗,好了,这个时候呢就把这个指针放到里面去,下一轮扫描的时候呢,就要看这个里面有没有被放进去的指针呀,那么如果有的话,把它拿出来,把这个对象拿出来之后重新扫描一下。
看看这个对象有没有人指向他,如果没有人指向他,他就是垃圾了,如果有人指向他好,他就还不是垃圾,ok这个叫snapshot at the beginning,当然这里面更深的一些个理论呢就非常多了。
为什么这一会采用这种方案,因为这一点有概念叫remember set,remember that,配合这种方式配合起来特别方便,由于而且你原来有个快照,你有这个快照的时候。
你可以用那个快照里面最根儿上那些个那那些个,那那那些个只扫描对头上那几个就可以了,所以它这个效率特别高,remember set是另外一个概念,我要给你讲remember set,还得给你讲,card。
还得给你讲card table没法讲啊,这这到这吧好吧,不讲没,这真没完了,怎么被引用,扫描到自己就被引用了,这就是remember that干的事儿,ok但是我告诉你,在不久的将来。
所有关系这些个问题全都没了,不用了,所以有的时候我讲那些呢也没什么意思,但是不管怎么样,他还能撑几年好不好,所以听不懂也就听不懂了,过去也就过去了,只要你能坚持过这几年去,因为什么呢。
因为在z d c里面,它采用了更加牛叉的解决方案,这种牛叉的解决方案叫做color pointers,叫颜色指针,这个颜色指针说到这儿,我就简单给大家入个小门,颜色指针是什么概念。
其实大家知道一个java指针,64位,在16四六十四个比特里头,他把这个指针里边的内容做了一个划分,划分怎么划分的呢,真正的只有42位的指针是指向java对象的,有18位是没有用的。
42+18已经60好,其中的四位拿出来做一个状态,区分状态区分什么意思,就是当我引用到这个指针的时候,我要检查这思维的状态,看看这四位是在哪种状态之下,我要做相应的操作。
哎你比如说你是在正在移动的过程之中,你垃圾回收器要移动,你移动的过程之中,我现在也用到你了,我去检查你这个指针,发现你在移动的过程之中,ok那我就稍微等一下,等你移动完了之后,我再用你。
我再用你里边的内容,唉,如果说我现在引用的这个指针,他现在状的没,有多没有动,没有关系,我我就直接拿过来用,好了,这个叫做颜色指针,当然这里面涉及的概念那就更多了。
它会涉及到操作系统的关于内存映射的概念,再说啊咱们再说嗯,嗯有一个非常简单的面试题,叫做为什么z dc管理4t的内存不是4g是四个t,为什么呀,为什么他是四个t,看到二的42次方等于四个t o。
怎么叫移动中,怎么叫移动中,你想象这个指针它指向一个java对象,这个对象还记得我们的region吗,回收它的时候怎么回收啊,这个对象要被挪到另外一个region里拷贝算法吗。
我们记忘了g一分成一个一个的region,cdc也是分成一个一个的region对象存在region里面,回收的时候,按照这个region来回收,怎么会说啊。
把这个活着的对象拷贝到另外一个region里面去,整个region清掉就可以了,拷贝的过程要不要移动对象啊,那这个指针本来指向这里的,现在要把它指向这里了,你这个指针里面要不要动啊,做这个标志位。
那我的程序要用到这个指针啊,我就去读一下这个标志位,哥们儿,你现在在什么状态呀,正在移动中,哎呀正在移动中,那我得小心点儿,等你移动完了之后再用,好来该到同学老师扣一有那么难吗,你自己看就会很难。
老师讲给你听,就没那么难,cdc会指人家说吗,不会他都64位全用上了,你让他怎么压缩大哥4t怎么理解二的42次方啊,他用42位来代表一个真正的对象的地址,二的42次方不就是四个t吗。
老师可以推荐讲的好的g一和cdc算法的文章吗,你自己去找我跟你讲,我找遍了,没有讲,特别好的老师,这讲的还不够好,中国内的讲cdc的,凡是上面的文章你自己去翻啊,基本上没有,现在还没有讲的。
好了今天到这了,不多说了,现在已经9。40介绍我们的课程好吧,嗯今天给大家讲的内容呢是老师讲完第一版的课程中的一小部分,那么这个是哪部分呢,就是这部分,就这m调优案例是两款指导啊,这部分呃,当然了。
我是调了其中的一部分了,本来我是从最根本的概念开始讲,一直讲到最后才是jz和调优呃,我只不过呢把其中的一些个细节全给大家先略过来,教了大家的梗概性的东西呃,主要是给大家讲了调优实战的这部分啊。
就是为什么会频繁,dc到底怎么样进行设定,那么云玩dc怎么办啊等等啊,交了一些时间性的东西,上线之前怎么规划,像这一类的还没有给大家讲过,这是整个课程中的一小部分了,诶哪去了。
当然这里面呢我们课程内容比较多,先给大家简单介绍介绍这个课程,这个课程呢主要是现在呢被我们搞成了一个超级牛叉的一个巨无霸,就是我们课课程现在成长为不知不觉之中成长为巨无霸了。
这为什么我呃少给大家谈一下这个历程,就是我们现在提供什么课程呢,提供现在就是a是java后端工程师,这个是什么呢,是零基础的课程,就是反正基础稍差的,你从a开始学好吧,跟着我赵云山老师。
跟着林老师从a开始学,记住参加工作的有ss sm基础的a是什么,a a就是那个那个,那个线下的时候那个花1万多块钱,15000 6000是吧,给你教教你的东西,就是我们的a课程嗯。
然后呢有sr那么基础的,我们现在推荐的是另外一个格叫做b加c,b加c是什么,b是互联网架构师,c是单数据加构式,就是你刚才看到的这个课程,就这节课这节课呢我们就当从零到年薪百万。
一步一步对标阿里p7 的互联网大数据的声量教师,这些课呢也是我们独创的呃,这个课程呢其实前前后后经历了很多很多的发展,我简单跟大家交代一下,就这个发展呢还是比较比较那啥的,就是比比比较比较各色的呃。
我们的以前是一直做线下培训的,大家也知道啊,呃作为转到线上来之后呢,就一批老师成立了线上的那个公司啊,公司那叫马士兵教育,就是以我名字为命名好,呃,其实除了我之外呢是有一大堆的公司啊。
sorry一大堆一,大堆的我们的呃老师把这个这些老师呢我就不一一的给大家做介绍了,都是在线下很有经验的老师,除了现象很有经验的老师之外呢,其实啊一会儿我可以请这位大哥给大家见个面啊,这是我们特别牛叉的。
也是我的清华的小师弟,是周老师,他是讲那个大数据这方面的,呃,除了我们自己的这种在线下讲了很多年的这种老师之外呢,还有一些呢是在这种企业一线的老师,这个也是很宝贵的,呃。
为什么我们能请到b a t j学校的老师,就是就是你你随便找个培训机构,你说那个b a,t j的老师啊,全都聚齐了,不好意思,你随便找没有,只有这儿有别提高的老师在这全剧情了呃,腾讯的罗老师。
他是原来腾讯新闻的ai的主管,阿里的那个黄老师呃,是原阿里的常老师,是现在在阿里工作的,那么讲我们数据大数据项目的数据中台项目呢,是原来的阿里的中台死结,是一个p 10水平的。
百度的赵老师来跟我们聊推荐系统的这个京东的齐老师呢,我们讲docker cbatis,以及呢现在这个秒杀项目秒杀相比也是在京东落落地的,可是很不幸的是呢,齐老师现在就被隔离了啊,不然的话。
应该已经已经开讲了嗯,就是我在外面呢请了一大堆的老师,因为学生还是比较多的,在各种一线大厂都有,所以找到他们呢并不难,嗯,有一些也不是我学生啦,就是推荐过来的等等啊,就这样呢。
我们就成立了这么一个一大堆的老师,大概有十几位啊,这些老师的水平,清华两位老师,一位伟大的博士后,右边这哥们呢是长去的cpu,他马上要开始了,下周就开始了呃,网游后端的项目的第二版就开始了。
第一版还是广受欢迎的,这主要讲net的这个呃,海宁老师那个原来呢他是想去那边做游戏的,有好几款那个月流水过千万的游戏就是出自于他的手,刚起元帅,我不知道大家听说过没有,还有一个叫什么什么三国志来着。
我忘了啊,哎这位小姐姐呢也是特别牛的,这位小姐姐是留学北美的博士,他主要教他们什么呢,叫他们英语课,后面我和他一块儿教英语,教点英语课,主要因为好多人的英语实在太烂了,有点看不过去了,稍微教一点好呃。
然后呢我们这些人呢大概在2019年的中间,6月份等到腾讯课堂,到腾讯课堂之后呢,大概半年吧,到去年年底的时候,我们已经是在腾讯课堂的课程到了第一名了,我们已经做到第一了,也就用了半年半年左右。
当时是当腾讯课堂的时候是这样的,腾讯课堂呢有很多的已经有很多的人在讲课了,这个他们讲的课呢多数都是什么什么样子的,都是一个一个的知识点,就是类,似于什么呢,类似于张图里面的一个一个的知识点啊。
但我的知识点还是能点进去的,你自己看就行了,对这个对这个有兴趣的,呃一个一个知识点,后来说我们干脆,那那我们也就先找超凡,因为线上到底怎么讲啊,现在也当时也没摸清楚行,那就找超凡,那我们讲知识点。
后来我们就提供了一个第一版的课程,这个课程呢是一个八个月左右的一个知识点的课,然后呢多数人呢都是说每周三次课啊,每次两小时一共讲八个月啊,多数的机构都是这样子,我们当时也,都是这样子。
但是讲着讲着我就发现,因为我个人比较喜欢讲课,周老师比较喜欢讲课,讲着讲着我就发现我课的时间不够用了,我想讲的特别深,比方说我真的想给你讲到cdc的特别详细的算法,我给你讲到这些,你不给我时间。
我是肯定讲不到的,后来说算了,我们扩课程,我们第一次扩展直接就把八个月干到半年到一一,1年半到2年的,我是说按照每周三次课来讲,扩展完这个之后呢,有小伙伴当然很满意了,因为他们当初交钱是按这个来交的。
交完之后呢,我们就免费给扩成这个样子了,他们当然很爽了,但是有的小伙伴呢还是不满意,小伙伴说老师我没有项目经验,想跳槽,从传统行业跳互联网还是跳不了咋办,杨老师,后来老师说,那行吧。
我给你找那个一线的做项目的人来带你做项目好,扩了八个项目,又是免费,就给大家扣了这八个项目,这八个项目呢我觉得我就不一一的给你打开了那个,都是呃就是实际当中运行了的啊,上了线的那样的项目。
你写在简历里头绝对不会丢人,不是那种demo的项目的东西,多人在线即时对战的游戏服务器,吃鸡的后台,大体的架构就是这样的,告诉你和将于这两个呢是只针对于水平稍差一些的,那么商城大家都有。
我们就加一个像网约车项目,完车项目呢是阿里的常老师,他现在已经开始讲第三版了。
好这个项目呢也是我们一个挺好玩的项目,这项目什么项目呢。
这项目什么项目,这个项目是原来啊那个常老师进阿里的时候,对他帮助非常大的一个项目,长沙原来呢也是一个不是特别有名的一个二线互联网的,他在30多岁才进到进到了阿里,进阿里的时候呢,这个项目帮了很大的忙。
然后呢他现在把这个项目分享出来,那么这个项目主要讲什么呢,这个项目其实主要讲分布式微服务的,就是分布式微服务到底怎么落地,他学一个spring cloud,今,天今天学点儿注册,明天学点儿监控。
后天学点儿限流好,总是不会联系,到时候我实际当中到底怎么落地的呀,好这样一个项目让你来进行落地的这样一个项目,好项目的结构图给一给大家看了所有代码,二三十个人写完的代码全都给到你,你不用每个代码都敲完。
读懂就ok了,呃另外讲东西的时候讲到什么程度呢,源码原理,源码原理源码就是基本上所有的点我们都会讲到源码,凡是不嫌我们课程深的,不嫌我们课程宽的,找我们来学,除此之外呢,我们又还有一个项目。
就是这个对于,咱们结构师来说啊,java这边的结构师还有项目就是一级流量,这个项目一流量的项目解决什么问题呢,有什么很大一项目,其实目的呢就是解决你架构师这方向的理论和实践的问题。
就这个项目学校的目标是什么,京东阿里淘宝,天猫12306拼多多,他们这些架构到底怎么玩的一个项目,全让你理解,就是很很很有价值的一个项目,很多那个外面的有一些搞教学的这一个项目就卖你好多好多钱啊。
cp定理到资源的隔离怎么玩,副业服务的限流怎么玩,系统到底怎么样进行扩容和,拆分各种各样的降级方式,分布式事务怎么去落落地,各种各样的网关该怎么设计,客户端的缓存,浏览器的缓存,enginx缓存。
lue rusty rex访问,怎么样去进行register缓存,就多级的缓存该怎么样进行来实践,好高可用,怎么样进行落地,使用什么方式给你编出来好部署到阿里云上,怎么进行部署,好了,这是这个项目。
当然由于我们这是双料架构师,为什么要双料,现在玩儿架构师的,你说一点大数据的知识不懂,太开玩笑了,就没什么竞争力了,还有大数据相关的三个项目推荐系统,这就不说了,但就是说这部分的呃难度在于什么地方呢。
流式计算flink中台项目是阿里p 10的那个中台四节来带大家落地的,做一个中台的落地项目啊,这个秒杀系统呢咱们暂时先等等啊,等等等一下那个什么的呃,齐老师呢,这个这个出来了,从闭关闭关之后出来了。
所以最后就变成什么了呢,最后我们这个整个的课程就变成了一个巨无霸,这个人怎么叫巨无霸了呢,嗯,从八个月开始到18~24个月,再加了八九个项目,就是整个课程就变成了大概是1500个学时左右。
我们从来以前没有算过啊,突然一算,我靠居然居然到1500个学时了,你们知道大多数的人,如果是八个月,每每每周三次,每次两小时,你自己算一下,他们的学识是200个,200个不到192吧。
我们现在学时是多少,1500个,所以这就诞生了一个特别巨大的问题,我到底该怎么教你,我不真的不能让你从1500个学时从零,你一直学完1500个学时才能让你干,点事儿,这个我肯定是不能让你这么来学的。
总结了一下,我们叫它pp教学法,pp教学法的概念叫做project driven,项目驱动,就是我用一一个项目来驱动着,这里面到底有多少,用到了多少个支点啊,有些知识点你掌握住了,那就暂时先放一边。
有些知识点没掌握住后,优先去学这些知识点,一边学项目,一边学知识点,一边学项,目一边学知识点好,大多数的人在3~6个月左右的时候,ok每月至少涨5000好吗,我说的是至少至少涨5000唉。
本来我是说我们原来那个去年培训的学生啊,就是多数人每个人真的涨5000块钱,最少的,我们所有的案例都可以做背调的娘的,今天有一个学生就告诉我啊,我刚开始跟大家说了,说老师我工作了,我说涨了多少钱啊。
涨了2000,破了我们的金身,结果后来我查了一下,今天入职了,现在才多少,17k唉,原来原原原来挣多少,原来挣15k,原来挣15k那个我说他涨了2000,太过分了啊,直接把我们牌子给砸了,后来查了一下。
也是3月16号入的血。
系列 1:P2:JVM瞬间涨薪3K的操作:2.三色标记-并发垃圾回收算法 - 马士兵官方号 - BV1mu411r78p
一个对象产生,它首先是要进入到伊甸园区域的,然后呢经过一次垃圾回收,他没有被回收掉,好进入survivor 1,再经过一次垃圾回收,又没有回收掉,进进入svip 2,再经过垃圾回收,没有回收掉。
又回到swim 1,如果还没回收掉,又回到svip 2,那么当它长到一定年龄之后,进入老年代,这个过程大家能看懂吧,嗯,看明白老师扣个一来嗯,可以介绍一下复制年龄,复制年龄不同的垃圾回收器。
它的年龄默认值是不一样的,你可以设啊,这个年龄没关系的,你可以呃,jvm调优的时候可以对它进行调整,这个随你随你来定好吧,好了呃,当然还有一个更复杂的动画,我在这就不演示了。
主要跟我们讲今天讲的主题呢关系并不大,这里面主要讲了栈上分配啊,形成本地分配的内容,好呃我们回到呃垃圾回收器,那么通过这来看的话呢,我们的不同的垃圾回收器,它工作在不同的分带上。
那么在这个分带你看上去比较复杂,但是我告诉你啊,其实这个分带的垃圾回收器呢,是比较简单的,我呢从这个最古老的垃圾回收期serial开始,然后给你介绍,整个分带的这六种垃圾回收器啊,很快就能给你介绍完。
比较简单,你往这儿看好,大家听我说这个拉丁回收器啊,你看他的名字叫最早的啊,最古老的,从一点开始就有的就是它叫serial,这个呢叫serial old,好,这是什么意思呢,看这里。
那么这个我是原封不动的,摘自oracle所出的官方文档,siri到底是什么东西,他说i stop the world coping collector。
which uses a single gic threat,这是什么意思,你认真听就行了,他说stop the world,stop the world,简称叫s t w这词你给我记住。
stop the world,世界停止,把这词给我记住啊,这词什么意思,简称s t w,就是说当我垃圾收回收期开始干活的时候,所有的业务线程全都停止,这是你,这是你女朋友,这是你男朋友。
你们仨在房间里扔各种各样的小线团儿,这个叫业务逻辑,叫业务线程好,当你扔了一大堆的小线团,触发了我垃圾回收器开始工,作的时候你的妈妈进来来,你们仨给我停到墙角,给我站着去。
这时候叫stop the world,业务线程全部停止,垃圾回收器开始干活,把这些小线头帮你整理一遍,从你根儿上开始给你捋捋捋捋,捋到的所有的小球球全部有用,全部没有捋到的,全部帮你清掉空间。
又被重新的清理了一遍,你们仨就可以继续玩了啊,继续造你的小人儿,ok继续产生你的新对象好吧,在伊甸园区好,当又过了一段时间之后,又又满了又满了,怎么办,好了停止你妈妈又进来停止,该我干活。
ok这个呢就叫做stop the world,好了,这是我,们整个java程序所产生卡顿的巨大原因,就是有的时候你这条程序跑一段时间之后,你发现诶他很卡,跟那那个嘎吱嘎吱响,然后跟他做运算,它在干嘛呢。
大量的垃圾回收过程呃,这个呢对于网站的影响,就是有的时候呢,这个网站呢,他的对于用户的反馈不是很友好啊,你点了一个按钮之后,等半天它才有反馈好了,这东西呢叫做卡顿,ok同学们听我说。
这个s d w的时间是我们调优的,特别关键的一点,就是大多数的人所谓的对于jvm调优,它是不关注吞吐量的,它往往关注的就是s t w的时间,你一定要短,一定要及时的给我的用户做一个反馈。
这块大家能理解吧,唉能理解黑老师课文一来,这是s t w的概念,手机的垃圾回收世界原理嘛差不多类似吧,嗯这糟糕的例子,what这么形象的例子还糟糕好,大家看这里啊。
他说的也serve the world coping collector啊,使用的是那个拷贝算法是吧,which is uses a single dies thread,这块也比较关键。
就是它是使用单线程,简单说就一个人来帮你做清理呃,这个所以呢当你看这张图的时候啊,这张图呢,凡是你看到的这两个垃圾回收器,之间有连线的,看到了吧,都是互相之间可以配合使用的啊。
serial跟c m pin和serial old都可以,但是啊真正实际当中配对的时候,往往就是上下配对,就是这样的serial pico呃,old,那么parallel它配parallel old。
那么p6 呢p cms就这三种配对,很少有其他互相交叉配的好吧,这三种配对最古老的就是他,他刚才你也看到了,它是a serial吗,serial单线程的,这是最古老的,因为那会儿的内存啊特别小啊。
就跟你说你们家这房子十个平方,你妈妈进来三条,这两扫帚就基本上把它给清理完了,所以这个s t w的时间不会很长,但是随着你们家家庭条件变得越来越好,现在已经变成了200个平方了。
内存已经变成好好几百兆了,他一个人还能忙得过来吗,一个人忙不过来,那这时候怎么办,呀你拿大腿想想,无非就是多加几个县城是吧,同学们好了,后面就是多加几个线程的概念,这个就叫做parallel啊。
叫并行的,那么这个呃算法呢叫parallel scavenge,它说of the world coping collector,依然是copy算法,which uses multiple,就是多线程的。
但是我想问你啊,这个线程数量能不能无限制的增增加下去,垃圾回收的线程能不能无限制的往下增加,啊,你们家现在已经变成特别特别大了,说我能不能把爸爸妈妈,爷爷奶奶姥姥爷,全村的人一块儿过来。
所有人上就能够效率能提升吗,不行未必,因为大家学过底层原理的,应该都知道呃,线程之间呢是有切换的概念的,你的线程数量越多,那么需要切换的时间,需要切换所占用的资源就越多。
它不是说你不是一个线性增长的概念是吧,所以这个线程不能无限制的增,这个增加下去啊,这是不行的呃,在你最开始有个几十兆几百兆的时候,这个多线程的p p s p o,这个parallel的方式是可以接受的。
但是如果你们家现在是一个天安门广场,这么大个儿,现在你们家那是一天安门广场的大个儿啊,好几万个平方,你你请全村人来也没用,它的效率依然很低,那这个s t w的时间依然是超级的长,听懂了吧,那好嗯。
前面我讲的这两种啊,实际上都比较简单,单线程的多线程的就这么简单啊,单线程工作的年轻代,单线程工作的老年代,单线程多线程工作的年轻代,多线程工作老年代好,大家听我说,虽然说他看上去比较简单。
但是在你们实际当中生产环境里面,我告诉你jdk一点八默认的就这哥俩,我们简称它,ps加po默认就这哥俩1。8默认,好听我说呃,我不知道有多少同学,现在呢已经是超越1。8了,在生产环境之中超越1。8的。
有没有有的话扣扣个一,我认识一下,old的区不是老不是不是拷贝斯11版本,你们生产环境之中,这也可以,15了,都11了,哦,不错,ps可比对生产环境用的11,11是收费的呀,大哥家里集团11是收费的。
你们知道吗,1。8我们还是一点吧,对现在一点半应该是最多的,1。6有点狠了,对这这还有还有还有一点还有1。6的啊,有点意思,open dk 11哦,ok好的嗯,open jdk 11这个就可以理解了。
用的不是oracle的那个一只板,ok呃,所以呢现在啊对于这边的调优的人来说,呃,如果是1。8p s加p o,如果不够用了啊,我告诉你第一步的调优会回头,我慢慢跟你说啊。
因为呢呃后面我们要讲的这个g one,就是他,这哥哥这哥哥呢现在是1。7就有,但是不太完善,但是我告诉你啊,1。8,如果当你发现你的p s加p o,不管事儿的时候,当然你可以尝试。
这哥俩也可以直接切到g one,大家听明白了吧,而到1。9之后呢,默认就是g one,ok那么当你到达呃11应该z dc就有了啊,呃当然这个ip我们就不管不管它了,它是一个测试用的,ok一点点说呃。
我们刚才说过说这个单线程不够了,用多线程,多线程如果也不够了,这个卡顿的时间会非常的长,我该怎么办,ok我告诉你,现在呃牛逼的牛逼的哥们儿开始出现,这个牛逼的哥们儿呢,就是他,好了这个牛逼的哥们儿。
就是他,当然它的全称呢叫cms全称,整个英文的全称叫什么呢,叫这个名字啊,在这儿看它叫做a concurrent markk,刚才我们讲的是叫做什么叫parallel,还记得吧。
叫并行叫parallel啊,它叫并行啊,这个叫什么叫并发,并行和并发的区别到底到底在哪里呢,好听我说,我们只需要解释一件事情就可以了,就是当你看到我们的垃圾回收线程,和我们的正在工作的这个线程。
同时开始运行的时候,ok了,这个就叫并发,从cms往后全是并发操作,同学们,我们琢磨一下,就是我们产生卡顿的最根本的原因是什么,不就是说当我们我需要停止,我们整个业务线程,我才能进行垃圾回收,对不对。
但是如果说我垃圾回收呃,我业务线程在运行的时候啊,我不需要停止,我的业务线程不需要停止,不需要停止,我同时就能进行垃圾回收,简单说呢,就是你们哥仨在里边儿扔小线团儿玩儿,玩儿的时候呢,爸爸妈妈一块进来。
然后呢帮你直接帮你清理这些小箭头,你一边玩我一边清,一边玩,我一边清,同学们琢磨琢磨,当我的新的请求进来的时候,我还需要停止吗,其实我不需要,为什么,因为我的业务线程一直在运行呢,对不对,好了。
这个呢就叫做并发,从cms往后全是并发,当然呃关于并发概念,我就讲到这儿,这个比较简单,这个大家都应该应该应该能听懂啊,什么是并发的概念,但是问题就在于,同学们,你们好好想想。
这里面会产生很多很多的麻烦事,我不知道大家发现没有,你现在闭上眼睛,想象一个空间,你和你女朋友两个人在里面扔小仙团玩啊,你要带带你男朋友带不带随你,然后呢你们一边扔,注意这些小线团之间的。
互相之间呢会产生各种各样的关联,你只想我,我只想你,你连着我连着你,我连着你的断开了啊,我连着你的断开了,又连上了等等,产生各种各样的关联,那在这个产生关联的过程之中,居然旁边有人呢。
能帮你把这些小线条给你整理出来,好好想象一下这个过程乱不乱,需不需要把这个算法给整得特别明白,刚清理完又扔了,哈哈,小线头是啥,小线头就是一个一个的对象了,比方说你new了一个对象,就产生一个小线团。
这个对象呢,又它有一个属性指向了另外一个对象,哎那又是又是一个小线团,好这个过程比较复杂,但是我们细心细心细心下来啊,我们来分析它会产生哪些问题,我们好好琢磨一下,同学们。
你们想想看他们会产生什么样的问题呢,非常有可能是产生这样的问题,你们好好想一下,我顺着我刚刚呃我嘴跟上这个对象啊,这个mamain方法里面那个对象就是我自己,我女朋友,我男朋友好。
然后呢我找到这个对象了,这哥们儿不是垃圾,就是我标记他一下,这哥们儿不是垃圾诶,我又找一个哎,这哥们儿也不是垃圾,我标记他一下,但是呢由于我的业务线程不停在运行,也许我把它标记成为不是垃圾。
我已经标记不是垃圾了,但是我下一步业务线程呢,直接把这根线给断了,它就又变成垃圾了,想一下是不是会产生这个,这块大家能不能理解对,刚刚标记完又没引用了,同学们认真听,其实关于在大厂里面啊。
关于问的这些个所有的关于jvm的算法,就是jvm的问题,像那些个什么问你参数的呀,问你实际当中的场景的呀,那些都比较简单,我今天给大家讲的呢,是整个问题留到最难的部分,嗯,应该说是非常难的部分啊。
但是呃关于这块的话呢,呃你跟着老师好好听啊。
我后面用动画给你演示,你一定是能够把它消化掉的,呃现在呢,这是咱们21年左右,从20年开始到21年,遇到的一些新的问题啊,这是关于jvm的一系列的问题,呃,什么时候引发for dc最熟悉的就会说算法。
你不能说那个拷贝算法是吧,那个太简单了啊,呃怎么判断内存的泄漏是吧,讲一下cms的流程,g one的region不是连续的,只见有可达的引用,回收一个另一个怎么怎么处理啊等等等等。
我告诉你,这些个拳头,今天给我讲的这个内容息息相关,我们再回顾一下刚才的比较复杂的问题。
好同学们听我说,我把这块清掉,用于画图,好我们假设这个篮筐就是你们家这块空间,好在这块空间里面呢,你你女朋友,你男朋友就是我们may方法里面最根儿上,这些对象不断的扔小线团,扔小线团,扔小线团。
new对象,这个对象的属性啊,这个对象的成员变量又指向另外一个对象,这个对象成员变量又指向另外一个对象,这个大家能理解,对不对,好现在呢我的垃圾回收线程开始工作,这个是我的垃圾回收线程。
他在顺着根儿上往下捋,注意啊,县城这玩意儿是你运行一会儿,我运行一会儿,你运行一会儿,我运行一会儿,或者说我垃,圾回收线程呢在这颗cpu里运行,你的业务线程在另外一颗cpu里运行,也就意味着。
我这两个线程都可能去访问同一个对象,好我刚才讲的这段儿能跟上那老师口译来,我再说一遍,我呢在这里是两个县城,一个是业务线程,一个是垃圾回收线程,是可以访问同一个对象的,这是没有问题的。
好作为垃圾回收线程来说,它是这么工作的,它是有一个垃圾回收线程,然后睡在根上,开始往下捋捋捋捋,捋到这里了,注意它有可能就暂停回去了,放到等待队列里等着了,什么时候当他回来的时候,他会,从这里继续往下。
它不会从根儿上从头开始,那么大家你想象一下,当我们有一个垃圾回收线程,把这个标记为有用了是吧,这已经标记为有用了啊,这哥们儿有用,因为从根儿上捋捋捋到这儿了,但是轮到业务线程运行的时候。
我完全可以把这部分给给干掉的,有同学以前啊,他不理解说为什么这部分能干掉,比方说这个对象叫a,这个对象叫b那原来是这样的,a里面有个成员变量,比方说a点,它有一个成员变量叫小m等于b,这是没问题的。
对不对,那好把它干掉,怎么干掉a点小m等,于空就干掉了,它就不再指向任何东西了,这个引用就没有了好吧,那等他没有了之后,我已经把它标记成有用了,那我垃圾回收的时候,是不是就不会把它给清掉呀,等我标完了。
说这哥们儿还是有用的,因为我下次再回来的时候,垃圾回收回,现在再回来时,一定是从这儿开始好,这哥们儿有用,我就不会把它给清掉了,听懂了吗,来这会儿能听明白的,同学给老师扣个扣个一。
那这个东西呢呃这种这种这个这个毛病啊,这个这个小毛病啊,其实呢关系不是特别大,根儿上下来说我标记他有用,然后下来之后他又没用了,无无所谓,为什么呢,无非就是这一次垃圾清理的过程,没有把它清掉。
但是当我的垃圾器,这个这个下一次再清理的时候,你放心,这里已经断了,这哥们儿一定会被清掉,好这个东西呢,一般我们把它称之为叫浮动垃圾,什么叫浮动垃圾呢,唉简单说就是我这次呢标记完的。
但是我这次没没没清掉,他是真正的垃圾,但是被我当成有用的了,这个没关,系的他就是个浮动垃圾,下次干掉,所以这个问题没关系,不是很重要,不复杂,但是真正比较恶心的是另外一个问题,好听我讲。
那么另外一个问题是什么问题呢,就是看这里啊,另外一个问题是这个问题,当我们找到这个有用的了,还有一个呢是没有用的,这哥们儿是垃圾的,但是正当我准备把这个垃圾回收的时候,突然之间一个一根线连过来。
把它给连上了,能不能听懂,我再说一遍,我再说一遍,这是最复杂的,最恶心的好,我顺着跟上对象开始往下找,找找找找找找啊,这哥这哥几个都不是垃圾,那就意味着什么呢,就意味着剩下的有一哥们,他是垃圾好。
我已经标记它是垃圾了,我现在要把它清掉,那我怎么清啊,我正要垃圾回收线程刚要轻的时候,我的业务线程,给建了个连,给建立了个连接,这块大家能听明白吗,如果说这个建立了连接之后,这就完蛋了。
你就把那个有用的给干掉了,当你意味着去通过这个引用去访问他的时,候,就变成空值了,空指针错来,这块大家能听明白的,给老师扣一好,怎么建立连接对吧,下面我给你讲怎么建立连接,咋能突然找到没有引用的对象。
听我说这个是算法所带来的问题啊,大家看这里就行了,呃我刚才给大家伙讲过一个很核心的概念,就是我们整个标记的过程,它是分成好多个阶段的,整个标记过程,不是说一个线程光机一下就能给你标完。
是我一个县城标了一半,然后回来我要继续的,那这个算法是什么算法呢,这算法呢就是著名的三色标记算法啊,就这个算法呃,我能给大家解释这个三色标记算法,那个这个三色标记算法呢,我再说一遍。
它的核心在于就这个前提,你一定要记住它的,核心在于什么呢,它的核心在于我标记整个图谱,比方说这是我们整个的图谱啊,这里有一堆没有用的垃圾,我标记整个图谱的过程是分成好多步骤的。
是我第一个县城工作一小会儿,我第二线程回来继续,我第一个县城回来再继续,才能把整个图谱全部标完,那这个标记的过程,我们采用的算法叫做三色标记,这是很著名的很经典的算法,我们所学习的java语言。
我们所学习的go语言啊,go on用的算法全是这个,基本上现在很多虚拟机用的算法全是这个,那三色标记算法是怎么算的,同学,们听我说我们怎么去记录,有一些对象已经被我标记完了,我下次回来要从哪个对象开始。
它是用三种颜色来替代,这三种颜色指的是什么呢,在最开始的时候,我们所有的对象全是白色,所以白色是什么东西呢,白色是我们没有找到过的对象,从来没有从来没有接触到过的对象,好吧,这就是白色对象好。
还有一种对象呢,是我已经接触过这个对象了,但是我还没有来得及去标记他的孩子,这种呢叫灰色对象,还有一种是什么呢,还有一种是我已经把这个对象给标完了,找到他了,而且找到,了他所有的孩子好了。
这个呢叫黑色对象,同学们,你们想象一下这三次标记就是什么意思呢,当我从根儿上开始找啊,这是我的歌对象,从根上开始找诶,找到这儿了,还没有来得及找他的孩子的时候。
系列 1:P20:职业迷茫:年薪120万的java架构师简历是什么样的?需要精通哪些技术 - 马士兵官方号 - BV1mu411r78p
这是第一点,第二一点啊,我们指导简历,首先指导的实际上是你的心里,哈哈哈,问你个最简单例子,有的人的水平是十,但是他写简历只敢写成八,为什么,因为他害怕被人怼,他写成八之后面十家他成九件。
但是有的人水平就是六,他也敢写成八面十家,九家不成就成了一家,各位小伙伴们,我想问你,这哥们儿原来2万的水平,最后拿了3万,这哥们原来4万的水平,最后拿了3万来,你告诉我,本来他俩应该正常差2万。
最后拿了一样的钱,谁赚了,谁撞的呀,我这么讲,你能不能get。get到点东西啊,同学们从此转了嗯,所以其实有很多东西他不知道你真实水平的时候,只能控制你简历来,这是这个简历呢,当然拿薪水比较高。
你不用拿那么高,作为应届生来说,你可以考虑强度稍微低一些,你就不用写那么多,精通了,理解心理压力就不用那么重了,这只是一个模板,你可以摘出其中一部分来,这个简历呢是拿了60万年薪。
这是比较年轻人写的简历,既然说到简历了,有没有同学想看看比较老拉的写法呢,有没有老辣的写法,打开看一眼看在哪儿呢啊,嗯,好看这个这哥们儿是一大专大专生,5年经验,32岁了。
他明显就跟那个年轻人的写法就是不一样的,27岁从运维转过来的,看他的写法,这个简历我先告诉你最后拿了多少钱,35x15进的是融360互联网的金融公司,9000股的股票,大概他自己跟我说,算下来的话。
60~70万年薪差不多两嗯,黄老师20多岁拿676 16六七十万,但是你们不要跟他比啊,他这个呢是属于好长时间不出一个的那种,这个是比较正常的,32岁拿了六七十万年薪,这个算是比较正常,尤其是他大专啊。
能拿到这个薪水不错,最关键是呢他这个简历啊写法上非常的漂亮,你们仔细读一下这个简历,阿里大概有四五个部门都灭他了,不过对方没编进去啊,灭灭灭了,灭了别的,5年的一线开发管理经验,负责项目日活300万。
注册人数1。3亿,其实这个项目啊不是很给力,嗯这个呢叫做上天,就是你有架构的部分,对于构建高音高吞吐,低延迟分布式架构有丰富经验,架构部分,这两项都叫做比较给力的项目架构部分,这是什么,底层知识。
一般我称之为入地,就是上天部分,入地部分数据结构与算法设计模式,这你不用担心啊,老师两三天就能让你具备丰富的gm条经验,大概有10~20个案例让你跟面试官聊,今天有面试官,我就不跟你多说了,这是。
他就写了五条,他跟那个刚才那种写法就又不一样了,其实5年经验呢是可以做的,有多牛,你们想看看更牛逼的简历吗,想看吗,5年的5年左右经验的,再打开一个,这个是超牛,这个多数人是达不到的,但是通过他。
你就应该知道你的目标在哪里,我觉得再看这个简历,我先说这个简历的薪水拿了多少,这个简历呢比较特殊,这个简历呢在阿里拿了是120万年薪的,p78 80万的底薪加40万股票,4年拿完100 160万。
他应该是160万的股票,44年拿完啊,每年40万呃,当然它有一些成熟期,一些什么特殊的特殊的限制,这个我们就不多说了,大概120万年薪左右,5年java经验,3年以上大型架构系统。
分布式高可用高并发大数据量,double spring,cloud,spring,my bex源码,所以我觉得你通过阅读别人简历的时候,同学们你们知道吗,你们就知道什么东西,哪个方向现在比较值钱。
这也是我们做培训的人,整天在研究的课程里,我们主要交什么,交最值钱的内容,为什么要给大家上架构的课,因为这东西值钱,为什么要给大家讲底层,因为这东西会面值钱,看他这个人技能,我告诉你。
很多人对待自己的简历真的跟屎一样,随随便便写两句上去扔给面试官,就说我想当个高薪,你搁那扯淡呢,同学们,你们知道吗,同样的一个项目就是他字斟句酌的比较认真的人,写出来的简历就和那种纯粹的那种咋说呢。
混混事的那种简历就完全不一样,我跟你说一个最简单的理由,就算你同同样的都做过订单,订单系统,有的人就写一个在简历上写啥,我做过订单管理,做过库存管理,做过商品管理,做过啊,客服客服,客服中心等等。
就这么一列完了,那有的人就会这么说,我做过订单系统,在这个订单系统里头,我了解了to pc three pc tcc相关的分布式事务的处理方案,我设计了可靠性相关消息的最终一致性方案。
我了解了三个人它的这种分布式事务的架构,我聊我,我最终采用的是一个最大努力,通知方案来解决的这个分布式事务的问题,同学们,你们仔细分析一下,面试官更喜欢看到的是哪种,所以我不知道有多少人。
你们的简历里头还在在那写一堆的业务逻辑的逻辑,有多少人有吧,应该,有的是赶紧改好吧。
嗯既然说到这儿啊,说了说了,大专生有多少,这都还给老师扣个一课程有效期,公司活着,课程就有效,公司死了,课程就完蛋,对啊,所以我们要收一定的学费,就是保持一个正向的现金流来嗯,给大家请到更牛逼的老师啊。
嗯,759是大专生的发展啊,呃我想给大家大专生的第一个建议是合适的时间提提学历啊,为什么要提学历,我觉得不用我说,你应该能理解,这是大专生能够接受的企业范围,本科这么多,统招本科这么多。
研究生这么多更多等等,所以你在合适的时间请你提学历呃,然后还有一点大专生啊,在你技术变得越来越硬的时候,你的学历的影响就会慢慢降低,所以你一定要把自己的技术变硬,我觉得这一点特别特别重要好吧。
那么还有一个以前呢有不少同学听说过这个这个说法,叫叫这个说法,叫什么呢,叫技术搞不动了,按管理,来听说过这个说法,同学老师扣个一有吗,好听我说啊,这个说法大错而特错,谁要听这个,谁就入坑了。
这个坑坑坑坑的人坑多了,有的人呢30岁左右就直接干嘛了,直接就就就就直接转了管理了,凡是这样的,到最后你会发现招的人招招人的人,人家招过来的人比你的薪水都高,凡是很早转管理,最后全废了。
所以各位同学别这么干了,千万千万别这么干好吗,听我说,我告诉你技术,要走要,加管理要做要注意老师,我说的是加二,并不是转,我说的是家,并不是转,请大家给我记住这个词儿,我觉得我一个一个字就能提醒你了。
技术要硬,管理要硬,叫两条腿走路,你的路才能越走越宽,嗯嗯别的废话不用你多说,我还给你打开一些简历吧,也是大专的所有大专生人,认真听你看完这个简历,对你以后的发展应该是有深刻的认识。
有同学说老师你扯淡的就是硕士生吧,好仔细听这个简历呢往外投的时候40开外了,知道吧,不仅是大专还是大龄,他的呢就基本上都没有什么那个什么描述了,你懂吗,都没有那个那个技技能的一些描述,什么精通。
什么熟悉什么,他都不会那么写,个人的优势直接列出来,里边内容我就不不一一说了,往下看看他的教育经历,主要看这扬州大学第一专业热加工工艺设备大专好吧。
第二个业绩的你应用好下面这个你不用看下面这个叫简历技巧,这个老师都教给你,所有入学的同学,第一步需要看的就是老师的简历指导课,这个都是简历技巧,很容易get到,不去管它,坚持了10年多。
一直在走技术道路,走得很硬,合肥工大mba加上管理的认可好,这份简历多少钱呢,上海的架构是80130k的月薪,你自己去算,大概100万160万年薪,可能有同学会说,老师40多岁有人会给吗。
有一定的机会好吧,有一定的机会,我不能说这种机会特别多,因为这个岗位一定是初级的岗位最多,中级的岗位,稍稍高级的岗位越来越少,这是肯定是倒金字塔的,但是它有一定的机会,我们我们我们去年做了很多内推。
我们晋级的一个内推,这有点小啊,比方说龙湖地产的,就有一些甲方企业特别特别喜欢那种技术和管理两条腿都硬的,那么这个这个岗位是年薪150万以上,要求你是8年以上工作经验,工作经验少了还真不行。
管理技术两条腿,第二个岗位是这个第一个leader下面的小的leader,年薪120,公会力量到位,所以在座的诸位啊,我不知道有多少同学是大龄的大龄同学,如果你意识到你的路越走越窄的时候。
同学们你们要好,大概第一次登录腾讯课堂呃,然后呢半年内我们得到了内部的第一名呃,同时呢我们也拿到了同一课堂,唯一的唯一的站在用户角度考虑的这样一个奖项,就是腾讯课堂最受欢迎奖,java领域就我们一家呃。
为什么会说大家比较欢迎,因为很简单,我们讲的比较深,比较细比较长,最开始呢我们也跟别人一样,大概呢提供八个月左右的课,每每每个每周三三节课,后来讲着讲着我就觉得我去讲不讲不爽啊,你懂吗。
我想讲的内容非常非常的多,非常非常的细,那么时间肯定不够用啊,太不够用,了怎么办呢,我就进行了拓展,直接把八个月可拓展到1年半到2年,拓展到1年半到2年之后,虽然讲上去讲内容比较多,比较爽了。
但是呢有同学说老师我没有项目经验怎么办,我们就直接拖了八个项目出来,免费的,前面全是免费的,后来有了项目之后,学生说,老师你们以后课程升级我还能听吗,免费升级目前是这样,这个后遗症比较多。
我们后面会把它去掉,目前是免费升级,所以免费升级呢是我需要你买入一张卡,目前是88块钱,这张卡是什么意思呢,我们以后所有的公司只要,活着会员牵扯到的我们我们技术的升级会给大家免费。
那今年给大家免费升了什么呢,你们可能想不到,今年给大家第一个免费升的是左程云,左老师的算法课,左老师算法哥在其他地儿买下来,大概要六七千块钱,在咱们这儿免费直接给你升了,这是第一个。
我们称之为p8 架构师,当然p8 的我一会儿专门讲给你听好吧,这个有一点市场的夸大啊,但是别人也这么叫,我们没办法,也只能这么叫,呃除了这个之外呢,我们进行了服务上的升级。
是有一对一的职业规划的指导和面试指导,我目标呢是不想做课程中的第二名呃,我还是那句话啊,就是说别人广告可能打的比我们小可以,但是质量上不打算做,不需要你来报任何课,所以到现在为止。
我们可不会成为一个什么东东呢,成了一个巨无霸,看这里,我今天给大家讲的内容,是属于多线程高并发啊,就是这其中一个小模块中的我点进去了,点进去就看到了点诶,多线程高并发这里面的一部分好吧。
就是讲srt的原理,讲lol的原理啊,这讲的是两块啊,其他的都没讲给大家听啊,自选啊,reaction log sam for safety,ma safety barrier,各种同步容器啊。
各种线程池啊,gmh怎么样去做这种这种微微微微微微观的一个一个一个性能测试啊,啊强软弱虚的类型思维logo啊等等,disruption的用法等等,呃这个呢是总而言之,这其中的每一块啊。
其中的每一块拿出来都是一堆啊,比如这vm拿出来还一堆,我就不给,大家一打开看了就这么说,别人你看到的不管线上线下讲到的内容,咱们这全有别人没有的,咱们这有没有啊,也有举个最简单例子,比如说这个东西。
比如分析源码这块儿,王老师现在呢给大家讲的hosport源码分析,其他人讲吗,基本不讲,linux内核源码分析,其他人讲吗,基本不讲好,这是第一次有人讲,就是我们呃为什么要讲这个。
很多同学可能觉得比较奇怪,老师我一做java的,我没事搞什么类的内核,为什么,why,我就想让你们挣更多钱,其实就这么简单,黄老师去阿里面试的时候,阿里p9 注意啊,不是给他p9 的职级。
是阿里p9 出来问他的问题,linux内核源码0x80 的调用过程,黄老师是怎么答的呢,只见黄老师那个左手从左屁兜啪抽一张,纸是吧,右手从右屁兜啪抽一支笔,然后把这个过程详细地画了出来,软中断的过程。
ax寄存器存的是调用号,bx cx dx si bi存的是参数返回值,存在哪个计算器里好,把这个纸把这个过程给详细地画了出来,因此p9 之后就再也没有问他技术问题,他当时学校里的时候23岁多。
所以呢最后给了他,你知道吗,没有,那怎么办呢,给了他一个p6 的职级,但是直接给了他的是p7 的薪水,嗯我就想呢各位能慢慢地达到黄老师的水平好吧,即便是我相信这句话,就是你学东西的时候呢。
一定要比跳比较难的,学难的才值钱,高度是100,你学一半儿你也有50万年薪,高度是30,你全学了也就30万年薪,这是知识点,除了知识点之外呢,我们有一堆的项目,这个项目呢适合应届生的,适合初级程序员的。
适合从传统项目转成互联网的,比如说网约车,这个就是常老师入职阿里的时候给他带来很大帮助的这个项目呃。
关于这项目啊,各位小同学们如果有意愿的话,你们可以去找我们的。
谁要呢,你打开来看一下,所以这个项目啊我们每个项目都有自己的白皮书,这项目里头有多少节课,每节课讲的什么内容,这个项目主要叫什么,spring cloud,从入门到落地呃,讲到基本都讲到源码级。
就是这里讲的所有东西都给你讲的源码级好吧,讲的非常深入的地方啊,都能给你讲到类似内核源码的话,那么其他源码的都不太不太是问题啊,嗯然后这个项目设计出来。
主要是让大家呢能够从原来的c r u d的传统状态,转到这个分分布式微服务啊,这样的一个项目在落地呃,除了这个项目之外呢,我们还有一个第一版的比较给力的项目,就是一级流量多级缓存的架构。
这是一些架构上的设计理论呃,通过这个架构的话呢,你会了解怎么样进行那种这么说吧,就是京东和淘宝啊,秒杀啊,12306啊,就这类的项目该怎么进行设计,从简单的cp定理开始,到资源怎么隔离,服务怎么限流。
到底怎么扩容到各种服务,怎么降级到分布式事务的相关的内容,到流量网关啊,各种网关吧,网关怎么设计到多级的缓存该怎么做,怎么落地,那么到呃高可用高并发这块你该怎么进行设计和落地,啊这是最关键是落地。
然后呢在阿里云上面部署一个电商的消停业的开发市场,呃,这也是非常给力的一个项目了,然后呢所以最后我们课程就形成了一个巨无霸,形成了一个酒吧,先带回去,我相信我讲到这儿呢,会有同学会有疑问了。
说老师这么多,我学得完吗,这么多我该怎么学呀,来有没有同学有这样疑问的,这周期太长了啊,学会了就老了,对对对对对,你全学会就老了嗯有这个疑问的话,听我讲给你听,这节课到目前为止,好好听啊。
老师的设计跟其他的地方全部一样,这可到目前为止,这个呢其实大概能带你到p6 ,顶多带你到p7 的水平好吧,我告诉你今年过的p8 的,如果你想听我一会讲给你听,今天过的算法的课,如果你想听我讲,你听好。
我的目标呢是把我们自己这里设计成为一个大学,进来的什么水平的人,我们会给你设计不同的路线,比如说有多少人是为了掌心跳槽,我会给你设计出来一个路线,先学这个再学这个,再学这个,加上两个项目,3~6个月。
先让你掌心跳槽,拿下来之后慢慢再学其他的做,进一步加强,不知道大家能不能get到老师的这个思路,学叫学无止境,如果说你学东西有个尽头,我跟你说这个东西就不值钱了,只有这样,你每年才能够不断地产生竞争力。
为什么有的人能够达到百万年薪,为什么你只能达到个102000 10万的,就是说如果你想短期内跳槽涨薪的,我给你设计一条路线,如果你是应届生,想进大厂的,我给你设计一条路线。
如果你是比如说你想在原公司里继续发展,但是我想要整体了解架构知识的,我告诉你你应该怎么学好吧,这个大体,的思路,不知道大家get到了没有,下面大家想听一听我们新升级的内容吗。
今年新兴新升级的我其实我讲完新升级内容之后呢,你呢应该至至少你知识体系上会有很多很多的拓展老师,就算讲广告也都是干货告诉你啊,这是我们今年新升级的内容,直播还是录播,凡是能直播的,永远建议跟直播。
但是课程体系太大,并不能保证说我讲完第一版之后,你刚进来,你想听的那个课正在直播,这一点大家能理解吗,那么如果是这样的话,你就先把原来的上一版听完,赶上直播,听直播赶不上直播,先把原来的那个听完。
那现在呢我们正在直播什么内容呢,spring cloud全家桶,好看这里这是我们最新升级的架构师的课啊,这个课是什么意思呢,其实就相当于在我们原来的m个知识点加上n个项目的里面,帮你又设计了一条路线。
这条路线是成为一个比较高级的架构师,呃其实阿里的p8 是不能够培养的好吧,多数都是从内部阿里p7 升上去的,你要理解这一点呃,关于这个架构师课呢,如果你们了解过网上的一些架构师的课程。
我觉得大多数人可能会了解过呃,其实大致也理解就是讲了很多很多的理论,很多很多呢都是p p t架构师啊,两三个月的课,每周两三次,大概嗯便宜的收你2万,贵的收你3万,知道吧,有的还分p7 p82 个。
我告诉你老师这个课是最实惠的,我们设计整个课的时候呢,目标是设计比较牛逼的课,其实这个学费上很多很多,我我我我我是拿来请请老师了啊,我们老师的水平你也看到了,超过我的应该不多,如果我们说了老师水分。
第二估计没有人敢说第一这个批发架构师的课呢,我主要讲什么内容呢,其实呢我会讲了一堆的理论,关于分布式的,关于架构师的一些大面积上的啊,但是这里面都不重要,这些都不重要,很多课也都讲很多,别人家也都讲。
我告诉你最重要的是这好这是什么内容,我是想告诉你要把整个理论落地,因为这个市面上太多太多,了不落地的架构师课程了太多了,所以我们的重点是在这儿落地,这个落地通过什么来落地。
通过一个再造淘宝的项目来进行落地,详解每一个版本的迭代,听过老师课,你应该你应该知道啊,一个版本迭代,这个更会好,这个落地怎么落地呢,当然首先从the boss开始,代码规范,从分布式id中心开始。
到配置中心到索集群,到分布式集群,到缓存到用户中心等等等等,业务上一点点来迭代,5月大概5月15号左右,第一节课开始呃,网约车的项目,五一过后就开始,所以这里最重要的是是是什么呢,是落地。
那么这个落地怎么做呢,我们计划之中应该是有100个的,200个节点才能完整的给你再造一个淘宝出来,通过这个落地项目,直接把下面的技术内容全串起来,那这个技术内容分了好多篇,给大家简单介绍一下哪些片呢。
第一个是理论的基础,分布式事务,高可用,高扩展,高性能怎么设计成互联网三高密等怎么做,第二个呢是支持面试的,就是p7 ,你要面试会面对这些内容,大家注意啊,你错了,去阿里问问就知道全面底层内容。
几个图就能给你画完,所以好多好多面的全是底层内容,所以这里技术底层开始jvm linux内核操作系统,存储系统。
依然是支持面试,我先把这关一下啊。
这样大家都看得比较清楚,依然是支持面试,左程云左老师的,从萌新到bat的算法课,从萌新到bat的算法课单独出来,现在我们现在正在讲的是基础班,基础班里头呢大概是讲的这些个算法比较简单的,基础的数据结构。
基础算法基础完成完成之后就是高频的刷题班,想进b a t吗,好参加高频这种题目的训练营好吧,上头条第三面就灭了i u的算法,l iu算法,从那个开始我就下决心为大家找到比较牛逼,的算法老师。
所以请罗老师过来,其实啊我告诉你,除了这个升级之外,我们还有google的老师在这儿啊,我刚才没有说,主要怕吓到你们,好这位小伙是在美国的谷歌上班,来给大家讲解的google的面试真题的专场。
当然这个只能是录播,直播不了,左老师呢,现在每周末都在进行直播,当然除了这种面试的算法之外,关于分布式的特殊的算法都会给大家讲,然后各种沙丁算法,各种的分布式存储算法,好,为什么,why,没错啊。
我看有同学真的知道这是什么,推荐系统,推荐系统,没错没有推荐系统的淘宝,它是没有灵魂的,当然这是第一版,第一版里头我们会推荐系统来帮你落地嗯,但是我告诉你啊,其实作为一个淘宝来说,除了以后推荐系统之外。
和ai相关的还有什么呀,机器人客服你们知道吗,机器人客服这个我们打算在第二版里头升级,对你来说是免费的吗,第二版里头实现好吧,对机器人客服,机器人问答,然后呢前面是关于面试的这些内容,后面是什么呢。
第五篇里头我们讲什么,讲分布式,分布式系统的总体设计,这是从这是开始总体的这种大面上的设计了,这单面设计呢其实比较简单的,单体的微服务,微服务到多级缓存,多级缓存到超大型的这种分布式啊。
呃这里面的内容呢我就不给大家一看了,总而言之呢理论性的东西比较多,要想落地的话,我们淘宝里面的落地呢主要是用微服务和service mesh来落地,听清楚主要用这第一版,主要用这两个来落地。
主要是微服务和service nature,为什么呢,因为现在比最火的流程最多,大家用的最多的是微服务,但是service mesh在我们判断会很快干掉它,所以我们用这两个来。
落地来帮助你跳槽的时候拿到更好的薪水,更好的经验,好讲完这个之后,大家知道作为一个分布式的架构来说,入口端是哪儿啊,物理的入口端肯定是dns,cdn基础的负载均衡,endx内测,好在这个之外。
我们决定加一篇番外篇,这篇番外篇就是专门讲engines,为什么要讲它,因为它太重要了,一个engines,一个re大,你学p h p,你觉得那个那个java啊,学python。
听我说这两个东西请你认真研究,一个是index,一个是一个是redis,这两个是架构师手里的利器,架构师手里的王牌,这俩哥们儿玩好了之后,能解决你架构的很大一部分的问题,好吧,好看这里。
然后呢我们开始设计分布式的核心服务啊,就是网关层怎么设计,我们分布式分布式的系统,不就是说网关层业务业务逻辑层有可能是用service mesh实现,有可能用那个microservice实现吗。
数据访问层持久化层bi的加成,bbbi模型,我们主要是推荐系统,然后是单独把微服务拿出来,目前现在正在直播的是这篇,现在一明老师现在正在直播的这篇微服务全栈,微服务全栈是讲的微服务全家桶。
我们的spring cloud奈奈奈飞和spring cloud,阿里巴巴都讲到,好吧,单独一篇是service mesh的落地,service mesh目前用的最多的常老师讲给大家听。
这个课目前网上也不多,我们应该是非常靠前就讲给大家听了啊,嗯如果说一个作为一个一个架构师来说,我们是站在架构整个架构师角度来理解整个大面上的系统结构,那么你如果不了解数据治理,你肯定也没戏。
所以第九篇是专门和数据相关的,大数据的存储,大数据的实时处理,大数据的流式处理,大数据的批处理好吧,好当有了数据之后,那么我就可以对它进行人工智能加成了,这一篇主要是落落地,我们的推荐系统。
从各种的召回策略,从用户画像啊,从基础的算法,大家不用不用害怕,大家听我说,就这个配件系统的话,不是你想象的那么难学,你也可以把它放到后面慢慢学,也不是说一下你就全把整个内容全全消化掉。
后面还有三篇是主要服务保障的,服务保障呢离开离部绝对离不了性能测试,绝对离不了c c d的支持,绝对离离不了韵梅,所以这三篇我就不单独打开了,那么后面还有两篇呢是比,较虚的内容就不一介绍了。
大家对于这个呃我们还有一些细节在调整啊。
还有一些细节在调整呃,大家对于这个这个这个呃课程的话呢。
如果说对对对这篇这篇大纲有需求的话。
好吧嗯我觉得我们给的课呢应该都是比较实在的课啊,嗯,这个这个课程大家觉得大家觉得值多少钱,有哪些课已经讲完的,有一些是已经讲完的啊,比如说我讲过,我一会儿讲,我一会告诉你啊,哎呀我告诉你啊。
就很多那个ppt架构师的课,人家就报2万,我们现在是多少钱呢,你现在多少钱啊,问问,这不是你想比如说短期跳槽涨薪又怎么做,其实啊呃这块非常的简单,我告诉你,我前前后后啊。
我们老师大概一对一的指导过2000左右的学生,按照去年来讲,就是去年2019年到2020年的整个面试过程,jvm多线程课前我敲过一遍了,看过你的,重新看一遍设计模式,zookeeper。
注意是mysql调优,不是mysql入门,大家千万记住是mysql调优,并不是入门,好吧好,六项基本原则加两个内容,网约车一批流量,两个项目,我们去年用这条6+2的路线。
让n多人在很短的时间内把薪水涨上来。
光说没用,看案例,自己总结了一些案例,嗯,这这哥们儿这哥们是我们比较早的一个学员,这局玩特别好玩啊,这个小学就我我老师这个案例全部都支持被被调,知道吗,全部都支持背调啊,你那你那个想见这位学生啊。
我聊个天儿啊什么的都没问题啊,诶这个学校特别好玩,他跟我工作在同一个楼,我们都是在那个马迭尔乔的华龙大厦,这个也支持各位小伙伴想过来找老师聊聊天儿的,随时疫情过去之后随时过来,好吧,就沿着一条路线走。
花了两个月拿了年薪30万的o,他原来年薪是20 20万,20万出头,后来拿了两个年薪30万的offer,还有像这小伙儿,这小伙比较比较特殊啊,这家伙是报了三天涨了2000,为什么会这样呢。
是因为他比较着急找工作,我们帮他润色了一下简历,这是我们的服务之一,就是润色了一下简历,就直接涨了2000,所以其实你们想想老师的课值还是不值,你就知道了呃,哪怕你只涨了2000块钱,1年你也涨2万多。
而且以后的升级课程对你来说还是免费的,我觉得你应该找不着比咱们这儿更加实在的课程啊,不信你随便找,所以你听到今天老师的广告是你的幸运,不然的话你可能真的会花两三万去报那种ppt架构师的课,太坑了。
像google啊,其实呢给大家录制google课程算法的,就是这位学员听懂了吗,就是我们有好多牛逼的学员,然后呢这位呢是呃帮咱们录制了一些就是进入怎么怎么怎么怎么google。
怎么进google一些专业的这种算法课,像这个这个小伙伴是在三四线的城市,它是在福州学了一个月,涨了4k就是你按照老师说的路线走就可以,我建议每个人入学之后的第一件事儿,先涨薪水,把学费赚回来。
先花3~6个月时间把薪水涨上去,把学费赚回来,听懂了吗,拿过来之后再继续沿着老师的路线慢慢学下去,对于,我们的成员来说,我们的目标宗旨是让一部分程序员先成为架构师,他是我学了一个多月,涨了4k多。
已经很满意了,嗯这个这个这个是一个女同学啊,他原来是8k多,现在涨了18,涨到18k,当然他是属于那个三四线五六线的城市啊,还有的呢像是薪水高一些的,你比如说这个毕业啊,毕业毕业了八个月啊。
拿到了百度的社招的offer,然后呢像还有比较比较典型的,这哥们也不要典型啊,这哥们儿是就听了老师的jvm,就听了老师的多线程,然后就听了李老师的mysql,就直接入职华为了啊。
刚听完这vm多线程mysql就面了华为就成功了,面试官问的都是老师讲过的是吧,呃他的年薪呢不是特别高啊,他转原来的年薪太低,大家也知道你下一个下一步找到薪水,跟你原来薪水是有关系的,就涨涨的不多。
涨了涨到40万也可以了,从30涨到40,涨了30%可以了好吧,起码你赚回老师这点学费了,是不是跟玩儿似的了,所以老师的学费是很容易,我们收上来给大家请牛逼的老师,把这个学费成倍的一辈子成一,1年乘五倍。
10年乘50倍的赚回来,最重要,这就是我们所设计的课程,不知道大家听清楚了没有,今天晚上的秒杀价格依然是4月份的价格,原因是我告诉你啊,5月5月4号开始,腾讯以腾腾讯一上班,我们价格立马涨。
本来5月1号就要找腾讯,没操作完,太讨厌了,这里还是4月份4月底的价格,11980好吧,有兴趣的进群,秒杀结束就算了啊,我觉得呢短期跳槽涨薪的可以按照这个来走,但是我应该是不同的人,也会有不同的需求呃。
下面我想花点时间呢跟跟大家聊聊呢,比较干比较干的一些一些内容,比如说我想问大家一句,有没有是应届生想进大厂的,有没有有的话给老师扣个一,进大厂有没有懂吗,刚毕业1年的都想啊,我们先说应届生。
然后我们再说社招生,大家听我说啊,应届生进大厂,沿着这条路线选7+1+1好,这是什么意思呢,就是除了下面这六项之外,我见你一定还要加一项,就是算了呃,想进大厂,可以说大厂对于这块的面试越来越多,特别多。
你如果把这块拿下的话,甚至你上面的六项内容可以不用的,不用掌握的特别详细都可以,现在啊你看啊,就就拿去年去年的面试来说,呃这个这个这个这个面试的题呢是那个字节跳动问题啊,其实他到最后他死是死在了三面上。
三面的一个算法题上,你如果看他这个题的话,你就会发现全都是非常底层的内容和算法,没有别的好吧,像那个我们去年总结的,百度的题啊,七面进到阿里那边,这些题如果你看的话,全是底层内容。
所所以线程池动态代理设计模式嘛,jvm ok全是这一类的,所以我们就给大家总结了这条路线,沿着这条路线走,就ok这条路线啊,前面这六项学的最快的同学,他是脱产脱产干的,干了15天就干完了就15天。
当然下面这两项比较难,一般来说呢我对于应届生来说,不需要大家掌握这项,不需要大家把上面这七项是七项,基本,原则,那么中间这个一是什么,对于应届生来说,你认真听,中间这个一是网络,好这个不是那么的重要。
有一些大厂特别愿意考我们这个网络是怎么交付给大家的呢,nt的越狱好,我这个nt的运用是怎么交付给大家的呢,通过项目驱动交付给大家的哪个项目呢,这个项目,这老师已经帮大家设计好了,知道吧。
这项目是什么项目,网游后端就是我们那个海宁老师带给大家的网页后端项目好,这个项目为什么特别适合大家,大家不要认为这个项目特别特别特别呃简单啊,其实他也是比较难的,你要理解那些理解a p p。
理解socket,理解protobuf,理解反射,javis,理解groovy,理解double rock m q e l k jackenzo,才可以,为什么这个项目特别适合应届生。
因为你的简历上应届生来说,应届生工程项目经验基本为零,所以被死磕占了,一般呢对于应届生项目不是那么的重要,但是这个是一个加分项目,而且这个项目写到简历上会非常可信,你说你在学校里写了一个游戏。
后端的项目比较可信,远远比你写一个商城要可信的多,所以这个老师都帮你设计好了,那么最后一个一是什么呀,最后一个e我们的简历指导,不客气的说,多数应届生写的简历跟屎一样,想看看牛逼点的简历吗。
想看的同学给老师扣一,到时候都说这个项目就基金,咱们才有多少人啊,几百人而已,你知道全国去年有多少多少毕业生吗,700多万还是800多万,你在这,你用几百个人里头在这脱颖而出,你不要叫英雄传说。
你能不能叫别的游戏后端呀,不冷啊,卑微嗯,不看就可以撤了啊,好不好。