1. 程式人生 > >JDK1.8原始碼分析01之學習建議(可以延伸其他原始碼學習)

JDK1.8原始碼分析01之學習建議(可以延伸其他原始碼學習)

序言:目前準備看一看原始碼,來提升自己的技術實力。同時現在好多面試官都喜歡問原始碼,問你是否讀過JDK原始碼等等?
針對如何閱讀原始碼,也請教了我的老師。下面就先來看看老師的回答,也許會有幫助呢。

我很尊敬的一位老師,他姓唐,算是我入門程式設計的啟蒙老師,有10多年的C/C++開發經驗,我有幸跟著老師的C++/C課程,自學完,而且還學了資料結構。他的講課很有風格,幽默風趣,有條有理,深入淺出。

不過後來,我決定走Java這條不歸路。

我向老師請教了一個問題:關於如何閱讀原始碼的問題?不乏味,思路清晰。就像他的課程一樣,基本上很少會有疲倦,枯燥的感覺。

唐老師,回答道:讀原始碼是要建立在你的基礎經驗足夠的情況下。否則很容易看不懂

我繼續又問:那對於剛剛想嘗試去讀原始碼的同學來說,有沒有一些建議呢?我嘗試著讀了一些,但感覺很無厘頭。

唐老師,回答道: 讀原始碼是要讀和你水平相匹配的。好多人好高騖遠,簡單的,能讀懂的不屑, 想讀的,又讀不懂,高不成低不就。我的建議是從教學型專案讀起。

小插曲:有位朋友說,原始碼寫的就一定比我寫的好嗎? 哈哈,這回答倒也是重新整理我的認知。

另外一位朋友有舉例說: 如果讀redis原始碼, 我會先看一本講Redis原理的書,然後再看原始碼。

以上就是我這次請教的過程,總結一下:先懂原理,知道一個全域性框架,再結合教學型專案或自己寫些小案例,再深入原始碼。


知識在於積累,學習需要耐力。學習就像挖金礦,或許一開始毫無頭緒,但轉個角度、換換工具,時間久了總會找到一個縫隙。成功就是你比別人多走了一段路,或許恰恰是那麼一小步。

有人抱怨: 閱讀原始碼太枯燥、乏味了,看到原始碼就頭暈,無法學下去了。你肯定選擇了一條充滿荊棘的路。選對方法,你會發現這裡是一條充滿鳥語花香和歡聲笑語的幽徑。

我也整理了最近學習原始碼的一個大致方法,至少這是我實踐的一套方法,大家也可以慢慢整理出適合自己的一套方法。

01. 多角度,對比學習。

除了自己去閱讀原始碼之外,比如學習某個類的時候,可以專門結合一些優質的部落格針對性的對比學習,並查漏補缺。

02. 制定原始碼學習計劃。

大多數人其實對原始碼的整體框架沒有太多瞭解,只知道我要學習原始碼,但卻無從下手。那麼,制定一個可行性的原始碼學習計劃,對你後面的學習原始碼會有一個指導性的作用。我在找原始碼的閱讀方法時,偶遇一篇 講JDK閱讀原始碼順序,給了我一個學習原始碼的方向, 也正是我需要的。我後面也會專門分享出來的。

03. 多除錯,跟蹤原始碼。

原始碼閱讀,我可以說必須要debug。如果你的大腦夠強大,自帶編譯執行,不需要idea輔助。如果沒有,那還是老老實實地把原始碼匯入,自己debug,看一下執行時,程式碼的邏輯走向是怎麼樣的。

04. 多交流,請教高人。

交流可以驗證和加固自己的知識。只有好處,沒有壞處。對於不會的,理解不透徹,也可以向大lao請教,但前提得先自己Google解決一下。

05. 多記錄,分享。

我偶爾會有一種錯覺,我在學習某項東西的時候,看著一些寫得好的部落格,這暫且叫碎片化學習,看了也就過了,隔三差五就忘了,又繼續回到我的增刪改查。然後自己寫的時候,寫不出那種效果,總擔心重複別人的輪子。

只要不是全部複製+貼上, 加上自己的體會和感覺,再寫出來的,那就是你的,獨一無二的一份筆記和心得。

-------------------------------------------------- 漂亮的分割線 ----------------------------------------------------------------------------------

如若有好的學習方法,可以留言一起交流學習。

原創不易,轉載請註明作者和原文連結。

喜歡的朋友們,可以微信關注或點個喜歡。

相關推薦

JDK1.8原始碼分析01學習建議可以延伸其他原始碼學習

序言:目前準備看一看原始碼,來提升自己的技術實力。同時現在好多面試官都喜歡問原始碼,問你是否讀過JDK原始碼等等? 針對如何閱讀原始碼,也請教了我的老師。下面就先來看看老師的回答,也許會有幫助呢。 我很尊敬的一位老師,他姓唐,算是我入門程式設計的啟蒙老師,有10多年的C/C++開發經驗,我有幸跟著老師的C

Vue學習原始碼分析--從template到DOMVue.js原始碼角度看內部執行機制

從new一個Vue物件開始 let vm = new Vue({ el: '#app', /*some options*/ }); 很多同學好奇,在new一個Vue物件的時候,內部究竟發生了什麼? 究竟Vue.js是如何將data中的資

