Java工程師學習指南(中級篇)

程式設計師江湖發表於2019-11-12

Java工程師學習指南

中級篇

最近有很多小夥伴來問我,Java小白如何入門,如何安排學習路線,每一步應該怎麼走比較好。原本我以為之前的幾篇文章已經可以解決大家的問題了,其實不然,因為我寫的文章都是站在Java後端的全域性上進行思考和總結的,忽略了很多小白們的感受,而很多朋友都需要更加基礎,更加詳細的學習路線。

所以,今天我們重新開一個新的專題,分別按照四個部分講述Java的學習路線,筆者也打算趁此機會,回憶一下自己的Java學習歷程。今天我們要講的是第三部分,Java工程師學習指南(中級篇)。

先宣告一點,文章裡面不會詳細到每一步怎麼操作,只會提供大致的思路和方向,給大家以啟發,如果真的要一步一步指導操作的話,那至少需要一本書的厚度啦。

當然,本文提到的大部分內容都能在我的部落格中找到對應的一些文章。所以也歡迎大家去我部落格找到你們需要的資源。

本文中的方法不一定適合所有人,如有錯誤還請諒解。

上期回顧

在上一篇文章中,我們主要討論的是如何做一個Java Web專案,以及前期需要哪些方面的基礎。最後,我還推薦了幾個比較不錯的視訊課程,以便給大家參考。

當然,跟著視訊課程做完一個專案,你只是照葫蘆畫瓢又練習了一遍,可能其中有很多東西你並不太理解,比如你可能不知道為什麼程式碼要分層,為什麼要用maven進行線上編譯,為什麼Tomcat啟動時會輸出那麼多的日誌。

有疑問很正常,因為一個Java Web專案涉及的技術還是很多的,如果要理解這些技術的原理,光靠一個專案課程是遠遠不夠的。所以,在你體驗了Java Web專案的開發流程以後,你應該花些時間去了解相關技術原理了,今天我們要講的也是這部分內容。

對於即將參加校招的同學來說,最重要的也是這部分內容,你需要了解JVM虛擬機器原理,Java併發原理,並且熟悉JDK的部分原始碼,瞭解這些API的底層實現。除此之外,還有很多,下面我們分別來談一談。

01

計算機基礎知識

計算機基礎課程(非科班)

如果你不是計算機專業的同學,那你可能要注意一下了。在學習下面這些內容之前,你最好要學習一下計算機基礎課程。

這裡我們說的計算機課程是:資料結構,作業系統,計算機網路。

資料結構:這門課應該算是三門課程比較簡單的一門了,推薦《資料結構與演算法(Java語言描述)》,看書結合程式碼實踐,把基本的資料結構演算法寫一寫就可以了。

作業系統:關於作業系統我看了很多本書,但是沒有感覺特別好的,所以如果有時間的話可以先看另外一本書《深入理解計算機系統》,這本書講了很多計算機的基本概念,不侷限於作業系統。

然後可以看一看湯小丹寫的《作業系統》,或者你們學校的教材。

計算機網路:網路方面的書也非常多,推薦看一下《計算機網路:自頂向下方法》,另外還有一本《TCP/IP 詳解:卷一》也是備受推崇的書。

除此之外,我還要推薦一下劉欣老師的書 《碼農翻身》,書中用一些有趣的故事來講解作業系統和計算網路的一些複雜概念,有助於大家理解這部分內容。

02

JVM虛擬機器

JVM虛擬機器

為什麼把JVM放在第一位,因為它是最基礎也最重要的一塊內容。所有的Java程式碼都執行在JVM上,事實上,JVM在作業系統中只是一個程式。為了瞭解Java程式碼的執行方式,底層引擎的執行原理,以及記憶體的分配情況,我們必須要學習JVM虛擬機器。

推薦資源:《深入理解JVM虛擬機器》

很高興地告訴你們,學習JVM你只需要把這本書吃透即可,當然,看一遍可不夠,筆者前後至少看了三遍,有條件的話最好把書中的例項都跑一跑。

