聊聊讀原始碼這件事

語言: CN / TW / HK

對於讀原始碼這件事,每個人心中都有一個哈姆雷特,今天這篇文章聊聊我對讀原始碼這件事的一點拙見

02

為什麼讀原始碼

讀原始碼的時候,可以先問一下自己為什麼讀原始碼?是為了解決問題,還是單純只是想了解原始碼的來龍去脈,更甚者僅僅只是為了面試,畢竟面試造火箭,不懂點原始碼,都沒法去忽悠面試官

讀原始碼首先要弄清楚自己的讀原始碼的動機,以及通過讀原始碼想達到什麼目的

03

讀原始碼的心態

讀原始碼是一件很枯燥的事情,很多時候我們會因為一時雞血,翻下原始碼,然後發現跟看天書一樣

如何讓讀原始碼不那麼枯燥,我們可以先定一個小目標

我們可以 先把原始碼拆分成幾個小章節,每閱讀完,可以給自己獎勵下 ,比如玩把遊戲,吃個大餐,或者幹一下你想做卻沒做的事情,讓大腦得到一個正向反饋,即我做完這個事情,我會得到一些好處。原始碼有時候枯燥,是因為我們沒有得到一個積極的反饋,更多時候是

讀原始碼不能抱有急躁的心態,心急吃不了熱豆腐

04

什麼時候適合讀原始碼

我看來,讀原始碼是 建立在你對這個原始碼的程式語言已經很熟悉的情況 ,比如你想看k8s的原始碼,但是你對go語言一竅不通,你就一頭鑽進去研究,我想你大概後面的結局是

其次是 你已經對這個原始碼的基本功能有個清楚的認知,知道他的應用場景,能利用他的一些特性來做一些編碼 ,比如你會使用spring的依賴注入,AOP等

最後你對這個原始碼已經產生一點興趣,有研究的慾望了,而不是別人強迫你去讀, 內在的自驅力以及興趣,是做好事情的原動力

05

如何讀原始碼

原始碼分為兩種情況

01

很多人已經在研究的原始碼

像這種其實沒必要一開始就鑽進原始碼看,而是你可以針對你這個原始碼感興趣的點,通過搜尋引擎查詢一下。你也可以通過processon搜一下相關的原始碼圖,比如

不過這種有個不好地方,等於是別人把東西嚼碎了再餵給你,你想想那個畫面。 最後你還得通過原始碼驗證一下 ,因為不確定別人分析的是不是正確的,而且看原始碼的時候, 必須得格外關注一下你看原始碼的版本 ,比如你看spring2.5和spring5的版本,會有發現會有很多區別。

直接通過搜尋引擎找原始碼,有個好處就是你可以很快找到你感興趣除錯的原始碼入口,以及一些相對比較核心的程式碼塊。

如果這種大家都研究過的原始碼,你也不想通過搜尋找答案,就是隻想速成,也有方法的,就是花錢

找個培訓機構或者付費教程,基本上這些機構都會教一些主流技術的原始碼。如果你只想白嫖,也可以去B站搜一下

但不管怎樣,你吸收這些後,最後還得自己去跟蹤除錯驗證下, 因為只有原始碼不會騙人

02

偏門或者新出的技術

如果你研究的東西,大家研究比較少,要麼是這個技術不是主流技術,要麼就是這個技術未來可能是主流,只是目前受眾比較少。

像這種原始碼,你也不用急著一開始就鑽進原始碼,而是去官網溜一圈,看看這個技術的一些背景,特性,應用場景,入門案例。基本上每個技術的出現,是要解決某些問題,而這種技術的出現,正常會伴隨和競品的對比,而這種競品正常也是大家耳熟能詳的東西。比如redisJson和mongdb的對比。對這個技術有個整體的瞭解後, 你可以看下他們的程式碼倉是否有提供完整的example或者單元測試,這些example正常提供就是這個技術的一個個功能點 ,你對這些功能點了解後,你就可以通過斷點除錯,通過呼叫棧檢視相應的類。具體除錯你就可以直接通過在單元測試或者提供的example那邊打斷點

看完原始碼後,最好能形成一張原始碼知識地圖,以便後續查閱。

聊完原始碼後,我說一點題外話,本來這篇文章是對之前自定義spi文章的收尾總結,後面是因為有朋友說想知道我是怎麼讀原始碼的,就乾脆寫一篇文章。我很少寫這種理論的東西,希望對大家有一點幫助。

下面貼一下我那個spi專案demo連結以及自定義spi相關的文章

06

demo連結

https://github.com/lyb-geek/springboot-learning/tree/master/springboot-spi-enhance

07

自定義spi相關文章

1、 聊聊如何實現一個支援鍵值對的SPI

2、 聊聊如何實現一個帶有攔截器功能的SPI

3、 聊聊自定義實現的SPI如何與spring進行整合

4、 聊聊自定義SPI如何使用自定義標籤注入到spring容器中

5、 聊聊自定義SPI如何與sentinel整合實現熔斷限流