看書三年成爲阿里技術專家級別:我看過的一些書、源碼和框架

物有本末,事有終始,知所前後,則近道矣前端

面試經歷

關於Java面試,你應該準備這些知識點
關於Java面試,你應該準備這些知識點(續)
前段時間抽空整理了上面兩篇面試經歷,收到很多的關注,不少同窗私信我平時都是如何get到這些知識的,是否有一些相關的書單,Java的源碼太多了,應該如何看,框架的代碼應該如何閱讀等等問題。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一步一步的走下去。

一、數據結構相關的類,如String、ArrayList,LinkedList,HashMap和ConcurrentHashMap等等。
二、線程併發相關的類,如Synchronized、ReentrantLock、ReadWriteLock、AQS和線程池的實現等。

若是一個類的實現很複雜,好比ConcurrentHashMap,就能夠試着拆分紅幾個模塊進行分析
深刻淺出ConcurrentHashMap(1.8)
談談ConcurrentHashMap1.7和1.8的不一樣實現
ConcurrentHashMap的紅黑樹實現分析
深刻分析ConcurrentHashMap1.8的擴容實現

若是看到後面已經不知足於JDK層面的實現原理了,能夠嘗試着看看HotSpot的源碼,好比Synchronized關鍵字如何實現,String常量池如何實現,類對象如何建立,只要能想到的,均可以從源碼中找到答案,答案就在那裏,就看你能不能找到。

深刻分析String.intern和String常量的實現原理
深刻分析synchronized的JVM實現
深刻分析Object.wait/notify實現機制
如何查看HotSpot VM的運行時數據
深刻分析Object.finalize方法的實現原理

框架

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

以本身爲例,因爲項目須要,加上對高性能和多併發比較感興趣,看過比較多的Netty源碼,記得剛開始研究Netty源碼,也是束手無策,後來從NIO入手,寫了 《深刻淺出NIO Channel和Buffer》,都是一些概念性的東西,本身寫一遍是爲了加深理解,後來不知足JDK中的socket實現,就嘗試處處找資料,因而寫了 《深刻淺出NIO Socket實現機制》,有了這些基礎以後,再嘗試Netty,寫了《Netty入門簡介》,後來基於Netty寫了個簡單的服務,經過debug的方式,把Netty服務的啓動、請求的accept、read和write調試了N遍,這N遍過程其實仍是須要耐心的,因而纔有了以下的文章:

Netty源碼分析之服務啓動
Netty源碼分析之NioEventLoop
Netty源碼分析之ChannelPipeline
Netty源碼分析之accept過程
深刻淺出Netty read
深刻淺出Netty write
深刻淺出Netty內存管理 PoolChunk
深刻淺出Netty內存管理 PoolSubpage
深刻淺出Netty內存管理 PoolChunkList
深刻淺出Netty內存管理 PoolArena
深刻淺出MappedByteBuffer

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

Java這條道,還有很長的路要走,共勉!

相關文章
相關標籤/搜索