00:00
恢复成我们的啊,刚才的五八。彭程,好,各位同学,我们再跑一下。都非常清晰。这个答案都明白。只有Java是false false,那就说明什么?它是两个好,其中一个是我们自己这么拗出来拼出来的,另外一个是哪来的呢?否则他的答案也应该跟上面一样是处吧。所以说下面我们的问题就是。这个就是最坑爹的一个考点,为什么这个Java是两个,为什么只有Java是其他字符串几乎这么写都是true呢?走起。那么同学们,我们来看看他的考察题。Inter这个方法,那么讲到这儿不再废话了,有的话直接就引用,没有的话新建加入,那现在我们得到的话呢,就是。按照我们的代码运行结果Java的字符串答案为false,那么必然是两个不同的Java。那么另外一个Java字符串如何加载进来的?我们就看字面上而言只只有这么一个吧。那么另外一个是哪呢?
01:04
他。是系统初始化加码字符串。在加载这么一个类的时候,进入的常量池明说了是什么GDK,它出量胎就自己带了一个Java,所以说我们自己拗的这个Java和接DK自己带的那个Java,他们两个不是同一个对象,直接给我们报了一个FOX。好,那么下面这道题的关键点,杨哥求证明。第二个在哪?第一个字面上是你的,第二个怎么出来的?那么同学们这句话这是什么鬼啊?什么some Michael version这个类我们从来没有听说过。如果这个你没有听说过,Version这个类我能理解,但是sun Michael这个东东什么什么意思啊,是不是杨哥在讲GVM的时候和大家说过?我们一定说过一个东西叫类加载器。
02:01
类加载器的时候,我们讲过,你凭什么就可以直接用什么object string list link list线程这些类呢?是因为在我们的Java的运行环境,这是不是有一个叫RT点加包,它通过我们的BOO跟加载器直接加载进来,好比我们生命要出现在地球上,是不是要先加载好阳光、空气、水?那这个时候我们一打开,同学们请看这是不是有个sun,这是不是有一个东西叫什么呀,是不是叫我们的麦克这么一个东东,没问题吧,那么来同学们。包括啊,我们用的这些什么timer啊,这些类以前都说过吧,那所以说呢,它来自于什么?这个包下面,OK,那么这个包下面刚才我们也看到这是不是有个VM.class那它加载进来以后,我们怎么能看到怎么用的呢?很简单,那么同学们请看杨哥给你一层层推出来。
03:02
那走起。首先我们用最简单的一个类叫system,那么弟兄们都清楚啊,System这个类100%是不是JDK原生自带的Java浪包下面的吗?不会画,我们一走到这个类的时候,请看这有一段提示。那么对于注册本地这样的一种方法是通过静态的初始化加载,那么Java虚拟机将会调用注意初始化system类这个方法去完成一些初始化相关类的加载,以便于区别我们的客户端。笔记小心注意。我如果要用Java虚拟机的一些自带的一些设定好的属性的话,那么请移步到这个类去看看。核心命门点在这儿,那么好,同学们,我们往下翻,走起。请看初始化这个system的。在线程初始化完成以后被调用,什么叫线程初始化,你告诉我同学们,我们现在这个是不是may也是个主线程,我要运行C4的时候要打出这一环,它是不要加载调用底层这个类啊,那么往下我们找找啊。
04:13
这儿是不是有一个叫。Michael version init的这么一个东西。杨哥,你讲了这么半天了,到底第二个Java怎么来的?他就在这儿。我们点开这个方法。直接找到上面,同学们请看三、Michael version,这是不是带有了一个静态的常量lunch name叫Java。那么搁到这儿你就应该清楚啊。原来我们Java为什么刚才打的是force,其他字符串都是错,因为JDK在出娘安态的时候就给我们写个launch.java然后我们自己又六那个Java字符串拼装用string buff法,那个死Java和比Java一个是JDK自带的,一个是我自己六的,我们两个不一样,所以说它就是false。
05:09
OK,好,那你可能说他什么地方用到的,到底怎么一个来龙去脉,怎么调用的呢?甭着急,跟着杨格来,马上进入第二个考点。第一个考点是inter,这个方法你到底熟不熟悉?OK,就这个方法,第二个考点就是它。那么下面根据刚才我们的推测,我们已经明白了system初始化system这个类,刚才可以看到这是不是有个some Michael version in这么一个。然后这个version我们刚才已经看到好,哪来的内加载器有个RT点七啊,那么这个时候根加载器不那个啊,我们讲加YMGVM的相关虚拟机的知识,学过这个类加载器提前部署,要加run time点这么一个包,对,在这个下面,请看是不是有version.class vm.class都给大家说过了,可问题杨哥这个看不到啊,我们都清楚,你看根本没有什么下载源码。
06:12
那这个version到底是长什么样?那么这个怎么被调用的?我怎么知道它被调用了?层层证明,走起open jdk,源码分析才能说得清楚这件事。首先open gdk,我们在open并发多线程的时候,在讲线程的时候,杨哥亲自在家读过和翻过这个东西,不废话吧,我们直接下载到了本地,由于国外的网站比较慢,我怕讲课的时候出现卡死的情况,我们我们提前下载好了本地去这个类里面去找我们相关的,那么打开我们的open gdk,那么在这是不是我们的JDK,是不是我们的源码,那么它分享出来的,那么找找到我们classes,大家看这是有S,这是不是有我们的。迈克,那么在这的时候请看VM点加吧,请大家看这是不是叫VM.class啊,能跟上你看吗?编译这个点class文件它出不来,那么所以说大家请看,也就是Java底层运行的,也就是我们这些东西,那么它要去调用这些呢?
07:15
这有个version Java template什么东东,模板再点开,请大家看。像不像跟我们长得有点一样啊,但是它加了两个什么艾特,艾特,艾特艾特前后有四个圈圈,有点像我们的占位符,它这个意思就是引用,换句话说你这个接DK1加载的时候,我要慢慢的引用,命名为lunch这个值啊,那么这个值在我们语法里面写成了什么,写成了Java,所以说它是这么一步一步给你加载过来的。那么杨哥这个。分析,这个是JDK,我们前面讲过了,你不要问我为什么他要这么写,干嘛出娘胎自带的,好比一个人出娘胎,自己带了个胎记,OK,那么他这是干什么呢?到底他的第二个考点考的是什么?说白了就是看你在平时除了工作以外,你要想进大厂,你是不是应该学习和阅读一些经典的书籍啊,这么说能跟上,那么这个总结待会我们刷一个回马枪回来给大家说。
08:21
什么概念?第一层意思,In turn这个方法除和false吗?一个考点?第二个考点是什么概念?深入GVM虚拟机这本书的原题,这道题目是你是否读过经典的GVM书籍,哪一本是不是就是我们的深入理解GM虚拟机?周志明老师的紫色的第三版,如果你是个加尔程序。长期关注大厂的笔试面试题要求的话,这本书已经到第三版了。第一版是红色,第二版是蓝色,请同学们直接阅读第三版紫色。你想去阿里、美团、京东等等等等这些跳动这样的大厂,周志明老师的深入理解加va虚拟机你都没读过,你好意思来敲门吗?那么现在他怎么知道你读没读过呢?那么同学们,现在的大厂考题非常难,不像是两三年以前啊,问你一个GVM啊,能够手写画得出这张图就行了,现在已经筛不出这样的人了,来一个面试者都能够手写手画这么一张GM的体系结构图啊,这个早就杨哥N年前就讲完了。
09:30
那么下面我们的问题是,现在呢?考的题目非常灵活,这道题目一般人是答不对的,答的对的人说明你一定读过这本书,你才是我要找的人,I want you从千千万万的求职者当中筛选出来,何以见得那么同学们。你要进大厂,是不是应该有一定的充分的准备,注意不是刷题,是准备听懂了吗?那么周志明老师能够写到第三版,说明这本书说是长期经久不衰啊,几乎是Java程序员圣经在这儿呢,我在自己学习gbm的时候也受益颇多,在这儿感谢周志明老师给大家写出这么优秀的一本书,那么好,你要想进大厂,大厂他必然而然有相同的圈子和一定的知识层次的认知要求,就要看你读没读过。
10:20
何以见得第一章走进Java?哎呀,这些都是一些Java的历史,爱看不看这道题来自于。第二章2.4节来,同学们请看方法区和运行时常量池一戳什么意思啊,我点,那么同学们请看啊。我们搂一眼啊,来看看。代码清单二杠8STRING in返回引用的测试好在这块叫new build计算机软件下面叫Java Java回答我跟我们刚才看到的这道题目是不是几乎是原区的变长,只不过这家大厂叫五八同城,另外的大叫美团阿里,字节跳动。
11:07
这道题目上面全是错,只有Java。干嘛整出来个force那么好,为什么会这样?如果你看这才是第二章,他的意思就是看看你有没有看过这本书,有没有翻翻看到第二章,第三章,第四章,第五章,直说了,如果你现在去大厂面试,起码这本书你应该翻一下,那么好。在这我们会看到这段代码,在JAVA6会得到两个false,但是在加VA7以后,你会得到一个错和一个false,怎么样,是不是我们的结论一个错和一个false啊。那么为什么会这样呢?产生差异的原因是JAVA6,因为现在大家都是基础Java都快出到15啊,JAVA8是现在主流,所以说六我们就不看了。那么在六的时候啊,In ten这个方法首次遇到了字符串实例复制到永久带的什么字符串常量池啊,我们讲过我们JAVA8还有没有永久带,没了直接挂都叫云空间了。
12:07
所以说JAVA6这种特性我们就不再研读了,但是我们对于我们JAVA7以后,也就也就是现在我们用的JAVA8。从加VA7开始,Inter方法的实现就不再需要拷贝字符串的实例到永久带,既然字符串常量池已经移动到哪了,读一当中,那么我们只需要在常量池里面记录一下首次出现的即可,所以说这个英特尔返回的和那个实列就是同一个,那么如果是同一个给我出面对S2,大家看哪个加va。比较返回的是什么?First是因为Java这个字符串在执行string builder to string之前就已经出现过了,在哪出现的?是不是在我们的GDK的年胎里面,我们要用运行GDK就要加载RT点架包,这么说同学们能跟上这个RT加价包里面是不是就有这个version,这个version是不是已经出娘胎的时候就写死了一个Java。所以说我们自己。
13:06
用了一个Java,人家是JDK,冲阳胎就自带了一个Java,是两个不同的Java,当然是false了。那么在这在周志明老师的原原书原题这有清晰的讲解,这是因为Java这个字符串在执行已经出现过了,哪出现的四串常量池中已经有它的引用不符合inter方法要求的首次遇到原则。所以说。大厂就把上面这个计算机软件改成他们公司的名字,就来考你这道题目,这道题目就筛选有没有读过GVM,深入理解Java虚拟机,周杰明老师的Java虚拟机的经典巨作来筛出。我们所需要的大厂程序员,那么再看看你日常工作当中。下班以后你是去打游戏还是去看书,人的差异在于业余时间,所以说呢,我们到这儿,我们呢就会明白,他到底考的除了语法知识,本身就是看你有没有读过书,还有没有学习潜力。
14:09
结论其实就是这么一句话。这个类在JDK内库的初始化过程中被加载并初始化。初始化的时候,需要对静态常量字段根据指定的常量值做默认的初始化,那么这儿我们呢,也已经讲过在这块。VM.java会被加载进去,在这款艾艾引用了以后,Lunch内你自己的源码是个Java,直接被注入进去,那么我们的Java就盘活了。所以说这个。引用了以后直接被弄到字符串常量string table里面,提前就已经有了一个,那么在这你不管运行多少次这个Java和自带的娘胎的那个Java式。不同的,所以说是有两个,它就是负,OK,那么这道题的考点,那同学们现在能理解大厂的考题为什么难了吧?那么你问问你自己平时啊,有没有这样的打磨过自己的知识体系,这就是为什么。
15:07
感谢大家来到上硅谷大厂高阶班,跟着杨哥来学这些,我可就是专业专门做这个的,你想进大厂?我们一起来学习和交流,我相信可以给你节约很多的时间。好,那么这道题我们就给大家介绍到这儿。
我来说两句