天天看點

JAVA好書籍

學習的最好途徑就是看書

  "學習的最好途徑就是看書",這是我自己學習并且小有了一定的積累之後的第一體會。個人認為看書有兩點好處:

  1、能出版出來的書一定是經過反複的思考、雕琢和稽核的,是以從專業性的角度來說,一本好書的價值遠超其他資料

  2、對着書上的代碼自己敲的時候友善

  "看完書之後再次提升自我的最好途徑是看一些相關的好博文",我個人認為這是學習的第二步,因為一本書往往有好幾百頁,好的博文是自己看書學習之後的一些總結和提煉,對于梳理學習的内容很有好處,當然這裡不是說自己的學習方法,就不再扯下去了。

  很多程式員們往往有看書的沖動,但不知道看哪些書,下面我就給各位Java程式猿們推薦一些好書(每本書的作者會加粗标紅),其中絕大多數都是我自己平時在看的書,也算是我對于平時讀的書做一個小總結和讀後感吧。

  《深入了解Java虛拟機:JVM進階特性與最佳實踐》

JAVA好書籍

如果你不滿足于做一個隻會寫if...else...的Java程式員,而是希望更進一步,我随便舉幾個例子吧:

  1、了解Java代碼的底層運作機制

  2、定位性能問題

  3、對整個系統進行性能調優

  4、解決各種奇奇怪怪的線上線下問題

  5、更加進階别的,為自己的項目量身定做一款适合自己項目的虛拟機

  那麼Java虛拟機是你必學的一門技術。《深入了解Java虛拟機:JVM進階特性與最佳實踐》作者是周志明,這本書可以說是國内寫得最好的有關Java虛拟機的書籍,近半年,前前後後這本書我起碼看了有5遍。國内寫虛拟機的書除了這本,其實還有一些其他的,我也買過,不過粗略看下來,很多内容也是《深入了解Java虛拟機:JVM進階特性與最佳實踐》此書裡面的。

  另外值得一提的是,《深入了解Java虛拟機:JVM進階特性與最佳實踐》這本書,有電子版的,網上搜一下就能下載下傳到了。不過建議有興趣的朋友還是去買書看,電子版本下載下傳到的一般是比較老的版本,相比最新修訂版的《深入了解Java虛拟機:JVM進階特性與最佳實踐》,有很多作者新補充的知識點是沒有的。

  《HotSpot實戰》

JAVA好書籍

  所有的Java虛拟機都是遵循着Java虛拟機規範來的,市面上的Java虛拟機幾十款,《深入了解Java虛拟機:JVM進階特性與最佳實踐》一書裡面講的虛拟機并不針對某種特定的虛拟機,而是從Java虛拟機規範的角度來講解Java虛拟機。

  我們平時使用的乃至商用的大多數Java虛拟機都是Sun公司的HotSpot,大家cmd進入指令行,使用"java -version"指令就可以看到了。如果希望在Java虛拟機規範的基礎上更加深入地去了解虛拟機的一些細節是怎麼實作的,就可以看一下《HotSpot實戰》一書,作者是陳濤。不過由于HotSpot的源碼都是C/C++寫的,是以要求讀者有非常好的C/C++基礎,如果對這兩門語言不是很熟悉的朋友,看這本書可能對你幫助不是很大。

  最後提一句,如果有興趣的朋友,不妨先去網上下載下傳一個openJDK,HotSpot的源碼就在裡面。

  《Java并發程式設計實戰》

JAVA好書籍

這本書常常被列入Java程式員必讀十大書籍排行榜前幾位,不過個人不是很推薦這本書。

  《Java并發程式設計實戰》作者是Brian Goetz,怎麼說呢,這本書前前後後我也看了兩遍左右,個人感受是:

  1、文字多代碼少

  2、講解多實踐少

  我覺得這可能就是老外寫書的特點吧,因為Java是北美國家(加拿大、美國)開發和維護的,是以老外對Java方方面面的理論知識體系都掌握得是非常清楚和透徹的。翻開這本書看,多線程什麼用、什麼是死鎖、什麼是競争、什麼是線程安全等等,方方面面的知識點都用大量的文字篇幅講解,不免讓人感覺十分枯燥,也難讓讀者有實質性的進步。我這本書看了兩遍也屬于一目十行意思,有興趣的地方就重點看一下。

  無論如何,作為一本常常位于Jva程式員必讀十大書籍排行榜前幾名的書,還是一定要推薦給大家的。

  《Java多線程程式設計核心技術》