JDK1.8原始碼分析03idea搭建原始碼閱讀環境

序言:上一節說了閱讀原始碼的順序,有了一個大體的方向,咱們就知道該如何下手。接下來,就要搭建一個方便閱讀原始碼及debug的環境。有助於跟蹤原始碼的呼叫情況。 目前新開發的專案, 大多數都是基於JDK1.8開發,所以我選擇該版本進行原始碼分析。 JDK1.8版本號:jdk1.8.0_151 一. JDK1

Vue學習原始碼分析--Vue.js依賴收集

為什麼要依賴收集 先看下面這段程式碼 new Vue({ template: `<div> <span>text1:</span> {{text1}}

jdk1.8新特性應用Iterable

accep sub 抽象 default describe dem generate using 操作   我們繼續看lambda表達式的應用: public void urlExcuAspect(RpcController controller, Message

Java集合原始碼分析01----集合框架

在java.util包下面提供了一些集合類,又稱為容器。相比長度固定,存放基本資料的陣列,集合的長度是可變的,並且存放的是物件的引用。Java集合框架學習大致可以分為五個部分:List列表,Set集合,Map對映,迭代器(Iterator,Enumeration),工具類(Arrays,Collec

Java 集合系列01 總體框架 依賴JDK1.6.0_45

Java集合是java提供的工具包,包含了常用的資料結構:集合、連結串列、佇列、棧、陣列、對映等。Java集合工具包位置是java.util.* Java集合主要可以劃分為4個部分:List列表、Set集合、Map對映、工具類(Iterator迭代器、Enumeration列舉類、Arrays和Co

Dubbo 原始碼分析系列三 —— 架構原理

1 核心功能 首先要了解Dubbo提供的三大核心功能: Remoting:遠端通訊 提供對多種NIO框架抽象封裝,包括“同步轉非同步”和“請求-響應”模式的資訊交換方式。 Cluster: 服務框架 提供基於介面方法的透明遠端過程呼叫,包括多協議支援,以及

Java程式設計師從笨鳥到菜鳥八十一細談Spring深入原始碼分析SpringHibernateTemplate

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Tomcat 原始碼分析系列環境搭建

Tomcat 原始碼環境搭建 tomcat 9 和 idea 環境搭建 環境準備 JDK 1.10 git idea tomcat 原始碼 maven ant 國內的maven 倉庫映象 安裝Intellij Idea 新

原始碼分析手寫springvc

1.先建立maven的web專案,結構如下 2.在web.xml新增如下配置 <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>com.mayik

RxJava2原始碼分析just、fromArray、fromIterable

     Observable.just:接收1個以上,10個以下的引數,然後逐個發射。         Observable.fromArray:接收一個數組,從陣列中一個一個取出來發射。  

jQuery2.0.3原始碼分析系列(29) 視窗尺寸

.width() 基礎回顧 一般的,在獲取瀏覽器視窗的大小和位置時,有以下幾個屬性可以使用: 在不同的瀏覽器中,以下12個屬性所代表的意義也是不一樣的 特別需要注意的是,當使用或者不使用<!DOCTYPE>宣告顯示一個文件的時候,以上12個屬性的意義也會發生變化。 特在IE 9中

原始碼分析String原始碼分析

    前面已經分析過String原始碼為什麼是不可變的,同時通過我們常用的String的相關的類StringBuffer和StringBuilder,我們可以發現String類中欄位名被定義為了final型別,這樣的話將只能被賦值一次。接下來,繼續看String原始碼實現的

Android wpa_supplicant原始碼分析--啟動全域性初始化

1. wpa_supplicant簡介 wpa_supplicant是用來用來支援無線中各種加密方式的,包括WEP、WPA/WPA2和WAPI(中國特有)、EAP(8021x)。wpa_s通過socket與上層(framework)和底層(driver)通訊,向上接收命令和傳

RabbitMQ客戶端原始碼分析(三)Command

RabbitMQ-java-client版本 com.rabbitmq:amqp-client:4.3.0 RabbitMQ版本宣告: 3.6.15 Command Command介面是AMQP方法-引數的容器介面,帶有可選的內容頭(content

RabbitMQ客戶端原始碼分析(五)ConsumerWorkSerivce與WorkPool

RabbitMQ-java-client版本 com.rabbitmq:amqp-client:4.3.0 RabbitMQ版本宣告: 3.6.15 WorkPool WorkPool可以認

RabbitMQ客戶端原始碼分析(六)IntAllocator

RabbitMQ-java-client版本 com.rabbitmq:amqp-client:4.3.0 RabbitMQ版本宣告: 3.6.15 IntAllocator 用於分配給定範

RabbitMQ客戶端原始碼分析(七)Channel與ChannelManager

RabbitMQ-java-client版本 com.rabbitmq:amqp-client:4.3.0 RabbitMQ版本宣告: 3.6.15 Channel uml圖 tran

一位資深程式設計師大牛給予Java初學者的學習建議

這一部分其實也算是今天的重點,這一部分用來回答很多群裡的朋友所問過的問題,那就是我你是如何學習Java的,能不能給點建議?  今天我是打算來點乾貨,因此咱們就不說一些學習方法和技巧了,直接來談每個階段要學習的內容甚至是一些書籍。這一部分的內容, 同樣適用於一