另外,JVM也是面試必考的內容,所以,相應地去準備一些面試題也是很有必要的,如果你基本掌握了這本書的內容,相信你不會懼怕任何JVM面試題。

03

設計模式與原始碼閱讀

設計模式

為什麼在這裡提到設計模式呢,因為設計模式是Java程式設計規範的經典總結,並且在JDK原始碼中經常使用,由於我們後面會講到JDK原始碼方面的學習,所以對於設計模式,建議大家先學習一下,最好的學習方式就是看書結合實踐,把一些常用的設計模式自己實現一下。

推薦資源:《head first 設計模式》

JDK原始碼(主要指集合類原始碼)

接下來下場的選手是:JDK原始碼。不過對於大部分人來說,只要能夠掌握集合類,字串這些原始碼就可以了,其他部分的原始碼主要集中在JUC併發包裡,而這些內容我們會放在Java併發技術裡來講。

為什麼我們需要掌握集合類原始碼呢,其一是因為面試喜歡考,其二是因為集合類的原始碼實現都比較經典,難度也不算太大,並且運用了很多優化方法,所以瞭解它對於學習Java的同學來說大有裨益。

推薦資源

市面上並沒有哪本書專門來講JDK原始碼的,所以這部分內容的學習資源主要是兩個部分,一是JDK原始碼本身,而是一些技術部落格。

1 對於JDK原始碼,直接看可能比較有難度,不推薦新手這麼做。 2 講解原始碼的文章質量參差不齊,所以我只推薦幾個我自己比較熟悉的,一個是importnew。一個是我的部落格。另外,我之前分享的一篇文章

《你不可錯過的Java學習資源》

中也推薦了很多大牛和部落格,大家也可以去看看。

Spring原始碼

說實話,Spring原始碼的複雜度遠高於集合類的原始碼,這也是因為Spring運用了很多的設計模式,並且有著非常繁雜的類關係。所以,我不建議大家直接去讀Spring原始碼,因為即使是看Spring原始碼解析的書籍,你也會感到很吃力。

所以,我推薦的方式是,看書+看一些比較好的原始碼解析文章。另外要告訴大家的是,Spring的原始碼很多,並不是所有內容都需要你掌握的,大家都知道Spring最常用的特性就是IOC和AOP,所以看原始碼解析時,最重要的也是這兩個部分了。

另外,看完Spring的原始碼解析以後,別忘了看SpringMVC的原始碼解析,學習方法也是一樣的,找重點內容看即可。

推薦資源:《Spring原始碼深度》,我的部落格專欄

04

Java併發技術

Java併發技術

相信你為了搞定集合類原始碼和Spring原始碼花了不少功夫了,接下來輪到Java併發技術出場了。我們在入門篇其實已經談到了多執行緒,但是也僅僅停留在使用Thread或者Runnable實現簡單的多執行緒demo。

實際上,為了理解Java併發技術的底層實現,我們還需要知道JMM模型,瞭解synchronized和volatile的底層實現,同時還要明白Java中的多執行緒和作業系統的多執行緒和什麼聯絡和區別。除此之外,我們經常談到的執行緒安全,有哪些實現方法,也是這部分內容的要點。

學習併發技術,我建議分為三個步驟

1 首先熟悉Java的多執行緒基礎知識,比如Thread的使用,執行緒的狀態轉換,以及一些api的使用方式。

2 瞭解一些理論基礎,比如JMM,作業系統的多執行緒實現。這部分內容推薦通過看書和看部落格來學習。

3 瞭解並使用JUC的一些API,然後開始看JUC的一些原始碼。這個階段是最重要也是最困難的。

推薦資源: 書籍:《Java併發程式設計藝術》,《Java併發程式設計實戰》 網站:我的部落格專欄,併發程式設計網,importnew,

《你不可錯過的Java學習資源》

05

Java網路程式設計

Java網路程式設計

