如何做到招聘要求中的「要有紮實的 Java 基礎」

左瀟龍發表於2016-10-20

來歷

本文來自於一次和群裡猿友的交流,具體的情況且聽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的包列表。

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

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

第一級別:精讀原始碼

該級別包含的包如下:

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

看這些原始碼的目的,更多是為了增加你的閱讀程式碼能力。而且,LZ這裡必須要強調一下,像Exception和Error這一類的,就不用讀原始碼了,親。

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

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

第二級別:深刻理解

該級別包含的包如下:

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

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

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

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

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

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

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

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

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

第三級別:會用即可

該級別包含的包如下:

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

就像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。

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

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

如何做到招聘要求中的「要有紮實的 Java 基礎」 如何做到招聘要求中的「要有紮實的 Java 基礎」

相關文章