源碼閱讀經(jīng)驗

source code

在軟件開發(fā)中遇到問題的時候亏娜,我傾向于在不需要閱讀源碼的情況下解決問題,我會優(yōu)先去查官方文檔绑雄、FAQ航夺、google或stackoverflow等網(wǎng)站,去看下有沒有前人已經(jīng)遇到過同類問題腥光。閱讀源碼來解決問題丁存,算是殺手锏。當然柴我,還有另一種需求解寝,就是希望通過閱讀源碼了解軟件的設計細節(jié),來達到學習的目的艘儒,例如聋伦,通過閱讀Dubbo的源碼夫偶,我可以了解一個RPC框架的設計細節(jié)。

前提

閱讀源碼之前要做一定的準備工作觉增。

首先兵拢,確保自己掌握了相關的基礎知識,例如逾礁,如果你要閱讀Linux內(nèi)核源碼说铃,要掌握C語言的語法、操作系統(tǒng)的基本概念和原理嘹履,如果你要閱讀Spring的源碼腻扇,要掌握Java語言基礎、Maven的使用砾嫉、一些設計模式等等幼苛;

第二,要學會使用這個軟件或框架焕刮,了解這個軟件或框架的使用場景舶沿,有什么功能,同類競品有哪些配并,在學習使用軟件或框架的過程中括荡,最重要的參考資料是官方文檔,一款優(yōu)質(zhì)的軟件或框架溉旋,官方文檔一般包括三塊:快速開始一汽,即一些demo;參考文檔低滩,最詳細的文檔,包括概念岩喷、特性的解讀恕沫;FAQ:對于使用者來說常見的問題的解答;

第三纱意,初步了解代碼的整體組織結構婶溯,每個文件夾是做什么用的。

調(diào)試環(huán)境

調(diào)試環(huán)境非常重要偷霉,有了調(diào)試環(huán)境迄委,就可以根據(jù)需要進行斷點,對閱讀源碼非常有幫助类少。至于說如何搭建調(diào)試環(huán)境叙身,不同的情況有不同的處理辦法,例如MAT的源碼硫狞,我是先將它的核心邏輯剝離出來信轿,然后自己用單元測試進行調(diào)試晃痴;對于Dubbo源碼,我則是寫了一個Dubbo服務提供者财忽、一個Dubbo服務消費者倘核,以及安裝了ZK之后才搭建起來的;對于Spring最簡單了即彪,利用Spring Boot啟動一個hello word的demo就可以紧唱。

場景閱讀

在做完上述準備工作后,我會按照使用功能或場景來閱讀源碼隶校,例如漏益,在閱讀MAT(內(nèi)存分析工具)的源碼的時候,我是按照以下幾個步驟來閱讀:文件解析惠况、索引創(chuàng)建遭庶、類直方圖查詢、支配樹查詢稠屠、線程視圖查詢等等峦睡;在閱讀Spring源碼的時候,我會按照Spring容器的啟動权埠、IoC的工作過程榨了、AOP的工作過程、靜態(tài)屬性的引入等功能來閱讀攘蔽;在閱讀Dubbo源碼的時候龙屉,我會按照服務發(fā)布、服務訂閱满俗、服務調(diào)用三個主要場景進行源碼閱讀转捕。按照功能或場景閱讀,可以讓我們從整體上對代碼有所理解唆垃,然后就可以進入自己關注的一些細節(jié)了五芝,例如:在MAT中,索引文件是如何創(chuàng)建的辕万,在Dubbo中枢步,請求的超時機制和心跳機制是如何實現(xiàn)的。

總結

閱讀源碼的過程中渐尿,我總結出了一些需要注意的點:

  1. 自頂向下閱讀醉途,先把握整體的、大的流程砖茸,然后再根據(jù)需要切入到對應的分支
  2. 忽略一些細節(jié)隘擎,例如參數(shù)的檢查、錯誤的處理凉夯、數(shù)據(jù)形式的轉(zhuǎn)換和存儲
  3. 盡量準備好調(diào)試環(huán)境
  4. 要關注核心的業(yè)務邏輯或算法
  5. 最好能在閱讀的過程中輸出一些筆記或文檔嵌屎,例如模塊劃分圖推正、函數(shù)的流程圖、針對某個業(yè)務場景宝惰,在幾個模塊之間的時序圖等等植榕,這些文檔可以先手寫,然后再形成電子版存檔尼夺。

上述就是我自己針對源碼閱讀的一些經(jīng)驗尊残,如果你有好的經(jīng)驗或想法,歡迎在留言區(qū)與我交流


本號專注于Java后端技術淤堵、IT行業(yè)雜談寝衫、程序員面試等主題,堅持高質(zhì)量原創(chuàng)產(chǎn)出拐邪,如果你對它的內(nèi)容比較肯定慰毅,歡迎掃碼關注。


javaadu
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扎阶,一起剝皮案震驚了整個濱河市汹胃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌东臀,老刑警劉巖着饥,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異惰赋,居然都是意外死亡宰掉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門赁濒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轨奄,“玉大人,你說我怎么就攤上這事拒炎∨材猓” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵枝冀,是天一觀的道長。 經(jīng)常有香客問我耘子,道長果漾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任谷誓,我火速辦了婚禮绒障,結果婚禮上,老公的妹妹穿的比我還像新娘捍歪。我一直安慰自己户辱,他們只是感情好鸵钝,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著庐镐,像睡著了一般恩商。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上必逆,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天怠堪,我揣著相機與錄音,去河邊找鬼名眉。 笑死粟矿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的损拢。 我是一名探鬼主播陌粹,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼福压!你這毒婦竟也來了掏秩?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤隧膏,失蹤者是張志新(化名)和其女友劉穎哗讥,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胞枕,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡杆煞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了腐泻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片决乎。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖派桩,靈堂內(nèi)的尸體忽然破棺而出构诚,到底是詐尸還是另有隱情,我是刑警寧澤铆惑,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布范嘱,位于F島的核電站,受9級特大地震影響员魏,放射性物質(zhì)發(fā)生泄漏丑蛤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一撕阎、第九天 我趴在偏房一處隱蔽的房頂上張望受裹。 院中可真熱鬧,春花似錦、人聲如沸棉饶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽照藻。三九已至袜啃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間岩梳,已是汗流浹背囊骤。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冀值,地道東北人也物。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像列疗,于是被迫代替她去往敵國和親滑蚯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354