一篇文章教會你,如何做到簡歷中要求的“要有紮實的Java基礎

本文來自於一次和羣裏猿友的交流,具體的情況且聽LZ慢慢道來。

  一日,LZ在羣裏發話,“招人啦。”

  然某羣友曰,“羣主,俺想去。”

  LZ回之,“你年幾何?”

  羣友曰,“兩年也。”

  LZ憾言之,“惜了,三至五爲佳。然如汝有紮實之基礎,且附一技之長,倒也並非不可呀。”

  羣友惑,問之,“何爲一技之長?”

  LZ撫須答曰,“皆可,吾之一技即爲寫。”

  羣友又問之,“何爲基礎紮實?”

  LZ撫**答曰,“玩好JDK!”

  

引言

  

  好了,LZ終於特麼可以說人話了,請原諒LZ的文言文不好,這逼裝的好累。其實很多人對於公司的招聘要求中寫的,要有“紮實的Java基礎”,都很迷茫。

  這特麼到底啥意思?什麼東西算作Java基礎?學到什麼程度纔算紮實?

  這些問題的答案,LZ已經用文言文告訴你了,咳咳,答案就是玩好JDK就可以了。

  不過JDK這東西包含的東西實在太多,羣裏的猿友還是拎不清到底應該學哪個,所以,LZ就專門寫一篇文章,來講一講JDK應該怎麼玩。

  或許有的猿友會問,“林蕭是誰?”

  恩,問得好!林蕭就是某程序員小說的主角啦,傳言無所不知,看看你就知道咯。

  

玩好JDK

  

  在詳細講解JDK之前,LZ首先要強調下,本文的內容,都是LZ個人的主觀判斷。因此,各位猿友務必結合自己的判斷之後,再決定是否要學習,以及學習到什麼程度。

  此外,本文只是告訴你學什麼,學到什麼程度,本文不會包含太多具體的技術細節講解。

  JDK其實就是Java SE Development Kit的縮寫,要玩好這東西可不簡單。JDK主要包含了三部分,第一部分就是Java運行時環境,這其實就是JVM。此外,第二部分就是Java的基礎類庫,這個類庫的數量還是非常可觀的。最後,第三部分就是Java的開發工具,它們都是輔助你更好的使用Java的利器。

  那麼很顯然,要玩好JDK,就是要玩好JDK的這三部分。接下來,咱們就逐個的來說一下,每一個部分要學什麼,學到什麼程度。

 

  第一部分:Java運行時環境

  這一部分其實就是常說的jre,而它的核心其實就一個東西,就是JVM。

  JVM這個東西,它的重要性LZ不想再強調了,在之前的那篇《回答阿里社招面試如何準備,順便談談對於Java程序猿學習當中各個階段的建議》中,LZ就說過,JVM那本書甚至比《Thinking in java》還重要,這已經足見LZ多麼看重JVM了。

  當然了,只是LZ看重,當然沒什麼卵用,但只要Java稍微高級一點點的職位,這部分基本上都是面試必問內容,這更加說明了JVM的重要性。

  所以,對於JVM,沒什麼可說的,就是往死裏學,往死裏研究,能有多深就多深!

 

  第二部分:Java的基礎類庫

  Java的基礎類庫從你剛開始學Java就開始接觸了,但是,直到你結束整個Java生涯,你都不一定能把所有的類都見一遍。

  這說明了什麼?是不是說明了Java基礎類庫的龐大?

  錯!大錯特錯!這其實真正說明的是,有很多類你完全不必要care它們,因爲它們從你接觸Java到放棄,都不一定能接觸到。

  所以,搞清楚哪些類重要,哪些類不重要,就非常有必要了。這可以讓你以最短的時間,做最有價值的事。

  首先,我們來Java基礎類庫的包都有哪些,爲了使得本文更有代表性,我們取JDK6的包列表。

 View Code

  怎麼樣?是不是被嚇到了?這麼多包,而且還這麼多陌生的包名,有的連見都沒見過,這特麼怎麼玩?

  不要着急,LZ先帶你把這些包給分下級別,LZ將這些包一共分爲四個級別。

 

  第一級別:精讀源碼

  該級別包含的包如下:

