1. 程式人生 > >如何較好的學習框架底層原始碼?且聽阿里P8架構師的分享

如何較好的學習框架底層原始碼?且聽阿里P8架構師的分享

 

閱讀原始碼意義

在我看來,閱讀原始碼的意義在於學習優秀的「套路」。

這裡的「套路」所指範圍很廣,大到架構設計,小到可取的命名風格,還有設計模式、實現某類功能使用到的資料結構和演算法等等。所謂高手,其實就是能比大部分人更早更快地掌握套路並熟練運用之人。

埋頭在自己的天地裡耕芸固然也能逐漸進步和成長,但總會有時候會遇到一些場景,你苦思良久也無法做出良好的設計,總會有一些時候,糾結如何為一個變數命名讓你停下飛速敲擊的手指。這些令你為難的場景,先賢們也許早就遇到過,並且給出了優雅的解決方案。看優秀的原始碼的時候,將這樣的場景與對應的方案收入囊中,或者僅僅在腦中留下一個印象也好,以便在需要的時候,你的武器庫裡總能掏出一把稱手的傢伙來。

一些方法

不應該這樣

不應該漫無目的地隨手拿起一分原始碼,試圖去通讀。這一方面會過目即忘無所收穫,另一方面會枯燥得讓你迅速從著手到放棄。學習的方式有很多種,閱讀原始碼並不一定是最適合你當前的情況的。

應該這樣

  1. 精心挑選要閱讀的原始碼專案。
  2. 這最好是與你的程式語言、你的工作內容、你的興趣所在相關的,這樣才能更切實地感受到閱讀原始碼給你帶來的益處,更有動力繼續。
  3. 如果你想學習的知識點有官方文件,先看文件再看原始碼。
  4. 直接從原始碼著手,搞清楚原理固然是好,但是原始碼有可能是難啃的,先熟悉官方提供給所有人看的文件,能較為平滑地對這方面的知識先有個大概的瞭解,然後再結合原始碼去深入。
  5. 提出具體的問題,然後帶著問題到原始碼中找答案。
  6. 比如在使用 Toast 的過程中,你可能會想到一些問題:Toast.makeText(...).show() 時發生了什麼?Toast 能不能在非 UI 執行緒呼叫?能不能自定義 Toast 佈局?諸如此類。在原始碼中探尋完你想要的答案,你的目的也就達到了。
  7. 從一些共性層面入手。
  8. 大部分的程式裡都會使用到的東西,比如執行緒模型、UI 組織結構、任務排程方式等等。針對某一個方面去了解,比漫無目的要有效率得多。
  9. 最好能夠編譯執行起來。
  10. 如果一份程式碼你只能看不能跑,那可能讀到一些地方你只能猜這個地方的資料值和跳轉結構是怎麼樣的,而很有可能你猜的是錯的。但如果你能編譯執行,那在需要的時候你可以修改,加日誌等等來更好地觀察和驗證你的想法,得到正確的理解。
  11. 做一些筆記。
  12. 一方面是將你的學習成果保留下來,方便隨時查閱,畢竟只憑腦子記憶是不靠譜的;另一方面在學習的過程中,也能幫助理解。

總結

沒有人一開始就可以看得懂那些原始碼,我們都是從0開始的,而且沒有什麼捷徑可尋,無非就是看我們誰願意花時間去研究,誰的求知慾更強烈,誰更有耐心。閱讀原始碼的過程中我們的能力肯定會提升,可以從中學到很多東西。在我們做專案的時候就會體現出來了,的確會比以前順手很多。

分享一個原始碼分析專題腦圖:

原始碼分析知識點:

spring原始碼分析:

  • Spring框架的前世今生及系統概述
  • 用300行程式碼手寫提煉Spring的核心原理
  • Spring原始碼版本命名及原始碼下載構建技巧
  • 一步一步手繪SpringIOC容器初始化時序圖
  • 用30個類高模擬提煉純手寫Spring框架V2.0
  • Spring事務傳播原理及資料庫事務操作原理
  • 基於Spring JDBC手寫定製自己的ORM框架
  • Spring5新特性簡述及BATJ經典面試題分析

MyBatis原始碼分析:

  • MyBatis應用分析與最佳實踐
  • MyBatis體系結構與工作原理
  • MyBatis原始碼分析
  • 手寫MyBatis 1.0
  • 手寫MyBatis 2.0

給大家分享原始碼分析的PDF 歡迎大家領取