作者:五月的倉頡
原文地址:http://www.cnblogs.com/xrq730/p/4994545.html
學習的最好途徑就是看書
"學習的最好途徑就是看書"苗膝,這是我自己學習并且小有了一定的積累之后的第一體會。個人認為看書有兩點好處:
1材鹦、能出版出來的書一定是經(jīng)過反復的思考明棍、雕琢和審核的颠蕴,因此從專業(yè)性的角度來說垦沉,一本好書的價值遠超其他資料
2、對著書上的代碼自己敲的時候方便
"看完書之后再次提升自我的最好途徑是看一些相關的好博文"巫湘,我個人認為這是學習的第二步装悲,因為一本書往往有好幾百頁,好的博文是自己看書學習之后的一些總結(jié)和提煉尚氛,對于梳理學習的內(nèi)容很有好處诀诊,當然這里不是說自己的學習方法,就不再扯下去了阅嘶。
很多程序員們往往有看書的沖動属瓣,但不知道看哪些書载迄,下面我就給各位Java程序猿們推薦一些好書(每本書的作者會加粗標紅),其中絕大多數(shù)都是我自己平時在看的書抡蛙,也算是我對于平時讀的書做一個小總結(jié)和讀后感吧护昧。
http://www.cnblogs.com/java-my-life/
首先推薦的不是一本書,而是一個博客粗截,也是我們博客園另外一位博友java_my_life惋耙。
目前市面上講解設計模式的書很多,雖然我前面講了看書是最好的熊昌,但是對設計模式感興趣的朋友們绽榛,我推薦的是這個博客。這位博友的設計模式講得非常非常好浴捆,我認為90%的內(nèi)容都是沒有問題且很值得學習的,其講解設計模式的大體路線是:
1稿械、開篇點明該設計模式的定義
2选泻、圖文并茂講解該設計模式中的結(jié)構(gòu)
3、以詳細的代碼形式寫一下該種設計模式的實現(xiàn)
4美莫、補充內(nèi)容
5页眯、講解該設計模式的優(yōu)缺點
對于一個設計模式我們關注、學習的知識點厢呵,不就是上面這些嗎窝撵?
不過我要重點提醒一下網(wǎng)友們,同一種設計模式的寫法有多種襟铭,并不是說只有按某種寫法來寫才是這種設計模式碌奉。比方說適配器模式,我們關注適配器模式一定要關注的是什么是適配器模式不是怎么寫適配器模式寒砖,不要認為某段代碼不是按照適配器模式的寫法寫下來的它就不是適配器模式了赐劣,記住這一點,你在學習設計模式的時候一定會對代碼中用到的設計模式有更深入的理解哩都。
《深入理解Java虛擬機:JVM高級特性與最佳實踐》
如果你不滿足于做一個只會寫if...else...的Java程序員魁兼,而是希望更進一步,我隨便舉幾個例子吧:
1漠嵌、了解Java代碼的底層運行機制
2咐汞、定位性能問題
3、對整個系統(tǒng)進行性能調(diào)優(yōu)
4儒鹿、解決各種奇奇怪怪的線上線下問題
5化撕、更加高級別的,為自己的項目量身定做一款適合自己項目的虛擬機
那么Java虛擬機是你必學的一門技術(shù)约炎。《深入理解Java虛擬機:JVM高級特性與最佳實踐》作者是周志明侯谁,這本書可以說是國內(nèi)寫得最好的有關Java虛擬機的書籍,近半年,前前后后這本書我起碼看了有5遍墙贱。國內(nèi)寫虛擬機的書除了這本热芹,其實還有一些其他的,我也買過惨撇,不過粗略看下來伊脓,很多內(nèi)容也是《深入理解Java虛擬機:JVM高級特性與最佳實踐》此書里面的。
另外值得一提的是魁衙,《深入理解Java虛擬機:JVM高級特性與最佳實踐》這本書报腔,有電子版的,網(wǎng)上搜一下就能下載到了剖淀。不過建議有興趣的朋友還是去買書看纯蛾,電子版本下載到的一般是比較老的版本,相比最新修訂版的《深入理解Java虛擬機:JVM高級特性與最佳實踐》纵隔,有很多作者新補充的知識點是沒有的翻诉。
《HotSpot實戰(zhàn)》
所有的Java虛擬機都是遵循著Java虛擬機規(guī)范來的,市面上的Java虛擬機幾十款捌刮,《深入理解Java虛擬機:JVM高級特性與最佳實踐》一書里面講的虛擬機并不針對某種特定的虛擬機碰煌,而是從Java虛擬機規(guī)范的角度來講解Java虛擬機。
我們平時使用的乃至商用的大多數(shù)Java虛擬機都是Sun公司的HotSpot绅作,大家cmd進入命令行芦圾,使用"java -version"命令就可以看到了。如果希望在Java虛擬機規(guī)范的基礎上更加深入地去理解虛擬機的一些細節(jié)是怎么實現(xiàn)的俄认,就可以看一下《HotSpot實戰(zhàn)》一書个少,作者是陳濤。不過由于HotSpot的源碼都是C/C++寫的眯杏,所以要求讀者有非常好的C/C++基礎稍算,如果對這兩門語言不是很熟悉的朋友,看這本書可能對你幫助不是很大役拴。
最后提一句糊探,如果有興趣的朋友,不妨先去網(wǎng)上下載一個openJDK河闰,HotSpot的源碼就在里面科平。
《Java并發(fā)編程實戰(zhàn)》
這本書常常被列入Java程序員必讀十大書籍排行榜前幾位,不過個人不是很推薦這本書姜性。
《Java并發(fā)編程實戰(zhàn)》作者是Brian Goetz瞪慧,怎么說呢,這本書前前后后我也看了兩遍左右部念,個人感受是:
1弃酌、文字多代碼少
2氨菇、講解多實踐少
我覺得這可能就是老外寫書的特點吧,因為Java是北美國家(加拿大妓湘、美國)開發(fā)和維護的查蓉,所以老外對Java方方面面的理論知識體系都掌握得是非常清楚和透徹的。翻開這本書看榜贴,多線程什么用豌研、什么是死鎖、什么是競爭唬党、什么是線程安全等等鹃共,方方面面的知識點都用大量的文字篇幅講解,不免讓人感覺十分枯燥驶拱,也難讓讀者有實質(zhì)性的進步霜浴。我這本書看了兩遍也屬于一目十行意思,有興趣的地方就重點看一下蓝纲。
無論如何阴孟,作為一本常常位于Jva程序員必讀十大書籍排行榜前幾名的書,還是一定要推薦給大家的驻龟。
《Java多線程編程核心技術(shù)》
《Java多線程編程核心技術(shù)》作者高洪巖温眉。想要學習多線程的朋友缸匪,這本書是我大力推薦的翁狐,我的個人博客里面二十多篇的多線程博文都是基于此書,并且在這本書的基礎上進行提煉和總結(jié)而寫出來的凌蔬。
此書和《Java并發(fā)編程實戰(zhàn)》相反露懒,這本書的特點是大篇幅的代碼+小篇幅的精講解,可能這和中國人寫的書比較偏向?qū)嵱弥髁x的風格有關砂心。本書關于線程安全、synchronized、Reentrant嫁蛇、Timer等等都用詳細的代碼進行了講解酒朵,而且每個大知識點下的多個小知識點都會詳細講解到,非常有實踐價值译暂。
有興趣的朋友們抠忘,我相信只要你們跟著這本書里面的代碼敲、運行外永、思考崎脉,三步走,對于多線程的使用與理解一定會進幾大步伯顶。
不過這本書的缺點就是對于Java并發(fā)包下的一些類像CountDownLatch囚灼、Semphore骆膝、CyclicBarrier、Future灶体、Callable等都沒有講到阅签,重點的CAS和AQS也沒有觸及,重點類的實現(xiàn)原理也沒有提赃春。當然愉择,這很深入了,在學習了這本書之后如果能再去對這些知識進行一些學習织中、研究的話锥涕,你一定會慢慢成長為一個很厲害的多線程高手。
《Effective Java中文版》
這是唯一一本我沒有買的書狭吼。初識這本書层坠,是在我的博文Java代碼優(yōu)化(長期更新)里面,底下評論的時候有朋友提到了這本書刁笙,當時我說要去買破花,不過這兩個月一直都沒時間去逛書店,甚是遺憾疲吸,之后肯定會找時間去買這本書的座每。
《Effective Java中文版》的作者是Joshua Bloch,這個人就很厲害了摘悴,他是谷歌的首席架構(gòu)師峭梳,屬于超級技術(shù)大牛級別了吧,呵呵蹂喻。由于沒有看過這本書葱椭,所以我不好發(fā)表評論,但是從這本書的知名度以及其作者的來頭來看(多提一句口四,這本書也是Java之父James Gosling博士推崇的一本書)孵运,我相信這一定是一本值得一看的好書。
好的代碼是每個Java程序員都應該去追求的蔓彩,不是說我今天寫一段好代碼相比寫一段爛代碼對性能會有多大的提升治笨,更多的應該是提升了代碼的可讀性以及可以規(guī)避許多潛在的、未知的問題赤嚼,避免代碼上線之后出問題而花時間去維護----無論從時間成本旷赖、人力成本還是風險成本來說,這都是非常高的探膊。
《深入分析Java Web技術(shù)內(nèi)幕》
《深入分析Java Web技術(shù)內(nèi)幕》杠愧,作者許令波,淘寶工程師逞壁。
這本書我用一個字概括就是:全流济。真的非常全锐锣,HTTP、DNS绳瘟、CDN雕憔、靜態(tài)化、Jetty糖声、Tomcat斤彼、Servlet、Spring蘸泻、MyBatis等等琉苇,什么都有,涉及知識面非常廣悦施,但又不像專門精講某個知識點的書籍一樣講得非常深入并扇,感覺這本書就是盡量去用短的篇幅講清楚一些Java Web使用到的技術(shù)的內(nèi)幕,讓讀者對這些知識點的技術(shù)內(nèi)幕有一個理性的認識抡诞。
不過穷蛹,盡管每個知識點的篇幅都不多,但是重點都基本講到了昼汗,是一本讓人真正有收獲的書肴熏。如果想進一步了解這些技術(shù)的技術(shù)內(nèi)幕,就要自己去買相關書籍或者自己上網(wǎng)查資料了顷窒,有種拋磚引玉蛙吏,或者說師傅領進門、修行在個人的感覺蹋肮。
《大型網(wǎng)站技術(shù)架構(gòu) 核心原理與案例分析》
一個字評價這本書出刷,屌璧疗;兩個字評價這本書坯辩,很屌;三個字評價這本書崩侠,非常屌漆魔。呵呵,好了却音,再說下去可能別人以為我是水軍了改抡。
《大型網(wǎng)站技術(shù)架構(gòu) 核心原理與案例分析》的作者是李智慧,原阿里巴巴技術(shù)專家系瓢。
Java的大多數(shù)應用都是用在Web上的阿纤,現(xiàn)在只要稍微大型一點的Web應用,都一定是一個分布式系統(tǒng)夷陋,那么一個分布式系統(tǒng)用到了哪些技術(shù)欠拾?一個大型網(wǎng)站是如何從一個小型網(wǎng)站成長起來的胰锌?如何保證你的網(wǎng)站安全?分布式系統(tǒng)使用到了緩存藐窄,有哪些緩存资昧?緩存的使用有哪些值得注意的事項?
關于分布式的知識點荆忍,都在這本書里面有體現(xiàn)格带,只有你想不到,沒有他寫不到刹枉,而且寫得非常易懂叽唱,基本屬于看一兩遍,再記一些筆記就知道是怎么一回事兒了微宝。多看幾遍尔觉,對分布式的理解一定會加深不少。而且里面不僅僅是分布式的知識芥吟,還非常接地氣地寫了如何做一個好的架構(gòu)師侦铜,其實我認為這不僅僅是寫給想做架構(gòu)師的讀者看的,就是給讀者一些建議钟鸵,如何更好地提出意見钉稍、如何更讓別人關注你的聲音、如何看到他人的優(yōu)點棺耍,入木三分贡未,讓人獲益匪淺。
《大型網(wǎng)站系統(tǒng)與Java中間件實踐》
《大型網(wǎng)站系統(tǒng)與Java中間件實踐》作者曾憲杰蒙袍,是淘寶的技術(shù)總監(jiān)俊卤,算起來應該在阿里有至少P8的級別了吧。
這本書的部分內(nèi)容和上面一本李智慧的《大型網(wǎng)站技術(shù)架構(gòu) 核心原理與案例分析》有所重合害幅,像分布式系統(tǒng)的演化消恍、CDN、CAP理論和BASE理論等等以现,這也更說明這些都是分布式系統(tǒng)或者說是一個大型網(wǎng)站重點關注的內(nèi)容狠怨,當作一次再學習也不錯。
本書要突出的重點是中間件三個字邑遏,中間件是分布式系統(tǒng)中一個非常重要的東西佣赖,其最重要的作用應該就是解耦,降低模塊與模塊之間的強依賴记盒,不同的模塊之間的依賴度降低憎蛤,便可以各自獨立地開發(fā)自己的功能,這也可以說是軟件工程發(fā)展的目標和驅(qū)動力纪吮。
因此俩檬,本書有一部分的內(nèi)容就是基于中間件栏豺,詳細講解了中間件與JMS的各種知識,適合對分布式系統(tǒng)比較熟悉并且想要往中間件方面有一定研究的讀者豆胸。
《從Paxos到ZooKeeper 分布式一致性原理與實踐》
《從Paxos到ZooKeeper 分布式一致性原理與實踐》奥洼,作者倪超,阿里巴巴工程師晚胡。
這本書是我最近在研讀的一本書灵奖,和上面的《大型網(wǎng)站系統(tǒng)與Java中間件實踐》一樣,屬于分布式組件的范疇估盘,屬于有些深入的內(nèi)容瓷患,當然也是我自己的個人興趣。當然遣妥,如果有志向做一個出色的大型網(wǎng)站架構(gòu)師擅编、公司的技術(shù)總監(jiān)之類,這些知識當然是必須掌握的箫踩。
本書從分布式系統(tǒng)基本理論開始講起爱态,講到Paxos算法,最后慢慢引入到Zookeeper境钟,循序漸進锦担。當然,更多的我目前還不方便發(fā)表什么看法慨削,因為這本書的第二章Paxos算法我都還沒有弄懂(Paxos算法確實有些難以理解和不太易懂)洞渔,接下來的章節(jié)還沒有看下去。
如果網(wǎng)友們所在的公司在使用Zookeeper缚态,并且你又對Zookeeper感興趣想要研究一下它的原理的磁椒,這本書將是不二之選。
《MySQL5.6從零開始學》
《MySQL5.6從零開始學》玫芦,作者劉增杰和李坤浆熔。
作為一名Java程序員,我認為我們千萬不要覺得數(shù)據(jù)庫是DBA的事情姨俩,數(shù)據(jù)庫對一個Java程序員來說也是必須掌握的一門知識蘸拔,豐富的數(shù)據(jù)庫性能優(yōu)化經(jīng)驗是一個頂尖程序員必備技能师郑。
目前主流的數(shù)據(jù)庫有Oracle和MySQL环葵,當然推薦大家的是MySQL,主要原因我認為有兩點:
1宝冕、MySQL相比Oracle更輕量級张遭、更小、安裝和卸載更方便地梨,SQL其實都是差不多的菊卷,如果想學數(shù)據(jù)庫缔恳,學MySQL就可以了,在家里面可以自己方便地研究洁闰,如果你的公司使用Oracle歉甚,只要再用對比學習法,關注一下Oracle和MySQL的差別即可扑眉;
2纸泄、隨著2009年阿里巴巴去IOE的運動的進行,目前國內(nèi)的很多互聯(lián)網(wǎng)公司都會選擇MySQL作為它們使用的數(shù)據(jù)庫腰素,因為MySQL免費聘裁,所以既省錢又不需要出了問題就依賴甲骨文公司
MySQL學習我推薦的是這本我自己學習看的《MySQL5.6從零開始學》,我是覺得挺好的這本書弓千,書里面的知識點很細致衡便、很全面,讀者選擇書籍的標準大多不就是這兩點嗎洋访?
《Spring源碼深度解析》
《Spring源碼深度解析》镣陕,作者郝佳。
Spring這個框架做得太好了姻政,功能太強大了茁彭,以至于很多開發(fā)者都只知Spring,不知什么是工廠扶歪、什么是單例理肺、什么是代理(我面試別人的真實體會)。這種功能強大的框架內(nèi)部一定是很復雜的實現(xiàn)善镰,這就導致一旦你的程序使用Spring妹萨,出了問題,可能是Error炫欺、可能是Exception乎完、可能是程序運行結(jié)果不是你的預期的,出現(xiàn)諸如此類問題的時候品洛,將會讓你感到困惑树姨,除了上網(wǎng)查資料或者問別人似乎沒有更好的解決辦法。
研讀Spring的源代碼不失為一種很好的學習方法桥状,我個人認為這有很多好處:
1帽揪、理解框架內(nèi)部的實現(xiàn)之后,可以主動去解決問題辅斟,而不需要依賴別人
2转晰、Spring框架內(nèi)部實現(xiàn)用到了很多設計模式,很好的代碼設計思路,這將會對你寫代碼查邢、對你理解設計模式有很大的提高
3蔗崎、研究Spring框架將會大大增強你讀代碼的能力,我相信只要你能研究清楚Spring內(nèi)部是如何實現(xiàn)的扰藕,其他任何一個框架的源代碼都難不倒你
總而言之缓苛,我認為讀代碼的能力是一個普通的程序員和一個好的程序員之間最大的差別之一,前者只會把別人寫好的東西拿來用邓深,后者不僅能用好他嫡,還清楚知道別人寫好的東西底層是如何實現(xiàn)的,在出現(xiàn)問題的時候可以輕松解決庐完。
Spring源代碼钢属,個人推薦《Spring源碼深度解析》一書,真要研究透并且寫清楚Spring源代碼门躯,恐怕三四本書都不夠淆党,作者在近400頁的篇幅中盡量去講解Spring源代碼是如何實現(xiàn)的,殊為不易讶凉,盡管無法講得完全染乌,但是相信作者的講解配合上讀者自己的研究,一定可以對Spring的實現(xiàn)有更深度的理解懂讯。
后記
以上就是我推薦給Java開發(fā)者們的一些值得一看的好書荷憋。但是這些書里面并沒有Java基礎、Java教程之類的書褐望,不是我不推薦勒庄,而是離我自己學習Java基礎技術(shù)也過去好幾年了,我學習的時候看的什么也忘了瘫里,所以我不能不負責任地推薦一些我自己都沒有看過的書給大家实蔽。對于Java基礎知識的學習,我提兩點建議吧:
1谨读、多寫多敲代碼局装,好的代碼與扎實的基礎知識一定是實踐出來的;
2劳殖、可以去尚學堂下載一下馬士兵的視頻來學習一下Java基礎铐尚,還挺不錯的,如果尚學堂官網(wǎng)上下載不了可以底下回復哆姻,我的電腦里有宣增;
最后,每一位讀到這里的網(wǎng)友填具,感謝你們能耐心地看完统舀。希望在成為一名更優(yōu)秀的Java程序員的道路上匆骗,我們可以一起學習劳景、一起進步誉简。