天天看點

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

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

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

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

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

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

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

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

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

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

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

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

01、入門

  • 《Java 核心技術卷 1》
  • 《Head First Java》

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

http://www.itwanger.com/java.html
  • 《鳥哥的 Linux 私房菜》

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

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

  • 《Maven 實戰》
  • 《Git 權威指南》

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

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

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

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

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》上哪買啊?

https://github.com/LingCoder/OnJava8

不用買了,雷鋒已經将這本書翻譯成中文并且開源了,通路上面的連結就可以在 GitHub 上閱讀了。

最強 Java 書單推薦,附學習方法
  • 《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 開發手冊》這本小冊子雖然隻有幾十頁,但講的主要是一些典型的開發規約、程式設計規範、以及最佳實踐,已經成為業界普遍遵循的開發規範。

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

最強 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 有着充分的掌握。

http://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 的中文網。

https://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 的安裝、部署、管理和擴充。

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

03、深入

  • 《深入了解 Java 虛拟機》

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

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

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

  • 《深入了解 Nginx》

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

  • 《深入剖析 Tomcat》

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

  • 《JDK 裡的設計模式》

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

https://coolshell.cn/articles/3320.html
  • 《深入淺出設計模式》
  • 《設計模式之禅》
  • 《Head First 設計模式》

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

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

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

  • 《算法》
  • 《大話資料結構》

現在的大廠面試,都特别喜歡考算法和資料結構方面的知識,把這個作為程式員水準高低的一個考核标準。對于大部分業務開發來說,平常更多的是利用已經封裝好的現成接口、類庫,很少需要自己實作資料結構和算法。

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

  • 《大型網站系統與 Java 中間件實踐》
  • 《大型網站技術架構:核心原理與案例分析》
  • 《億級流量網站架構核心技術》

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

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

沒有什麼難題是百度雲盤不能解決的,别忘了輕按兩下螢幕給個點贊!

百度雲盤連結:https://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。

微信掃描左側二維碼,關注作者的微信公衆号:「

沉默王二

背景回複“

666

”即可擷取一份 500G 的高清教學視訊,并且已經分門别類,可以按需下載下傳,速去!

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

如果覺得還有幫助的話,可以點一下右下角的【推薦】。