溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java工程師學(xué)習(xí)指南(中級篇)

發(fā)布時間:2020-06-30 10:13:51 來源:網(wǎng)絡(luò) 閱讀:91 作者:程序員江湖 欄目:編程語言

Java工程師學(xué)習(xí)指南

中級篇

最近有很多小伙伴來問我,Java小白如何入門,如何安排學(xué)習(xí)路線,每一步應(yīng)該怎么走比較好。原本我以為之前的幾篇文章已經(jīng)可以解決大家的問題了,其實(shí)不然,因?yàn)槲覍懙奈恼露际钦驹贘ava后端的全局上進(jìn)行思考和總結(jié)的,忽略了很多小白們的感受,而很多朋友都需要更加基礎(chǔ),更加詳細(xì)的學(xué)習(xí)路線。

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

先聲明一點(diǎn),文章里面不會詳細(xì)到每一步怎么操作,只會提供大致的思路和方向,給大家以啟發(fā),如果真的要一步一步指導(dǎo)操作的話,那至少需要一本書的厚度啦。

當(dāng)然,本文提到的大部分內(nèi)容都能在我的博客中找到對應(yīng)的一些文章。所以也歡迎大家去我博客找到你們需要的資源。

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

上期回顧

在上一篇文章中,我們主要討論的是如何做一個Java Web項(xiàng)目,以及前期需要哪些方面的基礎(chǔ)。最后,我還推薦了幾個比較不錯的視頻課程,以便給大家參考。

當(dāng)然,跟著視頻課程做完一個項(xiàng)目,你只是照葫蘆畫瓢又練習(xí)了一遍,可能其中有很多東西你并不太理解,比如你可能不知道為什么代碼要分層,為什么要用maven進(jìn)行線上編譯,為什么Tomcat啟動時會輸出那么多的日志。

有疑問很正常,因?yàn)橐粋€Java Web項(xiàng)目涉及的技術(shù)還是很多的,如果要理解這些技術(shù)的原理,光靠一個項(xiàng)目課程是遠(yuǎn)遠(yuǎn)不夠的。所以,在你體驗(yàn)了Java Web項(xiàng)目的開發(fā)流程以后,你應(yīng)該花些時間去了解相關(guān)技術(shù)原理了,今天我們要講的也是這部分內(nèi)容。

對于即將參加校招的同學(xué)來說,最重要的也是這部分內(nèi)容,你需要了解JVM虛擬機(jī)原理,Java并發(fā)原理,并且熟悉JDK的部分源碼,了解這些API的底層實(shí)現(xiàn)。除此之外,還有很多,下面我們分別來談一談。

01

計算機(jī)基礎(chǔ)知識

計算機(jī)基礎(chǔ)課程(非科班)

如果你不是計算機(jī)專業(yè)的同學(xué),那你可能要注意一下了。在學(xué)習(xí)下面這些內(nèi)容之前,你最好要學(xué)習(xí)一下計算機(jī)基礎(chǔ)課程。

這里我們說的計算機(jī)課程是:數(shù)據(jù)結(jié)構(gòu),操作系統(tǒng),計算機(jī)網(wǎng)絡(luò)。

數(shù)據(jù)結(jié)構(gòu):這門課應(yīng)該算是三門課程比較簡單的一門了,推薦《數(shù)據(jù)結(jié)構(gòu)與算法(Java語言描述)》,看書結(jié)合代碼實(shí)踐,把基本的數(shù)據(jù)結(jié)構(gòu)算法寫一寫就可以了。

操作系統(tǒng):關(guān)于操作系統(tǒng)我看了很多本書,但是沒有感覺特別好的,所以如果有時間的話可以先看另外一本書《深入理解計算機(jī)系統(tǒng)》,這本書講了很多計算機(jī)的基本概念,不局限于操作系統(tǒng)。

然后可以看一看湯小丹寫的《操作系統(tǒng)》,或者你們學(xué)校的教材。

計算機(jī)網(wǎng)絡(luò):網(wǎng)絡(luò)方面的書也非常多,推薦看一下《計算機(jī)網(wǎng)絡(luò):自頂向下方法》,另外還有一本《TCP/IP 詳解:卷一》也是備受推崇的書。

