最強 Java 書單推薦,附學習方法

技術大佬用1w+字來告訴你該讀什麼書,循序漸進,並提供百度雲盤下載地址。重要的是還有學習方法。

請肆無忌憚地點贊吧,微信搜索【沉默王二】關注這個在九朝古都洛陽苟且偷生的程式設計師。

本文 GitHub github.com/itwanger 已收錄,裡面還有我精心為你準備的一線大廠面試題。

回想起 10 年前我學習 Java 那會,資源極度匱乏,老師給我們推薦了兩本書,一本《Java 編程思想》,一本《Java 開發寶典》。老師以為第一本書講理論,第二本書講實戰,完美的組合。

但實際上呢,畢業的時候,班裡面只有 13 名同學從事了軟體開發的工作,其餘 30 多名學生要麼大一的時候轉專業,要麼很早就放棄編程了。

《Java 編程思想》是本經典的好書,沒錯,但作為入門書籍的話,只會勸退。《Java 開發寶典》更是勸退書,裡面用 Java 做成的項目都很經典,比如說瀏覽器,五子棋,但小白根本駕馭不了啊!

10 年過去了,我已經擁有 10 多年的編程經驗了。別問,問就是加班加出來的。那我在 Java 編程方面已經有了自己的一些心得和體會,所以我在知乎上推薦了一個書單,閱讀人數超過了 66 萬,點贊數 1200+,說明大家都很受用,都很喜歡啊。

地址貼一下,需要的同學可以去圍觀一下。

//www.zhihu.com/question/269505829/answer/933582331

上面這個回答裡面包含了 13 本經典的書籍,並且是按照循序漸進的方式,相信同學們看完後會來私信感謝我的。不過,這個回答已經過去了一年多時間了,我想再添加一些書單進去,仍然按照入門→進階→深入的順序。

01、入門

  • 《Java 核心技術卷 1》

  • 《Head First Java》

注意跳過 Swing、AWT、Applet 這些章節。當然了,你也可以看一下我寫的這些 Java 教程,比較通俗易通一些,數了數,差不多 200 篇,還是非常全面給力的。

//www.itwanger.com/java.html

  • 《鳥哥的 Linux 私房菜》

為什麼要學 Linux 呢?因為在實際的開發工作中,項目基本上都要部署到 Linux 環境下。Windows 作為伺服器的很少,除了慢沒別的原因。

假如能夠提前掌握一些 Linux 基本操作的話,不僅簡歷上是加分項,工作中更能快人一步。

  • 《Maven 實戰》

  • 《Git 權威指南》

在我剛學 Java 那會,程式碼只能在本地,要想進行版本控制的話,還得裝一個 SVN 伺服器和客戶端。另外,還不能雲同步,換台電腦的話,基本上要把程式碼和項目依賴的 jar 包重新拷貝一遍。

要知道,程式碼都是很瑣碎的文件,複製粘貼起來非常慢;如果項目比較大的話,依賴的 jar 包也比較多,複製粘貼起來就更慢了。

現在好了,有碼雲、GitHub 這些雲倉庫可以用,多台電腦進行同步非常方便。再配合 Maven(項目構建工具) 和 Git(版本控制工具),玩起來 666 啊!

02、進階

  • 《Java 編程思想》

《Java 編程思想》這本書確實沒得說,品質很高,但需要放在 Java 入門後再去讀,這樣才能真正地去理解思想。

很多沒有足夠編程基礎的同學,盲目自信,直接開啃這本書,然後他們發現,啃得很痛苦,這就是因為沒有根基的原因造成的,就像沒有學會走就開始跑一樣,摔得很痛。

作者在前言里已經表明了,讀者需要知道基本的程式語句(比如 C裡面的 if 和 for),也就是說,作者假設讀者已經熟悉 C 的一些語法。可想而知,沒有編程基礎的同學在讀這本書的時候是多麼痛苦啊。

我就是在大學老師的誤導下開啃這本書的,第一遍,只讀了前言,就讀不下去了,晦澀,難懂。實習了一年結束後,我第二次讀這本書,仍然覺得頭大,強忍著,讀了差不多 200 頁,耐力就消耗殆盡了。

直到兩年前,我再重拾這本書,發現讀起來津津有味,每讀一個章節就產出一篇文章,這本書的價值真正地體現了。為什麼呢?因為我已經有多年的編程經驗,結合書中的理論知識,讀起來就有一種「恍然大悟」的感覺。

《Java 編程思想》不僅教我們怎麼做,還告訴我們為什麼要這樣做,這才是 Java 這門程式語言的精髓。

不過,《Java 編程思想》出版的時間是 2007 年,已經十多年過去了,雖然經典,但避免不了過時。但幸好,有《On Java 8》,這本書的作者就是 Bruce Eckel,即《Java 編程思想》的作者。事實上,《On Java 8》就是《Java 編程思想》的第五版,第四版用的 JDK 還是 1.5,《On Java 8》用的 JDK 已經升級到了 Java 8。

那同學們可能就要問了,《On Java 8》上哪買啊?

//github.com/LingCoder/OnJava8

不用買了,雷鋒已經將這本書翻譯成中文並且開源了,訪問上面的鏈接就可以在 GitHub 上閱讀了。

  • 《Java 網路編程》

《Java 網路編程》這本書的整體評價並不算高,但是,對於學習 Java 網路編程的基礎知識非常的有用。

  • 《Netty 實戰》

無論是構建高性能的 Web、遊戲伺服器、推送系統、RPC 框架、消息中間件還是分散式大數據處理引擎,都離不開 Netty,在整個行業中,Netty 廣泛而成功的應用,使其成為了 Java 高性能網路編程的卓絕框架。

  • 《Effective Java》

《Effective Java》第三版一共包含了 90 條極具實用價值的經驗規則,每條規則都值得 Java 程式設計師在實戰中去參照。這本書不需要按部就班地從頭到尾讀,可以隨意挑選任意小節進行閱讀,因為每條規則相對都是獨立的,儘管它們之間會交叉引用,但並不妨礙我們隨心所欲地閱讀。

作者 Josh Bloch 非常的牛逼,曾是 Google 的首席 Java 架構師,《Java開發者雜誌》將他列為世界上最頂尖的四十名軟體人物之一。Java 之父詹姆斯·高斯林對《Effective Java》的評價也非常的高。

  • 《阿里巴巴 Java 手冊》

《阿里巴巴 Java 開發手冊》這本小冊子雖然只有幾十頁,但講的主要是一些典型的開發規約、編程規範、以及最佳實踐,已經成為業界普遍遵循的開發規範。

最新版是嵩山版,封面就有一個掃地僧,唉,這就厲害了呀!

  • 《程式碼整潔之道》

軟體的品質,不僅依賴於架構,更與程式碼品質息息相關。而程式碼的品質與其整潔度成正比關係,越整潔的程式碼,其品質毫無疑問的就會越高。

《程式碼整潔之道》的第一章,對整潔程式碼下了一個定義,每個程式設計師都應該銘記在心。

1、整潔的程式碼力求專註,每個方法、每個類都應該全神貫注於一件事;命名更要給人一種「顧名思義」的感覺。
2、整潔的程式碼簡單直接,從不隱藏設計者的意圖。
3、整潔的程式碼應當有單元測試。
4、整潔的程式碼拒絕重複,其表達力直擊人的心靈。

  • 《Java 並發編程實戰》

  • 《Java 並發編程之美》

  • 《實戰 Java 高並發程式設計》

對於程式來說,如果具有並發的能力,效率就能夠大幅度地提升。對於程式設計師來說,如果精通 Java 並發編程的話,掙錢能力就會大幅提升,這話真的不是調侃,而是良心話啊。

這三本 Java 並發方面的書可以結合起來看,互相補充,幫助同學們在這方面快速地提高。

  • 《Java 性能權威指南》

通過閱讀《Java 性能權威指南》這本書,我們可以運用 4 個基本原則最大程度地提升性能測試的效果、使用 JDK 自帶的工具收集程式的性能數據、理解 JIT(即時編譯器)編譯器的優缺點、調優 JVM 垃圾收集器、最大程度優化多執行緒等等。

  • 《Spring 實戰》

  • 《Spring 揭秘》

Spring 是 Java 平台的一個開源框架,為基於 Java 構建的 Web 應用程式提供了大量的拓展支援。

1、Spring 能幫我們根據配置文件創建以及組裝對象之間的依賴關係。

2、Spring 面向切面編程能幫助我們無耦合的實現日誌記錄、性能統計、安全控制。

3、Spring 能非常簡單地幫我們管理資料庫事務。

4、Spring 能與第三方數據訪問框架(如 MyBatis、JPA)無縫集成。

5、Spring 能方便的與 Java EE(如 Java Mail、任務調度)整合。

《Spring 實戰》和《Spring 揭秘》能夠幫助同學們對 Spring 有一個更加全面的了解和掌握。

  • 《Spring Boot+Vue全棧開發實戰》

Spring Boot 是由 Pivotal 團隊提供的全新框架,其設計目的是用來簡化新 Spring 應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。簡單來說,就是 Spring Boot 其實不是什麼新的框架,它默認配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。

Spring Boot 方面的好書不多,索性就推薦一下我的好朋友江南一點雨的書,他本人還錄製了很多免費的影片,這些影片配套著他的書看,絕對可以對 Spring Boot 有著充分的掌握。

//springboot.javaboy.org/

這個鏈接是江南一點雨的教程合集,我覺得品質還是很高的,我自己在學習 Spring Boot 的時候就參照了不少。

  • 《圖解 HTTP》

  • 《HTTP 權威指南》

程式設計師,畢竟是搞 IT(Information Technology)的,網路這一塊還是很重要的。HTTP 全稱是 HyperText Transfer Protocal ,即:超文本傳輸協議,從 1990 年開始就在 WWW 上廣泛應用,是現在 WWW 上應用最多的協議,HTTP 是應用層協議,當你上網瀏覽網頁的時候,瀏覽器和 Web 伺服器之間就會通過 HTTP 在 Internet 上進行數據的發送和接收。

《圖解 HTTP》和《HTTP 權威指南》很值得去讀一讀。

  • 《高性能 MySQL》

  • 《MySQL 必知必會》

  • 《MySQL 技術內幕-InnoDB 存儲引擎》

MySQL 由於性能高、成本低、可靠性好,已經成為最流行的開源資料庫,隨著 MySQL 不斷的成熟,越來越多大規模的網站開始使用 MySQL,比如維基百科、Google 等。

作為一名 Java 程式設計師,MySQL 必知必會啊。

  • 《MyBatis 從入門到精通》

MyBatis 是一款優秀的持久層框架,它支援自定義 SQL、存儲過程以及高級映射。MyBatis 免除了幾乎所有的 JDBC 程式碼以及設置參數和獲取結果集的工作。MyBatis 可以通過簡單的 XML 或註解來配置和映射原始類型、介面和 Java POJO(Plain Old Java Objects,普通老式 Java 對象)為資料庫中的記錄。

除了《MyBatis 從入門到精通》這本書,同學們還可以直接閱讀 MyBatis 的中文網。

//mybatis.org/mybatis-3/zh/getting-started.html

  • 《Redis 實戰》

  • 《Redis 深度歷險:核心原理與應用實戰》

Redis 是互聯網技術領域中使用最廣泛的存儲中間件,它是 Remote Dictionary Service 三個單詞中加粗字母的組合。

Redis 以超高的性能、完美的文檔、簡潔的源碼著稱,中國外很多大型互聯網公司都在用,比如說阿里、騰訊、GitHub、Stack Overflow 等等。它的版本更新非常的快,功能也越來越強大,最初只是用來作為快取資料庫,現在已經可以用它來實現消息隊列了。

可以這麼說吧,掌握 Redis 已經變成了一項後端工程師必須具備的基礎技能。

  • 《RabbtiMQ 實戰指南》

RabbitMQ 是一款開源的消息隊列系統。主要特點在於健壯性好、易於使用、高性能、高並發、集群易擴展,以及強大的開源社區支援。《RabbitMQ 實戰指南》從消息中間件的概念和 RabbitMQ 的歷史切入,主要闡述 RabbitMQ 的安裝、使用、配置、管理、運維、原理、擴展等方面的細節。

  • 《Kafka 權威指南》

每個應用程式都會產生數據,包括日誌消息、度量指標、用戶活動記錄、響應消息等。如何移動數據,幾乎變得與數據本身一樣重要。如果你是架構師、開發者或者產品工程師,同時也是 Apache Kafka 新手,那麼這本實踐指南將會幫助你成為流式平台上處理實時數據的專家。

  • 《第一本 Docker 書》

Docker 是一個開源的應用容器引擎,開發者可以利用 Docker 打包自己的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。

《第一本 Docker 書》可以幫助我們學習到 Docker 的安裝、部署、管理和擴展。

03、深入

  • 《深入理解 Java 虛擬機》

《深入理解 Java 虛擬機》這本書牛逼到什麼程度,幾乎所有寫 Java 虛擬機方面的文章,沒有一個不在文章最後註明:本文參考字周志明老師的《深入理解 Java 虛擬機》。假如這篇文章最後沒有註明的話,那保不準是不尊重版權。

  • 《重構,改善既有程式碼的設計》

《重構,改善既有程式碼的設計》這本書在業界的名聲也非常的響,只不過看起來就需要一些精力和耐力,上面這些書看完後,可以看這一本,對於重新審視現有程式碼有極大的幫助。

  • 《深入理解 Nginx》

Nginx 是非同步框架的網頁伺服器,也可以用作反向代理、負載平衡器和 HTTP 快取。《深入理解 Nginx》這本書通過還原 Nginx 設計思想,剖析 Nginx 架構來幫助我們快速高效地開發 HTTP 模組。

  • 《深入剖析 Tomcat》

Tomcat 是一個 Servlet 容器,並提供了作為 Web 伺服器的一些特有功能。基本上寫過 Web 程式的 Java 程式設計師都用過 Tomcat 作為伺服器,所以有時間的話,對 Tomcat 深入剖析一下還是非常值得去做的。

  • 《JDK 里的設計模式》

這並不是一本書,而是左耳朵耗子的一個帖子,文中列出了 JDK 中 23 個經典的設計模式,非常值得一看。

//coolshell.cn/articles/3320.html

  • 《深入淺出設計模式》

  • 《設計模式之禪》

  • 《Head First 設計模式》

大家都聽說過,學習設計模式非常的重要,那麼為什麼這麼重要呢,設計模式到底是什麼?打個比喻學編程就像學武功一樣。

武功要練得很牛逼,有兩樣東西不能丟。第一,是內功;第二,是武功秘籍。內功對應到編程就是我們編程基礎能力,那編程的設計模式就可以想像成武術中的武功秘籍。

設計模式就是根據不同類型場景,設計優雅的(編碼)解決方案。學好設計模式有很多好處,比如,容易看懂經典程式碼中的邏輯(很多優秀的開源框架大量使用了設計模式);應對面試時對答如流(設計模是面試重點);可以編寫出優雅的解決方案(或者程式碼)。

  • 《演算法》

  • 《大話數據結構》

現在的大廠面試,都特別喜歡考演算法和數據結構方面的知識,把這個作為程式設計師水平高低的一個考核標準。對於大部分業務開發來說,平常更多的是利用已經封裝好的現成介面、類庫,很少需要自己實現數據結構和演算法。

但是,如果知道這些類庫背後的原理,懂得時間、空間複雜度分析,絕對可以在工作中得心應手。掌握數據結構和演算法,不管對於閱讀框架源碼,還是理解背後的設計思想,都是非常有用的。寫出高品質,達到開源級別的程式碼,演算法和數據結構,值得我們去掌握。

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

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

  • 《億級流量網站架構核心技術》

這三本書,如果能夠駕馭得了,那基本上可以這麼說,你已經是一名不可多得的 Java 方面的高級人才了。

沒有什麼難題是百度雲盤不能解決的,別忘了雙擊螢幕給個點贊!

百度雲盤鏈接://pan.baidu.com/s/1Sy89fIClwkQpdgCJK7i2dQ 密碼:znj6 點擊雲盤鏈接輸入後面這密碼即可下載資源。

04、學習方法

我們都經歷過學生時代(有些同學還正在經歷),同一個班級,同一個老師,為什麼成績截然不同呢,有些同學天資聰穎,學什麼都快,有些同學學習能力差,但方法得體,也能取得好成績。如果既沒有天賦,又沒有學習方法,那就只配倆字了——對,學渣(大學的我就是一個學渣,不堪回首)。

那正確的學習方法是什麼呢?

第一,善用搜索引擎。平常需要找資料,需要解決問題,如果自己一時半會沒有方法的話,就去搜。

Google 是第一選擇,Bing 是第二選擇,微信搜索是第三選擇。PC 端的話,Google 和 Bing 就很靠譜,基本上要找的東西,都有好的結果。手機端的話,就用微信搜,答案也很靠譜。

第二,學會提問。如果搜索引擎找不到答案的話,不要直接把問題拋到群里,拋給同事、領導,或者大牛,要先對問題梳理一下。

我想問什麼,我的環境是什麼,問題的描述是否足夠清楚,態度是否端正。

不要唐突,不要冒昧,還要臉皮厚,很難,對吧?這就是提問的藝術啊。

第三,善於總結和歸納。很多同學給我回饋,「二哥,怎麼總是感覺記不住啊,學完就忘啊,有什麼好的辦法嗎?」

有啊,當然有。學完一個知識點,如果需要動手去實踐,那就去敲程式碼,敲一遍,還是理解,再敲一遍。如果真的感覺自己理解,嘗試寫篇文章,把自己的學習心得分享出來,看看是否能夠教會別人。

如果自己是半瓶水,倒出去只能是半瓶水;只有自己是一瓶水,倒出去才可能多餘半瓶水,對吧?

歸納總結的好處就是把零散的知識變成體系,在腦海中構建一副藍圖,日積月累,你就會發現自己也從一條小溪變成了海洋。

順帶推薦一下費曼學習法,靈感源於諾貝爾物理獎獲得者理查德·費曼,運用費曼技巧,只需要花 20 分鐘就可以深入理解知識點。聽起來是不是很神奇?

費曼學習法的四個步驟:

第一步,能把一個孩子教懂。這有點類似我們古代的一名詩人,白居易,他希望自己的詩連老太婆都能看得懂,那就是好詩。

具體怎麼做呢?拿出一張白紙,寫下要學習的主題,想一下,怎麼把它教給一個孩子,你會講哪些,然後記下來。

同學們可以把白紙換成 iPad 了,有道雲筆記了,等等。

第二步,回顧。當我們嘗試把知識點講給小孩子的時候,可能會卡殼,那就需要把這些卡殼的點重新學習,這些點可能就是我們認知的邊界——重新學習的地方。

第三步,簡化語言。如果發現表述的文字比較複雜,不夠清晰,那就嘗試把這些內容讀出來,直到通順,直到自然,直到足夠簡練。

第四,傳授。這點雖然是可選項,但真的非常重要。如果確保自己理解了,那就把它教給別人,看你能否把別人教懂,也就是我說的善於總結和歸納。

整個思維導圖( 推薦的在線網址有百度腦圖、ProcessOn)了,或者部落格(建議使用 markdown 格式)了。

第四,多去實踐。實踐出真知,到底馬謖行不行,給他一個街亭守一守,對吧,收不住就是紙上談兵,沒啥鳥用。

GitHub 或者碼雲上有很多優秀的開源項目,挑一些優質的,down 下來,去研究研究,在原有的程式碼基礎上,嘗試做一些優化,或者增加一些功能。

自己動手去做的過程中,你會發現,哇,真的有新大陸呀!

第五,熟練使用開發工具。Intellij IDEA、VSCode 都是非常流行的開發工具,能夠幫助我們在學習和工作中變得更加高效,裡面有沒有快捷鍵,有沒有什麼騷操作,對吧?

在使用 Intellij IDEA 編寫程式碼的過程中,一定要注重程式碼規範。提前就把 SonarLint、阿里巴巴開發規約這些插件安裝上,寫完程式碼就 check 一下,按照提示對一些不良的習慣做出修正。

第六,學好英語。這一點真的真的真的非常非常非常重要重要重要,即便是英語功底本身很差,一定不要自暴自棄,對吧?雷軍敢一句「are you ok」走天下,你怕什麼?

況且,Chrome 瀏覽器可以安裝 Google 翻譯插件,Intellij IDEA 可以安裝 Translation 翻譯插件,只要稍微有點英語的底子,完全不用怵的。

英語水平提高了,可以看官方的文檔,可以在 Stack Overflow 上找答案,可以查看 JDK 源碼,等等,編程水平就會與日俱增啊。

第七,注意休息。身體健康非常重要,千萬不要淪為工作的機器,認為年輕的時候就應該拚命的加班,通過加班提升技術,多掙點錢。這種想法可以有,但要節制,懂嗎?

任務緊,馬上要 deadline 了,可以適當的加班,但不要一年四季 365 天都在加班。花點時間去旅遊了,讀書了,學習了,談戀愛了,享受生活了。

年輕人,不要做個「奮鬥逼」,奮鬥可以,但不要盲目。想想腦袋上的那點頭髮,就別熬夜了。一個人加班,就會有第二個人加班,第三個人加班,第四個人無休止的加班。只有大家都不去加班了,工作的良性氛圍才會有啊!

以上,希望能夠對同學們有所幫助,peace。


我是沉默王二,一枚在九朝古都洛陽苟且偷生的程式設計師。關注即可提升學習效率,感謝你的三連支援,奧利給🌹

如果你覺得文章對你有些幫助,歡迎微信搜索「沉默王二」第一時間閱讀,回復關鍵字「面試」可以免費獲取我為你精心準備的大廠面試攻略,回復關鍵字【666】可以免費獲取 500G 高清教學影片,回復關鍵字【小白】可以獲取我手寫的 10W+ 字的【Java 小白進階之路】PDF;本文 GitHub github.com/itwanger 已收錄,歡迎 star。