JAVA好書籍

  《Java多線程程式設計核心技術》作者高洪岩。想要學習多線程的朋友,這本書是我大力推薦的,我的個人部落格裡面二十多篇的多線程博文都是基于此書,并且在這本書的基礎上進行提煉和總結而寫出來的。

  此書和《Java并發程式設計實戰》相反,這本書的特點是大篇幅的代碼+小篇幅的精講解,可能這和中國人寫的書比較偏向實用主義的風格有關。本書關于線程安全、synchronized、Reentrant、Timer等等都用詳細的代碼進行了講解,而且每個大知識點下的多個小知識點都會詳細講解到,非常有實踐價值。

  有興趣的朋友們,我相信隻要你們跟着這本書裡面的代碼敲、運作、思考,三步走,對于多線程的使用與了解一定會進幾大步。

  不過這本書的缺點就是對于Java并發包下的一些類像CountDownLatch、Semphore、CyclicBarrier、Future、Callable等都沒有講到,重點的CAS和AQS也沒有觸及,重點類的實作原理也沒有提。當然,這很深入了,在學習了這本書之後如果能再去對這些知識進行一些學習、研究的話,你一定會慢慢成長為一個很厲害的多線程高手。

  《Effective Java中文版》

JAVA好書籍

  《Effective Java中文版》的作者是Joshua Bloch,這個人就很厲害了,他是谷歌的首席架構師,屬于超級技術大牛級别了吧,呵呵。由于沒有看過這本書,是以我不好發表評論,但是從這本書的知名度以及其作者的來頭來看(多提一句,這本書也是Java之父James Gosling博士推崇的一本書),我相信這一定是一本值得一看的好書。

  好的代碼是每個Java程式員都應該去追求的,不是說我今天寫一段好代碼相比寫一段爛代碼對性能會有多大的提升,更多的應該是提升了代碼的可讀性以及可以規避許多潛在的、未知的問題,避免代碼上線之後出問題而花時間去維護----無論從時間成本、人力成本還是風險成本來說,這都是非常高的。

  《深入分析Java Web技術内幕》

JAVA好書籍

  《深入分析Java Web技術内幕》,作者許令波,淘寶工程師。

  這本書我用一個字概括就是:全。真的非常全,HTTP、DNS、CDN、靜态化、Jetty、Tomcat、Servlet、Spring、MyBatis等等,什麼都有,涉及知識面非常廣,但又不像專門精講某個知識點的書籍一樣講得非常深入,感覺這本書就是盡量去用短的篇幅講清楚一些Java Web使用到的技術的内幕,讓讀者對這些知識點的技術内幕有一個理性的認識。

  不過,盡管每個知識點的篇幅都不多,但是重點都基本講到了,是一本讓人真正有收獲的書。如果想進一步了解這些技術的技術内幕,就要自己去買相關書籍或者自己上網查資料了,有種抛磚引玉,或者說師傅領進門、修行在個人的感覺。

  《大型網站技術架構 核心原理與案例分析》

JAVA好書籍

  一個字評價這本書,屌;兩個字評價這本書,很屌;三個字評價這本書,非常屌。呵呵,好了,再說下去可能别人以為我是水軍了。

  《大型網站技術架構 核心原理與案例分析》的作者是李智慧,原阿裡巴巴技術專家。

  Java的大多數應用都是用在Web上的,現在隻要稍微大型一點的Web應用,都一定是一個分布式系統,那麼一個分布式系統用到了哪些技術?一個大型網站是如何從一個小型網站成長起來的?如何保證你的網站安全?分布式系統使用到了緩存,有哪些緩存?緩存的使用有哪些值得注意的事項?

  關于分布式的知識點,都在這本書裡面有展現,隻有你想不到,沒有他寫不到,而且寫得非常易懂,基本屬于看一兩遍,再記一些筆記就知道是怎麼一回事兒了。多看幾遍,對分布式的了解一定會加深不少。而且裡面不僅僅是分布式的知識,還非常接地氣地寫了如何做一個好的架構師,其實我認為這不僅僅是寫給想做架構師的讀者看的,就是給讀者一些建議,如何更好地提出意見、如何更讓别人關注你的聲音、如何看到他人的優點,入木三分,讓人獲益匪淺。

  《大型網站系統與Java中間件實踐》

