## 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 源碼和面試真題