我剛工作的時候,就有一些大佬推薦我來閱讀 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 源碼和面試真題