阅读Java_如何阅读 Java 开源代码?
最近正在學(xué)習(xí)閱讀源碼,看到的大神許鵬的方法,感覺很有用,分享給大家
源碼閱讀其實(shí)是一個逆向的工程,這期間必須會遇到種種問題。一般來說,我會遵循這樣一個思維范式——Problem domain→model→architecture&implementation→improvement→best practice。
1.首先搞清楚要分析的產(chǎn)品解決的問題是什么,這個問題在哪個大的范疇里,也就是要搞清楚problem domain。一個著名的開源產(chǎn)品必定在Wikipedia上有相應(yīng)的條目,所以一開始去看wikipedia是破題的一種極好方式。
2.清楚要分析產(chǎn)品的大體框架和關(guān)鍵性的概念,也就是理解清楚architecture和key concept。
3.將分析的產(chǎn)品實(shí)實(shí)在在的運(yùn)行起來,我一般選擇debian或archlinux作為工作平臺,它們提供了豐富的軟件包,可以很快的將東西安裝并運(yùn)行。熟悉Linux本身對于開源項目的源碼閱讀還是大有裨益的。
4.修改日志級別,得到豐富的日志信息。有了這個為基礎(chǔ),再來開始真正的源碼閱讀和分析。
5.源碼分析的時候,要始終問這幾個問題。進(jìn)程以及線程的啟動順序
搞清楚調(diào)用關(guān)系call flow這一部分代碼是在同一個進(jìn)程中么,同一個線程中么,運(yùn)行在同一臺機(jī)器中么
每一個線程都要問清楚,什么時候啟動的,什么時候停止的
消息傳遞的路徑,針對每一個函數(shù),搞清楚,input是誰傳給我的,output要傳給誰,由哪個來傳
搞清楚上述的問題之后,就將最開始提到的對architecture的了解做到具體而微了。有了這個基礎(chǔ)之后,再繼續(xù)往下問當(dāng)前實(shí)現(xiàn)的性能如何,比如i/o, cpu, network 這個需要做相應(yīng)的測試方面的試驗
當(dāng)前的解決方案還有優(yōu)化空間嗎,比如針對spark中的scheduling問題,就有sparrow的優(yōu)化機(jī)制提出
6. 碰到具體的問題一時解決不了怎么辦用好google,用好stackoverflow
將碰到的問題模型化,寫一些驗證性的代碼,或者是寫一個小的demo來驗證,我在解決許多很妖的bug,也是采用類似的思路
找到相應(yīng)的用戶論壇,發(fā)帖虛心請教
如果還是不行,就先擱一擱,去看能看懂的地方
7. 編程語言選擇源碼閱讀中可能遇到的一個問題就是這個語言是新近出來的,我根本沒學(xué)過,我需要系統(tǒng)去掌握該語言之后,才能來看源碼么。我的看法是可以邊看邊學(xué),在掌握語言的過程中,牢牢把握住這幾個問題基本語法:數(shù)據(jù)類型、控制語句、函數(shù)定義
是否支持FP
多態(tài)和繼承
現(xiàn)代編程語言基本上都混合了面向過程,面向?qū)ο蠛秃瘮?shù)式編程的特點(diǎn),即便是C++或新近的java8都如此。
Storm用Clojure來編寫,而Spark使用Scala,就語言的偏好來說,我更喜歡Clojure一些。
稍微總結(jié)一下,我想源碼分析心中要有兩幅大圖,將整體與局部很好的結(jié)合起來思考一是太極圖,要有整體性的思維,要對architecture有掌握,對其在整個生態(tài)系統(tǒng)中的定位要清楚,東方式的思維強(qiáng)調(diào)整體性
二是數(shù)學(xué)中常見的笛卡爾坐標(biāo)體系,將大的問題拆分之后一一研究,做到具體而微,西方式的思維強(qiáng)調(diào)個性
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的阅读Java_如何阅读 Java 开源代码?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯信用怎么看?
- 下一篇: java 发送tcp_Java TCP发