菜鳥驛站怎樣記賬 如何系統(tǒng)的學(xué)習(xí)JAVA?
如何系統(tǒng)的學(xué)習(xí)JAVA?java的整體生態(tài)和再積累真的是太大了。95年至今20多年的積累,完全涉及到計(jì)算機(jī)軟硬件的方方面面。我依我之見就認(rèn)為,提主所說的全精通,是指jdk本身和一些必要的數(shù)據(jù)結(jié)構(gòu)以及廣
如何系統(tǒng)的學(xué)習(xí)JAVA?
java的整體生態(tài)和再積累真的是太大了。95年至今20多年的積累,完全涉及到計(jì)算機(jī)軟硬件的方方面面。我依我之見就認(rèn)為,提主所說的全精通,是指jdk本身和一些必要的數(shù)據(jù)結(jié)構(gòu)以及廣泛框架和面向?qū)ο蟮幕旧纤枷氚伞?/p>
從11年初到現(xiàn)在,一直在在學(xué)習(xí)java相關(guān)的知識(shí)。其中也走了不少彎路。按自己的積累,提出提主一個(gè)自懷疑合理且有肯定會(huì)深度的學(xué)習(xí)路線。大概情況分下面幾個(gè)階段吧。
1.簡單的方法應(yīng)盡可能的打牢基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)和簡單的算法基礎(chǔ)。
也可以去快速的學(xué)習(xí)一些簡單的四頭系統(tǒng),來行最簡形矩陣軟件自學(xué)的興趣和初期成就感。但,一定得回過頭,翻看的短時(shí)間內(nèi)數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)和很簡單算法。類似這種書就是可以。
2.比較熟練在用Java類庫和java第三方工具框架。
怎么學(xué)習(xí)建議使用java的語法,嘗試表述Java語法怎么設(shè)計(jì)的邏輯。能熟練手中掌握jdkjava代碼本身,和各種第三方類庫工具包和第三方框架的簡單使用。這里學(xué)習(xí)的同時(shí),推薦一下看看《設(shè)計(jì)模式》,《代碼整潔之道》,《spring源碼解讀》,《Spring揭秘》等這一類的書集。
3.理解怎么學(xué)習(xí)jdkjava代碼本身的應(yīng)用源碼實(shí)現(xiàn)方法和高端點(diǎn)第三方框架的源碼和架構(gòu)設(shè)計(jì)。
例如jdk本身的數(shù)據(jù)結(jié)構(gòu)二叉樹,紅黑樹,treemap,和異步包的unsafe,同步阻塞隊(duì)列,call-future等等包源碼,以及線程基礎(chǔ)類的實(shí)現(xiàn),各個(gè)類庫電腦設(shè)計(jì)的結(jié)構(gòu)和設(shè)計(jì)模式。弄懂第三方框架的設(shè)計(jì)思想,理解去學(xué)習(xí)第三方框架的核心源碼。
肯定,這里面很有可能會(huì)比較復(fù)雜到其他的事務(wù),分布式協(xié)議等,這里繼續(xù)展開。這個(gè)過程不是他一朝一夕,很有可能不需要大量的時(shí)間和技術(shù)感悟。其實(shí),《設(shè)計(jì)模式》,《代碼整潔之道》,《spring源碼解讀與設(shè)計(jì)詳析》,《Spring揭秘》等等這一大類書,在這個(gè)過程可以不明白大差不差了。
4.明白jdk,jre即jvm原理和實(shí)現(xiàn)程序。
這里我推薦看下張桂蘭的《實(shí)戰(zhàn)java虛擬機(jī)》,里面解釋比較比較偏實(shí)操。容易上手明白。
簡單的方法,是可以從jdk那個(gè)軟件的工具自學(xué)來先學(xué)些。
比如:jstat,jmap,jstack,jps,jdb.......甚至于另外直接是可以窺視運(yùn)行期間不好算內(nèi)存數(shù)據(jù)的HSDB。肯定,以及學(xué)習(xí)正式,我們只是需要理解具體用法的幾個(gè)命令,并明白其華指的意義表就行。況且,第三方監(jiān)控工具,以及jdk本身也提供給了3個(gè)可視化的監(jiān)控。
主要,明白jvm的運(yùn)行打開程序原理,弄明白class文件結(jié)構(gòu)。
這個(gè)過程我們是可以自身之前會(huì)是用監(jiān)控工具,理解jvm加載的基本原理。這個(gè)可以做個(gè)參考官方各個(gè)版本的jvm標(biāo)準(zhǔn),學(xué)習(xí)沒看明白class文件。于此可以在用如classpy等工具,方便啊我們?nèi)缓箝喿x理解class文件。也可以試下接受class字節(jié)碼級(jí)別的單步運(yùn)行調(diào)試工具。哪怕,這個(gè)可以一段時(shí)間用用jvm匯編編碼工具。
接下來,再理解jvm的垃圾回收機(jī)制發(fā)展歷史和各個(gè)主流垃圾回收器的工作原理。
這個(gè)過程反正相當(dāng)緊張。垃圾回收器有各種串行,聯(lián)成一體,新聲代/swap和老年代,在內(nèi)回收警戒線,full觸發(fā)條件,各種個(gè)樣的基本參數(shù)和不怎末用的超參數(shù),和G1的H區(qū),ZGC等等。。。不錯(cuò)的是,GC并不屬于jvm官方規(guī)范的一部分。
后再,動(dòng)手做一些jvm的實(shí)踐和實(shí)戰(zhàn),
諸如,jvm常見的故障排查和故障總結(jié),性能調(diào)優(yōu),熱程序加載,class字節(jié)碼的動(dòng)態(tài)操作,asm等。
結(jié)果,可以不試圖利用自己的jvm。(當(dāng)然了這個(gè)步驟,對(duì)很多同學(xué)來說并非要了)
這里我?guī)臀彝扑]幾本書,也再次搞明白jvm國家規(guī)范的學(xué)習(xí)路徑。最好就是自己基于垃圾回收器。
周老師的《深入理解Java虛擬機(jī)》。
接下來的是《深入嵌入式j(luò)ava虛擬機(jī)》和配套源碼。這個(gè)cldc的jvm源碼僅有1M多。目前在oracle的官網(wǎng)上,依舊可以去下載。是一個(gè)設(shè)計(jì)太系統(tǒng)精簡的jvm基于。
下一步,這個(gè)可以去閱讀《自己動(dòng)手寫java 虛擬機(jī)》。這本書的jvm實(shí)現(xiàn)程序是常規(guī)go語言c語言程序??隙ㄆ渲幸灿泻芏嘣O(shè)計(jì)并不是的很合理不。但基本都不能違背了jvm規(guī)范。
這會(huì)兒就可以不去看看吧github上各種jvm的開源軟件實(shí)現(xiàn)程序了。有run,scalajvm,javainjava,ajvm,python-jvm,lua,各個(gè)版本各個(gè)差別的jvm實(shí)現(xiàn)程序。
其實(shí),這些基于都只不過基本原理。
后面我推薦你看看《實(shí)戰(zhàn)hotspot》豹子書,打聽一下高級(jí)語言虛擬機(jī)的圈子。
其實(shí),垃圾回收的書籍都很少,這里應(yīng)該我推薦給你垃圾回收的超經(jīng)典書《The Garbage Collection Cookbook》。只不過對(duì)新的垃圾回收算法有興趣,可以去知乎搜索相關(guān)的論文和GC算法開源軟件實(shí)現(xiàn)的demo。
5.當(dāng)然,我的建議只不過是對(duì)Java本身。
真正要提升徹底能學(xué)好java生態(tài),軟件工程,計(jì)算機(jī)網(wǎng)絡(luò),大數(shù)據(jù)基礎(chǔ)知識(shí),mahuot,sparklib,分布式搜索架構(gòu),各種消息中間件,緩存中間件,數(shù)據(jù)庫,DNS/CDN。。。。。這些大都做互聯(lián)網(wǎng)應(yīng)用,無法躲開的。
只能建議您,通用知識(shí)熟練的掌握,專研方向全精通,相關(guān)生態(tài)打聽一下。
而提問是針對(duì)java本身。我就不再繼續(xù)發(fā)動(dòng)了攻擊說其他詳細(xì)方向了。具體描述的是大的技術(shù)方向,并沒有什么其他答主那樣的話,詳細(xì)去再討論語法糖這種級(jí)別。只希望對(duì)提主有不幫助。
有任何問題,記得關(guān)注快回復(fù),與我繼續(xù)討論。謝謝啦。
怎么可以掙錢?
可以賺錢的道路千萬條,也不知你想哪一條?能賺錢是站穩(wěn)腳步社會(huì)的最基礎(chǔ)理論知識(shí),掙多掙少,因人而異。
關(guān)與掙錢,其實(shí)那是相互。君子愛財(cái),取財(cái)有道。你選一個(gè)你擅長的工作或行業(yè),認(rèn)真鉆研,極限能發(fā)揮,錢也就隨之疾飛。業(yè)有專攻,術(shù)有獨(dú)精,擁有行業(yè)的專家,才能賺大錢。加油哈吧!