除此之外,我還要推薦一下劉欣老師的書《碼農(nóng)翻身》,書中用一些有趣的故事來講解操作系統(tǒng)和計算網(wǎng)絡(luò)的一些復(fù)雜概念,有助于大家理解這部分內(nèi)容。

02

JVM虛擬機(jī)

JVM虛擬機(jī)

為什么把JVM放在第一位,因?yàn)樗亲罨A(chǔ)也最重要的一塊內(nèi)容。所有的Java代碼都運(yùn)行在JVM上,事實(shí)上,JVM在操作系統(tǒng)中只是一個進(jìn)程。為了了解Java代碼的運(yùn)行方式,底層引擎的執(zhí)行原理,以及內(nèi)存的分配情況,我們必須要學(xué)習(xí)JVM虛擬機(jī)。

推薦資源:《深入理解JVM虛擬機(jī)》

很高興地告訴你們,學(xué)習(xí)JVM你只需要把這本書吃透即可,當(dāng)然,看一遍可不夠,筆者前后至少看了三遍,有條件的話最好把書中的實(shí)例都跑一跑。

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

03

設(shè)計模式與源碼閱讀

設(shè)計模式

為什么在這里提到設(shè)計模式呢,因?yàn)樵O(shè)計模式是Java編程規(guī)范的經(jīng)典總結(jié),并且在JDK源碼中經(jīng)常使用,由于我們后面會講到JDK源碼方面的學(xué)習(xí),所以對于設(shè)計模式,建議大家先學(xué)習(xí)一下,最好的學(xué)習(xí)方式就是看書結(jié)合實(shí)踐,把一些常用的設(shè)計模式自己實(shí)現(xiàn)一下。

推薦資源:《head first 設(shè)計模式》

JDK源碼(主要指集合類源碼)

接下來下場的選手是:JDK源碼。不過對于大部分人來說,只要能夠掌握集合類,字符串這些源碼就可以了,其他部分的源碼主要集中在JUC并發(fā)包里,而這些內(nèi)容我們會放在Java并發(fā)技術(shù)里來講。

為什么我們需要掌握集合類源碼呢,其一是因?yàn)槊嬖囅矚g考,其二是因?yàn)榧项惖脑创a實(shí)現(xiàn)都比較經(jīng)典,難度也不算太大,并且運(yùn)用了很多優(yōu)化方法,所以了解它對于學(xué)習(xí)Java的同學(xué)來說大有裨益。

推薦資源

市面上并沒有哪本書專門來講JDK源碼的,所以這部分內(nèi)容的學(xué)習(xí)資源主要是兩個部分,一是JDK源碼本身,而是一些技術(shù)博客。

1 對于JDK源碼,直接看可能比較有難度,不推薦新手這么做。 2 講解源碼的文章質(zhì)量參差不齊,所以我只推薦幾個我自己比較熟悉的,一個是importnew。一個是我的博客。另外,我之前分享的一篇文章

《你不可錯過的Java學(xué)習(xí)資源》

中也推薦了很多大牛和博客,大家也可以去看看。

Spring源碼

說實(shí)話,Spring源碼的復(fù)雜度遠(yuǎn)高于集合類的源碼,這也是因?yàn)镾pring運(yùn)用了很多的設(shè)計模式,并且有著非常繁雜的類關(guān)系。所以,我不建議大家直接去讀Spring源碼,因?yàn)榧词故强碨pring源碼解析的書籍,你也會感到很吃力。

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

另外,看完Spring的源碼解析以后,別忘了看SpringMVC的源碼解析,學(xué)習(xí)方法也是一樣的,找重點(diǎn)內(nèi)容看即可。

推薦資源:《Spring源碼深度》,我的博客專欄

04

Java并發(fā)技術(shù)

Java并發(fā)技術(shù)

相信你為了搞定集合類源碼和Spring源碼花了不少功夫了,接下來輪到Java并發(fā)技術(shù)出場了。我們在入門篇其實(shí)已經(jīng)談到了多線程,但是也僅僅停留在使用Thread或者Runnable實(shí)現(xiàn)簡單的多線程demo。

