乙個軟體開發人員,工作到了一定的年限(一般是3、4年左右),如果他還沒學會閱讀原始碼,那麼他就會遇到瓶頸。因為到了這個時候的開發,他應該不僅僅只會做那些 curd 的業務邏輯,而應該會根據公司的實際情況去寫框架。而基本上沒有誰能像天才一樣從零寫出乙個框架,很多人寫框架其實都是從模仿開始的。而你要模仿,那麼你首先得看得懂框架原始碼才行。所以說閱讀原始碼才顯得那麼重要。
我在工作一兩年的時候有嘗試去看過 jdk 的原始碼,那時候感覺就跟看天書一樣,看一點都覺得痛苦。一直到工作三年左右,因為同事都在看原始碼,我也開始看一些原始碼。我看的第乙個框架的原始碼是 dubbo,雖然說沒有完全搞懂它。但是通過閱讀 dubbo 原始碼,我弄懂了 jdk 的 spi 機制,知道 spi 在框架開發中的作用。一直到最近閱讀公司的乙個閘道器框架,我才慢慢有一點閱讀原始碼的經驗和套路。正好趁熱打鐵,把這些經驗寫下來,希望你們也能早日踏上原始碼閱讀之路。
閱讀乙個框架的原始碼,最基礎的操作肯定是掃一遍網上的各種分析文章。通過這個操作,你可以對這個框架有個大致的了解。站在巨人的肩膀上,少走許多彎路。但如果你看的專案是公司內部的框架,那麼你只能找公司內部的文件了,更甚者,有些連文件都沒有。那麼你可以略過這一步。
當你拿到框架的原始碼的時候,你可以大致把原始碼的每個包,以及每個包下面的檔案掃讀一遍。掃讀並不需要你弄清楚每一行**的意思,只需要讓你知道原始碼每一部分的作用。
如果乙個開源框架足夠標準,那麼他的命名是非常語義化的。所以我們掃讀的時候,通過包名、檔名就可以判斷出這個包是用來幹嘛的。例如 util 包是工具類,那我們可以直接跳過。vo 包是存放實體模型的,同樣可以跳過。protocol 包是存放協議相關的等等。通過這麼乙個步驟,你會對整個專案有乙個基本的印象,知道這個專案大概有哪些東西,哪些相對比較重要。
閱讀任何乙個框架的原始碼,首先就是要找到框架的入口。通過上面掃讀原始碼,你應該能夠發現一些入口的跡象,例如對於 dubbo 來說,你會發現它有乙個名為 dubbo-demo 的子模組,那麼我們肯定重點看它。進一步發掘需求你會發現它的入口就是 dubbo-demo 中的 provider 類、consumer 類。我們可以直接接執行這兩個類的 main 方法,並一步步跟蹤**的執**況。
找到入口之後,下一步就是通讀所有原始碼了,就是把原始碼的每個檔案每一行都看一遍。在這個階段不求完全弄懂細緻的業務邏輯,但是要形成乙個大概的框架,知道這個框架是如何設計的,有哪些大致的模組,這些模組是如何設計的。
在通讀原始碼這個階段是最枯燥無味的,也是最容易放棄的。一方面因為原始碼實在過於多,另一方面因為沒有乙個目標,所以看著看著心裡沒有底,所以容易放棄。我一開始也是如此,但之後我想出了乙個比較好的辦法,通過數位化的方式讓自己知道閱讀進度。這樣自己就不會覺得心裡沒底,不知道要多久才能看完了。
我的方法是給我的 ide 裝乙個**統計外掛程式:statistics。這個外掛程式能夠統計專案中的原始碼行數。例如下面是我統計 dubbo 專案原始碼的截圖,它會列出每個 j**a 檔案的原始碼行數,以及總共的行數。
從上面的截圖我們可以看到 dubbo 專案裡,原始碼的行數有 11 萬行。這樣一來,自己心理也有個大致的預期了。接下來,我會把這些資料拷貝出來,放在乙個 excel **裡,就像下面這樣子:
在 excel **中,我只會存放每個原始碼檔案的名字、其原始碼行數、原始碼行數佔比。接下來我會按著入口,乙個個去看原始檔,把每個方法看過一遍,看過的方法我會寫乙個注釋,例如:csy mark,並寫上我的注釋。當我把乙個檔案都看過之後,我會把 excel **中對應的檔案最右邊一列,寫上其百分比。最後我會在下邊有一行,統計我所看完檔案的百分比。
我每看完乙個方法,我就寫乙個 csy done 來鼓勵下自己。每看完乙個檔案,我就在 excel 中把它標記為完成,最下邊的已讀百分比也會跟著不斷公升高。通過這種方式,我讓枯燥無味的原始碼閱讀,有些一點趣味,有了一些目標。
通讀原始碼是最枯燥的,最容易沒有方向和目標的。有了數位化的記錄,你可以知道自己現在的進度是怎麼樣,看了多少的原始碼。很多時候我們看了很久,發覺沒什麼進度的樣子,又不想看了。這時候你可以給自己定乙個目標,例如:一天看完 5% 的原始碼就可以休息。那當你想偷懶的時候,看看 excel 下方的已讀百分比,還沒到 5%,繼續看吧。
在通讀原始碼的過程中,你就會對框架有許多新的認識,會知道這個框架大致分為哪幾個部分,每個部分的作用是什麼,這個模組用了什麼設計理念等等。
通過了上面幾個階段,你會發現你對這個框架有了整體的認識,並且對每個模組的實現細節都有了比較深刻的認識。這個時候,你可以想一想為什麼它要這麼做,這麼做有什麼好處,那能用另一種方式做得更好嗎?
解析阿里運維P7崗位面試的一道題
今年有幸同事推薦到阿里面試,崗位是流量事業部運維開始3面都很順利評價也很高,到第四面交叉面的時候是一位p9的前輩,技術不用說了,直接是碾壓我的那種,面試的時候問了一些方 的問題,我答的不怎麼樣,最後他為了緩和氣氛給我出了一道shell方面的題,第乙個問題是如何查詢文字中重複的記錄,這個我答出來了,另...
阿里P7試用期被淘汰,主管給出的理由讓人意想不到
近日,在某個網際網路職場交流社群,一聲稱為阿里員工的在上面吐槽 自己在阿里雲的職級為p7,試用期就被淘汰了,主管給的理由是 儘管完成了安排的工作,但是態度不夠積極主動。此貼引發眾多同行的熱議,認為阿里的文化就是要搶活幹,多做不可取代的工作,少拿零碎的活,要讓專案離了你不行,絕大多數都是在勸這位程式設...
年薪90萬的阿里p7和副處級幹部選哪個
今天在知乎上看到了乙個非常有意思的話題 年薪90萬的阿里p7和副處級幹部選哪個?一位博士同學拿到了兩個比較心動的offer,乙個是阿里p7,另乙個是成都高新區副處級待遇,相信當很多人遇到時也不知道該如何選擇,在這裡貼乙個我比較認同的回答,希望能幫助到後來會面臨同樣選擇的朋友們。我先說說我自己的情況,...