## 01 开篇词:为什么学习本专栏
> 才能一旦让懒惰支配,它就一无可为。
> ——克雷洛夫
### 不为了源码而读源码,只为了更好的实践
你好,我是文贺,Java 技术专家,DDD 和业务中台的资深实践者,一周面试 2~3 次的面试官。
说起自己开始阅读 Java 源码的契机,还是在第一年换工作的时候,被大厂的技术面虐的体无完肤,后来总结大厂的面试套路,发现很喜欢问 Java 底层实现,即 Java 源码,于是我花了半年时间,啃下了 Java 源码,终于进了网易。
以我个人经历来说,**阅读源码真的可以帮助你顺利过技术面,找到更好的工作**。
阅读源码还可以帮忙我们增加个人自信,学习其优良设计思想,总结出最优使用姿势,避免踩坑,甚至针对工作中的痛点进行创新改造。
而在实际工作中,你可能遇到过这些尴尬:
1. 很多 API 的使用,需要先百度,然后再复制粘贴;
2. 针对不同的场景,不知道如何设计不同类型的线程池,对 API 的使用没有太多的场景经验总结;
3. 代码 review 的时候,提不出意见,自己的代码却常常被别人吐槽;
4. 对于工作中 API 使用不方便的地方,想优化,但不知其内部实现原理,不敢动手。
通过调查发现,能绕过以上尴尬的同学,多数都是阅读过 Java 源码、对 Java 底层的构造了如指掌的。这些同学能写团队核心代码,能轻易看出代码漏洞,能总结出 Java 的设计思想,并运用到日常工作中。
**所以说阅读 Java 源码,还能让我们结合场景熟练的使用 API,基于工作中使用痛点做一些源码创新,是成为团队核心的技术基础。**
我现在陆续阅读过 Java 7、8 的源码几遍,一开始很难坚持,因为源码比较枯燥。首先不知道源码的整体架构,然后细节之处不知道为什么这么写,但最终还是啃下来了,甚至喜欢了阅读源码,于是我在想,是不是可以把我的源码阅读经验和一线工作经验结合,使本课程成为源码的阅读指南、面试指南和场景实战指南。
为了大家更易阅读,在接下来的 40 课中,**我们会先从实际的案例场景出发,对 Java 中 30+ 个核心类进行图文源码解析,并从中总结出设计思想、最优使用姿势和坑,最终以连环面试题进行巩固**。
我们对于每个源码类的文章套路为:
1. 怎么用:用场景来说明类的重要方法的使用技巧;
2. 为什么:源码解析其底层实现源码,复杂的源码会有动图解析;
3. 总结:总结出设计思想、最优使用姿势和坑,看看能否为工作中所用;
4. 面试题:总结出最新连环面试题,一题接着一题深入,可以作为面试官和面试者的面试指南。
本课程涉及到的 Java 知识非常齐全,主要有基础类、集合类、并发集合类、队列、线程、锁、线程池、Lambda 流等内容,内容几乎涵盖了工作和面试的核心,如果你对这些源码都了如指掌,面试题再千变万化,你也能应对自如。
源码解析主要以 Java 8 为主,对版本变动较大的类会做 Java 7、8 版本的比较。
学习本课程门槛较低,只需要你有一颗肯学习进步,希望成为 Java 技术专家的信心和决心即可。
本课程会有源码的 GitHub,欢迎喜欢阅读源码的同学来创建自己的分支,一起来结伴阅读源码,写上自己的感悟互相交流。
总之,我一定会把专栏写的通俗易懂,也希望面前的你通过阅读本课程,找到更好的工作,走上 Java 专家之路,成为更专业,更资深,更有影响力的技术实践创新者。
- 前言
- 第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 源码和面试真题