在機場完成了這份Java讀書路線
疫情以來,好久沒出差了,今天出差去趟上海,早上 4 點多就起床了,到機場天都沒亮。到登機口離起飛還一小時,趁著等飛機的時間,抓緊碼字,把這篇文章收個尾。

先說個題外的,最近很愁人,前幾篇原創(chuàng)文章本以為閱讀都會不錯,實際閱讀量比我預(yù)想的差不少。文章質(zhì)量都沒問題(點贊和在看的比例依然高),結(jié)果遇到了微信公眾號改推送規(guī)則。所以,在此希望大家能給我這個公眾號置頂、設(shè)為星標。
前幾篇原創(chuàng)文章,沒看過的可以看看,真心不錯:
進入正題,今天和大家說說學(xué) Java 的讀書路線。路線中的書籍我自己都看過,希望整理的這份讀書路線,能幫大家少走彎路,對大家學(xué) Java 有個參考。
初學(xué)乍練
入門 Java,推薦《Java核心技術(shù)》第 11 版,這其實是一套書,分為兩本:
卷1 基礎(chǔ)知識(豆瓣 9.2 分) 卷2 高級特性(豆瓣 8.4 分)


我估計 70% 的 Java 程序員入門看的是這本書,寫的經(jīng)典、全面,對 Java 各種特性,都會有對應(yīng)的代碼示例。
不過,這里的內(nèi)容,有不少是沒必要學(xué)的。我在以前的文章提起過,大家可以參考:
同時,光看這本書作為入門有個問題,就是只能知其然,卻不知所以然。而不知所以然,必然會導(dǎo)致咱們的基礎(chǔ)會不夠牢靠。
所以再推薦一本書配合《Java核心技術(shù)》一起看,書的名字叫《Java編程的邏輯》(豆瓣 9.1 分),作者馬俊昌。

這本書講解 Java 基礎(chǔ)知識的基礎(chǔ)上還會告訴你底層的原理,比如,Java 的枚舉本質(zhì)是什么,還會告訴你 Java 為什么這樣設(shè)計 API。
總之,《Java核心技術(shù)》和《Java編程的邏輯》聯(lián)合學(xué)習(xí),算是珠聯(lián)璧合,對入門 Java 是再合適不過的了。
這里多說幾句,入門打基礎(chǔ)十分重要,對于編程這種實踐類的學(xué)習(xí),想打好基礎(chǔ),光靠讀書,是遠遠不夠的。一定要經(jīng)過大量的代碼練習(xí)。所以,在這個時期一定要多作代碼練習(xí)。這里,我給出一些可以自己嘗試的練習(xí):
排序算法的小練習(xí) 字符串查找的小練習(xí) 對系統(tǒng)文件做下增刪查改 遞歸的小練習(xí) 使用 Java 集合的小練習(xí) 寫個小游戲、小東西能綜合訓(xùn)練下學(xué)到的所有技能
得窺門徑
做程序員,大部分的時候,咱們都需要通過寫各種各樣的 SQL 操作數(shù)據(jù)庫。咱們是 CRUD Boy 嘛。
所以,SQL 咱們要學(xué),學(xué) SQL 我推薦《SQL必知必會(第5版)》(豆瓣 9.5 分)。

這本書的組織結(jié)構(gòu)非常好,哪怕是你對 SQL 一竅不通,也能通過這本書的引導(dǎo),由淺入深的把 SQL 語言學(xué)個七七八八。
更重要的是,這本書叫必知必會,也就是說,它的內(nèi)容都是精挑細選,必須學(xué)的內(nèi)容。里面半分冗余的知識點都沒有,內(nèi)容全是干貨。一定要好好讀這本書。
略有所成
學(xué)會了 Java 基礎(chǔ),知道了怎么用 SQL 之后,如果往下走,想繼續(xù)提升自己該學(xué)什么?
我的答案是去深入掌握多線程編程。因為只有懂了多線程編程,咱們才能處理各種稍微困難的需求。比如,快速處理大量用戶對系統(tǒng)的訪問;又比如,想同時訪問多個第三方接口。
多線程編程又叫并發(fā)編程,其實是很復(fù)雜的事情,看一本書就想掌握它是不太現(xiàn)實的。我這里會推薦三本書,配合起來,一步步從多線程的原理到多線程的實戰(zhàn)全部貫穿起來。
對于多線程的理解,我推薦的第一本書是《Java并發(fā)編程實戰(zhàn)》(豆瓣 9.0 分)。

