## 如何閱讀優秀的原始碼(心得)
在上學那會呢,就挺感興趣對閱讀原始碼,為什麼呢? 作為一名程式設計師,也想寫出跟比爾呢一樣牛的**,為人所用啊。我也想變得優秀。 但是那會真是有心無力啊,基礎沒有,經驗沒有,對程式設計的認知低,領悟能力差。連個增刪改都不能很清晰的寫出來。還閱讀原始碼呢,這就是寸步難行啊。沒有辦法,放棄! 繼續積累經驗,繼續打好基礎。
於是最近攢點了經驗,有了點小基礎了,所以看了遍基於springboot去看的mybatis原始碼。 並且跟著 mybatis 的原始碼,寫了乙個超級 mybatis,我為什麼叫超級mybatis?這個是相對別人的mini版 取的名字。 我的更貼近原始碼,更能體會原始碼的設計感受,讓你又一種身臨其境的感受。
還附贈乙個 根據實體類生成表的 starter
看似千絲萬縷的**,只要找到切入點,就可以捋好他們的之間的依賴關係
閱讀原始碼一、工欲善其事必先利其器熟悉一款開發工具,並且熟練的掌握除錯功能,比如說idea
除錯**快捷鍵:windows
shift + f9 debugger執行
alt+f10 顯示執行斷點
f8 執行下一行**
f7 進入**快
f9 放開斷點,進入下乙個斷點
alt+shift+f7 強制進入**
shift+f8 跳出函式
alt+f8 檢視值
// 檢視類的繼承關係圖 快捷鍵
ctrl+alt+u
alt 7 檢視類中的方法
二、冰心老師說:先把書讀厚,再把輸讀薄,再讀後閱讀原始碼之前,先了解 原始碼的核心模組,不同模組之間的關係,大方面的知道。這就是把書讀厚;然後再找切入點。深挖他們模組之間的協調運作,捋清楚他們的關係(把書讀薄),接下來總結、歸納 (把書讀薄)。這個時候你之前所了解的大方面架構思路,就會再你腦中有印象了。不再只是知道只能說出來書面語而已了。在你跟別人講解的時候你腦海中會進入到原始碼中去的,因為有依據。
例如這時也可以這麼分析mybatis
巨集觀角度
將mybatis 的乙個查詢過程分兩部
1. 去的過程
- 去我只的是,專案啟動的時候,mybatis做了什麼?
2. 回的過程
- 回:我指的是,在發起乙個查詢命令的時候mybatis又做了什麼?
看原始碼之前:你可能會說:『肯定是jdk動態**啊!』 如果你沒有檢視過原始碼?你說這句話的時候可能是沒有靈魂的,只是知道它的表面書語。
這個時候是不是已經替換了beandefinition,beanclass 屬性了,然後doscan 完成之後spring開始初始化所有的單例bean 了,因為spring 中有兩種bean ,一種 就是 factorybean,一種是普通bean ,如果是factorybean 就是直接呼叫 getobject方法 拿到例項哦。 然後放到map中,然後就是依賴注入的環節了。 這是已經生成了**物件例項了,@autowired 注入 還會空指標嗎?當然不會了。 這不就完成了乙個過程了嗎? so easy 吧!
三、好記性不如爛筆頭
在學習原始碼的時候,剛斷點進入第乙個類,一點類中的方法,呲溜一下,又跑另外乙個類去了,而且這個類還不在當前的包中,這樣子跳來跳去,記不清楚哪個類跟哪個類又關係了,這個時候就先 ctrl+alt+u 先看看 繼承關係 以及 alt+7 看看類中的方法,做好筆記,先是哪乙個類的方法->再到哪乙個類的方法->不管它深入多少層,記下來了後,多跑幾遍,畫個關係如,這不就捋清了某乙個功能的類之間的關係了嗎,千絲萬縷的關係,是怎麼協調運作的不就清楚了一步了嗎?
四、跟著原始碼寫乙個超級版本的出來
如果原始碼不是很大,可以跟著原始碼手寫乙個出來,這樣子會更有收貨,不需要又多還原**,只要核心思想到位即可。
五、找準切入點
要看原始碼的哪個功能,就找準切入點。
比如說基於springboot 的mybatis, 怎麼找到切入點啊。
怎樣閱讀核心原始碼
1.獲取核心 2.目錄結構 在閱讀原始碼之前,還應知道linux核心原始碼的整體分布情況。現代的作業系統一般由程序管理 記憶體管理 文件系統 驅動程式和網路等組成。linux核心原始碼的各個目錄大致和此相對應,其組成如下 假設相對於linux 2.4.23目錄 arch目錄包括了任何和體系結構相關的...
如何閱讀原始碼
帶著問題閱讀 要解決什麼問題 是如何實現的?背景調查 看官網介紹 維基百科,了解主要功能,被應用於哪些專案以及基本的使用,掌握這些基本資訊 使用框架 至少follow get started 做個小demo 真的有人連api都沒呼叫過,上來就看 盡可能編譯除錯。能除錯的 幾乎沒有看不懂的 了解一些設...
如何閱讀原始碼
我剛開始閱讀原始碼就是盲目的去讀,不知到問什麼要讀,讀那部分,甚至準備把所有的原始碼類從上到下依次讀一遍,但是其實這樣是錯的,導致我從第乙個類開始就不知道當前這類的作用,乙個星期也沒什麼進展 其實正確閱讀原始碼的姿勢應該是首先得有疑問,比如spring框架,很長一段時間我都聽說spring的ioc是...