在編程的道路上,通過閱讀優秀的代碼來提升自己是很好的辦法。一直想閱讀一些開源項目,可是沒有合適的機會開始。最近做項目的時候用到了shiro,需要做集群的session共享,經過查找發現tomcat的session本身就支持,發現自己對於使用了這么久的東西還是不甚了解,所以就乘此機會來學習學習。
閱讀源碼已經兩周了,之所以沒有邊讀邊總結是覺得一開始難以總攬全局,可能會以偏概全,所以在對整體上有所把握之后,來記錄一下自己的所學.
方法
其實這些方法是閱讀之前就有個雛形,然后參考了別人閱讀源碼的方式(其實在做一件事之前搞清楚方法總是事半功倍的),再加上自己實踐中的心得總結出來的。
- 准備源碼,IDE,寫一個最簡單的例子,使程序正常運行
- 最好准備一些問題,讀源碼的基礎一定是自己使用已經很多了,在使用過程中積累的一些問題可以總結記錄下來,在讀源碼的時候一一解決。
- 第一步不要在意細節,先理清主干。把程序運行起來,逐步調試,畫出程序運行的時序圖。注意:
- 不要每一個函數都逐步調試進入,對於不重要的先畫在時序圖里面,簡單記錄(猜測)功能
- 遇到新的線程先不去仔細查看,先記錄,繼續
- 經過上面已經明白了整體脈絡,接下來就查看自己上面遺留了那些問題,針對每一個問題(分支)再仔細閱讀
- 根據第二步理出來的問題逐一解答,再次有針對性的閱讀
- 這個時候對於源碼已經了解比較深入了,可以考慮學習一些設計模式,關鍵數據結構,關鍵算法,優秀的思想,一些關鍵類,關鍵方法
工具
不同語言、不同目的閱讀源碼的方法、工具也不盡相同,對於java我是用了以下工具,特別是斷點調試,對於跟蹤程序執行順序有很大幫助,還有UML工具astah——通過繪制時序圖等很容易理清源碼思路。還有就是有問題或者想法要及時記錄,顯然haroopad是一款不錯的markdown工具。
- IDE為eclipse
- 使用astah繪制時序圖
- haroopad記錄markdown筆記
本次閱讀
我閱讀的tomcat源碼版本是7.0.69,參考的是《深入剖析tomcat》,書中tomcat的版本是4、5,已經比較老了,有些東西已經變了,不過並不影響對於某些原理的理解和整體的把握。