java學(xué)習(xí)之jvm從哪方面入手學(xué)習(xí) 如何系統(tǒng)的學(xué)習(xí)JAVA?
如何系統(tǒng)的學(xué)習(xí)JAVA?java的整體生態(tài)和積累知識(shí)真是是太大了。95年到現(xiàn)在為止20多年的積累,全都不屬于到計(jì)算機(jī)軟硬件的方方面面。我不提就懷疑,提主所說的精通,是指jdk本身和一些必要的數(shù)據(jù)結(jié)構(gòu)這
如何系統(tǒng)的學(xué)習(xí)JAVA?
java的整體生態(tài)和積累知識(shí)真是是太大了。95年到現(xiàn)在為止20多年的積累,全都不屬于到計(jì)算機(jī)軟硬件的方方面面。我不提就懷疑,提主所說的精通,是指jdk本身和一些必要的數(shù)據(jù)結(jié)構(gòu)這些正確框架和面向?qū)ο蟮幕径妓枷氚伞?/p>
從11年初至今,一直在在學(xué)習(xí)java相關(guān)的知識(shí)。其中也走了不少彎路。按自己的積累,具體提主一個(gè)自認(rèn)為合算且有是有深度的學(xué)習(xí)路線。確切分下面幾個(gè)階段吧。
1.簡單應(yīng)盡很有可能的打牢基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)和簡單的算法基礎(chǔ)。
可以去急速的學(xué)習(xí)一些簡單的四頭系統(tǒng),來滿足的條件軟件學(xué)習(xí)的興趣和初期成就感。但,你必須回過頭,一遍的培養(yǎng)數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)和簡單算法。像這種書就這個(gè)可以。
2.熟練使用Java類庫和java第三方工具框架。
去學(xué)習(xí)建議使用java的語法,接觸理解Java語法設(shè)計(jì)什么的邏輯。熟練的掌握手中掌握jdk類庫本身,在內(nèi)各種第三方類庫工具包和第三方框架的簡單使用。這里自學(xué)的同時(shí),推薦去看看《設(shè)計(jì)模式》,《代碼整潔之道》,《spring源碼解讀》,《Spring揭秘》等這一類的書集。
3.理解學(xué)jdkjava代碼本身的應(yīng)用源碼實(shí)現(xiàn)程序和大型網(wǎng)游第三方框架的源碼和架構(gòu)設(shè)計(jì)。
例如jdk本身的數(shù)據(jù)結(jié)構(gòu)二叉樹,紅黑樹,treemap,和異步包的unsafe,同步阻塞隊(duì)列,call-future等等包源碼,在內(nèi)線程基礎(chǔ)類的實(shí)現(xiàn),各個(gè)類庫怎么設(shè)計(jì)的結(jié)構(gòu)和設(shè)計(jì)模式。學(xué)透第三方框架的設(shè)計(jì)思想,理解學(xué)習(xí)第三方框架的核心源碼。
其實(shí),這里面可能會(huì)會(huì)不屬于到其他的事務(wù),分布式協(xié)議等,這里繼續(xù)展開攻擊。這個(gè)過程不是他一朝一夕,很有可能是需要大量的時(shí)間和技術(shù)感悟??隙ǎ对O(shè)計(jì)模式》,《代碼整潔之道》,《spring源碼解讀與設(shè)計(jì)詳析》,《Spring揭秘》等等這一大類書,在這個(gè)過程也可以明白大差不差了。
4.再理解jdk,jre即jvm原理和實(shí)現(xiàn)程序。
這里我推薦看下王振彪的《實(shí)戰(zhàn)java虛擬機(jī)》,里面解說也很偏實(shí)操。容易上手明白。
簡單,也可以從jdk那個(gè)軟件的工具學(xué)習(xí)來先學(xué)些。
例如:jstat,jmap,jstack,jps,jdb.......哪怕有就這個(gè)可以窺視運(yùn)行期間不好算內(nèi)存數(shù)據(jù)的HSDB。當(dāng)然了,充當(dāng)自學(xué)初步,我們只要理解正確的幾個(gè)命令,并明白了其華指的意義再試一下。不過,第三方監(jiān)控工具,除開jdk本身也需要提供了3個(gè)可視化的監(jiān)控。
主要,表述jvm的運(yùn)行加載原理,看懂class文件結(jié)構(gòu)。
這個(gè)過程我們也可以動(dòng)用之前會(huì)專用監(jiān)控工具,理解jvm加載的基本原理。也可以建議參考官方各個(gè)版本的jvm標(biāo)準(zhǔn),學(xué)習(xí)看得懂class文件。在此這個(gè)可以建議使用如classpy等工具,方便啊我們真接閱讀什么class文件。也可以再試試意見class字節(jié)碼級(jí)別的單步運(yùn)行調(diào)試工具。甚至,是可以接觸用用jvm匯編編碼工具。
接下來,明白jvm的垃圾回收機(jī)制發(fā)展歷史和各個(gè)主流垃圾回收器的工作原理。
這個(gè)過程總之更加復(fù)雜。垃圾回收器有各種串行,左行,新聲代/swap和老年代,和回收警戒線,clear觸發(fā)條件,各種個(gè)樣的基本參數(shù)和不咋得用超參數(shù),以及G1的H區(qū),ZGC等等。。。不過的是,GC并都屬于jvm官方規(guī)范的一部分。
接著,動(dòng)手做一些jvm的實(shí)踐和實(shí)戰(zhàn),
例如,jvm較常見的故障排查和故障歸納,性能調(diào)優(yōu),熱程序加載,class字節(jié)碼的動(dòng)態(tài)操作,asm等。
后來,也可以數(shù)次利用自己的jvm。(當(dāng)然這個(gè)步驟,對(duì)很多同學(xué)來說不是前提是了)
這里我推薦幾本書,確實(shí)是全部看懂jvm規(guī)范的要求的學(xué)習(xí)路徑。最好自己實(shí)現(xiàn)程序垃圾回收器。
周老師的《深入理解Java虛擬機(jī)》。
接下來是《深入嵌入式j(luò)ava虛擬機(jī)》和配套源碼。這個(gè)cldc的jvm源碼唯有1M多。目前在oracle的官網(wǎng)上,仍舊是可以下載。是一個(gè)設(shè)計(jì)更加系統(tǒng)精簡的jvm實(shí)現(xiàn)程序。
接下來的,也可以去閱讀《自己動(dòng)手寫java 虛擬機(jī)》。這本書的jvm基于是按結(jié)構(gòu)go語言編寫。當(dāng)然其中也有很多設(shè)計(jì)并也不是非常合算。但基本都都按照了jvm規(guī)范。
這個(gè)時(shí)候就也可以去看一下github上各種jvm的開源軟件實(shí)現(xiàn)了。有me,scalajvm,javainjava,ajvm,python-jvm,lua,各個(gè)版本各個(gè)相同的jvm實(shí)現(xiàn)程序。
不過,這些實(shí)現(xiàn)都僅僅基本原理。
后面推薦推薦你上去看《實(shí)戰(zhàn)hotspot》豹子書,參與高級(jí)語言虛擬機(jī)的圈子。
肯定,垃圾回收的書籍都很少,這里應(yīng)該我推薦給你垃圾回收的超經(jīng)典書《The Garbage Collection Cookbook》。事實(shí)上對(duì)新的垃圾回收算法有興趣,也可以去知乎搜索相關(guān)的論文和GC算法開放源代碼基于的demo。
5.不過,我的建議只是因?yàn)閷?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í)熟練的掌握,努力專研方向?qū)>?,查找生態(tài)打聽一下。
而提問是針對(duì)java本身。我就繼續(xù)發(fā)起說其他具體看方向了。描述的是大的技術(shù)方向,并沒有什么其他答主那樣,詳細(xì)去再討論語法糖這種級(jí)別。期望對(duì)提主所幫助。
有任何問題,請(qǐng)關(guān)注知道回答,與我繼續(xù)討論。謝謝了。
你是如何學(xué)習(xí)Java的?
給您推薦一下Java自學(xué)路線圖,是菊廠童鞋做開發(fā)你經(jīng)常建議使用的一些技術(shù)和工具,只希望能好處到您~
前端部分:
1)HTML:網(wǎng)頁的核心語言,構(gòu)成網(wǎng)頁的基礎(chǔ)
2)CSS:使網(wǎng)頁十分多彩繽紛璀璨的利器
3)JavaScript:使網(wǎng)頁動(dòng)起來的根本,加強(qiáng)了網(wǎng)頁和用戶之間的交互
4)HTMLDOM:換一種更加形象化的角度來看待事情網(wǎng)頁,讓我們更加方便的控制網(wǎng)頁
5)HTMLBOM:與瀏覽器交互過程不可或缺的工具
6)JavaScript庫,主要是:jQuery教材習(xí)題解答插件、YUI船舶概論插件,使c語言設(shè)計(jì)網(wǎng)頁非常的便捷和健碩的強(qiáng)大工具
7)AJAX:異步重新提交,增加了用戶在用網(wǎng)頁的良好交互體驗(yàn)
8)JSON:比XML更小、快的,更易解析的數(shù)據(jù)傳輸工具
9)FLEX:可以提供豐富多彩的動(dòng)畫效果
10)普元工作流:十分清晰明了的幫助用戶處理業(yè)務(wù)流程上面的工作
11)JSP:Servlet的展示層,使網(wǎng)頁邏輯與網(wǎng)頁設(shè)計(jì)的顯示只是分離
12)JSTL:可以提高和簡化后了JSP頁面的開發(fā)
13)EL:使JSP頁面寫出聲極其很簡單
后臺(tái)部分:
1)JAVA語言編程基礎(chǔ)部分:內(nèi)容多樣是Java知識(shí)體系結(jié)構(gòu)的核心和基礎(chǔ)
2)JDBC:需要提供了一種基準(zhǔn),以此為標(biāo)準(zhǔn)這個(gè)可以形成完整更高級(jí)的工具和接口,使Java開發(fā)人員都能夠c語言程序數(shù)據(jù)庫應(yīng)用程序
3)JavaMail:主要是用于電子郵件的相關(guān)的編程工作
4)JUnit:單元測(cè)試,這座變得工作測(cè)試出來的地位仍然非常重要
5)Log4j:使我們能夠更細(xì)致地完全控制日志的生成過程
6)Servlet:JavaWeb的核心
7)Struts2:JavaWeb編程中明星級(jí)的框架,優(yōu)點(diǎn)多功能組合強(qiáng)使編程工作更簡單的,要注意主要用于控制跳轉(zhuǎn)
8)Spring:JavaWeb編程中明星級(jí)的框架,則是優(yōu)點(diǎn)多功能組合強(qiáng)使編程工作更簡單點(diǎn),主要作用于管理對(duì)象
9)iBatis:JavaWeb編程中明星級(jí)的框架,同樣的又是優(yōu)點(diǎn)多功能強(qiáng)使編程工作更簡單啊,通常用于程序和數(shù)據(jù)庫之間的交互
10)SQL:與數(shù)據(jù)庫多屏幕編程的必備工具
版本控制:
1)SVN:版本控制,更方便團(tuán)隊(duì)協(xié)同工作
WEB服務(wù)器:
1)Tomcat:杰出的在線的大中小型WEB服務(wù)器
2)Weblogic:功能很極為強(qiáng)大的WEB服務(wù)器
開發(fā)工具:
1)Eclipse:開源強(qiáng)大無比的Java編程工具
2)MyEclipse:在eclipse基礎(chǔ)上而且自己的插件開發(fā)而成的功能強(qiáng)大的企業(yè)級(jí)集成開發(fā)環(huán)境
數(shù)據(jù)庫:
1)Oracle:數(shù)據(jù)庫業(yè)界老大,這個(gè)具體用法一點(diǎn)不過,也僅是正確一些常用的功能罷了,要增強(qiáng)
2)MySQL:最好的關(guān)系型數(shù)據(jù)庫之一
3)SqlServer:最好就是的關(guān)系型數(shù)據(jù)庫之一
數(shù)據(jù)庫客戶端:
1)Toad:相當(dāng)棒的數(shù)據(jù)庫客戶端軟件
操作系統(tǒng):
1)Windows
2)Linux
遠(yuǎn)程登錄的會(huì)話工具:
1)SSH:一直在在用,非常不錯(cuò)
其他:
各種種類和版本的瀏覽器(我推薦使用FireFox)、office辦公軟件系列、各種文本編輯器(推薦Sublime)、各種閱讀器等等
下面是從網(wǎng)上找的三幅圖片,比較好的說明了充當(dāng)一個(gè)Java程序員的學(xué)習(xí)路線圖,這里作為一種自我尊重囑咐的工具,時(shí)不時(shí)地看看,而且會(huì)慌忙修補(bǔ)后自己的知識(shí)樹!
1、Java的知識(shí)體系結(jié)構(gòu)
2、JavaWeb開發(fā)的基本都學(xué)習(xí)路線圖
3、JavaWeb開發(fā)完畢的成長路線圖
第一部分:Java低級(jí)學(xué)習(xí)課程大綱
1、工程化專題
我們的工程化熱點(diǎn)專題有五大內(nèi)容:Maven、Nexus、jenkins、代碼審查、Git/SVN
共工程浩大一個(gè)月
2、源碼分析專題
源碼分析有三大內(nèi)容:spring的源碼結(jié)論,里面包括FactoryBean和MVC和事務(wù)處理與Spring源碼中設(shè)計(jì)模式結(jié)論;持久層;企業(yè)級(jí)開發(fā)前瞻預(yù)測(cè),一共有多少需要的時(shí)間2個(gè)月
3、高并發(fā)與更高性能
高并發(fā)與集高性能有四大內(nèi)容:并發(fā)編程,里面又包涵有線程安全和NIO和AIO。異步通信,里面包涵有本地隊(duì)列和消息中間件。分布式協(xié)調(diào)技術(shù),里面包涵有Zookeeper和服務(wù)鎖。NoSqI:里面真包含有MongoDB和Redis和Memcached。一共有多少需要的時(shí)間2個(gè)月
4、高可用性與可擴(kuò)展
高可用性與可擴(kuò)展有兩大內(nèi)容:分布式架構(gòu)詳細(xì)介紹,里面有導(dǎo)入流量技術(shù)和服務(wù)設(shè)計(jì)和存儲(chǔ)設(shè)計(jì)。服務(wù)調(diào)用,里面真包含有WebService和Dubbo。共耗時(shí)2個(gè)月
5、性能優(yōu)化
性能優(yōu)化有四大內(nèi)容:360優(yōu)化技巧,要如何這里有性能瓶頸。JVM優(yōu)化軟件。數(shù)據(jù)庫優(yōu)化。服務(wù)器優(yōu)化。一共前后歷時(shí)2個(gè)月
上面這五大專題,是幾位工作經(jīng)驗(yàn)十多年的大牛,參照自己往年的工作經(jīng)驗(yàn)與經(jīng)歷,在依據(jù)什么現(xiàn)在科技發(fā)展的求實(shí)際情況,歷經(jīng)世間幾個(gè)月的時(shí)間c語言程序而成,是說,上面的五大專題,也就是他們這十幾年精華總結(jié),現(xiàn)在,您只要明確的上面的課題自學(xué),只要最少掉七個(gè)月多的時(shí)間,就能夠?qū)W會(huì)什么與理解幾位大牛十多年歸納出來的精華。學(xué)完后這些,還怕公司老總不給漲工資和職位提升么?
第二部分:某階段的學(xué)習(xí)
學(xué)什么東西都差不多,小宅我相信大家也一樣,在學(xué)東西的時(shí)候,總會(huì)安排好了好自己某階段的學(xué)習(xí),這樣才能管用的提升自己與快速有效的理解和認(rèn)知所學(xué)的知識(shí)。合理安排好,才能起到可以事半功倍的效果。
階段一:
階段二:
階段三:
階段四:
階段五: