玩好JDK
在詳細(xì)講解JDK之前,LZ首先要強(qiáng)調(diào)下,本文的內(nèi)容,都是LZ個(gè)人的主觀判斷。因此,各位猿友務(wù)必結(jié)合自己的判斷之后,再?zèng)Q定是否要學(xué)習(xí),以及學(xué)習(xí)到什么程度。
此外,本文只是告訴你學(xué)什么,學(xué)到什么程度,本文不會(huì)包含太多具體的技術(shù)細(xì)節(jié)講解。
最后,如果大家如果在自學(xué)遇到困難,想找一個(gè)java的學(xué)習(xí)環(huán)境,可以加入我們的java學(xué)習(xí)圈,點(diǎn)擊我加入吧,會(huì)節(jié)約很多時(shí)間,減少很多在學(xué)習(xí)中遇到的難題。

JDK其實(shí)就是Java SE Development Kit的縮寫,要玩好這東西可不簡單。JDK主要包含了三部分,第一部分就是 Java運(yùn)行時(shí)環(huán)境 ,這其實(shí)就是JVM。此外,第二部分就是 Java的基礎(chǔ)類庫 ,這個(gè)類庫的數(shù)量還是非??捎^的。最后,第三部分就是Java的開發(fā)工具 ,它們都是輔助你更好的使用Java的利器。
那么很顯然,要玩好JDK,就是要玩好JDK的這三部分。接下來,咱們就逐個(gè)的來說一下,每一個(gè)部分要學(xué)什么,學(xué)到什么程度。
第一部分:Java運(yùn)行時(shí)環(huán)境
這一部分其實(shí)就是常說的jre,而它的核心其實(shí)就一個(gè)東西,就是JVM。
JVM這個(gè)東西,它的重要性LZ不想再強(qiáng)調(diào)了,JVM那本書甚至比《Thinking in java》還重要,這已經(jīng)足見LZ多么看重JVM了。
當(dāng)然了,只是LZ看重,當(dāng)然沒什么卵用,但只要Java稍微高級一點(diǎn)點(diǎn)的職位,這部分基本上都是面試必問內(nèi)容,這更加說明了JVM的重要性。
所以,對于JVM,沒什么可說的,就是往死里學(xué),往死里研究,能有多深就多深!
第二部分:Java的基礎(chǔ)類庫
Java的基礎(chǔ)類庫從你剛開始學(xué)Java就開始接觸了,但是,直到你結(jié)束整個(gè)Java生涯,你都不一定能把所有的類都見一遍。
這說明了什么?是不是說明了Java基礎(chǔ)類庫的龐大?
錯(cuò)!大錯(cuò)特錯(cuò)!這其實(shí)真正說明的是,有很多類你完全不必要care它們,因?yàn)樗鼈儚哪憬佑|Java到放棄,都不一定能接觸到。
所以,搞清楚哪些類重要,哪些類不重要,就非常有必要了。這可以讓你以最短的時(shí)間,做最有價(jià)值的事。
首先,我們來Java基礎(chǔ)類庫的包都有哪些,為了使得本文更有代表性,我們?nèi)DK6的包列表。
怎么樣?是不是被嚇到了?這么多包,而且還這么多陌生的包名,有的連見都沒見過,這特么怎么玩?
不要著急,LZ先帶你把這些包給分下級別,LZ將這些包一共分為四個(gè)級別。
第一級別:精讀源碼
該級別包含的包如下:
精讀源碼,這是要求最高的級別。但是,要求你精讀源碼并不意味著,這些類就是最重要的。而是因?yàn)椋琇Z覺得這些類比較常用,而且比較簡單,看看它們的源碼有助于鍛煉你看源碼的感覺,也了解一下大神們寫代碼的風(fēng)格。
看這些源碼的目的,更多是為了增加你的閱讀代碼能力。而且,LZ這里必須要強(qiáng)調(diào)一下,像Exception和Error這一類的,就不用讀源碼了,親。
其實(shí)上面三個(gè)包都有一個(gè)共同點(diǎn),那就是這三個(gè)包,基本上都是你最常用的了。lang包不用說了,你隨便寫點(diǎn)啥都得用到,io包和util包也是你平時(shí)讀寫文件和使用數(shù)據(jù)結(jié)構(gòu)必不可少的。
看源碼從這些常用的包下手找手感,LZ個(gè)人覺得再合適不過。
第二級別:深刻理解
該級別包含的包如下:
深刻理解,這個(gè)看似比精讀源碼要求低的級別,其實(shí)恰恰是最重要的。這個(gè)級別要求的類,全都是一些進(jìn)階到高級所必須了解的。
當(dāng)然了,這里要強(qiáng)調(diào)一點(diǎn)的是,LZ說這些類要深刻理解,而沒說要看它們源碼,并不是說這些類的源碼不能看,或者看了沒用。而是這些類的源碼往往非常復(fù)雜,要了解清楚細(xì)節(jié)花費(fèi)的時(shí)間是非常多的,因此,花費(fèi)巨量的時(shí)間去研究這么復(fù)雜的代碼其實(shí)沒必要的。
不過,如果你在使用這些類的過程中,遇到了問題,這個(gè)時(shí)候如果看它們源碼可以解決的話,那就不要再矜持了,果斷看看源碼解決你的問題吧,這是最適合的看源碼的契機(jī)了。
小小的透露一下,LZ看過的JDK源碼,基本上全是這么看過來的。遇到了問題不要百度和谷歌,看源碼能解決你90%的問題。
此外,看到這四個(gè)包的名字,不難看出它們各自代表了什么。reflect代表了反射,net代表了網(wǎng)絡(luò)IO,nio代表了非阻塞io,concurrent代表了并發(fā)。
這四個(gè)家伙可以說每一個(gè)都夠面試官問上半天的,而且,這四個(gè)包的內(nèi)容,如果你要深刻理解的話,其實(shí)還牽扯了很多其它的知識(shí)。
舉個(gè)例子,反射你要了解清楚的話,你是不是要搞明白JVM的類加載機(jī)制?網(wǎng)絡(luò)IO要搞清楚的話,你是不是要清楚TCP/IP和HTTP、HTTPS?包括并發(fā)包,如果你要搞清楚的話,是不是要了解并發(fā)的相關(guān)知識(shí)?
因此,這四個(gè)包要徹底搞清楚,還是需要花費(fèi)一定時(shí)間和精力的。
但是,請相信LZ,這絕對是值得的,甚至可以說,這四個(gè)包用的夠不夠叼,基本決定了一個(gè)Java程序員所處的檔次。
第三級別:會(huì)用即可
該級別包含的包如下:
會(huì)用即可,這個(gè)級別的要求很顯然了,就是會(huì)用就可以了。這些包大部分都是在特定的情況下會(huì)用到,但卻不會(huì)時(shí)刻用到。
就像sql包和transaction包,就是操作數(shù)據(jù)庫時(shí)用到的。而xml、dom和sax這些,都是操作xml時(shí)用到的。其它的包也都是類似的,有使用注解時(shí)用的,有遠(yuǎn)程方法調(diào)用時(shí)用的,也有涉及到加密時(shí)用到的等等。
這些包在面試時(shí)一般不會(huì)問到,所以它們的重要性自然要低很多,而且也不太需要刻意的去學(xué),用到了研究一下,會(huì)用即可。
第四級別:請無視它
該級別包含了所有以上沒有提到的包。
這個(gè)級別就更不用解釋了,到現(xiàn)在還沒提到的包,基本上可以忽略,因?yàn)槟慊旧喜惶赡苡玫剿鼈?,比如swing、awt這些玩意兒。
什么?你說你經(jīng)常用它們?
如果真的是這樣的話,那么LZ只能遺憾的告訴你,趕緊跳槽吧,你待在這公司沒啥前途的,0-0。
第三部分:Java的開發(fā)工具
這些開發(fā)工具主要就是輔助你開發(fā)的了,javac應(yīng)該是最常用的一個(gè)了,雖然你幾乎不用手動(dòng)執(zhí)行它。
此外,其實(shí)還有一些比較實(shí)用的工具,可以幫助你排查問題。而且有的面試官,也會(huì)問你這類問題,比如問你平時(shí)都用什么工具排查問題。
LZ覺得比較實(shí)用的幾個(gè)工具主要有jmap、jconsole、jstack、jvisualvm,至于這幾個(gè)工具有什么作用,LZ這里就不提了,如果你要了解這些命令的詳細(xì)內(nèi)容,可以去谷歌或者官網(wǎng)上找,還是非常好找的。
針對很多同學(xué)提出來的想學(xué)習(xí)缺沒有系統(tǒng)的學(xué)習(xí)資料,以及健全的java學(xué)習(xí)路線和知識(shí)體系,檸檬在這里為大家準(zhǔn)備了 由北京尚學(xué)堂高淇老師和馬士兵老師親自錄制的java自學(xué)視頻教程,希望對小伙伴們有所幫助!
資料目錄
第一階段JAVA 快速入門
章節(jié)1:JAVA 入門和第一個(gè)項(xiàng)目
章節(jié)2:流程控制語句和方法
章節(jié)3:數(shù)組初步
第二階段JAVA 基礎(chǔ)深化和提高
章節(jié)1:面向?qū)ο笊罨?/p>
章節(jié)2:數(shù)組深化
章節(jié)3:異常機(jī)制
章節(jié)4:常用類
章節(jié)5:容器
章節(jié)6:IO 流技術(shù)
章節(jié)7:多線程技術(shù)
章節(jié)8:網(wǎng)絡(luò)編程
章節(jié)9:XML 技術(shù)
章節(jié)10:反射技術(shù)
章節(jié)11:多線程和并發(fā)編程
章節(jié)12:手寫服務(wù)器項(xiàng)目
第三階段數(shù)據(jù)庫編程和設(shè)計(jì)
章節(jié)1:Oracle 數(shù)據(jù)庫的使用
章節(jié)2:SQL 語言
章節(jié)3:Mysql 數(shù)據(jù)庫的使用
章節(jié)4:JDBC技術(shù)
章節(jié)5:MyBatis框架
第四階段網(wǎng)頁編程和設(shè)計(jì)
章節(jié)1:HTML5
章節(jié)2:CSS3
章節(jié)3:JavaScript
章節(jié)4:Jquery
第五階段JAVAEE 和項(xiàng)目開發(fā)
章節(jié)1:Servlet 技術(shù)
章節(jié)2:JSP 技術(shù)
章節(jié)3:JSP和Servlet整合案例
章節(jié)4:EL表達(dá)式和JSTL標(biāo)簽庫
章節(jié)5:過濾器和監(jiān)聽器
章節(jié)6:Ajax 異步技術(shù)和json
章節(jié)7:項(xiàng)目:財(cái)務(wù)管理系統(tǒng)
第六階段SSM 框架和項(xiàng)目開發(fā)
章節(jié)1:Spring 框架
章節(jié)2:Spring MVC 框架
章節(jié)3:SSM 框架整合
章節(jié)3:SSM 框架整合
第七階段JAVA 高級技術(shù)
章節(jié)1:Linux
章節(jié)2:Maven
章節(jié)3:Dubbo
章節(jié)4:VSFTPD
章節(jié)5:Nginx
章節(jié)6:Redis
章節(jié)7:Solr
章節(jié)8:ActiveMQ
章節(jié)9:JsonP
章節(jié)10:HttpClient
章節(jié)11:MyCat
第八階段電商高級項(xiàng)目_架構(gòu)/編碼
章節(jié)1:電商Ego-基于SOA 架構(gòu),使用Dubbo,逆向工程,分頁插件完成商品查詢
章節(jié)2:電商Ego-使用VSFTPD 和Nginx 完成商品新增
章節(jié)3:電商Ego-基于json 格式完成商品規(guī)格參數(shù)管理
章節(jié)4:電商Ego-使用jsonp 完成前臺(tái)首頁導(dǎo)航菜單
章節(jié)5:電商Ego-完成CMS 系統(tǒng)
章節(jié)6:電商Ego-添加前臺(tái)大廣告位數(shù)據(jù)緩存
章節(jié)7:電商Ego-完成商品搜索功能
章節(jié)8:電商Ego-顯示商品詳細(xì)詳情
章節(jié)9:電商Ego-完成SSO 單點(diǎn)登錄系統(tǒng)
章節(jié)10:電商Ego-購物車
章節(jié)11:電商Ego-訂單系統(tǒng)實(shí)現(xiàn)
章節(jié)12:電商Ego-ActiveMQ
章節(jié)13:電商Ego-MySql 讀寫分離+MyCat 分庫分表
章節(jié)14:電商Ego-項(xiàng)目部署
第九階段設(shè)計(jì)模式/框架源碼分析
章節(jié)1:GOF23 設(shè)計(jì)模式
章節(jié)2:Servlet 和Tomcat 底層源碼分析
章節(jié)3:Mybatis 底層源碼分析
章節(jié)4:Spring 框架底層源碼分析
第十階段微服務(wù)架構(gòu)
章節(jié)1:Spring Boot
章節(jié)2:Spring Data
章節(jié)3:Spring Cloud