在搞懂Java併發程式設計技術之後,相信這部分內容也難不倒你。當然,前提是你對計算機網路有一定了解,因為網路程式設計涉及到TCP和HTTP相關的知識點。

在學習這部分內容的時候,你首先要了解socket的使用以及原理,然後再去了解NIO的相關API,多寫一些客戶端和服務端通訊的demo,以便熟悉這些內容。為了更好地理解網路程式設計,你還要去了解UNIX網路程式設計模型。

除此之外,如果你想要更好地理解Java網路程式設計,你還需要去了解Tomcat的實現原理。同時,Netty也是值得你去學習的一部分內容,最好有機會去用一用這一網路程式設計框架,學有餘力的同學還可以考慮看看它的原始碼(筆者沒有看)。

推薦資源:我的技術部落格,《Java網路程式設計》,

《你不可錯過的Java學習資源》

05

Java8

Java的版本一直在更新,但目前在用的主要還是Java8和Java7,等再過幾年可能這部分的內容就過時了。但是目前看來,對Java8的學習和了解還是很重要的,畢竟面試也喜歡考。

對這部分內容學習的最好方式就是:看文章+程式碼實踐

推薦資源:《Java8實戰》

06

總結

今天的內容貌似有點多,大家會不會感覺有點吃不消呢。沒關係,因為這部分內容確實需要花很多時間去學習。對於一個在校的Java學習者來說,可能沒有機會接觸到多麼高大上的專案,所以對內功的修煉顯得格外重要。

看書,寫demo,讀原始碼,看似簡單的事情實際上需要花費大量時間和精力,這個過程是需要你靜下心來,慢慢沉澱的,在學習的過程中你也可以和筆者一樣,寫一些總結和部落格,以便更好地回顧自己的學習歷程。

總結以下今天所講的內容吧:

1 計算機基礎課程:資料結構,網路和作業系統 2 JVM基本原理 3 設計模式,JDK原始碼,Spring原始碼 4 Java併發技術,JUC原始碼 5 Java網路程式設計 6 Java8

微信公眾號

個人公眾號:黃小斜

黃小斜是跨考軟體工程的 985 碩士,自學 Java 兩年,拿到了 BAT 等近十家大廠 offer,從技術小白成長為阿里工程師。

作者專注於 JAVA 後端技術棧,熱衷於分享程式設計師乾貨、學習經驗、求職心得和程式人生,目前黃小斜的CSDN部落格有百萬+訪問量,知乎粉絲2W+,全網已有10W+讀者。

黃小斜是一個斜槓青年,堅持學習和寫作,相信終身學習的力量,希望和更多的程式設計師交朋友,一起進步和成長!

原創電子書:
關注公眾號【黃小斜】後回覆【原創電子書】即可領取我原創的電子書《菜鳥程式設計師修煉手冊:從技術小白到阿里巴巴Java工程師》

程式設計師3T技術學習資源: 一些程式設計師學習技術的資源大禮包,關注公眾號後,後臺回覆關鍵字 “資料” 即可免費無套路獲取。

考研複習資料:
計算機考研大禮包,都是我自己考研複習時用的一些複習資料,包括公共課和專業的複習視訊,這裡也推薦給大家,關注公眾號後,後臺回覆關鍵字 “考研” 即可免費獲取。

技術公眾號:Java技術江湖

如果大家想要實時關注我更新的文章以及分享的乾貨的話,可以關注我的公眾號【Java技術江湖】一位阿里 Java 工程師的技術小站,作者黃小斜,專注 Java 相關技術:SSM、SpringBoot、MySQL、分散式、中介軟體、叢集、Linux、網路、多執行緒,偶爾講點Docker、ELK,同時也分享技術乾貨和學習經驗,致力於Java全棧開發!

Java工程師必備學習資源: 一些Java工程師常用學習資源,關注公眾號後,後臺回覆關鍵字 “Java” 即可免費無套路獲取。

我的公眾號

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69906029/viewspace-2660445/,如需轉載,請註明出處,否則將追究法律責任。

相關文章