「學習的最好途徑就是看書「,這是我本身學習而且小有了必定的積累以後的第一體會。我的認爲看書有兩點好處:java
1.能出版出來的書必定是通過反覆的思考、雕琢和審覈的,所以從專業性的角度來講,一本好書的價值遠超其餘資料程序員
2.對着書上的代碼本身敲的時候方便面試
「看完書以後再次提高自個人最好途徑是看一些相關的好博文「,我我的認爲這是學習的第二步,由於一本書每每有好幾百頁,好的博文是本身看書學習以後的一些總結和提煉,對於梳理學習的內容頗有好處,固然這裏不是說本身的學習方法,就再也不扯下去了。算法
不少程序員們每每有看書的衝動,但不知道看哪些書,下面我就給各位Java程序猿們推薦一些好書(每本書的做者會加粗標紅),其中絕大多數都是我本身平時在看的書,也算是我對於平時讀的書作一個小總結和讀後感吧。數據庫
首先推薦的不是一本書,而是一個博客,也是咱們博客園另一位博友java_my_life。編程
目前市面上講解設計模式的書不少,雖然我前面講了看書是最好的,可是對設計模式感興趣的朋友們,我推薦的是這個博客。這位博友的設計模式講得很是很是好,我認爲90%的內容都是沒有問題且很值得學習的,其講解設計模式的大致路線是:設計模式
一、隨便開篇點明該設計模式的定義緩存
二、圖文並茂講解該設計模式中的結構安全
三、以詳細的代碼形式寫一下該種設計模式的實現
四、補充內容
五、講解該設計模式的優缺點
對於一個設計模式咱們關注、學習的知識點,不就是上面這些嗎?
不 過我要重點提醒一下網友們,同一種設計模式的寫法有多種,並非說只有按某種寫法來寫纔是這種設計模式。比方說適配器模式,咱們關注適配器模式必定要關注 的是什麼是適配器模式不是怎麼寫適配器模式,不要認爲某段代碼不是按照適配器模式的寫法寫下來的它就不是適配器模式了,記住這一點,你在學習設計模式的時 候必定會對代碼中用到的設計模式有更深刻的理解。
《深刻理解Java虛擬機:JVM高級特性與最佳實踐》
若是你不知足於作一個只會寫if…else…的Java程序員,而是但願更進一步,我隨便舉幾個例子吧:
一、瞭解Java代碼的底層運行機制
二、定位性能問題
三、對整個系統進行性能調優
四、解決各類奇奇怪怪的線上線下問題
五、更加高級別的,爲本身的項目量身定作一款適合本身項目的虛擬機
那 麼Java虛擬機是你必學的一門技術。《深刻理解Java虛擬機:JVM高級特性與最佳實踐》做者是周志明,這本書能夠說是國內寫得最好的有關Java虛 擬機的書籍,近半年,前先後後這本書我起碼看了有5遍。國內寫虛擬機的書除了這本,其實還有一些其餘的,我也買過,不過粗略看下來,不少內容也是《深刻理 解Java虛擬機:JVM高級特性與最佳實踐》此書裏面的。
另外值得一提的是,《深刻理解Java虛擬機:JVM高級特性與最佳實踐》這本 書,有電子版的,網上搜一下就能下載到了。不過建議有興趣的朋友仍是去買書看,電子版本下載到的通常是比較老的版本,相比最新修訂版的《深刻理解Java 虛擬機:JVM高級特性與最佳實踐》,有不少做者新補充的知識點是沒有的。
《HotSpot實戰》
全部的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併發編程實戰》做者是Brian Goetz,怎麼說呢,這本書前先後後我也看了兩遍左右,我的感覺是:
一、文字多代碼少
二、講解多實踐少
我 以爲這可能就是老外寫書的特色吧,由於Java是北美國家(加拿大、美國)開發和維護的,因此老外對Java方方面面的理論知識體系都掌握得是很是清楚和 透徹的。翻開這本書看,多線程什麼用、什麼是死鎖、什麼是競爭、什麼是線程安全等等,方方面面的知識點都用大量的文字篇幅講解,難免讓人感受十分枯燥,也 難讓讀者有實質性的進步。我這本書看了兩遍也屬於一目十行意思,有興趣的地方就重點看一下。
不管如何,做爲一本經常位於Jva程序員必讀十大書籍排行榜前幾名的書,仍是必定要推薦給你們的。
《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 Web技術內幕》,做者許令波,淘寶工程師。
這本書我用一個字歸納就是:全。真的很是全,HTTP、DNS、CDN、靜態化、Jetty、Tomcat、Servlet、Spring、MyBatis等等,什麼都有,涉及知識面很是廣,但又不像專門精講某個知識點的書籍同樣講得很是深刻,感受這本書就是儘可能去用短的篇幅講清楚一些Java Web使用到的技術的內幕,讓讀者對這些知識點的技術內幕有一個理性的認識。
不過,儘管每一個知識點的篇幅都很少,可是重點都基本講到了,是一本讓人真正有收穫的書。若是想進一步瞭解這些技術的技術內幕,就要本身去買相關書籍或者本身上網查資料了,有種拋磚引玉,或者說師傅領進門、修行在我的的感受。
《大型網站技術架構 核心原理與案例分析》
一個字評價這本書,屌;兩個字評價這本書,很屌;三個字評價這本書,很是屌。呵呵,好了,再說下去可能別人覺得我是水軍了。
《大型網站技術架構 核心原理與案例分析》的做者是李智慧,原阿里巴巴技術專家。
Java 的大多數應用都是用在Web上的,如今只要稍微大型一點的Web應用,都必定是一個分佈式系統,那麼一個分佈式系統用到了哪些技術?一個大型網站是如何從 一個小型網站成長起來的?如何保證你的網站安全?分佈式系統使用到了緩存,有哪些緩存?緩存的使用有哪些值得注意的事項?
關 於分佈式的知識點,都在這本書裏面有體現,只有你想不到,沒有他寫不到,並且寫得很是易懂,基本屬於看一兩遍,再記一些筆記就知道是怎麼一回事兒了。多看 幾遍,對分佈式的理解必定會加深很多。並且裏面不只僅是分佈式的知識,還很是接地氣地寫了如何作一個好的架構師,其實我認爲這不只僅是寫給想作架構師的讀 者看的,就是給讀者一些建議,如何更好地提出意見、如何更讓別人關注你的聲音、如何看到他人的優勢,入木三分,讓人獲益匪淺。
《大型網站系統與Java中間件實踐》
《大型網站系統與Java中間件實踐》做者曾憲傑,是淘寶的技術總監,算起來應該在阿里有至少P8的級別了吧。
這本書的部份內容和上面一本李智慧的《大型網站技術架構 核心原理與案例分析》有所重合,像分佈式系統的演化、CDN、CAP理論和BASE理論等等,這也更說明這些都是分佈式系統或者說是一個大型網站重點關注的內容,看成一次再學習也不錯。
本書要突出的重點是中間件三個字,中間件是分佈式系統中一個很是重要的東西,其最重要的做用應該就是解耦,下降模塊與模塊之間的強依賴,不一樣的模塊之間的依賴度下降,即可以各自獨立地開發本身的功能,這也能夠說是軟件工程發展的目標和驅動力。
所以,本書有一部分的內容就是基於中間件,詳細講解了中間件與JMS的各類知識,適合對分佈式系統比較熟悉而且想要往中間件方面有必定研究的讀者。
《從Paxos到ZooKeeper 分佈式一致性原理與實踐》
《從Paxos到ZooKeeper 分佈式一致性原理與實踐》,做者倪超,阿里巴巴工程師。
這本書是我最近在研讀的一本書,和上面的《大型網站系統與Java中間件實踐》同樣,屬於分佈式組件的範疇,屬於有些深刻的內容,固然也是我本身的我的興趣。固然,若是有志向作一個出色的大型網站架構師、公司的技術總監之類,這些知識固然是必須掌握的。
本書從分佈式系統基本理論開始講起,講到Paxos算法,最後慢慢引入到Zookeeper,按部就班。固然,更多的我目前還不方便發表什麼見解,由於這本書的第二張Paxos算法我都尚未弄懂(Paxos算法確實有些難以理解和不太易懂),接下來的章節尚未看下去。
若是網友們所在的公司在使用Zookeeper,而且你又對Zookeeper感興趣想要研究一下它的原理的,這本書將是不二之選。
《MySQL5.6從零開始學》
《MySQL5.6從零開始學》,做者劉增傑和李坤。
做爲一名Java程序員,我認爲咱們千萬不要以爲數據庫是DBA的事情,數據庫對一個Java程序員來講也是必須掌握的一門知識,豐富的數據庫性能優化經驗是一個頂尖程序員必備技能。
目前主流的數據庫有Oracle和MySQL,固然推薦你們的是MySQL,主要緣由我認爲有兩點:
一、MySQL相比Oracle更輕量級、更小、安裝和卸載更方便,SQL其實都是差很少的,若是想學數據庫,學MySQL就能夠了,在家裏面能夠本身方便地研究,若是你的公司使用Oracle,只要再用對比學習法,關注一下Oracle和MySQL的差異便可
二、隨着2009年阿里巴巴去IOE的運動的進行,目前國內的不少互聯網公司都會選擇MySQL做爲它們使用的數據庫,由於MySQL免費,因此既省錢又不須要出了問題就依賴甲骨文公司
MySQL學習我推薦的是這本我本身學習看的《MySQL5.6從零開始學》,我是以爲挺好的這本書,書裏面的知識點很細緻、很全面,讀者選擇書籍的標準大多不就是這兩點嗎?
《Spring源碼深度解析》
《Spring源碼深度解析》,做者郝佳。
Spring 這個框架作得太好了,功能太強大了,以致於不少開發者都只知Spring,不知什麼是工廠、什麼是單例、什麼是代理(我面試別人的真實體會)。這種功能強 大的框架內部必定是很複雜的實現,這就致使一旦你的程序使用Spring,出了問題,多是Error、多是Exception、多是程序運行結果不 是你的預期的,出現諸如此類問題的時候,將會讓你感到困惑,除了上網查資料或者問別人彷佛沒有更好的解決辦法。
研讀Spring的源代碼不失爲一種很好的學習方法,我我的認爲這有不少好處:
一、理解框架內部的實現以後,能夠主動去解決問題,而不須要依賴別人
二、Spring框架內部實現用到了不少設計模式,很好的代碼設計思路,這將會對你寫代碼、對你理解設計模式有很大的提升
三、研究Spring框架將會大大加強你讀代碼的能力,我相信只要你能研究清楚Spring內部是如何實現的,其餘任何一個框架的源代碼都難不倒你
總而言之,我認爲讀代碼的能力是一個普通的程序員和一個好的程序員之間最大的差異之一,前者只會把別人寫好的東西拿來用,後者不只能用好,還清楚知作別人寫好的東西底層是如何實現的,在出現問題的時候能夠輕鬆解決。
Spring源代碼,我的推薦《Spring源碼深度解析》一書,真要研究透而且寫清楚Spring源代碼,恐怕三四本書都不夠,做者在近400頁的篇幅中儘可能去講解Spring源代碼是如何實現的,殊爲不易,儘管沒法講得徹底,可是相信做者的講解配合上讀者本身的研究,必定能夠對Spring的實現有更深度的理解。
後記
以 上就是我推薦給Java開發者們的一些值得一看的好書。可是這些書裏面並無Java基礎、Java教程之類的書,不是我不推薦,而是離我本身學習 Java基礎技術也過去好幾年了,我學習的時候看的什麼也忘了,因此我不能不負責任地推薦一些我本身都沒有看過的書給你們。對於Java基礎知識的學習, 我提兩點建議吧:
一、多寫多敲代碼,好的代碼與紮實的基礎知識必定是實踐出來的
二、能夠去尚學堂下載一下馬士兵的視頻來學習一下Java基礎,還挺不錯的,若是尚學堂官網上下載不了能夠底下回復,個人電腦裏有
最後,每一位讀到這裏的網友,感謝大家能耐心地看完。但願在成爲一名更優秀的Java程序員的道路上,咱們能夠一塊兒學習、一塊兒進步。