來自:佔小狼的部落格(微訊號:whywhy_zj)
連結:https://www.jianshu.com/p/4a41ee88bd82
2017再見,送給2018的你
物有本末,事有終始,知所先後,則近道矣
面試經歷
前段時間抽空整理了面試經歷,收到不少的關註,很多同學私信我平時都是如何get到這些知識的,是否有一些相關的書單,Java的原始碼太多了,應該如何看,框架的程式碼應該如何閱讀等等問題。
現在想想,以前也這樣迷茫過,整個方向不明確,做過後端,又做過前端,就因為啃完了一整本《JavaScript高階程式設計》,覺得自己在JS的造詣達到了頂峰,在面試的時候信誓旦旦說只做前端,不寫後端程式碼。直到後來,碰巧有機會(感謝以前的領導)讓我重新撿起Java,感激有這次機會,也慢慢的明確了自己要走的路。
喜歡在拿到書的那一刻就寫下當天的日期,方便以後知道這本書是何時買的,不知不覺中已經積累不少Java相關的書,有入門的,也有進階的,從中收穫了很多,這次分享出來希望能夠幫助到正在走入Java這條路的人、甚至是正在迷茫的人。
不像你假笨可以送書,我只能送送書單?
書單
-
《Java核心技術 捲I》
一直以來,這本書都被認為是面向Java程式員的經典教程和參考書,內容翔實、客觀準確,不拖泥帶水,與《Java程式設計思想》齊名。
推薦作為Java的入門書籍,記得這是當時入手的第一本書,愛護有加,畢竟貴啊。
-
《大話設計樣式》
感受設計演變過程中所蘊含的大智慧,體會樂與怒的程式人生中值得回味的一幕幕。
推薦作為設計樣式的入門書籍,裡面的實現的程式碼都是基於Java的,透過很生動的方式講解了23中設計樣式,但是設計樣式的思想和精髓,還是需要在平時專案中慢慢領會以及運用。
-
《深入剖析Tomcat》
深入剖析Tomcat4和Tomcat5中的每個元件,並揭示其內部工作原理,從最基本的HTTP請求開始,直至使用JMX技術管理Tomcat中的應用程式,逐一剖析Tomcat的基本功能模組,並配以示例程式碼,使讀者可以逐步實現自己的Web伺服器。
當時也不知道為什麼會買這本書,功力不足,啃了很多遍也沒有啃完,似乎已經找不到這本書了…
-
深入理解Java虛擬機器:JVM高階特性與最佳實踐》
周志明老師的第一版書,JVM入門經典之作,圍繞記憶體管理、執行子系統、程式編譯與最佳化、高效併發等核心主題對JVM進行了全面而深入的分析,深刻揭示了JVM的工作原理。
這是入手的第一本關於JVM的書籍,當時看了前面幾章節,感覺自己在學習幾年的Java白學了…前前後後啃了很多遍,因為看完會忘記
-
《深入理解Java虛擬機器:JVM高階特性與最佳實踐(第2版)》 第二版,又入手了。
-
《Effective Java中文版(第2版)》
你是否正在尋找一本能夠更加深入地瞭解Java程式語言的書,以便編寫出更清晰、更正確、更健壯且更易於重用的程式碼。不用找了!本書為我們帶來了共78條程式員必備的經驗法則,針對你每天都會遇到的程式設計問題提出了有效、實用的解決方案。
無腦推薦吧,因為看完之後真的挺好。
-
《重構 改善既有程式碼的設計》
凝聚了軟體開發社群專家多年摸索而獲得的寶貴經驗,擁有不因時光流逝而磨滅的價值。今天,無論是重構本身,業界對重構的理解,還是開發工具對重構的支援力度,都與本書出版時不可同日而語,但書中所蘊涵的意味和精華,依然值得反覆咀嚼,而且往往能夠常讀常新。
雖然不是每一條都適合自己,但總有指導意義的,選擇喜歡的方式,開始愉快的重構吧,因為重構可以讓你輕鬆應對各種需求變更。
-
《Java併發程式設計的藝術》
從JDK原始碼、JVM、CPU等多角度全面剖析和講解Java併發程式設計的框架、原理和核心技術,採用循序漸進的講解方式,從併發程式設計的底層實現機制入手,逐步介紹了在設計Java併發程式時各種重要的技術、設計樣式與應用,同時輔以豐富的示例程式碼,使得開發人員能夠更快地領悟Java併發程式設計的要領,圍繞著Java平臺的基礎併發功能快速地構建大規模的併發應用程式。
說實在的,這本書當時看得我高潮迭起,原來瞭解併發的底層實現原理之後可以這麼痛快,收穫良多。
-
《Java併發程式設計實戰》
深入淺出地介紹了Java執行緒和併發,從併發性和執行緒安全性的基本概念出發,介紹瞭如何使用類庫提供的基本併發構建塊,如何將小的執行緒安全類組合成更大的執行緒安全類,如何利用執行緒來提高併發應用程式的吞吐量,如何識別可並行執行的任務,如何提高單執行緒子系統的響應性,如何確保併發程式執行預期任務,如何提高併發程式碼的效能和可伸縮性等內容,最後介紹了一些高階主題,如顯式鎖、原子變數、非阻塞演演算法以及如何開發自定義的同步工具類。
看完《Java併發程式設計的藝術》之後,立馬又入手了此書,真的是相見恨晚。
-
《大型網站系統與Java中介軟體實踐》
圍繞大型網站和支撐大型網站架構的 Java 中介軟體的實踐展開介紹,從分散式系統的知識切入,讓讀者對分散式系統有基本的瞭解;然後介紹大型網站隨著資料量、訪問量增長而發生的架構變遷;
對於沒有大型網站系統開發經驗的同學來說,這確實是個福利,可以稍微的瞭解大型網站架構變遷過程中的較為通用的問題和解法,並瞭解構建支撐大型網站的 Java 中介軟體的實踐經驗。
-
《大型分散式網站架構設計與實踐》
和《大型網站系統與Java中介軟體實踐》類似吧,我覺得。
-
《Java效能權威指南》
市面上介紹Java的書有很多,但專註於Java效能的並不多,能遊刃有餘地展示Java效能最佳化難點的更是鳳毛麟角,本書即是其中之一。透過使用JVM和Java平臺,以及Java語言和應用程式介面,本書詳盡講解了Java效能調優的相關知識,幫助讀者深入理解Java平臺效能的各個方面,使程式如虎添翼。
說實在的,看這本書,前前後後翻了很多次也沒翻完,慢慢來吧,畢竟效能最佳化這條路也是很漫長的。
-
《HotSpot實戰》
“蚓無爪牙之利,筋骨之強,上食埃土,下飲黃泉,用心一也。蟹六跪而二螯,非蛇蟮之穴無可寄託者,用心躁也”。對於技術人員來說,如果長期忽略自身技術的根基而去一昧地追求高層框架技術,這無疑是捨本求末的做法。
我為什麼會買這本書?前段時間手撕HotSpot的大部分原始碼,包括虛擬機器啟動,虛擬機器引數解析,類載入,物件建立過程,YGC和FGC的實現,過程很痛苦,後來發現了此書,就入手看看和自己的理解是否有出入,以免一條道走到黑。
-
《垃圾回收的演演算法與實現》
Ruby之父松本行弘推薦:上古傳承之魔法,徹底揭開垃圾回收的秘密!
此書很新,在我手撕了HotSpot的GC部分原始碼之後,覺得可以入手看看大神是如何理解垃圾回收演演算法的。
-
《Lucene實戰(第2版)》
適合於已具有一定java程式設計基本的讀者,以及希望能夠把強大的搜尋功能新增到自己的應用程式中的開發人員
當時因為專案需要,才入手了此書。
-
《程式設計珠璣》
歷史上偉大的電腦科學著作之一融深邃思想、實戰技術與趣味軼事於一爐的奇書帶你真正領略電腦科學之美
只有在興趣來臨時翻兩頁….我不會說到現在也沒翻完(所以可以不用入吧)
-
《億級流量網站架構核心技術 跟開濤學搭建高可用高併發系統》
總結並梳理了億級流量網站高可用和高併發原則,透過實體詳細介紹瞭如何落地這些原則。本書分為四部分:概述、高可用原則、高併發原則、案例實戰。從負載均衡、限流、降級、隔離、超時與重試、回滾機制、壓測與預案、快取、池化、非同步化、擴容、佇列等多方面詳細介紹了億級流量網站的架構核心技術,讓讀者看後能快速運用到實踐專案中。
-
《Java效能最佳化權威指南》
本書主要展示瞭如何在當今先進的多核硬體和複雜的作業系統環境下,系統且主動地提高Java 效能。本書對Charlie Hunt 和Binu John 的經典圖書Java Performance 進行延伸,提供了兩個前所未有的、強大的Java 平臺創新細節:Garbage First(G1)垃圾收集器和HotSpot 虛擬機器服務代理。閱讀本書,你就可以在任何情況下從JDK8 或9 中發揮Java 的*大效能。
這本書確實也是蠻驚艷的,外國人寫的,國人翻譯,整體水平還算不錯的。
-
《揭秘Java虛擬機器:JVM設計原理與實現》
本書透過深入結合HotSpot原始碼來解釋Java虛擬機器工作機理的書籍,概念是一切知識結構的基石,透過閱讀本書,可以瞭解和掌握Java虛擬機器的核心概念,可以在工作中更合理、更高效的排查、解決Java問題。
從Java、C/C++到彙編,一一解剖,知其然,知其所以然,還在看的一本書。
-
《深入理解JVM & G1 GC》
想瞭解G1演演算法的同學可以入手一本,大部分的篇幅都在講G1收集器
原始碼
原始碼這種東西,看的快,忘的也快,最好的方法是學會整理,把資料整理成自己的知識。
好多人覺得JDK原始碼太多,無從下手,經常半途而非,以我的經驗來說,最好的方法是當你在專案中用到了某個類,可以利用空閑時間去研究,當然這是在感興趣的前提下,比如簡單 ArrayList
是如何實現的, StringBuilder
和 StringBuffer
有什麼區別, HashMap
的實現原理,帶著問題去分析,從簡單的類開始循序漸進,同時在分析過程中能夠用自己的語言整理出來,就像一開始我寫過關於ArrayList的文章《Java Collections Framework – ArrayList》,雖然內容很簡單,但也算是一種嘗試,至少可以寫出來了,不管效果如何,剩下的只剩堅持了,自己嘗試寫過之後,可以加深理解和記憶。
看原始碼的時候,可以給自己定幾個標的,畢竟一口吃不成胖子,只能慢慢的啃,路是走出來的,透過debug一步一步的走下去。
1、資料結構相關的類,如String、ArrayList,LinkedList,HashMap和ConcurrentHashMap等等。2、執行緒併發相關的類,如Synchronized、ReentrantLock、ReadWriteLock、AQS和執行緒池的實現等。
如果一個類的實現很複雜,比如ConcurrentHashMap,就可以試著拆分成幾個模組進行分析。
如果看到後面已經不滿足於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遍過程其實還是需要耐心的。
對原始碼熟悉了之後,可以嘗試挖掘在框架中使用了哪些設計樣式,框架的設計結構又是如何的,每一次實踐都是一次進步,關鍵在於如何邁出第一步。
JVM
目前正在補充JVM領域的知識,希望可以遇到更多志同道合的小夥伴。
只有走出臥室才能看見繁星
只有經歷雨的洗禮才能看見彩虹
Java這條道,還有很長的路要走,共勉!
●本文編號580,以後想閱讀這篇文章直接輸入580即可
●輸入m獲取文章目錄
C/C++程式設計
更多推薦《18個技術類微信公眾號》
涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。