超詳細 Java 版校招學習路線

作者:小北 | 來源:編程指北

《史上最新 Java 版校招學習路線》,我們先看下思維導圖吧:

Java 後端開發學習路線

校招的話,其實關注「Java 校招」那下面就好了,其它只是整個 Java 後端的全景圖。

說實話,其實想偷懶的,直接在 C++ 版本的基礎上把 Java 基礎、JVM、Java Web 這些補充上就好了,因爲 CS 基礎知識都是共通的。

但是呢,我是貼心北,爲了更好的幫助到學 Java 的同學們,還是根據 Java 開發崗的要求對類似 Linux 編程、網絡編程等重要性進行了調整。

先說一下,我預期中,按照這個路線學個六七成,大概需要多長時間:

  1. 如果你是非科班,比如傳統工科,大學學過點 C 編程,其餘完全不具備,那麼可能需要 8 個月 - 1 年 以上。

    學習效率高、比較拼的可能五六個月也行(每天高強度學習十幾個小時)。

  2. 如果你有其它語言基礎、也學過操作系統、計算機網絡這些 CS 必修課,那麼只需要再強化突擊刷題 + 系統化梳理下面試題 + 學習 Java,這個過程 6 個月足夠,3 個月勉強。

  3. 如果你本身是學 Java 的,做過項目,也學過 CS 基礎課,我覺得你強化突擊 1 個月就足夠去面試了,主要是看一些高頻面試八股文和刷 LeetCode。

當然,這些都是時間都是因人而異的,我只是給出一個我覺得合理的大概時間作爲參考。

一、Java 基礎

第一要學的就是 Java 基礎,也就是 Java SE,如果有 C 語言基礎,1 個月應該很充分。

如果有 C++ 基礎我估計兩週就足夠了?

因爲實際上,把語言拆解爲「語法特性的組合」,那麼 Java 相對於 C 多了 面向對象、接口、異常這些東西,而 C++ 則幾乎除了反射、註解不支持以外,其它都是 Java 的超集。

所以實際上對於學過 C++ 的同學,學 Java 就是換關鍵字,沒有新的語言特性學習負擔,所以我說會很快。

那麼 Java SE 都有哪些呢:

Java SE 我推薦看視頻學習,不要一上來就去看書,我當時大一看的是《尚學堂高琪 Java300 集》,不知道多少人看過這個版本,我真覺得講得很好。

當然,現在也可以去找一些最新出的類似視頻,我就不推薦了。

看完視頻,寫一點單機小項目,比如我當時寫的五指棋、聊天室、HTTP Server,一般這個視頻裏面也是有一些小項目的。

看書的話,推薦《Java 核心技術 卷 1》

二、Java Web

我當時是從 Java Web 的基石,JSP、Servlet 開始學的,但是說實話,這兩個技術確實非常老舊的。

但是我還是覺得值得學下,畢竟後來的 Spring MVC 這些東西都是爲了解決 JSP、Servlet 這些在開發效率上的問題。

比如 Spring MVC 中的 DispatcherServlet 會攔截所有的請求,負責去查找有沒有合適的處理器,一個前端控制器就可以,就不用去每個 Servlet 都去 web.xml 配置。

可以看下《Head First Servlets and JSP》這本書,雖然裏面很多技術過時了,但是有時間還是可以挑一些感興趣的章節,瞭解下 Java Web 的技術演變

對於 Java  Web 使用類的學習都是到how2j.cn這個網站:

基本上包含了 Java 學習的方方面面。

學 Java Web 是爲了啥?

當然是 CRUD  啊,所以還需要學習數據庫知識,這個時候會安裝 MySQL,會用 JDBC 進行增刪查改就可以了。

大概路線就是:

Servlet、Tomcat -> JDBC - > HTTP 協議 -> Spring MVC ->  Spring 全家桶。

完成這部分學習後,可以完整的做一個 CRUD MIS 系統,然後去整個雲服務器,部署到雲上。

然後讓你同學都來用用哈哈哈,相信你一定會體驗到 CRUD Boy 的樂趣。

基本上就算體驗了完整的 Java Web 開發流程,當然,這是野路子開發流程。

三、Java 深入

上面的 Java 基礎和 Java Web 是實際編程中常用的東西,而這塊就是面試常問的。

包括 JVM、多線程、鎖。

這塊主要包含以下內容:

這裏就不展開講了,基本上就是看書爲主,看博客補充。

書推薦《深入理解 Java 虛擬機》、《Java 併發編程藝術》、《Java 併發編程實戰》

四、操作系統

這裏其實和 C++ 的學習路勁是一致的,我就直接複製過來了。

操作系統這門課,我的感覺是易學難精,但是掌握到日常編程和麪試夠用還是比較容易的。

那麼畢業生或者說你去準備校招面試應該達到怎樣的水平:

其中內存、進程、IO 是重點,這幾塊也是和編程關係最密切的,這裏推薦先挑本偏理論的書看看,瞭解操作系統的全貌:

不必全看,兩者任選一本都不錯,我自己是仔細看了第二本,因爲是我們教材,同時挑着看了現代操作系統部分章節。

這部分看完你應該對下面這些話題有一個清晰認知了:

操作系統,最好的實踐就是看下 Linux 內核是怎麼實現的,當然不是叫你直接去啃 Linux 源碼,那不是一般人能掌握的。

