一挤忙、前言
本文來談談自己關于閱讀源碼的一些心得體會钩骇,希望大家能夠更好的意見泛啸,留言回復。
二属百、為何要閱讀源碼
先分享一下為何要研究源碼 :
我們在做項目時候一般會遇到下面的問題:問題一是不知道如何去設計记劝,這一般是職場新手經(jīng)常會遇到的問題,比如剛從學生時代跨入職場的新手族扰,當初我當入職阿里時候就有這個感覺厌丑,給你一個需求來做概要設計,竟然沒有思路渔呵,不得不去看當前系統(tǒng)類似需求是如何設計的怒竿,然后仿照去設計。問題二設計時候問題考慮不周全扩氢,這一般是由于設計經(jīng)驗匱乏引起的耕驰,相比職場新手,這類人對一個需求依靠自己的經(jīng)驗已經(jīng)能夠拿出一個概要設計录豺,但是設計中經(jīng)常會遺漏一些異常細節(jié)朦肘,比如使用多線程有界隊列執(zhí)行任務,如果機器宕機了双饥,那么隊列里面的任務不存盤的話厚骗,機器下次啟動時候這些任務就丟失了。
對于這些問題兢哭,說到底都是因為經(jīng)驗不夠领舰,而經(jīng)驗一般都是從項目實踐中積累而來,所以招聘單位一般都會限定工作時間大于2年了迟螺,3年了冲秽,是有道理的,因為這些人的項目經(jīng)驗都是比較豐富的矩父,項目中遇到的場景也比較多锉桑。經(jīng)驗積累一方面靠時間,其實另外一方面通過學習源碼也可以獲的窍株,看源碼可以擴展我們的思路民轴,這個是變相的提高我們的經(jīng)驗攻柠,雖然通過時間積累獲取經(jīng)驗的方式不能短時間內(nèi)達到,但是短時間內(nèi)通過學習經(jīng)典開源框架開源項目的設計思想理念還是會很有受益的后裸。
另外進行職場后一般都是要先熟悉現(xiàn)有的系統(tǒng)瑰钮,如果有文檔還好,沒文檔的話就得自己去翻代碼自己去研究微驶,這其實也是考驗代碼學習能力的浪谴,如果你之前看過好多開源代碼的話,那么就不會那么費勁因苹。
看源碼最大的好處是可以開闊你的思維苟耻,提升你的架構設計能力,有些東西書本和緊靠自己思考是很難學到的扶檐,必須通過看源碼凶杖,看別人如何設計的,然后思考為何這樣設計款筑。能力的提高判斷不在于你寫了多少代碼智蝠,做了多少項目,而在于給你一個業(yè)務場景時候醋虏,你是否能拿出幾種靠譜的解決方案寻咒。而如何才能拿出來那,一來靠經(jīng)驗颈嚼,二來靠歸納總結毛秘,而看源碼,看經(jīng)典框架如何實現(xiàn)的阻课,則可以快速累加你的經(jīng)驗叫挟。
三、如何閱讀源碼
個人對于看開源框架有個體會是限煞,當你想看某一個框架的源碼前抹恳,先去Google查找這個開源框架的一些框架組成介紹(資料最好是找官方文檔,最好是英文的署驻,因為網(wǎng)上資料太泛濫奋献,并且質(zhì)量不一,并且有些都是錯的)旺上,看看這個框架有幾個模塊瓶蚂,各個模塊是做什么的,有什么聯(lián)系宣吱,每個模塊都有哪些核心類(這在你看源碼時候會有個印象窃这,哪些類是做什么用的),
然后對那個模塊感興趣就去寫個小的demo先運行一下具體了解這個模塊的作用(你要想研究源碼實現(xiàn)首先的知道這個模塊是干啥的征候,會產(chǎn)生什么作用)杭攻,然后在debug進入看具體實現(xiàn)祟敛,在debug過程中第一遍是走馬觀花,簡略的看下調(diào)用邏輯兆解,都用了哪些類馆铁;
第二遍則是有著重點的debug看看這些類擔任了架構圖里面的那些功能,使用了哪些設計模式痪宰?如果第二遍能感覺到有些感覺了叼架,大致知道了代碼功能實現(xiàn)畔裕,但是對整體代碼結構還是不是很清晰衣撬,畢竟代碼里面多個類來回調(diào)用,很容易迷失當前斷點的來處扮饶,那么你可以進行第三遍度dubug,這時候你要把主要類的調(diào)用時序圖畫出來具练,可能的話,你最好吧類圖結構也畫出了甜无,等畫好后扛点,在對著時序圖分析調(diào)用流程,就可以清楚的知道類直接調(diào)用關系岂丘,通過類圖就知道類的功能作用和相互依賴關系陵究。
另外閱讀源碼時候畫出時序圖和類圖還有一好處,因為人總是善忘的奥帘,如果隔一段時間后你在去看之前看過的源碼铜邮,雖然模糊有些印象,但是當你想去看某個模塊的一些邏輯時候寨蹋,很多情況下就需要根據(jù)demo再從頭debug找了,而如果有了這倆圖你就可以從時序圖或者類圖里面直接找到松蒜,并且看一眼時序圖就知道整個模塊的脈絡了
還有查框架使用說明時候最好去官網(wǎng)去,雖然是英文已旧,但是看久了就好了秸苗,畢竟還有google翻譯那
四、總結
本文來談了自己關于閱讀源碼的一些心得體會运褪,希望大家能夠更好的意見惊楼,留言回復。另外并發(fā)編程系列已經(jīng)全部放出秸讹,想學并發(fā)的童鞋可以 單擊我 檀咙,學dubbo童鞋可以 單擊我