1. 程式人生 > >java學習之路:爬上巨人的肩膀

java學習之路:爬上巨人的肩膀

原文地址:http://www.jianshu.com/p/4a41ee88bd82

面試經歷

前段時間抽空整理了上面兩篇面試經歷,收到不少的關注,很多同學私信我平時都是如何get到這些知識的,是否有一些相關的書單,Java的原始碼太多了,應該如何看,框架的程式碼應該如何閱讀等等問題。

現在想想,似乎以前也這樣迷茫過,沒有明確的方向,做過後端,做過前端,就因為啃完了一整本《JavaScript高階程式設計》,在面試的時候信誓旦旦說只做前端,不寫後端程式碼。直到後來,碰巧有機會讓我重新撿起Java,很感激有這次機會,也慢慢的明確了自己的方向。

我喜歡在拿到書的那一刻就寫下當天的日期,方便以後可以知道這本書是何時買的,不知不覺中已經買了很多Java相關的書,同時也收穫了很多。

書單

一直以來,這本書都被認為是面向Java程式設計師的經典教程和參考書,內容翔實、客觀準確,不拖泥帶水,與《Java程式設計思想》齊名。

推薦作為Java的入門書籍,記得這是當時入手的第一本書,愛護有加,畢竟貴啊。

感受設計演變過程中所蘊含的大智慧,體會樂與怒的程式人生中值得回味的一幕幕。

推薦作為設計模式的入門書籍,裡面的實現的程式碼都是基於Java的,通過很生動的方式講解了23中設計模式,但是設計模式的思想和精髓,還是需要在平時專案中慢慢領會以及運用。

深入剖析Tomcat4和Tomcat5中的每個元件,並揭示其內部工作原理,從最基本的HTTP請求開始,直至使用JMX技術管理Tomcat中的應用程式,逐一剖析Tomcat的基本功能模組,並配以示例程式碼,使讀者可以逐步實現自己的Web伺服器。

當時也不知道為什麼會買這本書,功力不足,啃了很多遍也沒有啃完,似乎已經找不到這本書了...

周志明老師的第一版書,JVM入門經典之作,圍繞記憶體管理、執行子系統、程式編譯與優化、高效併發等核心主題對JVM進行了全面而深入的分析,深刻揭示了JVM的工作原理。

這是入手的第一本關於JVM的書籍,當時看了前面幾章節,感覺自己在學習幾年的Java白學了...前前後後啃了很多遍,因為看完會忘記

你是否正在尋找一本能夠更加深入地瞭解Java程式語言的書,以便編寫出更清晰、更正確、更健壯且更易於重用的程式碼。不用找了!本書為我們帶來了共78條程式設計師必備的經驗法則,針對你每天都會遇到的程式設計問題提出了有效、實用的解決方案。

無腦推薦吧,因為看完之後真的挺好。

凝聚了軟體開發社群專家多年摸索而獲得的寶貴經驗,擁有不因時光流逝而磨滅的價值。今天,無論是重構本身,業界對重構的理解,還是開發工具對重構的支援力度,都與本書出版時不可同日而語,但書中所蘊涵的意味和精華,依然值得反覆咀嚼,而且往往能夠常讀常新。

雖然不是每一條都適合自己,但總有指導意義的,選擇喜歡的方式,開始愉快的重構吧,因為重構可以讓你輕鬆應對各種需求變更。

從JDK原始碼、JVM、CPU等多角度全面剖析和講解Java併發程式設計的框架、原理和核心技術,採用循序漸進的講解方式,從併發程式設計的底層實現機制入手,逐步介紹了在設計Java併發程式時各種重要的技術、設計模式與應用,同時輔以豐富的示例程式碼,使得開發人員能夠更快地領悟Java併發程式設計的要領,圍繞著Java平臺的基礎併發功能快速地構建大規模的併發應用程式。

說實在的,這本書當時看得我高潮迭起,原來了解併發的底層實現原理之後可以這麼痛快,收穫良多。

深入淺出地介紹了Java執行緒和併發,從併發性和執行緒安全性的基本概念出發,介紹瞭如何使用類庫提供的基本併發構建塊,如何將小的執行緒安全類組合成更大的執行緒安全類,如何利用執行緒來提高併發應用程式的吞吐量,如何識別可並行執行的任務,如何提高單執行緒子系統的響應性,如何確保併發程式執行預期任務,如何提高併發程式碼的效能和可伸縮性等內容,最後介紹了一些高階主題,如顯式鎖、原子變數、非阻塞演算法以及如何開發自定義的同步工具類。

看完《Java併發程式設計的藝術》之後,立馬又入手了此書,真的是相見恨晚。

圍繞大型網站和支撐大型網站架構的 Java 中介軟體的實踐展開介紹,從分散式系統的知識切入,讓讀者對分散式系統有基本的瞭解;然後介紹大型網站隨著資料量、訪問量增長而發生的架構變遷;