實(shí)際上,為了理解Java并發(fā)技術(shù)的底層實(shí)現(xiàn),我們還需要知道JMM模型,了解synchronized和volatile的底層實(shí)現(xiàn),同時還要明白Java中的多線程和操作系統(tǒng)的多線程和什么聯(lián)系和區(qū)別。除此之外,我們經(jīng)常談到的線程安全,有哪些實(shí)現(xiàn)方法,也是這部分內(nèi)容的要點(diǎn)。

學(xué)習(xí)并發(fā)技術(shù),我建議分為三個步驟

1 首先熟悉Java的多線程基礎(chǔ)知識,比如Thread的使用,線程的狀態(tài)轉(zhuǎn)換,以及一些api的使用方式。

2 了解一些理論基礎(chǔ),比如JMM,操作系統(tǒng)的多線程實(shí)現(xiàn)。這部分內(nèi)容推薦通過看書和看博客來學(xué)習(xí)。

3 了解并使用JUC的一些API,然后開始看JUC的一些源代碼。這個階段是最重要也是最困難的。

推薦資源: 書籍:《Java并發(fā)編程藝術(shù)》,《Java并發(fā)編程實(shí)戰(zhàn)》 網(wǎng)站:我的博客專欄,并發(fā)編程網(wǎng),importnew,

《你不可錯過的Java學(xué)習(xí)資源》

05

Java網(wǎng)絡(luò)編程

Java網(wǎng)絡(luò)編程

在搞懂Java并發(fā)編程技術(shù)之后,相信這部分內(nèi)容也難不倒你。當(dāng)然,前提是你對計算機(jī)網(wǎng)絡(luò)有一定了解,因?yàn)榫W(wǎng)絡(luò)編程涉及到TCP和HTTP相關(guān)的知識點(diǎn)。

在學(xué)習(xí)這部分內(nèi)容的時候,你首先要了解socket的使用以及原理,然后再去了解NIO的相關(guān)API,多寫一些客戶端和服務(wù)端通訊的demo,以便熟悉這些內(nèi)容。為了更好地理解網(wǎng)絡(luò)編程,你還要去了解UNIX網(wǎng)絡(luò)編程模型。

除此之外,如果你想要更好地理解Java網(wǎng)絡(luò)編程,你還需要去了解Tomcat的實(shí)現(xiàn)原理。同時,Netty也是值得你去學(xué)習(xí)的一部分內(nèi)容,最好有機(jī)會去用一用這一網(wǎng)絡(luò)編程框架,學(xué)有余力的同學(xué)還可以考慮看看它的源碼(筆者沒有看)。

推薦資源:我的技術(shù)博客,《Java網(wǎng)絡(luò)編程》,

《你不可錯過的Java學(xué)習(xí)資源》

05

Java8

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

對這部分內(nèi)容學(xué)習(xí)的最好方式就是:看文章+代碼實(shí)踐

推薦資源:《Java8實(shí)戰(zhàn)》

06

總結(jié)

今天的內(nèi)容貌似有點(diǎn)多,大家會不會感覺有點(diǎn)吃不消呢。沒關(guān)系,因?yàn)檫@部分內(nèi)容確實(shí)需要花很多時間去學(xué)習(xí)。對于一個在校的Java學(xué)習(xí)者來說,可能沒有機(jī)會接觸到多么高大上的項(xiàng)目,所以對內(nèi)功的修煉顯得格外重要。

看書,寫demo,讀源碼,看似簡單的事情實(shí)際上需要花費(fèi)大量時間和精力,這個過程是需要你靜下心來,慢慢沉淀的,在學(xué)習(xí)的過程中你也可以和筆者一樣,寫一些總結(jié)和博客,以便更好地回顧自己的學(xué)習(xí)歷程。

總結(jié)以下今天所講的內(nèi)容吧:

1 計算機(jī)基礎(chǔ)課程:數(shù)據(jù)結(jié)構(gòu),網(wǎng)絡(luò)和操作系統(tǒng) 2 JVM基本原理 3 設(shè)計模式,JDK源碼,Spring源碼 4 Java并發(fā)技術(shù),JUC源碼 5 Java網(wǎng)絡(luò)編程 6 Java8

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI