前言
網路上關於JAVA和後端開發的學習路線、書單以及網課推薦數不勝數,甚至針對大廠相關崗位的面試題目總結也相當豐富。然而,看了幾個流傳頗廣的知乎回答和Github筆記之後,還是發現無論哪個總結都不能完全滿足自己的學習習慣。因此,我自己列了以下的學習清單,供自己以及有相似學習習慣的朋友使用。
本清單主要收納了經典的計算機科學書籍以及公認的高質量網課。其中所收錄的書籍大部分為歷經時間檢驗的經典大部頭,豆瓣評分均為8分以上,其中部分書籍還是所推薦網課的配套教材,建議透過網課的學習來看教材。有網課配套的教材只需根據課程網站指定的閱讀順序和章節閱讀即可,這樣效率最高。沒有網課配套的教材,尤其是大部頭,切忌從頭讀到尾,效率很低。建議參考知乎以及豆瓣的相關讀書筆記,自行規劃需要閱讀的章節及順序。
再談一談書籍版本的選擇,本人堅持所有推薦過的書籍,如是英文撰寫,只閱讀英文原版,如是東亞語言撰寫(主要是日本人所著),則閱讀中文譯本即可。技術書籍所用的英文並不複雜,讀過一兩本書之後即可習慣。況且若要同步輔以網課學習,英文聽讀也需過關。除此之外,大部分開發工具也只提供英文文件。由於各種客觀原因,絕大多數的中文譯本(其實不僅是技術領域),翻譯質量都差強人意,有的甚至會造成誤解,所以本人是強烈推薦閱讀原文的。若使用Mac OS系統,其自帶的三指查詞功能在閱讀英文電子書的時候更加便捷。
書籍另一個十分重要的點是版本儘可能最新。舉個例子,開啟知乎搜尋JAVA相關書單,你一定會看到不止一個人推薦《JAVA程式設計思想(第四版)》這本書,因為它確實是一本好書。然而,這本書出版年份是2007年,距今已過去14年之久,即使JAVA是一門相對穩定的語言,10多年對於技術領域來說也早已日新月異了。幸運的是,原作者其實在2017年的時候就出版了一本名叫On JAVA 8的書,其實這本書就是大名鼎鼎的《JAVA程式設計思想》第五版,作者在前言部分也說明了之前那本書主要針對JAVA 5,而這本新作就是根據JAVA 8重寫的。本人猜測因為新書獲取渠道有限(具體在清單裡描述),所以目前為止絕大多數人還不知道出了新版,現在再去看第四版其實已經不如看新版收穫那麼大了。
聊完了書籍,再來聊聊網課。本人認為對於自學的人來說網課的學習效果是遠遠大於只看書的。本清單所推薦的網課大部分來源於四大(斯坦福、MIT、CMU和伯克利),剩下的也基本是來源於計算機專業top10的學校。 在@胡津銘大佬的知乎裡看到過這樣一個觀點,即使是Google內部的培訓課程,其質量也是遠遠比不上四大的,四大在計算機教育這塊幾乎做到了極致。確實,四大的絕大多數課程無論從教材、lab、project還是推薦論文來說幾乎都是精品。尤其對於自學的人來說,做完任何一個lab和project,不僅能理解書裡各種模糊不清的概念,更能把紮實的專案寫進簡歷,相信一份寫著完成6。828 xv6的簡歷其含金量遠遠高於只是完成電商秒殺系統的簡歷。
最後,與書籍一樣,網課也存在版本選擇問題。例如備受好評的CS 61B,這門課據我觀察存在兩個任課教師:Josh Hug和Paul Hilfinger。其實備受好評的版本主要是Josh上的,而Paul的課據我在伯克利讀CS的朋友所述,質量很一般,甚至61B的TA直接建議他們,如果聽不懂Paul的課,就去網上找上一學期Josh的影片跟著看。還有學習作業系統時大家都熟悉的Remzi,他本人最後一年在Wisconsin教授的作業系統課是2017年,並且還有其本人的課堂錄影,之後wisc的作業系統課相比起Remzi本人所授的版本,估計少了很多韻味。
本清單所列內容基本圍繞大廠校招JAVA後端開發相關知識,參考了知乎上很多收割大廠ssp大佬的學習歷程,部分內容比正常的校招難度略深一些,但是對於有志於拿ssp的人來說應該是必備知識了。
每一模組學習順序大致為清單所列從上至下。
清單將會不斷更新
,本人看完或者學習過的內容會加上自己的點評,未加點評的為還未開始學習的內容。未來不排除會新增新的內容或者刪除現有的本人看過之後覺得不是必要的內容。
JAVA
Absolute JAVA
, 6th Edition
最佳的JAVA入門書籍,作者是ucsd的老師。奈何這本書在網上推薦的人太少,大部分人只知道Head First JAVA。這本書對零基礎的人來說跟HFJ一樣友好,然而HFJ一個是太老(第2版是2005年出版),還有一個是寫得有點過於囉嗦以及覆蓋知識面比較有限。相比之下此書作為第一本JAVA書,甚至第一本程式設計書,都沒有明顯的缺點。
UC Berkeley CS 61B, Data Sturctures
課程連結:CS 61B Fall 2020
其實伯克利的61系列三門課都很推薦,依次是61A、61B和61C。61A其實是根據大名鼎鼎的SICP改的Python版本,作為CS專業的第一門課,不僅教了Python,還用Python把計算機專業的脈絡勾勒了一遍,其中第3個project更是需要用Python寫一個Scheme直譯器,一點也不intro。
61B就是熟知的資料結構了,如前言所述,一定要選擇Josh Hug版本,如連結裡給的20fall版,甚至把每週TA講解iscussion的影片都放出來了,伯克利可是真良心。61系列每門課都是先花三分之一的篇幅教一門程式語言,再用這門程式語言講解剩下的課程內容,這樣安排挺適合入門。61B也不例外,上來先教一遍JAVA,因為預設學生是學過61A的,所以語法講得會比較快。然後剩下的篇幅與Princeton那門演算法課的結構和所用教材是一致的,其實兩門課的任課老師是師生關係。不過61B會更側重於演算法介紹以及面向物件程式設計練習,所以難度會稍低一些。
61C由於網路資料有限,本人沒有深入研究。
Modern Java in Action
(待補充)
On Java 8
廣為流傳的《JAVA程式設計思想》的最新版本,其書名叫做《JAVA程式設計思想(第5版)》可能會暢銷得多。此書作者只在leanpub出了電子版,並且一直在更新,最近的2021年1月和3月都做了修改,推薦大家購買正版。
Effective Java
, 3rd Edition
(待補充)
Java Concurrency in Practice
(待補充)
《深入理解Java虛擬機器》,第3版
(待補充)
演算法
Princeton Algorithms I, II, Coursera
課程連結:Algorithms, Part I
Algorithms
, 4th Edition, Robert Sedgewic
Princeton Algorithm和CS 61B的配套教材,豆瓣評分9。4,第一章除1。3和1。4以外的部分可以不看。本人看過最好的演算法書,唯一缺陷是缺少Dynamic Programming的內容。
UIUC CS 374, Algorithms and Models of Computation
課程連結:CS/ECE 374 A - Algorithms and Models of Computation - Fall 2019
UIUC演算法課請認準Jeff版,他講的string matching和dp是我看過講得最好的,完美補充了Princeton演算法課的缺陷。有能力的可以挑戰進階版CS 437,同樣是Jeff授課,講了很多advanced dp的內容。
Algorithms,
Jeff Erickson
書籍連結:by Jeff Erickson
CS 374的配套教材,開源電子書。
作業系統
《組合語言》,第4版,王爽
(待補充)
CMU 15-213, Introduction to Computer Systems
課程連結:
http://www。
cs。cmu。edu/afs/cs/acade
mic/class/15213-f19/www/
Computer Systems: A Programmer‘s Perspective
15-213的配套教材,如果跟著課程同步學習的話處理器那章可以不看。
WISC CS 537, Introduction to Operating Systems
課程連結:Intro to Operating Systems
Remzi最後一次在wisc教的os課,後來的wisc學生都很遺憾沒有趕上Remzi親自授課的時候。
Operating Systems: Three Easy Pieces
書籍連結:Operating Systems: Three Easy Pieces
MIT 6。S081, Operating System Engineering
課程連結:6。S081 / Fall 2020
網路
《網路是怎樣連線的》
網路的內容相對瑣屑,直接看大部頭可能會看了忘忘了看。有認識CMU INI的朋友在入職FB之後也把學院教的一大堆網路課還給老師了,又要重新溫習一遍。可以先用這本薄薄的小書把知識點串起來,再用
A Top-down Approach
查缺補漏。
Stanford CS 144, Introduction to Computer Networking
課程連結:Introduction to Computer Networking
課程影片可看可不看,精華是lab,但是要求使用c++。對於想要深入學習system知識的人來說,即使是從事java開發,c++在學習過程之中也繞不過去。後續的一些課程作業也要使用c++,甚至還有go和rust。
Computer Networking: A Top-down Approach
, 7th Edition
(待補充)
TCP/IP Illustrated, Vol。 1: The Protocols
(待補充)
Unix Network Programming, Vol。 1: Networking API
(待補充)
資料庫
《SQL基礎教程》,第2版
SQL的入門書籍差距不大,知乎上推薦最多的《必知必會》豆瓣評分8。5,此書豆瓣評分9。0,書裡把SQL初學者常見錯誤都分析了一遍,直擊要害。
Database System Concept
, 6th Edition
(待補充)
CMU 15-445, Database System
課程連結:CMU 15-445/645 :: Intro to Database Systems (Fall 2020)
High Performance MySQL
, 3rd Edition
(待補充)
MySQL實戰45講,極客時間
極客時間的付費專欄只推薦這一個。
《MySQL技術內幕 : InnoDB儲存引擎》
(待補充)
《Redis設計與實現》
(待補充)
Redis in Action
(待補充)
《Redis開發與運維》
(待補充)
分散式系統
MIT 6。824, Distributed Systems
課程連結:6。824 Home Page: Spring 2020
Designing Data-Intensive Applications
很好彌補了6。824課程內容比較零散和沒有對應教材的缺陷,把時下較新的分佈書系統和資料庫的內容串聯起來,比傳統教材講得更平易近人一些,十分容易接受。
系統設計
Head First Design Patterns
, 2nd Edition
2020年已出版第2版,不用再看第1版了。
MIT 6。031, Software Construction
課程連結:6。031: Software Construction
Kubernetes in Action
, 2nd Edition
書籍連結:Kubernetes in Action, Second Edition
“in Action“系列裡評價數一數二的一本,豆瓣評分9。2。第2版已經在Manning出版社官網更新了前9章,MEAP計劃的書似乎沒正式出版之前都可以免費閱讀。
Microservices Patterns: With Examples in Java
(待補充)
Design Patterns: Elements of Reusable Object-Oriented Software
(待補充)
工具
MIT, The Missing Semester of Your CS Education
課程連結:The Missing Semester of Your CS Education
十分推薦的一門課,講的每一部分內容幾乎都和實際的開發息息相關:shell scripting,Vim,正則表示式,Git還有debugging等等,有MIT背書,同樣內容也比Youtube和部落格上的更值得信賴。
編碼規範
Refactoring: Improving the Design of Existing Code
(待補充)
Clean Code
(待補充)
Clean Architecture
(待補充)
最近更新:2021年4月25日。