對於沒有大型網站系統開發經驗的同學來說,這確實是個福利,可以稍微的瞭解大型網站架構變遷過程中的較為通用的問題和解法,並瞭解構建支撐大型網站的 Java 中介軟體的實踐經驗。

和《大型網站系統與Java中介軟體實踐》類似吧,我覺得。

市面上介紹Java的書有很多,但專注於Java效能的並不多,能遊刃有餘地展示Java效能優化難點的更是鳳毛麟角,本書即是其中之一。通過使用JVM和Java平臺,以及Java語言和應用程式介面,本書詳盡講解了Java效能調優的相關知識,幫助讀者深入理解Java平臺效能的各個方面,使程式如虎添翼。

說實在的,看這本書,前前後後翻了很多次也沒翻完,慢慢來吧,畢竟效能優化這條路也是很漫長的。

“蚓無爪牙之利,筋骨之強,上食埃土,下飲黃泉,用心一也。蟹六跪而二螯,非蛇蟮之穴無可寄託者,用心躁也”。對於技術人員來說,如果長期忽略自身技術的根基而去一昧地追求高層框架技術,這無疑是捨本求末的做法。

我為什麼會買這本書?前段時間手撕HotSpot的大部分原始碼,包括虛擬機器啟動,虛擬機器引數解析,類載入,物件建立過程,YGC和FGC的實現,過程很痛苦,後來發現了此書,就入手看看和自己的理解是否有出入,以免一條道走到黑。

Ruby之父松本行弘推薦:上古傳承之魔法,徹底揭開垃圾回收的祕密!

此書很新,在我手撕了HotSpot的GC部分原始碼之後,覺得可以入手看看大神是如何理解垃圾回收演算法的。

適合於已具有一定java程式設計基本的讀者,以及希望能夠把強大的搜尋功能新增到自己的應用程式中的開發人員

當時因為專案需要,才入手了此書。

歷史上偉大的電腦科學著作之一 融深邃思想、實戰技術與趣味軼事於一爐的奇書 帶你真正領略電腦科學之美

閱讀此書,難,難,難,只有在興趣來臨時翻兩頁....

原始碼

原始碼這種東西,看的快,忘的也快,最好的方法是學會整理,把資料整理成自己的知識。

好多人覺得JDK原始碼太多,無從下手,經常半途而非,以我的經驗來說,最好的方法是當你在專案中用到了某個類,可以利用空閒時間去研究,當然這是在感興趣的前提下,比如簡單ArrayList是如何實現的,StringBuilderStringBuffer有什麼區別,HashMap的實現原理,帶著問題去分析,從簡單的類開始循序漸進,同時在分析過程中能夠用自己的語言整理出來,就像一開始我寫過關於ArrayList的文章《Java Collections Framework - ArrayList》,雖然內容很簡單,但也算是一種嘗試,至少可以寫出來了,不管效果如何,剩下的只剩堅持了,自己嘗試寫過之後,可以加深理解和記憶。

看原始碼的時候,可以給自己定幾個目標,畢竟一口吃不成胖子,只能慢慢的啃,路是走出來的,通過debug一步一步的走下去。

1、資料結構相關的類,如String、ArrayList,LinkedList,HashMap和ConcurrentHashMap等等。 2、執行緒併發相關的類,如Synchronized、ReentrantLock、ReadWriteLock、AQS和執行緒池的實現等。

如果看到後面已經不滿足於JDK層面的實現原理了,可以嘗試著看看HotSpot的原始碼,比如Synchronized關鍵字如何實現,String常量池如何實現,類物件如何建立,只要能想到的,都可以從原始碼中找到答案,答案就在那裡,就看你能不能找到。

框架

曾有人說,你幹嘛那麼糾結於底層的實現,工作上又用不到了,有這時間還不如多看看框架之類的,我只能呵呵以對,框架固然重要,但是框架是會更新,會變的,而底層原理可以長久不衰,當你瞭解了一些JDK的底層實現,在閱讀框架原始碼時,可以更加的得心應手。

以自己為例,由於專案需要,加上對高效能和多併發比較感興趣,看過比較多的Netty原始碼,記得剛開始研究Netty原始碼,也是一籌莫展,後來從NIO入手,寫了 《深入淺出NIO Channel和Buffer》,都是一些概念性的東西,自己寫一遍是為了加深理解,後來不滿足JDK中的socket實現,就嘗試到處找資料,於是寫了 《深入淺出NIO Socket實現機制》,有了這些基礎之後,再嘗試Netty,寫了《Netty入門簡介》,後來基於Netty寫了個簡單的服務,通過debug的方式,把Netty服務的啟動、請求的accept、read和write除錯了N遍,這N遍過程其實還是需要耐心的,於是才有瞭如下的文章:

對原始碼熟悉了之後,可以嘗試挖掘在框架中使用了哪些設計模式,框架的設計結構又是如何的,每一次實踐都是一次進步,關鍵在於如何邁出第一步。