一、工具
- 你一定要熟練一款操作系統(tǒng),一款Java開發(fā)工具,一款瀏覽器,Bug分析工具,性能分析工具等。
- 對(duì)于操作系統(tǒng)而言,我建議你用Mac,因?yàn)樗穷怳nix系統(tǒng),方便你熟悉Linux命令,因?yàn)槟闼_發(fā)的Java項(xiàng)目,95%以上都是跑在Linux上面,這樣面試的時(shí)候,也不至于面試官問(wèn)你幾個(gè)常見(jiàn)的命令而不知所云。
- 對(duì)于Java開發(fā)工具而言,我建議使用IDEA,原因很簡(jiǎn)單,想比于其它工具而言,它會(huì)更懂你。
- 對(duì)于瀏覽器而言,毫無(wú)爭(zhēng)議的建議你用Chrome。
- 對(duì)于bug分析工具而言,太多了,有Java自帶的jdb、jinfo、jps、jstack、jmap、jstat、jconsole、jvisualvm等,也有商用JProfiler,還有動(dòng)態(tài)跟蹤的btrace等。
- 對(duì)于性能分析工具,我建議你掌握兩款ab和jmeter足矣。
二、Java基礎(chǔ)
- 作為一名Java程序員,你一定要對(duì)Java語(yǔ)言掌握的非常熟悉,熟悉到常見(jiàn)類的用法,在什么樣的環(huán)境應(yīng)該用什么樣的類,以及要明白為什么要這么用。
- 比如Java的數(shù)據(jù)結(jié)構(gòu),字符串、數(shù)組、List、Set、Map等。你要明白這些結(jié)構(gòu)的用法,那些適合用在并發(fā)的環(huán)境,那些又不適合,如果誤用了會(huì)產(chǎn)生什么樣的后果。
- 并發(fā)也你必須了解的,其實(shí)并發(fā)說(shuō)白了,就是Java用來(lái)解決內(nèi)存的可見(jiàn)性和程序執(zhí)行的可見(jiàn)性。即volatile關(guān)鍵字、synchronize關(guān)鍵字,以及在它們基礎(chǔ)上衍生出來(lái)的AQS和原子變量類,又在它們之上繼續(xù)產(chǎn)生的Lock、同步器、阻塞隊(duì)列、Executor、并發(fā)容器,以及一些開源的調(diào)度框架springtask、quartz。
- JVM常問(wèn),如果你經(jīng)常寫業(yè)務(wù),會(huì)很少接觸,但是面試官會(huì)常問(wèn),所以你需要掌握,比如它的內(nèi)存模型,每個(gè)區(qū)該干什么?一個(gè)字節(jié)碼類的結(jié)構(gòu)是怎么樣的?有哪些常見(jiàn)的回收器,以及那些常見(jiàn)的垃圾收集算法?一個(gè)類的加載過(guò)程又是怎樣的?JVM做了那些編譯優(yōu)化?有那些語(yǔ)法糖?等等
- 最近,JDK11馬上又要發(fā)布了,那么JDK8你應(yīng)該要了解一下吧,它的那些新特性你用過(guò)沒(méi)?
上面的這些就是所謂的基礎(chǔ),你可以試著反問(wèn)一下自己是不是應(yīng)該掌握呢?
三、熟悉一個(gè)領(lǐng)域
- 既然工作了三年,那么大大小小的項(xiàng)目,相信你肯定做了不少,那么你至少應(yīng)該擅長(zhǎng)一個(gè)領(lǐng)域。比如緩存、數(shù)據(jù)庫(kù)、分布式框架、一些常見(jiàn)的組件。
- 對(duì)于緩存而言,你要理解memchache和redis中的一個(gè),比如什么是一致性hash?redis線上你遇到過(guò)的什么問(wèn)題,你又是怎么解決的?
- 對(duì)于數(shù)據(jù)庫(kù)而言,大多數(shù)互聯(lián)網(wǎng)公司都是用的MySQL,因此,你需要對(duì)它特別熟悉,面試官的一個(gè)查詢需求,你能快速的轉(zhuǎn)換成SQL語(yǔ)句。什么是最左原則?怎么建立索引才能提高命中率?如果出現(xiàn)慢查詢又該怎么分析問(wèn)題?每種存儲(chǔ)引擎的數(shù)據(jù)結(jié)構(gòu)又是怎么樣的?什么情況下會(huì)出現(xiàn)死鎖?事務(wù)又是怎么回事?等等
- 對(duì)于分布式框架而言,有的用dubbo,有的用springcloud,無(wú)論你用什么,它們的最核心的東西基本一樣,都有注冊(cè)中心、服務(wù)端、消費(fèi)端以及監(jiān)控中心。因此,你要把它們理解清楚。
- 一些常見(jiàn)的組件,比如Mybatis、Guava、Common包等等,你得知道它的常見(jiàn)用法,以及這些用法的背后實(shí)現(xiàn)原理。
總結(jié)一下,對(duì)于三年的Java程序員而言,一和二必須掌握,三選擇一個(gè)感興趣的方向深入研究。