
閱讀源碼意義面試
在我看來,閱讀源碼的意義在於學習優秀的「套路」。算法
這裏的「套路」所指範圍很廣,大到架構設計,小到可取的命名風格,還有設計模式、實現某類功能使用到的數據結構和算法等等。所謂高手,其實就是能比大部分人更早更快地掌握套路並熟練運用之人。spring
埋頭在本身的天地裏耕芸當然也能逐漸進步和成長,但總會有時候會遇到一些場景,你苦思良久也沒法作出良好的設計,總會有一些時候,糾結如何爲一個變量命名讓你停下飛速敲擊的手指。這些令你爲難的場景,先賢們也許早就遇到過,而且給出了優雅的解決方案。看優秀的源碼的時候,將這樣的場景與對應的方案收入囊中,或者僅僅在腦中留下一個印象也好,以便在須要的時候,你的武器庫裏總能掏出一把稱手的傢伙來。數據庫
一些方法
不該該這樣編程
不該該漫無目的地隨手拿起一分源碼,試圖去通讀。這一方面會過目即忘無所收穫,另外一方面會枯燥得讓你迅速從着手到放棄。學習的方式有不少種,閱讀源碼並不必定是最適合你當前的狀況的。設計模式
應該這樣數據結構
- 精心挑選要閱讀的源碼項目。
- 這最好是與你的編程語言、你的工做內容、你的興趣所在相關的,這樣才能更切實地感覺到閱讀源碼給你帶來的益處,更有動力繼續。
- 若是你想學習的知識點有官方文檔,先看文檔再看源碼。
- 直接從源碼着手,搞清楚原理當然是好,可是源碼有多是難啃的,先熟悉官方提供給全部人看的文檔,能較爲平滑地對這方面的知識先有個大概的瞭解,而後再結合源碼去深刻。
- 提出具體的問題,而後帶着問題到源碼中找答案。
- 好比在使用 Toast 的過程當中,你可能會想到一些問題:Toast.makeText(...).show() 時發生了什麼?Toast 能不能在非 UI 線程調用?能不能自定義 Toast 佈局?諸如此類。在源碼中探尋完你想要的答案,你的目的也就達到了。
- 從一些共性層面入手。
- 大部分的程序裏都會使用到的東西,好比線程模型、UI 組織結構、任務調度方式等等。針對某一個方面去了解,比漫無目的要有效率得多。
- 最好可以編譯運行起來。
- 若是一份代碼你只能看不能跑,那可能讀到一些地方你只能猜這個地方的數據值和跳轉結構是怎麼樣的,而頗有可能你猜的是錯的。但若是你能編譯運行,那在須要的時候你能夠修改,加日誌等等來更好地觀察和驗證你的想法,獲得正確的理解。
- 作一些筆記。
- 一方面是將你的學習成果保留下來,方便隨時查閱,畢竟只憑腦子記憶是不靠譜的;另外一方面在學習的過程當中,也能幫助理解。
總結架構
沒有人一開始就能夠看得懂那些源碼,咱們都是從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 歡迎你們領取!
