再談源碼閱讀

source code

在軟件開發中遇到問題的時候,我傾向於在不須要閱讀源碼的狀況下解決問題,我會優先去查官方文檔、FAQ、google或stackoverflow等網站,去看下有沒有前人已經遇到過同類問題。閱讀源碼來解決問題,算是殺手鐗。固然,還有另外一種需求,就是但願經過閱讀源碼瞭解軟件的設計細節,來達到學習的目的,例如,經過閱讀Dubbo的源碼,我能夠了解一個RPC框架的設計細節。java

前提

閱讀源碼以前要作必定的準備工做。面試

首先,確保本身掌握了相關的基礎知識,例如,若是你要閱讀Linux內核源碼,要掌握C語言的語法、操做系統的基本概念和原理,若是你要閱讀Spring的源碼,要掌握Java語言基礎、Maven的使用、一些設計模式等等;算法

第二,要學會使用這個軟件或框架,瞭解這個軟件或框架的使用場景,有什麼功能,同類競品有哪些,在學習使用軟件或框架的過程當中,最重要的參考資料是官方文檔,一款優質的軟件或框架,官方文檔通常包括三塊:快速開始,即一些demo;參考文檔,最詳細的文檔,包括概念、特性的解讀;FAQ:對於使用者來講常見的問題的解答;後端

第三,初步瞭解代碼的總體組織結構,每一個文件夾是作什麼用的。設計模式

調試環境

調試環境很是重要,有了調試環境,就能夠根據須要進行斷點,對閱讀源碼很是有幫助。至於說如何搭建調試環境,不一樣的狀況有不一樣的處理辦法,例如MAT的源碼,我是先將它的核心邏輯剝離出來,而後本身用單元測試進行調試;對於Dubbo源碼,我則是寫了一個Dubbo服務提供者、一個Dubbo服務消費者,以及安裝了ZK以後才搭建起來的;對於Spring最簡單了,利用Spring Boot啓動一個hello word的demo就能夠。框架

場景閱讀

在作完上述準備工做後,我會按照使用功能或場景來閱讀源碼,例如,在閱讀MAT(內存分析工具)的源碼的時候,我是按照如下幾個步驟來閱讀:文件解析、索引建立、類直方圖查詢、支配樹查詢、線程視圖查詢等等;在閱讀Spring源碼的時候,我會按照Spring容器的啓動、IoC的工做過程、AOP的工做過程、靜態屬性的引入等功能來閱讀;在閱讀Dubbo源碼的時候,我會按照服務發佈、服務訂閱、服務調用三個主要場景進行源碼閱讀。按照功能或場景閱讀,可讓咱們從總體上對代碼有所理解,而後就能夠進入本身關注的一些細節了,例如:在MAT中,索引文件是如何建立的,在Dubbo中,請求的超時機制和心跳機制是如何實現的。函數

總結

閱讀源碼的過程當中,我總結出了一些須要注意的點:工具

  1. 自頂向下閱讀,先把握總體的、大的流程,而後再根據須要切入到對應的分支
  2. 忽略一些細節,例如參數的檢查、錯誤的處理、數據形式的轉換和存儲
  3. 儘可能準備好調試環境
  4. 要關注核心的業務邏輯或算法
  5. 最好能在閱讀的過程當中輸出一些筆記或文檔,例如模塊劃分圖、函數的流程圖、針對某個業務場景,在幾個模塊之間的時序圖等等,這些文檔能夠先手寫,而後再造成電子版存檔。

上述就是我本身針對源碼閱讀的一些經驗,若是你有好的經驗或想法,歡迎在留言區與我交流單元測試


本號專一於後端技術、JVM問題排查和優化、Java面試題、我的成長和自我管理等主題,爲讀者提供一線開發者的工做和成長經驗,期待你能在這裏有所收穫。學習

javaadu
相關文章
相關標籤/搜索