Java是一種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言腻窒。Java 技術(shù)具有卓越的通用性昵宇、高效性、平臺移植性和安全性儿子,廣泛應(yīng)用于PC瓦哎、數(shù)據(jù)中心、游戲控制臺、科學(xué)超級計算機蒋譬、移動電話和互聯(lián)網(wǎng)割岛,同時擁有全球最大的開發(fā)者專業(yè)社群。
給你學(xué)習(xí)路線:html-css-js-jq-javase-數(shù)據(jù)庫-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm
1.Java的運行(基礎(chǔ)必備)
這條可能出看很簡單犯助,java程序的運行誰不會呢?不過很多時候蜂桶, 我們只是單純通過IDE去執(zhí)行java程序,底層IDE又是如何執(zhí)行java程序呢?很多人并不了解也切。
這 個知識點是最最基本的java開發(fā)者需要掌握的扑媚,初學(xué)java,第一個肯定是教你如何在命令行中執(zhí)行java程序雷恃,但是很多人一旦把java學(xué)完 了疆股,IDE用上了,就把這個都忘了倒槐。為什么強調(diào)要知道這個呢旬痹,知道了java最純粹的啟動方式之后,你才能在啟動出問題的時候讨越,去分析當(dāng)時啟動的目錄多 少两残,執(zhí)行命名如何,參數(shù)如何把跨,是否有缺失等人弓。 這樣有利于你真正開發(fā)中去解決那些奇奇怪怪的可能和環(huán)境相關(guān)的問題。
小編推薦一個學(xué)Java的學(xué)習(xí)裙【 六五零着逐,五五四崔赌,六零七 】,無論你是大牛還是小白耸别,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)健芭!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享秀姐!
在這里需要掌握的知識有:
javac 編譯java文件為 class 文件慈迈;
java 命令的使用, 帶package的java類如何在命令行中啟動省有;
java程序涉及到的各個路徑(classpath痒留, java,library锥咸,path狭瞎, java運行的主目錄等)。
2. 數(shù)據(jù)類型
這條沒有什么好多說的搏予,無非就是Java中的基本類型和對象類型的掌握熊锭。可以再了解一些JDK如何自動轉(zhuǎn)換方面的知識,包括裝箱拆箱等碗殷,還要注意避免裝箱之后的類型相等的判斷
主要知識點:
基本類型: int精绎, long, float锌妻, double代乃, boolean ;
對應(yīng)的對象類型: Integer 等類型到基本類型的轉(zhuǎn)換仿粹, 裝箱和拆箱
Object類型: equals搁吓, hashcode,String 類型的特點吭历。
3. 訪問控制
這也是java封裝特性的一個基礎(chǔ)堕仔,需要掌握的有:
public protected default private 對class, method晌区, field 的修飾作用摩骨。
4. 流程控制
Java 流程控制的基礎(chǔ), 雖然有些語法不一定很常用朗若,但是都需要了解恼五,并且在合適的地方使用它們。
需要掌握的有:if哭懈, switch灾馒, loop, for银伟, while 等流程控制的語法你虹。
5. 面向?qū)ο缶幊痰母拍?/p>
這 是一個java的核心概念讶坯,對于任何java開發(fā)者都需要熟練掌握晌纫。Java中很多特性或者說知識點都是和java面向?qū)ο缶幊谈拍钕嚓P(guān)的肃叶。在我的理解, 一個好的開發(fā)者不僅僅需要了解這些特性(知識點)本身琉预,也更需要知道這些對象在java的面向?qū)ο缶幊谈拍钪惺侨绾误w現(xiàn)出來的,這樣更有利于開發(fā)者掌握 java這門開發(fā)語言蒿褂,以及其他面向?qū)ο缶幊痰恼Z言圆米。
主要的知識點包括有:
面向?qū)ο笕筇匦裕悍庋b,繼承啄栓,多態(tài); 各自的定義概念娄帖,有哪些特性體現(xiàn)出來,各自的使用場景昙楚,靜態(tài)多分派近速,動態(tài)單分派的概念,重載的概念和使用
繼承:接口多實現(xiàn),基類單繼承抽象削葱,抽象類奖亚,接口
多態(tài):方法覆蓋的概念和使用接口回調(diào)
6. 對象和實例,對象的創(chuàng)建
在這方面析砸,開發(fā)者需要了解class和instance的概念以及之間的差別昔字, 這是java面向?qū)ο筇匦缘囊粋€基礎(chǔ)。主要知識點有:
Class和 Instance 的概念首繁;
Instance 創(chuàng)建的過程:
1.無繼承:分配內(nèi)存空間作郭, 初始化變量, 調(diào)用構(gòu)造函數(shù)弦疮;
2.有繼承:處理靜態(tài)動作所坯, 分配內(nèi)存空間, 變量定義為初始值 挂捅, 從基類->子類芹助, 處理定義處的初始化, 執(zhí)行構(gòu)造方法闲先;
需要注意的點:靜態(tài)屬性等從基類->子類進(jìn)行初始化状土;默認(rèn)無參構(gòu)造方法相關(guān)的特性。
7. Static
靜態(tài)屬性在java日常開發(fā)中也是經(jīng)常使用伺糠,需要了解和 static 關(guān)鍵字相關(guān)的用法蒙谓,還有和其他關(guān)鍵字的配合使用, 如是否可以和 abstract训桶, final 等關(guān)鍵字聯(lián)合使用累驮。
主要需要掌握的有:
靜態(tài)屬性的定義,使用舵揭,以及類加載時如何初始化
靜態(tài)方法的定義和使用
靜態(tài)類的定義和使用
靜態(tài)代碼塊的定義和初始化時機
8. 基礎(chǔ)知識點
這里主要羅列一些散落的谤专,沒有系統(tǒng)歸類的一些java知識點。在日常的開發(fā)中用到也不少午绳。 這塊內(nèi)容其實還有很多置侍,目前只是暫時歸納了這幾個在這里:
包括有:equals , hashcode 拦焚, string/stringbuffer 蜡坊,final , finally 赎败, finalize
9.集合框架
這 個是一個需要多加掌握的部分秕衙,做java開發(fā),可以說沒有不用到集合框架的僵刮,這很重要据忘。但是這里的知識點并不難鹦牛,但是對于集合最好要了解內(nèi)部的實現(xiàn)方式, 因為這樣有助于你在各個不同的場景選擇適合的框架來解決問題若河,比如有1W個元素的集合能岩,經(jīng)常要進(jìn)行contains判斷操作,知道了集合的特性或者內(nèi)部實 現(xiàn)萧福,就很容易做出正確的選擇拉鹃。
這里包括了如下內(nèi)容(并發(fā)相關(guān)不包含在內(nèi)):
集合框架的體系: 基礎(chǔ)Collection ,Map
具體集合實現(xiàn)的內(nèi)容鲫忍, List 膏燕,Set ,Map 具體的實現(xiàn)悟民,內(nèi)部結(jié)構(gòu)坝辫, 特殊的方法, 適用場景等集合相關(guān)的工具類 Collections 的用法射亏。
10.異辰Γ框架
異 常在java的開發(fā)中可能沒有那么被重視。一般遇到異常智润,直接上拋及舍,或者隨便catch一下處理之后對于程序整體運行也沒有什么大的影響。不過在企業(yè)級設(shè) 計開發(fā)中窟绷, 異常的設(shè)計與處理的好壞锯玛,往往就關(guān)系著這個系統(tǒng)整體的健壯性。一個好的系統(tǒng)的異常對于開發(fā)者來說兼蜈,處理應(yīng)該統(tǒng)一攘残,避免各處散落很多異常處理邏輯;對于系統(tǒng) 來說,異常應(yīng)該是可控的为狸,并且是易于運維的歼郭,某些異常出現(xiàn)后,應(yīng)該有應(yīng)對的方法钥平,知道如何運維處理实撒,所以雖然異常框架很簡單涉瘾,但是對于整個企業(yè)級應(yīng)用開發(fā) 來說,異常處理是很重要的捷兰,處理好異常就需要了解Java中的異常體系立叛。
這部分需要掌握的知識點不多,主要就是:
異常的體系:
Throwable
Exception
RuntimeException
Error
RuntimeException 和 一般 Exception 的區(qū)別贡茅, 具體處理方法等秘蛇。
小編推薦一個學(xué)Java的學(xué)習(xí)裙【 六五零其做,五五四,六零七 】赁还,無論你是大牛還是小白妖泄,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具艘策,很多干貨和技術(shù)資料分享蹈胡!
11.Java IO
IO 在java中不僅僅是文件讀寫那么簡單,也包括了 socket 網(wǎng)絡(luò)的讀寫等等一切的輸入輸出操作朋蔫。比如說 標(biāo)準(zhǔn)HTTP請求中Post的內(nèi)容的讀取也是一個輸出的過程罚渐,等等…
對于IO,Java不僅提供了基本Input驯妄、Output相關(guān)的api荷并,也提供了一些簡化操作的Reader、Writer等api青扔,在某些開發(fā)(涉及大量IO操作的項目)中也很重要源织,一般日常的開發(fā)中也會涉及(日志,臨時文件的讀寫等)微猖。
在這中的知識點主要有:
基本IO的體系: 包括有InputStream 谈息, OutputStream, Reader/Writer励两, 文件讀取黎茎,各種流讀取等NIO 的概念, 具體使用方式和使用場景
12.多線程并發(fā)
多線程是Java中普遍認(rèn)為比較難的一塊当悔。多線程用好了可以有效提高cpu使用率傅瞻, 提升整體系統(tǒng)效率, 特別是在有大量IO操作阻塞的情況下;但是它也是一柄雙刃劍盲憎, 如果用不好嗅骄,系統(tǒng)非但提升不大,或者沒有提升饼疙,而且還會帶來多線程之間的調(diào)試時等問題溺森。
在多線程中內(nèi)容有很多,只是簡單說明一下Java中初步使用多線程需要掌握的知識點窑眯,以后有機會單獨再詳細(xì)介紹一些高級特性的使用場景屏积。
多線程的實現(xiàn)和啟動
callable 與 runable 區(qū)別
syncrhoized ,reentrantLock 各自特點和比對
線程池
future 異步方式獲取執(zhí)行結(jié)果
concurrent 包
lock
..
13.網(wǎng)絡(luò)
Java 中也是提供了可以直接操作 TCP協(xié)議磅甩、UDP協(xié)議的API炊林。在需要強調(diào)網(wǎng)絡(luò)性能的情況下,可以直接使用Socket通過TCP/UDP 進(jìn)行通訊卷要。在查看Tomcat等的源碼中渣聚,就可以看到這些相關(guān)API的使用情況独榴。不過一般也比較少會直接使用TCP,會使用諸如MINA奕枝、Netty這樣 的框架來進(jìn)行處理棺榔,因為這個方面的開發(fā)涉及不多,所以就不再詳細(xì)羅列了隘道。
14.時間日期處理
幾乎對于每個應(yīng)用來說症歇,時間日期的處理也是繞不過去的,但是JDK8 之前的時間相關(guān)API用法并不友好薄声。在那個時代当船,可以選擇Joda等時間框架。到了JDK8 發(fā)布之后默辨,全新的時間API基本融合了其他框架的優(yōu)點德频,已經(jīng)可以很好的直接使用了。
對于Java開發(fā)者來說缩幸,需要熟練地使用API來對時間和日期做相關(guān)的處理壹置。
具體知識點不再羅列,會在以后再寫個專門的文章來總結(jié)一下JDK8中時間日期API的用法表谊。
15.XML解析/ JSON解析
其實這兩塊內(nèi)容都不是J2SE里面的內(nèi)容钞护,但是在日常開發(fā)中,和其他程序交互爆办,和配置文件交互难咕,越來越離不開這兩種格式的解析。
不過對于一個開發(fā)者來說距辆,能夠了解一些XML/JSON具體解析的原理和方法余佃,有助于你在各個具體的場景中更好的選擇合適你的方式來使得你的程序更有效率和更加健壯。
XML: 需要了解 DOM解析和 SAX解析的基本原理和各自的適用場景
JSON: 需要了解一些常用JSON框架的用法跨算, 如 Jackson爆土, FastJson, Gson 等诸蚕。
16.反射技術(shù)
提供動態(tài)創(chuàng)建實例步势、動態(tài)調(diào)用方法的神器,各大框架所鐘 愛背犯。
17.Maven或gradle的使用
Maven 也不是Java里面的內(nèi)容坏瘩,但是maven是革命性的,給java開發(fā)帶來了巨大的便利漠魏。從依賴的引入和管理桑腮,開發(fā)流程的更新和發(fā)布產(chǎn)出,乃至版本的更 新蛉幸,使用maven可以大大簡化開發(fā)過程中的復(fù)雜度破讨,從而節(jié)省大量時間∞热遥可以說提陶,maven已經(jīng)成為java開發(fā)者的標(biāo)配了。所以我把maven也作為一 個java開發(fā)者對于基礎(chǔ)必備的知識點匹层。以后會再放上一些我的一些對于maven使用的經(jīng)驗和技巧等隙笆,這里就不再細(xì)說了。至于gradle則是后起之秀升筏。
18.泛型
這是JDK5開始引入的新概念撑柔,其實是個語法糖,在編寫java代碼時會有些許便利您访, 一般的應(yīng)用或者是業(yè)務(wù)的開發(fā)铅忿,只需要簡單使用,不一定會用到定義泛型這樣的操作灵汪, 但是開發(fā)一些基礎(chǔ)公共組件會使用到檀训,可以在需要的時候再細(xì)看這個部分,一般情況下只要會簡單使用即可享言。
19.標(biāo)注
也是jdk5 之后引入的峻凫。Spring是個優(yōu)秀的框架,最開始就以xml作為標(biāo)準(zhǔn)的配置文件览露。不過到了Spring3 之后荧琼,尤其是 spring-boot 興起之后,越來越推崇使用標(biāo)注來簡化xml配置文件了差牛,對于開發(fā)者來說命锄,可以節(jié)省不少xml配置的時間。但是劣勢是在于標(biāo)注散落在各個類中多糠,不像xml累舷, 可以對所有配置有個全局性的理解和管理,所以還沒有辦法說完全就取代所有的xml夹孔。對于一般開發(fā)者被盈,會使用標(biāo)注即可,一些公共組建的開發(fā)者可能會需要了解 標(biāo)注的定義和實現(xiàn)搭伤,可以在具體需要的時候再細(xì)看只怎。
20. JVM相關(guān)(包括了各個版本的特性)
對于剛剛接觸Java的人來說,JVM相關(guān)的知識不一定需要理解很深怜俐,對此里面的概念有一些簡單的了解即可身堡。不過對于一個有著3年以上Java經(jīng)驗的資深開發(fā)者來說,不會JVM幾乎是不可接受的拍鲤。
JVM作為java運行的基礎(chǔ)贴谎,很難相信對于JVM一點都不了解的人可以把java語言吃得很透汞扎。我在面試有超過3年Java經(jīng)驗的開發(fā)者的時候, JVM幾乎就是一個必問的問題了擅这。當(dāng)然JVM不是唯一決定技術(shù)能力好壞的面試問題澈魄,但是可以佐證java開發(fā)能力的高低。
在JVM這個大類中仲翎,我認(rèn)為需要掌握的知識有:
JVM內(nèi)存模型和結(jié)構(gòu)
GC原理痹扇,性能調(diào)優(yōu)
調(diào)優(yōu):Thread Dump, 分析內(nèi)存結(jié)構(gòu)
class 二進(jìn)制字節(jié)碼結(jié)構(gòu)溯香, class loader 體系 鲫构, class加載過程 , 實例創(chuàng)建過程
方法執(zhí)行過程:Java各個大版本更新提供的新特性(需要簡單了解)
小編推薦一個學(xué)Java的學(xué)習(xí)裙【 六五零玫坛,五五四结笨,六零七 】,無論你是大牛還是小白昂秃,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)禀梳!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享肠骆!
總結(jié):
人這一輩子沒法做太多的事情算途,所以每一件都要做得精彩絕倫。
你的時間有限蚀腿,所以不要為別人而活嘴瓤。不要被教條所限,不要活在別人的觀念里莉钙。不要讓別人的意見左右自己內(nèi)心的聲音廓脆。
最重要的是,勇敢的去追隨自己的心靈和直覺磁玉,只有自己的心靈和直覺才知道你自己的真實想法停忿,其他一切都是次要。