這本書是一本非常經(jīng)典的關(guān)于多線程編程的書。里面對Java的多線程方方面面的細節(jié)都講的非常到位。只是由于多線程確實太復(fù)雜,涉及到的知識也太廣了,導(dǎo)致這本書出現(xiàn)了兩個問題:
理論過多:《Java并發(fā)編程實戰(zhàn) 》里會花費很大篇幅,去闡述一些多線程涉及到的理念和思想,但是代碼例子卻給的極少,這就導(dǎo)致咱們看的很吃力、很累。 某些點講的不夠透:多線程涉及到的知識非常廣,《Java并發(fā)編程實戰(zhàn) 》是盡量全涉及了。這就造成很多知識點講的很淺,沒有講透。這就會讓人很困惑,導(dǎo)致有些知識點連不起來,影響對整本書的理解。
所以,我這里推薦第二本書《Java多線程編程實戰(zhàn)指南(核心篇)》(豆瓣 9.0 分)。

這本書代碼例子多,《Java并發(fā)編程實戰(zhàn) 》有些講不透的知識點,這本書會有所彌補。所以,當(dāng)看《Java并發(fā)編程實戰(zhàn) 》的時候,不管是需要練習(xí)代碼,還是想去搞清楚知識點,《Java多線程編程實戰(zhàn)指南 》這本書都極為合適。
多線程我再強調(diào)一下,這是 Java 很高級的特性,也是很難的部分,很多哪怕是工作了 3、4 年的程序員,對此也掌握的不到位。
上面說的兩本書,有原理,有代碼示例,如果是換成別的知識,那可能足夠了??墒菍τ诙嗑€程這么復(fù)雜的東西,我們還需要把學(xué)過的所有零碎知識點去綜合貫穿起來,形成關(guān)于多線程的知識體系才算是真正掌握到位。
所以,這就得推薦第三本書《圖解Java多線程設(shè)計模式》(豆瓣 8.6 分)。

跟著這本書的講解,把咱們所有的知識點通過練習(xí)書中介紹的所有模式,去串起來,才最終算是多線程的學(xué)習(xí)告了一個段落。
登堂入室
學(xué)會了多線程編程,咱們此時要知道一件事,大部分時候,多線程編程,其實就是網(wǎng)絡(luò)編程的最重要的一種手段。而網(wǎng)絡(luò)編程,雖然有了 Netty 框架等很優(yōu)質(zhì)的網(wǎng)絡(luò)框架了,但是理解背后的原理,對咱們定位項目的 bug,優(yōu)化代碼的性能,幫助非常大。
《Java TCP/IP Socket編程》(豆瓣 8.0 分)

這本書,我們既可以去學(xué)到必要的網(wǎng)絡(luò)基礎(chǔ),也能學(xué)會怎么用 Java 去網(wǎng)絡(luò)編程,非常推薦。
對于網(wǎng)絡(luò)編程,大家都知道,這是易學(xué)難精的技能。學(xué)懂原理,了解網(wǎng)絡(luò)編程,看看我上面推薦的書就夠了。但是,要精通網(wǎng)絡(luò)編程,寫好網(wǎng)絡(luò)相關(guān)的程序,那是相當(dāng)不容易的。
所以,在 Java 圈,一旦遇到網(wǎng)絡(luò)編程相關(guān)的事情,大家都會采用 Netty 框架去做。Netty 框架讓我們能不需要成為網(wǎng)絡(luò)編程大師,就能寫出非常優(yōu)秀的網(wǎng)絡(luò)應(yīng)用。
了解 Netty 框架對咱們也是非常重要的一件事,學(xué)習(xí) Netty 框架,推薦《Netty實戰(zhàn)》(豆瓣 7.5 分)。

