零基礎(chǔ)如何系統(tǒng)的學(xué)習(xí)Java

原來我曾經(jīng)寫過一篇《如何快速學(xué)習(xí)Java》的文章。后來也有朋友咨詢我“如何系統(tǒng)的學(xué)習(xí)Java”的問題。
這些朋友中,好多都是已經(jīng)入了行,但不滿足于工作枯燥的“增刪改查”,或者“模板化”的SSM框架。而是有心成為Java技術(shù)專家,或者架構(gòu)師。
對(duì)于朋友的提問,我本很樂意回答。然而這個(gè)答案絕非三言兩語能夠說清。所以,我就索性寫一篇文章來回答。
文章寫得有點(diǎn)匆忙,不完善,遺漏之處,我會(huì)逐漸完善。
學(xué)習(xí)計(jì)劃
首先,我把Java系統(tǒng)學(xué)習(xí)分成兩個(gè)階段。
第一階段:建立完整的的技術(shù)棧,成為一個(gè)有富于生產(chǎn)力的高級(jí)軟件工程師。
在這個(gè)階段要掌握一系列的基礎(chǔ)知識(shí)和工具。這些東西前后關(guān)聯(lián),所以學(xué)習(xí)過程成線性順序,要從上往下進(jìn)行。
下面是第一階段的學(xué)習(xí)路線:

第二階段:這個(gè)階段的目標(biāo)是成為Java技術(shù)專家、架構(gòu)師,因此必須在上一階段的技術(shù)上,往高處(例如設(shè)計(jì)模式、大數(shù)據(jù))走,往深處(Spring源碼、Java虛擬機(jī))走。
這個(gè)階段的知識(shí),并不存在前后的關(guān)聯(lián)。在完成第一階段的學(xué)習(xí)之后,完全看工作的需要,以及個(gè)人的興趣,安排學(xué)習(xí)的優(yōu)先級(jí)。
下面是第二階段的學(xué)習(xí)目標(biāo):

