我刚工作的时候,就有一些大佬推荐我来阅读 Java 源码,那时候的我懵懵懂懂,只觉得大佬说的是对的,于是就去读,当时的目的很简单,主要是两个:一个是应付面试,一个是想让自己更强。
当时边工作边读源码,一开始真心是一点都看不懂,逻辑都看得很迷糊,更不用说去探究作者为什么这么写,用到哪些设计模式了,但也不知道为什么,还是咬牙把源码都读完了。
读完之后,还是比较骄傲的,虽然说读完之后,很多细节都不记得了,但不知道为啥,总是有股莫名的自信,原来自己已经是读过源码的人了,而且在平时的工作中,用到一些 API 时,脑海中突然就会蹦出一些火花来:比如说初始化 List、Map 时如何初始化其大小;比如说如何根据场景来设置线程池;比如说如何根据业务写出优雅的锁,这时候就会自我感觉代码写的好,其实我一直有个理念:只有紧密贴合业务,能帮助解决业务复杂度的代码才是好代码,读了第一遍 Java 源码之后,突然就有了这种感觉,对自己写的代码也越来越有自信了。
随着工作年龄的增加,又陆续读过几次 Java 源码,现在除了对自己写代码的自信,还多了一种帮助别人的自信,在同事遇到困难,或者 代码 review 时,一些漏洞,你很容易就看出来,不知不觉你就会成为团队中的技术专家。
所以我们才一直强调,我们读源码真心是为了更好的实践,这种好处当你认真读完源码之后,慢慢就会感受到了。
同学们的问题
在这几个月内,我收到很多问题,但比较频繁的是两类问题,第一类问题主要是说自己看不懂源码,问我怎么办?这个问题其实我也没有答案,Java 源码本身就很枯燥,它并不是电视剧,也不是小说,它是需要我们静下心来,一行一行琢磨思考的东西,同学们都很聪明,不是看不懂,只是不想静下心来罢了。当然当代码太复杂时,我们只看也是不行的,需要亲自动手 debug。
第二类问题主要是作者为什么这么写?这个问题其实也很难回答,但问这些问题的同学,我基本都一一作答了,在和这些同学交流的过程中,发现一小部分同学的确对源码很有研究,我也受益匪浅,但大部分同学其实并没有搞懂源码本身的逻辑,试想如果在没有搞懂源码本身的逻辑下,
又如何去猜测并理解原作者用代码的本意呢?恐怕很难,所以还是建议大家先把源码本身逻辑弄懂后,再去推测本意和设计模型,不然这又会成为你阅读源码的阻碍(话虽然难听,但是真心的建议)。
感谢
这是我第一篇在慕课网的专栏,非常感谢慕课网的编辑和商务,给我了很多帮助。
当然最要感激的是各位同学,虽然我们一直内部强调,专栏不求快,只求质量和内容,但 Java 源码实在博大精深,由于我个人的理解问题和笔误,的确出现了一些理解不当的地方和笔误,在同学们的包容和指正下,我们也一起做了更正,所以非常感谢同学的包容和指正,真心的感谢大家的包容,谢谢。
最后留下我的个人微信(luanqiu0)吧,真心想交流后端技术和架构的可以加我,当然其它的我也不会了,再次谢谢各位同学一起走过我们的专栏,来过,看过,希望你能有所收获,谢谢。
- 前言
- 第1章 基础
- 01 开篇词:为什么学习本专栏
- 02 String、Long 源码解析和面试题
- 03 Java 常用关键字理解
- 04 Arrays、Collections、Objects 常用方法源码解析
- 第2章 集合
- 05 ArrayList 源码解析和设计思路
- 06 LinkedList 源码解析
- 07 List 源码会问哪些面试题
- 08 HashMap 源码解析
- 09 TreeMap 和 LinkedHashMap 核心源码解析
- 10 Map源码会问哪些面试题
- 11 HashSet、TreeSet 源码解析
- 12 彰显细节:看集合源码对我们实际工作的帮助和应用
- 13 差异对比:集合在 Java 7 和 8 有何不同和改进
- 14 简化工作:Guava Lists Maps 实际工作运用和源码
- 第3章 并发集合类
- 15 CopyOnWriteArrayList 源码解析和设计思路
- 16 ConcurrentHashMap 源码解析和设计思路
- 17 并发 List、Map源码面试题
- 18 场景集合:并发 List、Map的应用场景
- 第4章 队列
- 19 LinkedBlockingQueue 源码解析
- 20 SynchronousQueue 源码解析
- 21 DelayQueue 源码解析
- 22 ArrayBlockingQueue 源码解析
- 23 队列在源码方面的面试题
- 24 举一反三:队列在 Java 其它源码中的应用
- 25 整体设计:队列设计思想、工作中使用场景
- 26 惊叹面试官:由浅入深手写队列
- 第5章 线程
- 27 Thread 源码解析
- 28 Future、ExecutorService 源码解析
- 29 押宝线程源码面试题
- 第6章 锁
- 30 AbstractQueuedSynchronizer 源码解析(上)
- 31 AbstractQueuedSynchronizer 源码解析(下)
- 32 ReentrantLock 源码解析
- 33 CountDownLatch、Atomic 等其它源码解析
- 34 只求问倒:连环相扣系列锁面试题
- 35 经验总结:各种锁在工作中使用场景和细节
- 36 从容不迫:重写锁的设计结构和细节
- 第7章 线程池
- 37 ThreadPoolExecutor 源码解析
- 38 线程池源码面试题
- 39 经验总结:不同场景,如何使用线程池
- 40 打动面试官:线程池流程编排中的运用实战
- 第8章 Lambda 流
- 41 突破难点:如何看 Lambda 源码
- 42 常用的 Lambda 表达式使用场景解析和应用
- 第9章 其他
- 43 ThreadLocal 源码解析
- 44 场景实战:ThreadLocal 在上下文传值场景下的实践
- 45 Socket 源码及面试题
- 46 ServerSocket 源码及面试题
- 47 工作实战:Socket 结合线程池的使用
- 第10章 专栏总结
- 48 一起看过的 Java 源码和面试真题