Java工程師學習指南java
中級篇程序員
最近有不少小夥伴來問我,Java小白如何入門,如何安排學習路線,每一步應該怎麼走比較好。本來我覺得以前的幾篇文章已經能夠解決你們的問題了,其實否則,由於我寫的文章都是站在Java後端的全局上進行思考和總結的,忽略了不少小白們的感覺,而不少朋友都須要更加基礎,更加詳細的學習路線。面試
因此,今天咱們從新開一個新的專題,分別按照四個部分講述Java的學習路線,筆者也打算趁此機會,回憶一下本身的Java學習歷程。今天咱們要講的是第三部分,Java工程師學習指南(中級篇)。算法
先聲明一點,文章裏面不會詳細到每一步怎麼操做,只會提供大體的思路和方向,給你們以啓發,若是真的要一步一步指導操做的話,那至少須要一本書的厚度啦。spring
固然,本文提到的大部份內容都能在個人博客中找到對應的一些文章。因此也歡迎你們去我博客找到大家須要的資源。編程
本文中的方法不必定適合全部人,若有錯誤還請諒解。後端
在上一篇文章中,咱們主要討論的是如何作一個Java Web項目,以及前期須要哪些方面的基礎。最後,我還推薦了幾個比較不錯的視頻課程,以便給你們參考。設計模式
固然,跟着視頻課程作完一個項目,你只是照葫蘆畫瓢又練習了一遍,可能其中有不少東西你並不太理解,好比你可能不知道爲何代碼要分層,爲何要用maven進行線上編譯,爲何Tomcat啓動時會輸出那麼多的日誌。api
有疑問很正常,由於一個Java Web項目涉及的技術仍是不少的,若是要理解這些技術的原理,光靠一個項目課程是遠遠不夠的。因此,在你體驗了Java Web項目的開發流程之後,你應該花些時間去了解相關技術原理了,今天咱們要講的也是這部份內容。安全
對於即將參加校招的同窗來講,最重要的也是這部份內容,你須要瞭解JVM虛擬機原理,Java併發原理,而且熟悉JDK的部分源碼,瞭解這些API的底層實現。除此以外,還有不少,下面咱們分別來談一談。
01
計算機基礎知識
若是你不是計算機專業的同窗,那你可能要注意一下了。在學習下面這些內容以前,你最好要學習一下計算機基礎課程。
這裏咱們說的計算機課程是:數據結構,操做系統,計算機網絡。
數據結構:這門課應該算是三門課程比較簡單的一門了,推薦《數據結構與算法(Java語言描述)》,看書結合代碼實踐,把基本的數據結構算法寫一寫就能夠了。
操做系統:關於操做系統我看了不少本書,可是沒有感受特別好的,因此若是有時間的話能夠先看另一本書《深刻理解計算機系統》,這本書講了不少計算機的基本概念,不侷限於操做系統。
而後能夠看一看湯小丹寫的《操做系統》,或者大家學校的教材。
計算機網絡:網絡方面的書也很是多,推薦看一下《計算機網絡:自頂向下方法》,另外還有一本《TCP/IP 詳解:卷一》也是備受推崇的書。
除此以外,我還要推薦一下劉欣老師的書《碼農翻身》,書中用一些有趣的故事來說解操做系統和計算網絡的一些複雜概念,有助於你們理解這部份內容。
02
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最經常使用的特性就是IOC和AOP,因此看源碼解析時,最重要的也是這兩個部分了。
另外,看完Spring的源碼解析之後,別忘了看SpringMVC的源碼解析,學習方法也是同樣的,找重點內容看便可。
推薦資源:《Spring源碼深度》,個人博客專欄
04
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併發編程技術以後,相信這部份內容也難不倒你。固然,前提是你對計算機網絡有必定了解,由於網絡編程涉及到TCP和HTTP相關的知識點。
在學習這部份內容的時候,你首先要了解socket的使用以及原理,而後再去了解NIO的相關API,多寫一些客戶端和服務端通信的demo,以便熟悉這些內容。爲了更好地理解網絡編程,你還要去了解UNIX網絡編程模型。
除此以外,若是你想要更好地理解Java網絡編程,你還須要去了解Tomcat的實現原理。同時,Netty也是值得你去學習的一部份內容,最好有機會去用一用這一網絡編程框架,學有餘力的同窗還能夠考慮看看它的源碼(筆者沒有看)。
推薦資源:個人技術博客,《Java網絡編程》,
《你不可錯過的Java學習資源》
05
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 相關技術:SSM、SpringBoot、MySQL、分佈式、中間件、集羣、Linux、網絡、多線程,偶爾講點Docker、ELK,同時也分享技術乾貨和學習經驗,致力於Java全棧開發!
Java工程師必備學習資源: 一些Java工程師經常使用學習資源,關注公衆號後,後臺回覆關鍵字 「Java」 便可免費無套路獲取。
本文由博客一文多發平臺 OpenWrite 發佈!