原始碼研究心得
閱讀別人的程式碼是一件很痛苦的事情,尤其是沒有註解的原始碼更是讓人頭痛。最近做演算法移植,研究一個沒有註解的軟體原始碼。結合多日的研究,總結一下心得體會。
研究原始碼的“套路”:
1)首先不要著急研究,要做的重要事情就是要備份,否則有可能改過的程式碼你無法復原了;
2)執行的開發環境 。看一下程式碼的IDE以及執行的開發環境;
3)寫註解 。將程式碼分功能分模組去寫一些註釋備忘,寫註解方法:a)猜測去寫,後續發現錯誤再更改;b)按功能去寫;c)分清系統自動生成的程式碼和使用者自己開發的程式碼;
4)重複閱讀。研究原始碼沒有捷徑,只有反覆閱讀,才能吃透原始碼。
5)跑通程式碼,然後除錯,特別是對於有介面的程式,很快找到各個功能程式碼所在的位置;
6)檢視類、函式、變數等在何處宣告定義以及在何處被使用;
當然方法有很多,除此之外釐清類圖和原始碼樹結構也很重要,這些都能很好的反映出專案的架構,通過原始碼的層次結構來分析一個專案的組織方式也很有必要。
相關推薦
Volley,Okhttp,Retrofit原始碼研究心得大總結
注:閱讀本篇博文之前建議閱讀上面幾個系列的博文,算是本篇文章的理論儲備。 以前在業餘的時候閱讀過Volley,Okhttp,Retrofit的原始碼,本篇就對他們做一個大總結和鞏固。 1、框架涉及到的設計模式 工廠模式:這個模式很簡單,與其說是一個模式,不如說
原始碼研究心得
閱讀別人的程式碼是一件很痛苦的事情,尤其是沒有註解的原始碼更是讓人頭痛。最近做演算法移植,研究一個沒有註解的軟體原始碼。結合多日的研究,總結一下心得體會。 研究原始碼的“套路”: 1)首先不要著急研究,要做的重要事情就是要備份,否則有可
OVS原始碼研究 Datapath進行Packet處理
先把程式碼貼出來,後續再做細化解釋和總結 void ovs_dp_process_packet_with_key(struct sk_buff *skb, struct sw_flow_key *pkt_key, bool recirc)
go-flow原始碼解讀心得
go-flow go get github.com/kamildrazkiewicz/go-flow 使用方法 func main() { f1 := func(r map[string]interface{}) (interface{}, error) { fmt.
區塊鏈100講:以太坊原始碼研究之PoW及共識演算法深究
本講將介紹“挖礦“得到新區塊的整個過程,以及不同共識演算法的實現細節。 1 待挖掘區塊需要組裝 在Ethereum 程式碼中,名為miner的包(package)負責向外提供一個“挖礦”得到的新區塊,其主要結構體的UML關係圖如下圖所示:
WordPress研究心得
WordPress,當初之所以研究這個,目的是在於開發一個多租戶系統應用。總的來說,WordPress給了我不少啟發和影響。為此,我決定這個研究心得分享出去。 總的來說,這篇文章參考了很多朋友們的部落格,同時也包括官方網站。 圍繞如下五個大主題進行討論,其中有些重複了,比如WordPress的安裝、外掛和主題
從壹開始前後端分離 [ vue + .netcore 補充教程 ] 二八║ Nuxt 基礎:面向原始碼研究Nuxt.js
前言 哈嘍大家週五好,又是一個開開心心的週五了,接下來就是三天小團圓啦,這裡先祝大家節日快樂咯,希望都沒有加班哈哈,今天公司發了月餅,嗯~時間來不及了,上週應該搞個活動抽中幾個粉絲髮月餅的,下次吧,這裡先預告一下,聖誕節活動,給粉絲送蘋果吧哈哈,不過聽起來好 low 呀,大家有好的想法可以下邊評論或者來
分散式服務彈性框架“Hystrix”實踐與原始碼研究(一)
文章初衷 為了應對將來線上(特別是無線端)業務量的成倍增長,後端服務的分散式化程度需要不斷提高,對於服務的延遲和容錯管理將面臨更大挑戰,公司框架和開源團隊選擇內部推廣Netflix的Hystrix,一是為了推進各部門的服務使用覆蓋率,二是為了增加C Sharp語言版本的參與度(目前公司至少三
xxl-job研究心得
最近2天 花了點時間研究xxl-job 專案還是比較小的 分散式排程中心 排程中心基於quartz的,job的資訊還是持久化到mysql中的,排程的時候也是用資料庫鎖的方式避免重複獲取統一任務,然後分發調執行器端,分發使用rpc 方式,本質使用了jetty 執行器作為客戶端
開源地圖服務geoserver原始碼研究實踐(IntelliJ IDEA2017匯入工程、環境搭建)
今天我們來學習一下有關開源地圖服務geoserver的原始碼。首先學習這個原始碼還是挺有用的,geoserver是關於spring、寫的一個java服務,此外程式碼裡面應用到很多程式設計套路(設計模式)方面的知識,geoserver地圖服務實現OGC(開放地理資訊聯盟)wms
定時任務類(原始碼研究)
package situopenapi.service.common; import situopenapi.utils.LogUtils; import situopenapi.utils.ThreadFactory; import javax.annotation.PostConstr
UGUI 原始碼研究及擴充套件 :EventTrigger
在處理Unity UI的各種響應事件的時候,一個Button往往會不太夠用,UGUI提供了對所有響應事件封裝的一個類EventTrigger,但儘量不要使用它,一是它的呼叫方式不是很友好,這種情況後文會給出一些擴充套件方法使得它可以簡單運用。第二個原因也是主要原是由於他的方法呼叫會影響效能,這一點也
redis cluster原始碼研究--配置一致性保證
redis cluster有些全域性配置如節點地址、主節點所負責雜湊槽、主從關係等需要各節點保持一致,redis cluster只保證配置最終一致性。 它用以下兩種措施來保證配置最終一致性: (1)每個節點都有EpochConfig值,用來
redis cluster原始碼研究--reshard
reshard是redis cluster另一核心功能,它通過遷移雜湊槽來達到負載勻衡和可擴充套件目的。 使用者同樣可以用運維工具redis-trib.rb完成reshard工作,具體步驟如下: (1)輸入如下命令: ./red
redis cluster原始碼研究--create cluster
create cluster是指建立或搭建redis叢集。 這裡以搭建六個節點的redis叢集(redis cluster最少節點為六個節點)為例進行分析。 一、建立步驟: (1)節點配置需開啟cluster配置項,最小關注配置為如下: port 700
redis cluster原始碼研究--增刪節點
增刪節點是指節點加入或退出redis cluster。 redis cluster 提供了運維工具redis-trib.rb,使得增刪節點變得簡單和容易。 一、增節點 1、加入 步驟: (1)以cluster模式啟動新節點(127.0.0.1:7000); (
redis cluster原始碼研究--failover
failover是redis cluster的容錯機制,是redis cluster最核心功能之一;它允許在某些節點失效情況下,叢集還能正常提供服務。 redis cluster採用主從架構,任何時候只有主節點提供服務,從節點進行熱備份,故其容錯機制是主從切
Http研究心得+面試心得
四、HttpCient: HttpClient是Apache開源組織提供的HTTP網路訪問介面(一個開源的專案),從名字上就可以看出,它是一個簡單的HTTP客戶端(並不是瀏覽器),可以傳送HTTP請求,接受HTTP響應。但是不會快取伺服器的響應,不能執行HTTP頁面中籤入嵌入的JS程式碼,自然也不會對頁
幣圈近一週的研究心得
自2017年暑期聽說挖礦可以賺錢後,憤然投身幣圈,經過一次大跌後,損失出場,最近相關政策又活躍起來,憤然進場,18日發現aex與zb有價格差,興奮入場,前後投入6萬,高興還沒一天,發現aex的btc,usdt等主流貨幣無法體現,搬磚未成。繼續研究之,比特幣精靈比較方便,又研究
從零學習遊戲伺服器開發(三) CSBattleMgr服務原始碼研究
如上圖所示,這篇文章我們將介紹CSBattleMgr的情況,但是我們不會去研究這個伺服器的特別細節的東西(這些細節我們將在後面的文章中介紹)。閱讀一個未知的專案原始碼如果我們開始就糾結於各種細節,那麼我們最終會陷入“橫看成嶺側成峰,遠近高低各不同”的尷尬境界,浪費時間不說,可