Java學(xué)習(xí)計(jì)劃,給自己一個(gè)學(xué)習(xí)線路。語(yǔ)言是學(xué)習(xí)成本比較低的,Java作為一種高級(jí)語(yǔ)言,其相關(guān)語(yǔ)法相對(duì)簡(jiǎn)單,各種類庫(kù)、框架封裝的都相對(duì)好,而且相關(guān)生態(tài)也比較好(百度、google可以快速檢索,github也有很多相當(dāng)優(yōu)秀的資源),Java類庫(kù)的使用與C++的STL有很多類似的地方(STL的類庫(kù)是基于C的template的規(guī)則衍生出來(lái)的,而Java的類庫(kù)就基礎(chǔ)實(shí)現(xiàn)來(lái)說(shuō)我理解也是template,通過(guò)將基礎(chǔ)功能模版化封裝好,這其中涉及到范型等語(yǔ)法)。而Java類較C++而言,C++的虛函數(shù)被java中的接口取代;較C而言,C中的結(jié)構(gòu)體也就是Java中的類;所以將Java與大家最常使用和學(xué)習(xí)的C/C++做類比,會(huì)發(fā)現(xiàn)Java的語(yǔ)法有很多其他語(yǔ)言的影子,尤其C/C++。
上面建紹了小編對(duì)Java的理解,現(xiàn)對(duì)其基礎(chǔ)語(yǔ)法學(xué)習(xí)推薦一本書:《Java編程思想》,Java編程神書,適合打基礎(chǔ)使用,但是相對(duì)較貴,可以搜索電子書進(jìn)行閱讀。java基礎(chǔ)語(yǔ)法學(xué)習(xí)外,要懂的主要幾個(gè)點(diǎn):八個(gè)基礎(chǔ)類型與其對(duì)應(yīng)的類的裝包和拆包(主要是對(duì)應(yīng)類的底層數(shù)據(jù)結(jié)構(gòu),重點(diǎn));collection類、map類(collection類要會(huì)畫它的類圖,map類要懂hashmap的底層數(shù)據(jù)結(jié)構(gòu),curruenthashmap的底層數(shù)據(jù)結(jié)構(gòu),Java1.8之前和之后的不同等等),并且要理解哪幾種是線程安全的類(舉例:curruenthashmap、vector、hashtable);最基礎(chǔ)的類object的三個(gè)方法的具體實(shí)現(xiàn),add、hashcode、equal。
高級(jí)進(jìn)階:
已經(jīng)有了相對(duì)較好的java基礎(chǔ)后,需要學(xué)習(xí)一些java使用較高級(jí)的東西,大體有兩方面,一個(gè)是并發(fā),一個(gè)是JVM(java虛擬機(jī)),分別推薦兩本書吧:《Java并發(fā)編程的藝術(shù)》、《深入理解Java虛擬機(jī)》,前者較好的講解了java中并發(fā)編程的實(shí)現(xiàn),內(nèi)容通俗易懂,主要理解volitile和sychornizer,涉及到底層封裝,主要是通過(guò)CAS和AQS實(shí)現(xiàn)的,而原子類、JUL下的工具類等實(shí)現(xiàn)也是上述兩種方法實(shí)現(xiàn)的,而并發(fā)最重要的技術(shù)體現(xiàn)就是線程池技術(shù)(此處是重點(diǎn),源碼)和鎖(主要理解對(duì)象的頭部markhard部分,在此基礎(chǔ)上學(xué)習(xí)下重入鎖、讀寫鎖,而悲觀鎖、樂(lè)觀鎖、輕量鎖、重量鎖等概括要通過(guò)相應(yīng)的關(guān)鍵字來(lái)理解);后者較深,不建議Java入門學(xué)習(xí),只要對(duì)JVM底層結(jié)構(gòu)有一定了解,對(duì)內(nèi)存模型有概念,對(duì)GC的實(shí)現(xiàn)理解其算法和流程就好。
Java是面向?qū)ο缶幊?,面向?qū)ο缶幊痰囊粋€(gè)特點(diǎn)就是有很多設(shè)計(jì)模式,比如單例模式(懶漢和餓漢)、工廠模式、策略模式、迭代器模式、服務(wù)端和客戶端模式等等,這些設(shè)計(jì)模式可以看一些書學(xué)理解一下精髓,推薦《設(shè)計(jì)模式解析》,設(shè)計(jì)模式只要先懂精髓就好,這個(gè)跟jvm比較相識(shí),在實(shí)際工作中理解效果更好,)世界上本沒(méi)有路走的人多了也就成了路(,一個(gè)道理的。
框架相關(guān):
經(jīng)典的SSM(spring、springMVC、mybatis),要對(duì)其使用、結(jié)構(gòu)、源碼實(shí)現(xiàn)有一定理解,其中spring的IOC和AOP,springMVC和服務(wù)器/bean層的關(guān)系及實(shí)現(xiàn),mybatis的源碼實(shí)現(xiàn)(mybatis源碼流程相對(duì)簡(jiǎn)單,便于學(xué)習(xí)java代碼)。現(xiàn)在用的最多的是springboot,便于快速構(gòu)建,但是缺點(diǎn)是缺少對(duì)具體實(shí)現(xiàn)的感知,需要有SSM或SSH的組合理解(不推薦SSH呀,太老了)。
Netty框架是一種網(wǎng)絡(luò)通信框架,基于Netty可以實(shí)現(xiàn)客戶端和服務(wù)端的消息通信,基于Netty可以學(xué)習(xí)一下NIO的具體實(shí)現(xiàn)(AIO,BIO最好懂一下原理)。
常用技術(shù)棧:
數(shù)據(jù)庫(kù)技術(shù)懂mysql就好,會(huì)用最基本的select、delete、update、query(orderby,groupby)就好,最好會(huì)用index(索引,公司用的比較多的內(nèi)容,基于紅黑樹(shù)),自己可以試著建表,多線程訪問(wèn)增刪改查,看看效果。數(shù)據(jù)庫(kù)的四大特性及引入的三大問(wèn)題,及解決問(wèn)題的四大隔離事務(wù)都要懂。
web相關(guān)技術(shù),需要懂一下http、https協(xié)議,對(duì)request和response相關(guān)字段要理解,可以通過(guò)postman在網(wǎng)上找一些例子進(jìn)行學(xué)習(xí)。而且要懂socket編程,不管是Java還是其他語(yǔ)言,socket編程都是最基本的服務(wù)端和客戶端的通信方式。
linux的常用命令一定要會(huì)用(自己多用用就好了),并且最好試著跑一下服務(wù)端程序,試試效果。git也要會(huì)用,可以在github上建立一個(gè)庫(kù),上傳自己開(kāi)發(fā)的程序。