java.io
java.lang
java.util

  精讀源碼,這是要求最高的級別。但是,要求你精讀源碼並不意味着,這些類就是最重要的。而是因爲,LZ覺得這些類比較常用,而且比較簡單,看看它們的源碼有助於鍛鍊你看源碼的感覺,也瞭解一下大神們寫代碼的風格。

  看這些源碼的目的,更多是爲了增加你的閱讀代碼能力。而且,LZ這裏必須要強調一下,像Exception和Error這一類的,就不用讀源碼了,親。

  其實上面三個包都有一個共同點,那就是這三個包,基本上都是你最常用的了。lang包不用說了,你隨便寫點啥都得用到,io包和util包也是你平時讀寫文件和使用數據結構必不可少的。

  看源碼從這些常用的包下手找手感,LZ個人覺得再合適不過。

 

  第二級別:深刻理解

  該級別包含的包如下:

 View Code

  深刻理解,這個看似比精讀源碼要求低的級別,其實恰恰是最重要的。這個級別要求的類,全都是一些進階到高級所必須瞭解的。

  當然了,這裏要強調一點的是,LZ說這些類要深刻理解,而沒說要看它們源碼,並不是說這些類的源碼不能看,或者看了沒用。而是這些類的源碼往往非常複雜,要了解清楚細節花費的時間是非常多的,因此,花費巨量的時間去研究這麼複雜的代碼其實沒必要的。

  不過,如果你在使用這些類的過程中,遇到了問題,這個時候如果看它們源碼可以解決的話,那就不要再矜持了,果斷看看源碼解決你的問題吧,這是最適合的看源碼的契機了。

  小小的透露一下,LZ看過的JDK源碼,基本上全是這麼看過來的。遇到了問題不要百度和谷歌,看源碼能解決你90%的問題。

  此外,看到這四個包的名字,不難看出它們各自代表了什麼。reflect代表了反射,net代表了網絡IO,nio代表了非阻塞io,concurrent代表了併發。

  這四個傢伙可以說每一個都夠面試官問上半天的,而且,這四個包的內容,如果你要深刻理解的話,其實還牽扯了很多其它的知識。

  舉個例子,反射你要了解清楚的話,你是不是要搞明白JVM的類加載機制?網絡IO要搞清楚的話,你是不是要清楚TCP/IP和HTTP、HTTPS?包括併發包,如果你要搞清楚的話,是不是要了解併發的相關知識?

  因此,這四個包要徹底搞清楚,還是需要花費一定時間和精力的。

  但是,請相信LZ,這絕對是值得的,甚至可以說,這四個包用的夠不夠叼,基本決定了一個Java程序員所處的檔次。

  

  第三級別:會用即可

  該級別包含的包如下:

複製代碼
java.lang.annotation
javax.annotation.*
java.lang.ref
java.math
java.rmi.*
javax.rmi.*
java.security.*
javax.security.*
java.sql
javax.sql.*
javax.transaction.*
java.text
javax.xml.*
org.w3c.dom.*
org.xml.sax.*
javax.crypto.*
javax.imageio.*
javax.jws.*
java.util.jar
java.util.logging
java.util.prefs
java.util.regex
java.util.zip
複製代碼

  會用即可,這個級別的要求很顯然了,就是會用就可以了。這些包大部分都是在特定的情況下會用到,但卻不會時刻用到。

  就像sql包和transaction包,就是操作數據庫時用到的。而xml、dom和sax這些,都是操作xml時用到的。其它的包也都是類似的,有使用註解時用的,有遠程方法調用時用的,也有涉及到加密時用到的等等。

  這些包在面試時一般不會問到,所以它們的重要性自然要低很多,而且也不太需要刻意的去學,用到了研究一下,會用即可。

  

  第四級別:請無視它

  該級別包含了所有以上沒有提到的包。

  這個級別就更不用解釋了,到現在還沒提到的包,基本上可以忽略,因爲你基本上不太可能用到它們,比如swing、awt這些玩意兒。

  什麼?你說你經常用它們?

  如果真的是這樣的話,那麼LZ只能遺憾的告訴你,趕緊跳槽吧,你待在這公司沒啥前途的,0-0。

  

  第三部分:Java的開發工具

  這些開發工具主要就是輔助你開發的了,javac應該是最常用的一個了,雖然你幾乎不用手動執行它。

  此外,其實還有一些比較實用的工具,可以幫助你排查問題。而且有的面試官,也會問你這類問題,比如問你平時都用什麼工具排查問題。

  LZ覺得比較實用的幾個工具主要有jmap、jconsole、jstack、jvisualvm,至於這幾個工具有什麼作用,LZ這裏就不提了,如果你要了解這些命令的詳細內容,可以去谷歌或者官網上找,還是非常好找的。

  當然,如果你有興趣的話,也可以自己去JDK的bin目錄下找找,看有沒有什麼更好玩的工具。

  

小結

  

  好了,到這裏基本上就把“玩好JDK”這件事說完了。

  總的來說,第一級別和第二級別是最重要的。

  更簡單的說,可以把第一級別的那些包稱作基礎,第二級別的那些包稱爲進階。至於第三級別和第四級別的那些包,就沒什麼可說的了。

  當然了,最重要的還是那萬年不變的JVM,請記住了,JVM纔是你Java根基的根本,就是再牛逼的類,沒了JVM它也就是一個無用的class文件而已。

  如果你想擁有紮實的Java基礎,那就抓緊玩好JDK吧。玩好JDK以後,不要忘了學個一技之長,就可以來LZ的公司面試咯。

  嗯,這波招聘廣告插入的,很隱晦,沒毛病,0-0。

  下期咱們屌程見了,各位!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章