成為一名高階java工程師需要讀那些書
“學習的最好途徑就是看書“,這是我自己學習並且小有了一定的積累之後的第一體會。個人認為看書有兩點好處:
1.能出版出來的書一定是經過反覆的思考、雕琢和稽核的,因此從專業性的角度來說,一本好書的價值遠超其他資料
2.對著書上的程式碼自己敲的時候方便
“看完書之後再次提升自我的最好途徑是看一些相關的好博文“,我個人認為這是學習的第二步,因為一本書往往有好幾百頁,好的博文是自己看書學習之後的一些總結和提煉,對於梳理學習的內容很有好處,當然這裡不是說自己的學習方法,就不再扯下去了。
很多程式設計師們往往有看書的衝動,但不知道看哪些書,下面我就給各位Java程式猿們推薦一些好書(每本書的作者會加粗標紅),其中絕大多數都是我自己平時在看的書,也算是我對於平時讀的書做一個小總結和讀後感吧。
首先推薦的不是一本書,而是一個部落格,也是我們部落格園另外一位博友java_my_life。
目前市面上講解設計模式的書很多,雖然我前面講了看書是最好的,但是對設計模式感興趣的朋友們,我推薦的是這個部落格。這位博友的設計模式講得非常非常好,我認為90%的內容都是沒有問題且很值得學習的,其講解設計模式的大體路線是:
1、隨便開篇點明該設計模式的定義
2、圖文並茂講解該設計模式中的結構
3、以詳細的程式碼形式寫一下該種設計模式的實現
4、補充內容
5、講解該設計模式的優缺點
對於一個設計模式我們關注、學習的知識點,不就是上面這些嗎?
不 過我要重點提醒一下網友們,同一種設計模式的寫法有多種,並不是說只有按某種寫法來寫才是這種設計模式。比方說介面卡模式,我們關注介面卡模式一定要關注 的是什麼是介面卡模式不是怎麼寫介面卡模式,不要認為某段程式碼不是按照介面卡模式的寫法寫下來的它就不是介面卡模式了,記住這一點,你在學習設計模式的時 候一定會對程式碼中用到的設計模式有更深入的理解。
《深入理解Java虛擬機器:JVM高階特性與最佳實踐》
如果你不滿足於做一個只會寫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虛擬機器:JVM高階特性與最佳實踐》一書裡面講的虛擬機器並不針對某種特定的虛擬機器,而是從Java虛擬機器規範的角度來講解Java虛擬機器。
我們平時使用的乃至商用的大多數Java虛擬機器都是Sun公司的HotSpot,大家cmd進入命令列,使用”java -version”命令就可以看到了。如果希望在Java虛擬機器規範的基礎上更加深入地去理解虛擬機器的一些細節是怎麼實現的,就可以看一下《HotSpot實戰》一書,作者是陳濤。不過由於HotSpot的原始碼都是C/C++寫的,所以要求讀者有非常好的C/C++基礎,如果對這兩門語言不是很熟悉的朋友,看這本書可能對你幫助不是很大。
最後提一句,如果有興趣的朋友,不妨先去網上下載一個openJDK,HotSpot的原始碼就在裡面。
《Java併發程式設計實戰》
這本書常常被列入Java程式設計師必讀十大書籍排行榜前幾位,不過個人不是很推薦這本書。
《Java併發程式設計實戰》作者是Brian Goetz,怎麼說呢,這本書前前後後我也看了兩遍左右,個人感受是:
1、文字多程式碼少
2、講解多實踐少
我 覺得這可能就是老外寫書的特點吧,因為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,主要原因我認為有兩點:
1、MySQL相比Oracle更輕量級、更小、安裝和解除安裝更方便,SQL其實都是差不多的,如果想學資料庫,學MySQL就可以了,在家裡面可以自己方便地研究,如果你的公司使用Oracle,只要再用對比學習法,關注一下Oracle和MySQL的差別即可
2、隨著2009年阿里巴巴去IOE的運動的進行,目前國內的很多網際網路公司都會選擇MySQL作為它們使用的資料庫,因為MySQL免費,所以既省錢又不需要出了問題就依賴甲骨文公司
MySQL學習我推薦的是這本我自己學習看的《MySQL5.6從零開始學》,我是覺得挺好的這本書,書裡面的知識點很細緻、很全面,讀者選擇書籍的標準大多不就是這兩點嗎?
《Spring原始碼深度解析》
《Spring原始碼深度解析》,作者郝佳。
Spring 這個框架做得太好了,功能太強大了,以至於很多開發者都只知Spring,不知什麼是工廠、什麼是單例、什麼是代理(我面試別人的真實體會)。這種功能強 大的框架內部一定是很複雜的實現,這就導致一旦你的程式使用Spring,出了問題,可能是Error、可能是Exception、可能是程式執行結果不 是你的預期的,出現諸如此類問題的時候,將會讓你感到困惑,除了上網查資料或者問別人似乎沒有更好的解決辦法。
研讀Spring的原始碼不失為一種很好的學習方法,我個人認為這有很多好處:
1、理解框架內部的實現之後,可以主動去解決問題,而不需要依賴別人
2、Spring框架內部實現用到了很多設計模式,很好的程式碼設計思路,這將會對你寫程式碼、對你理解設計模式有很大的提高
3、研究Spring框架將會大大增強你讀程式碼的能力,我相信只要你能研究清楚Spring內部是如何實現的,其他任何一個框架的原始碼都難不倒你
總而言之,我認為讀程式碼的能力是一個普通的程式設計師和一個好的程式設計師之間最大的差別之一,前者只會把別人寫好的東西拿來用,後者不僅能用好,還清楚知道別人寫好的東西底層是如何實現的,在出現問題的時候可以輕鬆解決。
Spring原始碼,個人推薦《Spring原始碼深度解析》一書,真要研究透並且寫清楚Spring原始碼,恐怕三四本書都不夠,作者在近400頁的篇幅中儘量去講解Spring原始碼是如何實現的,殊為不易,儘管無法講得完全,但是相信作者的講解配合上讀者自己的研究,一定可以對Spring的實現有更深度的理解。
後記
以 上就是我推薦給Java開發者們的一些值得一看的好書。但是這些書裡面並沒有Java基礎、Java教程之類的書,不是我不推薦,而是離我自己學習 Java基礎技術也過去好幾年了,我學習的時候看的什麼也忘了,所以我不能不負責任地推薦一些我自己都沒有看過的書給大家。對於Java基礎知識的學習, 我提兩點建議吧:
1、多寫多敲程式碼,好的程式碼與紮實的基礎知識一定是實踐出來的
2、可以去尚學堂下載一下馬士兵的視訊來學習一下Java基礎,還挺不錯的,如果尚學堂官網上下載不了可以底下回復,我的電腦裡有
最後,每一位讀到這裡的網友,感謝你們能耐心地看完。希望在成為一名更優秀的Java程式設計師的道路上,我們可以一起學習、一起進步。
相關推薦
成為一名高階java工程師需要讀那些書
“學習的最好途徑就是看書“,這是我自己學習並且小有了一定的積累之後的第一體會。個人認為看書有兩點好處: 1.能出版出來的書一定是經過反覆的思考、雕琢和稽核的,因此從專業性的角度來說,一本好書的價值遠超其他資料 2.對著書上的程式碼自己敲的時候方便 “看完書之後再次
成為一名大資料工程師,需要具備什麼技能?
經常看到近幾萬的朋友都在疑惑,學習Java應該選擇什麼發展方向,這個咱們在之前的文章中有提到過,Java發展在領域上有三個選擇方向: JavaEE,主要應用於企業級應用開發;安卓開發方向;嵌入式應用開發方向。在此建議大家選擇JavaEE方向,因為應用非常廣泛,崗位設定也比較多。 但我們從來沒
阿里P7工程師一封遲到的年終總結:告訴你如何成為一名優秀軟體工程師
文 / 阿里P7資深工程師 嚴明明在收到嚴明明這封總結信的時候,此時已是櫻花飄盡的四月天。這封總結信的標題是:二零一七年,我的失敗與偉大當我認真讀完這篇來自阿里P7資深工程師的2017年度總結後,我
成為一名軟體測試工程師必備的技能,除了技術還需天賦。。。
通用技能上: 1.基本計算機知識(作業系統,資料庫,通訊協議原理,熟悉至少一門程式語言) 2.基本軟體測試知識(各種測試理論,測試方法論,測試用例編寫,缺陷界定標準,軟體質量評估) 3.簡單專案管理知識 產品、系統認知: 1.熟悉所測產品功能,能夠將產品文件內描述的UC轉化成TC,這個最最基本 2.熟悉所測產
如何成為一名無人駕駛工程師
作者 | 劉少山 無人駕駛作為一項新興技術,落地為產品需要大量演算法、工程、產品貫通的AI全棧人才。筆者在最近一年招聘中發現,許多技術方向的同學對人工智慧既愛又畏懼,一方面覺得這是未來,另一方面又覺得很難而不敢觸碰。懂工程的同學做演算法時有很大的畏懼感,而專注演算法的同學又常常容易陷入某個演算法而缺
如何成為一名區塊鏈工程師?
轉自:http://blog.csdn.net/blockchain_lemon/article/details/79447639春節前後,區塊鏈再次刷爆我們的朋友圈,關注區塊鏈的人正在以幾何數集上升。大潮來臨,一切都不同了,身懷絕技的程式設計師有了大展巨集圖的歷史性機會,程
成為一名合格軟體工程師的7點建議
在過去5年多的時間裡,我在科技初創公司中任職過不同崗位,也在學術界短暫工作過。在這些不同角色中我學到了一個觀點。我慢慢意識到一些原以為無關緊要的事情的重要性。這篇文章是根據我的個人經驗,針對剛入行的年輕工程師的一些建議。 第一印象很重要 一份新工作要有一
如何成為一名區塊鏈工程師?附學習資源
春節前後,區塊鏈再次刷爆我們的朋友圈,關注區塊鏈的人正在以幾何數集上升。大潮來臨,一切都不同了,身懷絕技的程式設計師有了大展巨集圖的歷史性機會,程式設計師們,是時候,毅然決然,懂點區塊鏈技術了。 本文列舉了關於區塊鏈和數字加密技術的文章和資源,分為以下幾個部分
一個高階java工程師需要具備什麼能力和技術
巨集觀方面 一、 JAVA。 要想成為JAVA(高階)工程師肯定要學習JAVA。一般的程式設計師或許只需知道一些JAVA的語法結構就可以應付了。但要成為JAVA(高階) 工程師,您要對JAVA做比較深入的研究。您應該多研究一下JDBC、IO包、Util包、Text包、JMS、EJB、RMI、執行緒。如果可
如何才能成為一名大資料工程師?
大資料是眼下非常時髦的技術名詞,與此同時自然也催生出了一些與大資料處理相關的職業,通過對資料的挖掘分析來影響企業的商業決策。 這群人在國外被叫做資料科學家(Data Scientist),這個頭銜最早由D.J.Pati和Jeff Hammerbacher於2008年提出,他們後來分別成為
如何才能成為一名谷歌工程師
#第一點:讓我們回到這個問題本身,也即是如何準備才能讓自己成為“優秀”的軟體工程師? 是的!這個問題的剩餘部分都是可選的。加入谷歌不是登月計劃。任何優秀的軟體工程師都有好機會成為谷歌工作文化的一部分。問題是你如何定義“優秀”。 **第二點:調整態度 在你給谷歌招聘人員留
乾貨 | 成為一名推薦系統工程師永遠都不晚
作者 | 陳開江 責編 | 何永燦 推薦系統工程師技能樹 掌握核心原理的技能 數學:微積分,統計學,線性代數 周邊學科:資訊理論基礎 推薦演算法:CF,LR,SVM,FM,FTRL,GBDT,RF,SVD,RBM,RNN,LSTM,RL 資料探勘:分類,聚類,迴歸,降維
如何成為一名資深Java架構師?
1架構師是什麼?要想往架構師的方向發展首先要知道架構師是什麼?架構師是一個既需要掌控整體又需要洞
如何成為一名全棧工程師?
我是學計算機專業的, 在剛大學的時候,還不知道什麼是全棧,反正什麼都學。我大學關於程式設計學的課 程有c、彙編、linux、JavaSE、嵌入式等; 我一直對c++很憧憬,覺得學c++都大神,在大三的時候,要三選一:c++ 、c#,、Java。不過我報課的時 候網速不行,沒報上c++,報上了java。那時候
如果想成為一名頂尖的前端,這份書單你一定要收藏!
歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~ 2014年一月以來,自己接觸web前端開發已經兩年多了,記錄一下自己前端學習路上看過的,以及道聽途說的一些書,基本上按照由淺入深來介紹。 JavaScript 入門 《JavaScr
成為一名Java高階架構師到底需要學習什麼?
Java架構師,應該算是一些Java程式設計師們的一個職業目標了吧。很多碼農碼了五六年的程式碼也沒能成為架構師。那成為Java架構師要掌握哪些技術呢,總體來說呢,有兩方面,一個是基礎技術,另一個就是組織能力和提出解決方案能力了。我就跟大家來簡要地說說吧。 如果你是想成為Ja
成為一名優秀的高階JAVA工程師必備的知識總結
1.Core Java,就是Java基礎、JDK的類庫,很多童鞋都會說,JDK我懂,但是懂還不足夠,知其然還要知其所以然,JDK的原始碼寫的非常好,要經常檢視,對使用頻繁的類,比如String,集合類(List,Map,Set)等資料結構要知道它們的實現,不同的集合類有什麼
如何成為一名JAVA(高階)工程師
或許您已經讀過我的那篇小文《如何成為java初級程式設計師》,那裡面只介紹了成為一個JAVA程式設計師應該具備的一些知識。我相信您絕不會只想著做一個初級的程式設計師,上了軟體開發的小船,您肯定有著遠大的理想,比如要在比較短的時間內做個高階成員,在不久的將來做個軟體專案經理
個人總結的一箇中高階Java開發工程師或架構師需要掌握的一些技能
近三年,其實都是在做一個專案,專案是一個大型的多節點部署的專案,做了好幾個版本,中間用到了很多技術和框架, 也用了一些管理工具和敏捷實踐。我這裡不是來說專案的,因為最近看了一些招聘資訊,結合專案中用到的一些知識和 管理措施,作為一個程式設計師,需要去實時評估下自己當前的能力是否能跟上時代的步