如何去閱讀并學(xué)習(xí)一些優(yōu)秀的開(kāi)源框架的源碼躬厌?

在軟件開(kāi)發(fā)中遇到問(wèn)題的時(shí)候,我傾向于在不需要閱讀源碼的情況下解決問(wèn)題竞帽,我會(huì)優(yōu)先去查官方文檔扛施、FAQ鸿捧、google或stackoverflow等網(wǎng)站,去看下有沒(méi)有前人已經(jīng)遇到過(guò)同類問(wèn)題疙渣。閱讀源碼來(lái)解決問(wèn)題匙奴,算是殺手锏。當(dāng)然妄荔,還有另一種需求泼菌,就是希望通過(guò)閱讀源碼了解軟件的設(shè)計(jì)細(xì)節(jié),來(lái)達(dá)到學(xué)習(xí)的目的啦租,例如哗伯,通過(guò)閱讀Dubbo的源碼,我可以了解一個(gè)RPC框架的設(shè)計(jì)細(xì)節(jié)刷钢。

前提

閱讀源碼之前要做一定的準(zhǔn)備工作笋颤。

首先,確保自己掌握了相關(guān)的基礎(chǔ)知識(shí)内地,例如伴澄,如果你要閱讀Linux內(nèi)核源碼,要掌握C語(yǔ)言的語(yǔ)法阱缓、操作系統(tǒng)的基本概念和原理非凌,如果你要閱讀Spring的源碼,要掌握J(rèn)ava語(yǔ)言基礎(chǔ)荆针、Maven的使用敞嗡、一些設(shè)計(jì)模式等等;

第二航背,要學(xué)會(huì)使用這個(gè)軟件或框架喉悴,了解這個(gè)軟件或框架的使用場(chǎng)景,有什么功能玖媚,同類競(jìng)品有哪些箕肃,在學(xué)習(xí)使用軟件或框架的過(guò)程中,最重要的參考資料是官方文檔今魔,一款優(yōu)質(zhì)的軟件或框架勺像,官方文檔一般包括三塊:快速開(kāi)始,即一些demo错森;參考文檔吟宦,最詳細(xì)的文檔,包括概念涩维、特性的解讀殃姓;FAQ:對(duì)于使用者來(lái)說(shuō)常見(jiàn)的問(wèn)題的解答;

第三,初步了解代碼的整體組織結(jié)構(gòu)辰狡,每個(gè)文件夾是做什么用的锋叨。

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

調(diào)試環(huán)境非常重要,有了調(diào)試環(huán)境宛篇,就可以根據(jù)需要進(jìn)行斷點(diǎn)娃磺,對(duì)閱讀源碼非常有幫助。至于說(shuō)如何搭建調(diào)試環(huán)境叫倍,不同的情況有不同的處理辦法偷卧,例如MAT的源碼,我是先將它的核心邏輯剝離出來(lái)吆倦,然后自己用單元測(cè)試進(jìn)行調(diào)試听诸;對(duì)于Dubbo源碼,我則是寫了一個(gè)Dubbo服務(wù)提供者蚕泽、一個(gè)Dubbo服務(wù)消費(fèi)者晌梨,以及安裝了ZK之后才搭建起來(lái)的;對(duì)于Spring最簡(jiǎn)單了须妻,利用Spring Boot啟動(dòng)一個(gè)hello word的demo就可以仔蝌。

場(chǎng)景閱讀

在做完上述準(zhǔn)備工作后,我會(huì)按照使用功能或場(chǎng)景來(lái)閱讀源碼荒吏,例如敛惊,在閱讀MAT(內(nèi)存分析工具)的源碼的時(shí)候,我是按照以下幾個(gè)步驟來(lái)閱讀:文件解析绰更、索引創(chuàng)建瞧挤、類直方圖查詢、支配樹(shù)查詢儡湾、線程視圖查詢等等特恬;在閱讀Spring源碼的時(shí)候,我會(huì)按照Spring容器的啟動(dòng)徐钠、IoC的工作過(guò)程鸵鸥、AOP的工作過(guò)程、靜態(tài)屬性的引入等功能來(lái)閱讀丹皱;在閱讀Dubbo源碼的時(shí)候,我會(huì)按照服務(wù)發(fā)布宋税、服務(wù)訂閱摊崭、服務(wù)調(diào)用三個(gè)主要場(chǎng)景進(jìn)行源碼閱讀。按照功能或場(chǎng)景閱讀杰赛,可以讓我們從整體上對(duì)代碼有所理解呢簸,然后就可以進(jìn)入自己關(guān)注的一些細(xì)節(jié)了,例如:在MAT中,索引文件是如何創(chuàng)建的根时,在Dubbo中瘦赫,請(qǐng)求的超時(shí)機(jī)制和心跳機(jī)制是如何實(shí)現(xiàn)的。

總結(jié)

閱讀源碼的過(guò)程中蛤迎,我總結(jié)出了一些需要注意的點(diǎn):

  1. 自頂向下閱讀确虱,先把握整體的、大的流程替裆,然后再根據(jù)需要切入到對(duì)應(yīng)的分支

  2. 忽略一些細(xì)節(jié)校辩,例如參數(shù)的檢查、錯(cuò)誤的處理辆童、數(shù)據(jù)形式的轉(zhuǎn)換和存儲(chǔ)

  3. 盡量準(zhǔn)備好調(diào)試環(huán)境

  4. 要關(guān)注核心的業(yè)務(wù)邏輯或算法

  5. 最好能在閱讀的過(guò)程中輸出一些筆記或文檔宜咒,例如模塊劃分圖、函數(shù)的流程圖把鉴、針對(duì)某個(gè)業(yè)務(wù)場(chǎng)景故黑,在幾個(gè)模塊之間的時(shí)序圖等等,這些文檔可以先手寫庭砍,然后再形成電子版存檔场晶。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市逗威,隨后出現(xiàn)的幾起案子峰搪,更是在濱河造成了極大的恐慌,老刑警劉巖凯旭,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件概耻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡罐呼,警方通過(guò)查閱死者的電腦和手機(jī)鞠柄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嫉柴,“玉大人厌杜,你說(shuō)我怎么就攤上這事〖坡荩” “怎么了夯尽?”我有些...
    開(kāi)封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)登馒。 經(jīng)常有香客問(wèn)我匙握,道長(zhǎng),這世上最難降的妖魔是什么陈轿? 我笑而不...
    開(kāi)封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任圈纺,我火速辦了婚禮秦忿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蛾娶。我一直安慰自己灯谣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布蛔琅。 她就那樣靜靜地躺著胎许,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揍愁。 梳的紋絲不亂的頭發(fā)上呐萨,一...
    開(kāi)封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音莽囤,去河邊找鬼谬擦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛朽缎,可吹牛的內(nèi)容都是我干的惨远。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼话肖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼北秽!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起最筒,我...
    開(kāi)封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贺氓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后床蜘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體辙培,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年邢锯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扬蕊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡丹擎,死狀恐怖尾抑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蒂培,我是刑警寧澤再愈,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站护戳,受9級(jí)特大地震影響践磅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜灸异,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一府适、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肺樟,春花似錦檐春、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至田柔,卻和暖如春俐巴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背硬爆。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工欣舵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缀磕。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓缘圈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親袜蚕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子糟把,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容