如何面向面试阅读 jdk 源码?

2019-12-25 09:28:24 +08:00
 amiwrong123
比如我看 hashmap 源码就发现很花时间,有很多细节容易看进去了(红黑树那块也看了好久,但就算能看懂,以后让我手撕估计也是不行的😂)。

虽然我也想处处都精看,但奈何时间有限。所以想问问各位在看源码时,有没有什么独到的侧重点和方法?
3948 次点击
所在节点    程序员
13 条回复
forgottencoast
2019-12-25 09:33:25 +08:00
一般先看别人的介绍文章,再看就轻松多了。
amiwrong123
2019-12-25 09:41:48 +08:00
@forgottencoast
是啊,肯定是要看别人的博客的。但有时候别人博客也不是很仔细,上次有个 balanceInsertion 的疑问,百度了一圈没有解决疑问,谷歌后更神奇,好像国外没有程序员在研究 hashmap 的红黑树操作似的
securityCoding
2019-12-25 09:48:04 +08:00
最近一直在思考一个问题:如何知道自己真的懂了?挺有意思建议楼主也思考思考
Michaelssss
2019-12-25 09:54:49 +08:00
问面试官你要问哪个源码,现场搬出电脑一起看。。
amiwrong123
2019-12-25 10:10:24 +08:00
@securityCoding
这个确实值得思考,现在就是看完了写博客,强迫自己整理思路,我觉得这样会让自己更懂吧
amiwrong123
2019-12-25 10:32:42 +08:00
@Michaelssss
哈哈哈,面试官说:你给回家看去😂
Raymon111111
2019-12-25 10:35:10 +08:00
主要看那些常见的,比如 hashmap 啊,threadlocal 啊之类的东西

做到能口述原理,比如扩容怎么实现,什么场景下实现,并发为什么会有问题等等

多搜这个东西相关的面试题
guxingke
2019-12-25 10:37:03 +08:00
面向面试的话, 那就关心相关的面试题, 带着问题, 从源码里找答案. 总结之.
securityCoding
2019-12-25 11:57:25 +08:00
@amiwrong123 应该到能用自己组织的语言简单的表达出来才算看懂,可以看看 YJango 这位 B 站 up 主的视频
vjnjc
2019-12-25 12:05:49 +08:00
面向问题看啊,比如 hashmap 怎么实现 get 效率在 o ( 1 )的,并发性问题怎么产生的,要是你来设计怎么修复
vwym
2019-12-25 14:25:26 +08:00
面试有一个好处,唬住 50K,唬不住 5K,更重要还是看你当时的口才,练表达能力应该更加有效。
给个建议,把源码阅读写下来,尽量写成能让看的人通俗易懂,放到自己的个人博客里面。
至少唬不住的时候还能够说😨不太记得,但是当时是分析了巴拉巴拉的。
hatcloud
2019-12-25 14:53:32 +08:00
我问 Hashmap 实现原理的时候,其实不太关心你是不是知道红黑树什么的,更想知道的,为什么要这么设计。知道细节是加分项,知道代码解决的是什么问题,为什么这么设计是好的,才决定我觉得这个人是否是我想共事的同事。
hatcloud
2019-12-25 15:09:57 +08:00
所以我觉得面对面试看源码可以着重看源码的结构设计,不同部分之间交互的设计模式。整个大框架看明白了后,再看细节。
突然想到陶渊明说的「不求甚解」。如果时间和精力是无限的话,扣的细没什么不好,但偏偏没人的时间和精力是无限的。
回到楼主的主题,我觉得去探究 hashmap 里面红黑树的具体实现肯定是很好的求知精神,但就「面向面试」这个命题而言,我觉得是没必要的。这些时间可以拿去看更多的其他知识点。不过,都是浅尝则止也不好,会让面试官有个「深度不够」这样的印象,所以肯定需要有些地方是细看的。至于哪些地方细看,我觉得应该是和自己项目经验结合的地方。比如项目中自己碰到了很多内存相关的问题,那 JVM 的内存回收的细节是需要细细看的,又比如如果自己做的是一个需要大量加载图片的 App,那么 Bitmap 相关的知识就是逃不掉的。和项目经验结合,这些细节看起来可以和之前的经验交相验证,也会比生啃其他知识点的细节要轻松一些,同时和例子一起讲,在面试的时候更能折服面试官。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/632054

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX