技術大佬用1w+字來告訴你該讀什麼書,循序漸進,并提供百度雲盤下載下傳位址。重要的是還有學習方法。
請肆無忌憚地點贊吧,微信搜尋【沉默王二】關注這個在九朝古都洛陽苟且偷生的程式員。
本文 GitHub github.com/itwanger 已收錄,裡面還有我精心為你準備的一線大廠面試題。
回想起 10 年前我學習 Java 那會,資源極度匮乏,老師給我們推薦了兩本書,一本《Java 程式設計思想》,一本《Java 開發寶典》。老師以為第一本書講理論,第二本書講實戰,完美的組合。
但實際上呢,畢業的時候,班裡面隻有 13 名同學從事了軟體開發的工作,其餘 30 多名學生要麼大一的時候轉專業,要麼很早就放棄程式設計了。
《Java 程式設計思想》是本經典的好書,沒錯,但作為入門書籍的話,隻會勸退。《Java 開發寶典》更是勸退書,裡面用 Java 做成的項目都很經典,比如說浏覽器,五子棋,但小白根本駕馭不了啊!
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLxATLppWdoNXLhZXYq9CX5AzLcBjMwIzLcNXZnFWbp9CXzRXZzNXYvwVbvNmLyV2ZuF2d0lmL3d3dvw1LcpDc0RHaiojIsJye.gif)
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 啊!
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 網絡程式設計的基礎知識非常的有用。
- 《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 有着充分的掌握。
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 的安裝、部署、管理和擴充。
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 方面的進階人才了。
沒有什麼難題是百度雲盤不能解決的,别忘了輕按兩下螢幕給個點贊!
百度雲盤連結: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 的高清教學視訊,并且已經分門别類,可以按需下載下傳,速去!
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
如果覺得還有幫助的話,可以點一下右下角的【推薦】。