這本書,把 Netty 的方方面面講的很全,Netty 的設(shè)計思想也覆蓋了大部分,對于熟練使用 Netty 完全夠用了。
融匯貫通
作為 Java 后端工程師,幾乎都要用到 Spring 框架的。哦不對,Spring 已經(jīng)不能叫框架了,得叫體系、生態(tài)了。學(xué)好 Spring,對咱們找工作,做項目,甚至設(shè)計架構(gòu),都是極其重要的。
但是,學(xué)好 Spring 也沒那么容易。Spring 發(fā)展到現(xiàn)在,它已經(jīng)成為了一套完整的體系了,而且 Spring 迭代非???,幾乎每年都會出現(xiàn)大的變化。所以,市面上的書籍,單獨靠那么一兩本書,是不太可能學(xué)好的,建議把一些經(jīng)典的 Spring 的書聯(lián)合起來讀,才有希望深入掌握Spring。
對于 Spring 這套體系,它現(xiàn)在是又多又繁雜,就算要入門,都不知道從何處下手。這里,我想談?wù)勎业慕?jīng)驗。
雖然 Spring 變化確實很快,但是,它有幾個地方,是這么多年幾乎沒發(fā)生過什么變化的。
沒有什么變化的第一部分,就是 Spring 的設(shè)計思路。Spring 的設(shè)計思路,永遠都是作為 Bean 的容器,去管理好 Bean ,這是它永恒不變的地方。
沒有什么變化的第二部分,就是 Spring 的內(nèi)核。Spring 的 ApplicationContext 等核心 API 是沒有什么大的變化的。
所以,咱們就應(yīng)該先從 Spring 這些不變的核心先入手。掌握住 Spring 的思想,Spring 的內(nèi)核,哪怕 Spring 本身再變化,對咱們來說,也只是一種外在的 API 變化而已。
要達到這個目的,我會推薦大家看一本很老的書《Spring揭秘》(豆瓣 9.1分)。

雖然這本書主要是以 Spring3 的講解為基礎(chǔ),但是,這本書對于 Spring 的編程思想講的極為透徹,是有關(guān) Spring 的書中,難得一見的好書。入門 Spring,這是我推薦的第一本書。
理解了 Spring 的編程思想不夠,我們需要利用這些思想,去實踐演練,加強我們對 Spring 的理解。
這時候,就得有本書,能真正的帶我們實戰(zhàn)下Spring的各個組件——《精通Spring 4.x》(豆瓣 8.5 分)。

我知道現(xiàn)在 Spring 5 在逐漸進入主流,但是,Spring 5 也只是在 Spring 4 的基礎(chǔ)上增加了一些新特性。而 Spring 5 的書,我至今沒看到有《精通Spring 4.x》這本講的這么全的,所以,寫代碼做練習(xí),還是推薦用《精通Spring 4.x》。
理解了 Spring 的理念,用很多代碼練習(xí)練習(xí)實踐之后,我們就只需要知道 Spring 5 的一些特性就能跟上 Spring 發(fā)展的步伐了。
可以看下《Spring 5 開發(fā)大全》(豆瓣 8.3 分),這本書對 Spring 5 的新特性介紹很全。我們只需要翻翻,熟悉新特性、新 API 即可。

另外,Spring 5 有個變化最大的地方:它用了很多響應(yīng)式編程的東西。這方面,大家相對比較陌生,有閑有錢的話,可以看看《Spring響應(yīng)式編程》。