JAVA好書籍

  《大型網站系統與Java中間件實踐》作者曾憲傑,是淘寶的技術總監,算起來應該在阿裡有至少P8的級别了吧。

  這本書的部分内容和上面一本李智慧的《大型網站技術架構 核心原理與案例分析》有所重合,像分布式系統的演化、CDN、CAP理論和BASE理論等等,這也更說明這些都是分布式系統或者說是一個大型網站重點關注的内容,當作一次再學習也不錯。

  本書要突出的重點是中間件三個字,中間件是分布式系統中一個非常重要的東西,其最重要的作用應該就是解耦,降低子產品與子產品之間的強依賴,不同的子產品之間的依賴度降低,便可以各自獨立地開發自己的功能,這也可以說是軟體工程發展的目标和驅動力。

  是以,本書有一部分的内容就是基于中間件,詳細講解了中間件與JMS的各種知識,适合對分布式系統比較熟悉并且想要往中間件方面有一定研究的讀者。

  《從Paxos到ZooKeeper 分布式一緻性原理與實踐》

JAVA好書籍

  《從Paxos到ZooKeeper 分布式一緻性原理與實踐》,作者倪超,阿裡巴巴工程師。

  這本書是我最近在研讀的一本書,和上面的《大型網站系統與Java中間件實踐》一樣,屬于分布式元件的範疇,屬于有些深入的内容,當然也是我自己的個人興趣。當然,如果有志向做一個出色的大型網站架構師、公司的技術總監之類,這些知識當然是必須掌握的。

  本書從分布式系統基本理論開始講起,講到Paxos算法,最後慢慢引入到Zookeeper,循序漸進。當然,更多的我目前還不友善發表什麼看法,因為這本書的第二張Paxos算法我都還沒有弄懂(Paxos算法确實有些難以了解和不太易懂),接下來的章節還沒有看下去。

  如果網友們所在的公司在使用Zookeeper,并且你又對Zookeeper感興趣想要研究一下它的原理的,這本書将是不二之選。

  《MySQL5.6從零開始學》

JAVA好書籍

  《MySQL5.6從零開始學》,作者劉增傑和李坤。

  作為一名Java程式員,我認為我們千萬不要覺得資料庫是DBA的事情,資料庫對一個Java程式員來說也是必須掌握的一門知識,豐富的資料庫性能優化經驗是一個頂尖程式員必備技能。

  目前主流的資料庫有Oracle和MySQL,當然推薦大家的是MySQL,主要原因我認為有兩點:

  1、MySQL相比Oracle更輕量級、更小、安裝和解除安裝更友善,SQL其實都是差不多的,如果想學資料庫,學MySQL就可以了,在家裡面可以自己友善地研究,如果你的公司使用Oracle,隻要再用對比學習法,關注一下Oracle和MySQL的差别即可

  2、随着2009年阿裡巴巴去IOE的運動的進行,目前國内的很多網際網路公司都會選擇MySQL作為它們使用的資料庫,因為MySQL免費,是以既省錢又不需要出了問題就依賴甲骨文公司

  MySQL學習我推薦的是這本我自己學習看的《MySQL5.6從零開始學》,我是覺得挺好的這本書,書裡面的知識點很細緻、很全面,讀者選擇書籍的标準大多不就是這兩點嗎?

  《Spring源碼深度解析》

JAVA好書籍

  《Spring源碼深度解析》,作者郝佳。

  Spring這個架構做得太好了,功能太強大了,以至于很多開發者都隻知Spring,不知什麼是工廠、什麼是單例、什麼是代理(我面試别人的真實體會)。這種功能強大的架構内部一定是很複雜的實作,這就導緻一旦你的程式使用Spring,出了問題,可能是Error、可能是Exception、可能是程式運作結果不是你的預期的,出現諸如此類問題的時候,将會讓你感到困惑,除了上網查資料或者問别人似乎沒有更好的解決辦法。

  研讀Spring的源代碼不失為一種很好的學習方法,我個人認為這有很多好處:

  1、了解架構内部的實作之後,可以主動去解決問題,而不需要依賴别人

  2、Spring架構内部實作用到了很多設計模式,很好的代碼設計思路,這将會對你寫代碼、對你了解設計模式有很大的提高

  3、研究Spring架構将會大大增強你讀代碼的能力,我相信隻要你能研究清楚Spring内部是如何實作的,其他任何一個架構的源代碼都難不倒你

  總而言之,我認為讀代碼的能力是一個普通的程式員和一個好的程式員之間最大的差别之一,前者隻會把别人寫好的東西拿來用,後者不僅能用好,還清楚知道别人寫好的東西底層是如何實作的,在出現問題的時候可以輕松解決。

  Spring源代碼,個人推薦《Spring源碼深度解析》一書,真要研究透并且寫清楚Spring源代碼,恐怕三四本書都不夠,作者在近400頁的篇幅中盡量去講解Spring源代碼是如何實作的,殊為不易,盡管無法講得完全,但是相信作者的講解配合上讀者自己的研究,一定可以對Spring的實作有更深度的了解。