最好的方式是看書,書的脈絡給你理得很清晰。

書籍推薦:

這本書恰到好處,即講清楚了內核實現的要點,又不會通篇源碼。

這本書重點關注「第 3 章進程管理」、「第 5 章系統調用」、「第 12 章內存管理」、「第 13 章虛擬文件系統」、「第 15 章進程地址空間」

這些章節屬於操作系統核心部分,其它如中斷處理、塊 IO、設備管理根據你自己興趣選擇看下就可以了。

基本上做到這裏,操作系統就沒什麼大問題了。

五、計算機網絡

(⊙o⊙)… 不好意思,這裏還是參考 C++ 版本的學習路線,因爲基礎課都是通用的:

另外新增一個總結吧,網絡協議重點學習 TCP,TCP 除了看《自頂向下》這本書的傳輸層那一章以外,還可以去看部分《TCP/IP 卷一》部分章節,因爲這裏面會對類似擁塞控制、慢啓動、滑動窗口等進行非常詳細的講解。

視頻的話推薦哈工大的《計算機網絡》。

需要掌握的網絡協議和知識:

計網知識比較繁雜,很多同學都反映網絡很難學,一大堆的網絡協議,依次學完後,還是不知道網絡是怎麼構成的。

這就是沒有用對學習方法,導致只見樹木,不見森林。

學習時,推薦你抓住一條主線 「一個數據包是如何發送出去的?」

帶着這個問題依次去學應用層、傳輸層、網絡層、鏈路層,思考這些層之間是如何串聯起來的。

這就是自頂向下的思路,那自然要推薦:

這本書從我們最常接觸的 HTTP、FTP、SMTP 等應用層協議講起,可以清晰看到引入各個層的作用。

比如爲了區分同一個主機的不用應用,引入了傳輸層,並使用不用的端口號作爲區別;

爲了在不同子網間傳輸數據引入了網絡層,並使用 IP 地址尋址路由;

網絡層解決了不同子網間路由的問題,但是同一個局域網內確定主機卻是通過 MAC 地址,所以引入了鏈路層來承載 IP 數據包;

同時爲了將 IP 地址和 MAC 地址做轉換映射又產生了 ARP 協議。

層層遞進,逐層揭開網絡,非常推薦!

還有一本書:

非常淺顯易懂的描述了「一個數據包是如何發送出去的」,也不費時間,看慣了機工社的大黑書,看這種反而有種看小人書的感覺,有基礎的話,一天左右就過完了。

只有把握住了整個網絡脈絡主線纔不至於被紛繁複雜的網絡協議所搞暈,剩下的就是不斷的細化,填充這些主幹上的細枝末節。

那麼有哪些細節可以去填充呢?

比如 ARP 工作過程、IP 地址、IP 分片、NAT(UDP 打洞)、鏈路層訪問控制協議等等。

還有最重要的 TCP 協議,TCP 也是面試和計網中最重要的概念:

這麼多東西肯定需要背,但不要死記,最好帶着問題去思考爲什麼要這樣做。

這裏列幾個問題:

整個 TCP 的核心就是圍繞着 可靠傳輸 + 高效傳輸(流量控制和窗口管理)

由於 TCP 的細節實在太多,自頂向下那本書有點不太夠,所以你需要去看看:

這本書不要從頭看,而是挑出其中涉及到 TCP 的章節

到這裏,對於整個網絡以及 TCP 都應該有了一個全面而細緻的認識。

但是計網中還是有一些有意思的問題,如果你沒思考過,也許回答不出來。

比如:

這些問題只有當你真正理解了才能回答出,僅僅記住協議的話,估計很難應對靈活的面試題。

此外,網絡部分還需要準備 HTTP、HTTPS,推薦:

最後別忘了自己回答一遍那被問爛了、寫爛了的問題:

越細越好,五百字以上吧,哈哈哈

六、網絡編程

(⊙o⊙)… 這裏還是會參考那個 C++ 學習路線裏的,只不過 C++ 和 Java 的側重點不同。

比如 C++ 沒有一個統一的網絡庫,基本都是裸寫 socket,但是 Java 本身的網絡 API 封裝得已經很好了,再加上有 netty 這種一統江湖的庫。

學習路徑也很清晰。

Socket API  + 多線程 + 網絡模型 / IO 模型 + IO 複用

簡單學下 Socket API,然後就是學習 Reactor、Proactor 模式,理解下爲什麼需要這個,適用什麼場景就好了。

能自己寫一個最好,不想寫,可以直接去學習 Netty。

其實網絡編程的重點不是在 socket 本身,而是線程模型 + IO 模型,所以本質上還是要回到多線程。

網絡編程核心的一些點:

不過實際工作中,除了做 Infra 開發,很少會涉及網絡編程的,現在幾乎都是做 Web 開發,各種框架已經幫我們做了協議解析、網絡數據傳輸、解封包這些底層操作。

比如 SpringBoot 這種保姆級框架,基本上屬於將一個框架能幹的事都幹完了,以至於我們開發業務只需要定義接收和返回包的數據格式,然後做邏輯處理就完了。

像序列化、解封包、IO 處理這種網絡編程必備的髒活業務開發根本不會接觸到。

但是網絡編程技能還是很重要的,學完了,可以去寫一些網絡應用,比如 P2P 下載,仿 QQ 聊天室、文件傳輸等。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/lKBpsemuVDSyraSzTlzyYQ