閱讀源碼之我見

過年后從勝任工作的喜悅中緩過勁來,發(fā)現(xiàn)自己在Java之路上只是剛剛?cè)腴T,于是開始了惡補。最先主要是看書補習(xí)基礎(chǔ)知識,后來一步步逐漸閱讀源碼。相對于讀書看視頻這些直觀的知識輸出,閱讀源碼的門檻稍微高了一點,我也浪費了很多時間在閱讀源碼的門口徘徊,始終不得法而入。在不斷地嘗試后終于也總結(jié)了一些經(jīng)驗,分享出來希望幫助有需要的人。

閱讀源碼的好處

許多人的學(xué)習(xí)路線應(yīng)該與我一致,在學(xué)習(xí)完java的基礎(chǔ)知識之后,迫不及待地扎進(jìn)源碼的海洋之中想要一睹大師們的風(fēng)采。為什么我們要閱讀源碼呢?我認(rèn)為有以下兩點好處。1、閱讀代碼可以幫助我們深入了解內(nèi)部的實現(xiàn),看到大牛們?nèi)绾畏庋b繼承多態(tài),如何合理地運用設(shè)計模式,如何在開銷最小的情況下保證線程安全等等。我們應(yīng)該感謝開源,大牛們的代碼就是一本本活生生的教科書。另一方面,閱讀源碼可以幫我們解決很多工作中遇到的問題,許多bug都是因為我們對程序細(xì)節(jié)實現(xiàn)的不了解導(dǎo)致的。如果不知道線程池在核心線程滿了之后是先入隊還是繼續(xù)創(chuàng)建線程直到最大線程數(shù),可能就會造成性能上的問題;如果不了解IOC、AOP,可能就無法解決AOP和自己實現(xiàn)BeanPostProcessor做的代理之間可能出現(xiàn)的沖突等等。

閱讀源碼的方式

我認(rèn)為源碼閱讀分為三步,這里以Netty的源碼舉例。第一步,首先了解一下源碼如何使用??梢栽囍葘懸粋€簡單的客戶端服務(wù)端的demo將Netty跑起來,了解一下基本的功能,常用的API等等。這時可以輔助閱讀官方的文檔或者買一本快速入門的書籍。會用從來都是閱讀源碼的基礎(chǔ),如果用都沒用過上來就讀,一方面很難讀懂浪費時間,另一方面有些為了讀源碼而讀源碼的舍本逐末。
第二步則是了解源碼的背景以及整體架構(gòu)。我們都知道Netty總體上是對NIO的一個封裝,那么NIO是什么?為什么要封裝它,解決了什么問題?OIO是什么?NIO相對于OIO又改進(jìn)了什么?這一連串的問題都需要我們事先進(jìn)行了解,才會在閱讀源碼之旅中有所得。除此之外,我們應(yīng)該從官方的文檔或者網(wǎng)上的博客上大體了解Netty的架構(gòu),整體組成是怎樣以及每個模塊負(fù)責(zé)什么功能,這樣會使得我們在閱讀源碼之時不會一葉障目,陷入細(xì)節(jié)。
最后就可以開始閱讀源碼了。閱讀源碼的好方法有很多,個人比較喜歡一邊看博客一邊跟著debug,效率很高。還有一點需要注意的是,我們?nèi)绻肓私釴etty,一方面要閱讀Netty的源碼了解細(xì)節(jié)實現(xiàn),另一方面要閱讀用Netty進(jìn)行工業(yè)級實現(xiàn)的代碼(Dubbo、RocketMQ等)了解Netty正確的打開方式。
說是閱讀源碼的心得,卻主要講的是閱讀源碼的鋪墊。個人認(rèn)為這些鋪墊一定程度上比閱讀源碼更重要。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容