關(guān)于 SpringBoot,由于它的易用性,它已經(jīng)邁入主流。不過 SpringBoot 也只是以 Spring 為內(nèi)核的一套應(yīng)用框架而已。找本書,學(xué)習(xí)它是如何通過添加一些模塊和功能,去降低大家使用 Spring 的門檻的,也就夠了。
同樣,有閑有錢的話,可以讀下《Spring Boot 2實戰(zhàn)之旅》。

返璞歸真
前面大家跟著我推薦的書學(xué)習(xí)完了,基本就可以是一位非常合格的程序員了。但是,注意,你只是合格,但是還不算優(yōu)秀。
如果我們想更加優(yōu)秀,讓自己職業(yè)道路能走的更遠,還需要一些非開發(fā)的知識學(xué)習(xí)。只有通過疊加這些 Buff,我們才能在眾多的技術(shù)同事中,脫穎而出,錐出于囊。
在實際開發(fā)里,代碼可讀是我們評價同事好不好合作的一個重要標準。一位同事,寫的代碼亂七八糟,你不管是接手維護還是想只是用一些對方的代碼,都非常別扭難受。
所以,咱們的代碼一定要寫的干凈整潔可讀,給別人非常好的印象。這樣,對咱們的團隊合作和職場發(fā)展,才會有更大的幫助。
把代碼寫的干凈可讀,我推薦看《代碼整潔之道》(豆瓣 8.7 分)。

這本書,講解了什么才是好的代碼,跟著這本書學(xué),你寫的代碼會更讓人贊賞,也更讓人愿意和你合作。
除了代碼可讀,咱們還得讓咱們寫的代碼好維護,易擴展。因為需求是千變?nèi)f化的,如果你寫的代碼可維護性,可擴展性不夠,那后續(xù)你會陷入無休止的改代碼海洋里,你所有的精力都會被這些不停變換的需求吃干抹凈,直接讓你寸步難行。
而寫易擴展,易維護的代碼,就必須知道設(shè)計模式。有了設(shè)計模式,你閉眼都能寫出不錯的代碼來。學(xué)習(xí)設(shè)計模式,推薦《Java設(shè)計模式》(豆瓣 9.1 分)。

這本書,對設(shè)計模式的來歷發(fā)展,概念思想,講解的淋漓盡致,推薦閱讀。
Java 這套讀書的學(xué)習(xí)路線,是我一本一本全部讀過,才推薦給大家的,希望大家最終能堅持讀完,學(xué)透。
最后再總結(jié)一下這個書單:
《Java核心技術(shù)》卷1、2 《Java編程的邏輯》 《SQL必知必會》 《Java并發(fā)編程實戰(zhàn)》 《Java多線程編程實戰(zhàn)指南(核心篇)》 《圖解Java多線程設(shè)計模式》 《Java TCP/IP Socket編程》 《Netty實戰(zhàn)》 《Spring揭秘》 《精通Spring 4.x》 《Spring 5 開發(fā)大全》 《Spring響應(yīng)式編程》 《Spring Boot 2實戰(zhàn)之旅》 《代碼整潔之道》 《Java設(shè)計模式》
以上書單都是我推薦的,其他沒列的書籍,比如《Java編程思想》、《重構(gòu)》等等,也都是好書,大家自己酌情補充。書單列的太多,擔(dān)心給大家勸退了。
我之前整理過一些電子書,包括了以上書單中的幾本書,需要下載的話,在公眾號后臺回復(fù)“PDF”。
最后求贊,求在看,求置頂、星標。

你好,我是四猿外。
一家上市公司的技術(shù)總監(jiān),管理的技術(shù)團隊一百余人。想了解我如何管理團隊——我,管理100多人團隊的二三事
我從一名非計算機專業(yè)的畢業(yè)生,轉(zhuǎn)行到程序員,一路打拼,一路成長。
我會通過公眾號,
把自己的成長故事寫成文章,
把枯燥的技術(shù)文章寫成故事。
我建了一個讀者交流群,里面大部分是程序員,一起聊技術(shù)、工作、八卦。歡迎加我微信,拉你入群。