接下來,我就點(diǎn)一下這個(gè)學(xué)習(xí)計(jì)劃中的“關(guān)鍵點(diǎn)”。
Servlet
要成為一個(gè)優(yōu)秀的Java web專家。無論是你用Spring MVC實(shí)現(xiàn)的普通REST接口,還是微服務(wù)。往深的走,都要深刻理解Servlet以及容器(例如Tomcat).
因此,在深度學(xué)習(xí)微服務(wù),以及Spring MVC之前,一定要把Servlet學(xué)精,因?yàn)樗钦麄€(gè)Java web的基石。所以,在成為軟件專家的路上,Servlet是最基本的墊腳石,務(wù)必重視。
SQL
在我作為程序員入行的時(shí)候,沒少在SQL語言下功夫,尤其是在SQL語言優(yōu)化方面,包括在存儲(chǔ)過程中各種折騰。
但現(xiàn)在,SQL優(yōu)化在開發(fā)過程中的優(yōu)先級(jí)顯著降低,有幾個(gè)原因:
1.各種OR map框架(例如Hibernate、Mybatis)的出現(xiàn),使SQL的工作量大大降低。
2.各種OR map框架本身也會(huì)對(duì)編寫的、自動(dòng)生成的SQL進(jìn)行優(yōu)化。
3.當(dāng)前的服務(wù)器架構(gòu),如果要提高性能,首先應(yīng)該考慮架構(gòu)的橫向擴(kuò)展性,而不是在SQL上進(jìn)行極端優(yōu)化。
但現(xiàn)在也不是說可以完全“任性”的編寫SQL。只是說對(duì)于程序員,只要掌握最常見的SQL優(yōu)化原則,做到工整就夠了。
緩存、隊(duì)列
緩存,隊(duì)列。業(yè)界都有了較成熟的方案,例如Redis,ActiveMQ等。在學(xué)習(xí)的過程中,第一步是掌握核心概念,以及他們要解決的問題。然后就要親自安裝,使用這些軟件,建立感性的認(rèn)識(shí)。
其次就是在掌握核心概念的基礎(chǔ)上,掌握這些開源軟件的Java API,然后試著在此基礎(chǔ)上,編寫典型的Demo,從而在Java語言層面上徹底掌握。
至于有些朋友提到的把概念再“實(shí)現(xiàn)一遍”。不知道朋友指的是使用API,還是把緩存和隊(duì)列軟件,用Java語言實(shí)現(xiàn)一下。如果是后者,不是說不可以,關(guān)鍵是太費(fèi)時(shí)間。同時(shí),就業(yè)界實(shí)踐來說,不是特別必要。如果你真有興趣,把優(yōu)先級(jí)放低一點(diǎn),作為一個(gè)更長期的目標(biāo)。
Linux
這個(gè)學(xué)習(xí)計(jì)劃是一個(gè)長期的,深入的學(xué)習(xí)計(jì)劃。最終是要成長為技術(shù)專家、或架構(gòu)師。那么有必要適時(shí)的掌握下Linux。因?yàn)樵趯?shí)踐中,服務(wù)器往往委托于Linux服務(wù)器。而且將來,還有不少開源軟件只能在linux上運(yùn)行。
因此,在開始學(xué)習(xí)緩存和隊(duì)列錢,需要先掌握了Linux的基本用法。然后再學(xué)習(xí)的過程中,就把這些開源軟件在Linux上運(yùn)行。
這樣,在你學(xué)習(xí)Java的過程中,順便也把Linux學(xué)習(xí)了,這遠(yuǎn)比你將來單獨(dú)學(xué)習(xí)Linux要有趣,印象要深刻。
微服務(wù)
微服務(wù)并不是一門具體的技術(shù),而是一個(gè)設(shè)計(jì)理念,很多語言和框架都可以實(shí)現(xiàn),例如Java中的Spring MVC等。
因此,如果已經(jīng)掌握了Spring MVC、Spring boot。那么對(duì)微服務(wù)的掌握是水到渠成的事情。你要做的就是注意力放在微服務(wù)的應(yīng)用場景上。
設(shè)計(jì)模式
設(shè)計(jì)模式是較為靠上的東西。如果Java基礎(chǔ)不是太好的話,很容易陷入空泛,眼高手低。
如果你的Java基礎(chǔ)太薄弱,例如沒有掌握“抽象類”。那么我建議你先把設(shè)計(jì)模式學(xué)習(xí)停一下,先把Java的基礎(chǔ)知識(shí)補(bǔ)充下,至少要學(xué)完《Java核心技術(shù)》第六章,也就是掌握完整的現(xiàn)象對(duì)象的概念。然后再回來學(xué)習(xí)設(shè)計(jì)模式。
在學(xué)習(xí)設(shè)計(jì)模式的時(shí)候,一定要?jiǎng)邮?。最起碼要把書中列舉的設(shè)計(jì)模式,用Java語言實(shí)現(xiàn)一下。如果你閱讀時(shí)是經(jīng)典的GOF《設(shè)計(jì)模式》,其中的代碼(用C++描述),就不容易用Java實(shí)現(xiàn)。建議你可以參照《Head First設(shè)計(jì)模式》,其中的demo都是短小精悍,很適合用Java來實(shí)現(xiàn)。
這樣,一則有利于理解設(shè)計(jì)模式。二則在學(xué)習(xí)設(shè)計(jì)模式的過程中,也進(jìn)一步增強(qiáng)對(duì)Java基礎(chǔ)知識(shí)的掌握。這種學(xué)習(xí)過程是一個(gè)相互促進(jìn)的過程。
學(xué)習(xí)筆記很重要
特別重要的一點(diǎn),學(xué)習(xí)的過程中,盡量的寫學(xué)習(xí)筆記,其中包括難點(diǎn)和重點(diǎn)。
因?yàn)?,系統(tǒng)深入的學(xué)習(xí)Java必然是一個(gè)長期的,綜合的過程。到后期,一定會(huì)出現(xiàn)學(xué)著后面,忘了前面。如果你沒有學(xué)習(xí)筆記,又沒有實(shí)踐中積累的代碼,那么就會(huì)出現(xiàn)邊學(xué)邊忘的情況。
而有了學(xué)習(xí)筆記,可以給自己的學(xué)習(xí)留下了“蹤跡”,以后復(fù)習(xí)的時(shí)候用來參考,很會(huì)就能把早前學(xué)習(xí)的記憶“喚醒”。
而且,這些學(xué)習(xí)筆記在后來的工作中,還能成為自己的參考手冊(cè),隨用隨查。
還有,那就是學(xué)習(xí)筆記還是一個(gè)特別好的面試寶典。因?yàn)榧热荒阌浵铝斯P記,這些東西往往經(jīng)過你深度思考,深度消化的東西,也是你區(qū)別以其他工程師的卓越之初。
總結(jié)
到此這篇關(guān)于零基礎(chǔ)如何系統(tǒng)的學(xué)習(xí)Java的文章就介紹到這了,更多相關(guān)零基礎(chǔ)學(xué)習(xí)Java內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
intellij idea中spring boot properties文件不能自動(dòng)提示問題解決
這篇文章主要介紹了intellij idea中spring boot properties文件不能自動(dòng)提示問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
Java對(duì)象池pool2分析PooledObjectFactory過程
文章介紹了Java中對(duì)象池化技術(shù)的背景,以Apache的Pool2庫為例,詳細(xì)講解了GenericObjectPool的構(gòu)造函數(shù)參數(shù)和PooledObjectFactory接口的實(shí)現(xiàn),通過商場里的共享充電寶的比喻,說明了池化思維的應(yīng)用2025-02-02
Java設(shè)計(jì)模式之命令模式詳細(xì)解析
這篇文章主要介紹了Java設(shè)計(jì)模式之命令模式詳細(xì)解析,命令模式將請(qǐng)求封裝成對(duì)象,以便使用不同的請(qǐng)求、隊(duì)列或者日志來參數(shù)化其他對(duì)象,同時(shí)也支持可撤銷的操作,需要的朋友可以參考下2024-01-01
基于Java設(shè)計(jì)一個(gè)高并發(fā)的秒殺系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何基于Java設(shè)計(jì)一個(gè)高并發(fā)的秒殺系統(tǒng),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下2023-10-10
談?wù)凧ava中整數(shù)類型(short int long)的存儲(chǔ)方式
在java中的整數(shù)類型有四種,分別是byte short in long,本文重點(diǎn)給大家介紹java中的整數(shù)類型(short int long),由于byte只是一個(gè)字節(jié)0或1,在此就不多說了,對(duì)java中的整數(shù)類型感興趣的朋友一起學(xué)習(xí)吧2015-11-11

