您好,登錄后才能下訂單哦!
前言:
如何閱讀源碼,是每個程序員需要面臨的一項挑戰(zhàn),為什么需要閱讀源碼?從實用性的角度來看,主要有三個目的:
第一,解決手頭的新問題或者新需求;
第二,真正理解一部分理論的落地實現(xiàn);
第三,應(yīng)對面試。
端正心態(tài)
在準備投身到閱讀源碼的事業(yè)之前,首先需要端正一下心態(tài):
在此,我更推薦把源碼閱讀當(dāng)成是一項興趣愛好去做,就好比有的人通過打游戲看直播放松,有的人通過刷新聞追熱劇放松,還有的人通過找朋友吹牛逼放松...不同的人會選擇不同的勞逸結(jié)合方式,我更喜歡不寫代碼的時候,通過看別人的代碼來放松。
作為一名Javaer,朝夕相處的JDK自然是你遇到的第一處寶藏之地。從閱讀JDK代碼出發(fā),可以深入理解Java的一些新老特性,并學(xué)習(xí)部分設(shè)計模式的應(yīng)用,以及為將來閱讀更龐大的框架打下扎實的理論基礎(chǔ)與頑強的心理基礎(chǔ)。
選擇工具
工欲善其事必先利其器,起步之前,需要先選擇一款源碼閱讀工具。在工具的選擇上,同行的建議很多,我大致將其分為四類:
從個人喜好講,我推薦IDEA和UEStudio(搭配UltraFinder)配合使用。
IDEA作為強大的Java生產(chǎn)工具,用來閱讀Java源碼顯然再合適不過。而UEStudio可以作為臨時查看Java文件或者查看JDK中部分C++代碼時的選擇,再搭配UltraFinder,實現(xiàn)跨文件的任意符號搜索,很實用。
關(guān)于閱讀環(huán)境的搭建,參見我在 https://github.com/kangjianwei/LearningJDK 中的描述即可。
本次給大家分享一些學(xué)習(xí)資料,里面包括:(高可用、高并發(fā)、高性能及分布式、 Jvm性能調(diào)優(yōu)、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構(gòu)資料)和Java進階學(xué)習(xí)路線圖。
領(lǐng)取方式: 加 q群 468897908 免費獲??!
閱讀順序
JDK的項目歷經(jīng)了十幾個大版本,算上開源社區(qū)的貢獻,經(jīng)手的人可能也達到上千人。對于這種龐大的項目,一次性讀完肯定是不可能,必須先找到一個恰當(dāng)?shù)娜肟冢帜K來一點點啃完。
可能的一種閱讀順序是:
注意,這里說的順序只是一個大致的方向,并不代表需要絕對按照這個名單來。
在閱讀某一個代碼時,往往會牽涉到很多別的代碼,這個時候就會產(chǎn)生很多閱讀分支,分支的走向,并不在上述名單之內(nèi)。
善用技巧
閱讀代碼的技巧,因人而異。就像一千位讀者,就有一千部哈姆雷特,每個人對這件事的看法并不相同。在此,我只談下個人的一些經(jīng)驗。
理論先行。閱讀某一個模塊時,先搜索它的理論支撐,甚至可以先看別人的閱讀經(jīng)驗,有了一個大致的了輪廓之后,自己再去實踐。
必須試用。面對一個新的類,最好是先搜索一下它的基本用法,寫成一個小的示例,并從這個示例中用到的方法入手,去分析這個類。
巧用調(diào)試。關(guān)于IDEA中debug的使用方式,超出了本文的講述范圍。值的注意的是,除了需要學(xué)習(xí)常用的運行時調(diào)試,還需要學(xué)習(xí)編譯時調(diào)試,這個在閱讀Java語言模型那塊的代碼時很有用。
分清主次。類與類之間呈網(wǎng)狀結(jié)構(gòu),在閱讀某個類的時候,不可避免地需要先去閱讀它引用的其他類。但是,如果它引用的類很復(fù)雜,則建議先放一放,做個標記,回頭再讀。不過,如果在閱讀多個類時,其調(diào)用鏈最終都指向了同一個類,那么這個類就必須先拿下了。
業(yè)務(wù)為先。如果一個類太過龐大,則先將其中的方法按功能歸類,捋清大致的執(zhí)行流程,接下來再逐個功能地去攻克。
不求甚解。有些方法不需要搞清楚實現(xiàn)過程,只需要了解它的作用。比如一些特定領(lǐng)域的算法,對某些規(guī)則的解析等。
以點帶面。如果看懂了某一個方法,就要搜索該方法的所有應(yīng)用之處,驗證自己的想法是否正確,并在應(yīng)用之處寫下注釋。哪怕理解的有誤差也沒事,回頭有新的理解再批量修改。對于字段的閱讀與理解,也建議采取此種方式。
勇于試錯。很多接口方法的描述很抽象,在不同的實現(xiàn)類中意義相差很大。此時先弄懂一個類的實現(xiàn),然后拿著在這個類中的理解去解讀另外的實現(xiàn)類,如果解讀有誤,再逐漸修復(fù)。不要指望一次性就能正確地理解某個方法的作用,理解錯誤,不妨礙繼續(xù)前進。
留意注釋。大部分公開的方法上都有相應(yīng)的注釋,這是快速理解這個方法的重要途徑。注釋建議拿到谷歌翻譯下去閱讀,當(dāng)然,如果能流利閱讀英文就更好了。不過,很多時候,注釋是令人沮喪的:看完之后完全不知道他在說啥。這個也很正常,因為有些注釋中會涉及到很多行業(yè)術(shù)語或通用解決方案的描述,如果之前沒有這些理論背景,大概率是讀不懂注釋的。原生注釋不是萬能的,有時候甚至很雞肋:你不理解這個方法之前,也不理解他的注釋,等你理解了這個方法,才會覺得這些注釋說得對。因此,我建議留意注釋,但別依賴注釋,有時候搜索其他網(wǎng)友的理解,再結(jié)合自己的閱讀,會來的更舒服一些。
勤做筆記。有一點靈感,就需要記錄一下,最好是直接記錄在源碼對應(yīng)的位置,而且能詳細就別簡略,好記性終究抵不過爛筆頭。
循序漸進。在頭腦清醒的時候,打開源碼讀一讀,感覺讀不懂的時候,就不要繼續(xù)死磕了,應(yīng)該放下干點別的,或者改天再讀。我讀完一個類,時間跨度可能會超過一個月,這是個不斷補充和完善的過程,不可能一次性就搞定。有時候眼看就讀懂了,但就是差一點點關(guān)鍵性的理解,這個時候人就容易急,急就容易燥,燥就容易慌,慌就容易亂,亂就容易砸鼠標。所以,一旦覺得遇到瓶頸,那就及時終止吧,因為你可能需要放松大腦,以及補充一些缺失的基礎(chǔ)理論了。
感謝您耐心看完了文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。