你認(rèn)為java還會火多少年?
首先Java還能火多少年,這個誰也說不準(zhǔn),可以通過下面幾部分先分析一下:
Java市場需求大。在所有軟件開發(fā)類人才的需求中,對Java工程師的需求達(dá)到全部需求量的60~70%。
Java行業(yè)發(fā)展好。根據(jù)TIOB
怎么在面試時回答Java垃圾回收機制(GC)相關(guān)問題?
怎么在面試時回答Java垃圾回收機制(GC)相關(guān)問題
1、筆試、面試去評價一個人肯定是不夠準(zhǔn)確的,了解一個人最準(zhǔn)確的就是“路遙知馬力,日久見人心”。通過一、二個小時內(nèi)的做題、交流,只是沒有其他辦法下進(jìn)行的無奈之舉,所以通過了面試不代表有多成功,沒通過也不代表有多失敗。
2、好的面試官本身交談的時候就不應(yīng)當(dāng)把自己一個居高臨下的角色上,應(yīng)當(dāng)把自己和者當(dāng)做兩個做技術(shù)的人平等的交流,把自己當(dāng)作權(quán)威往往就會受到觀點的角度、語言表達(dá)、工作領(lǐng)域的慣性的制約。
3、好的考察題目則是大家能經(jīng)常接觸,不同層次的人能有不同層次的答案,能從問題引申出后面繼續(xù)討論的話題。
舉個例子拋磚引玉,
“地球人都知道,Java有個東西叫垃圾收集器,它讓創(chuàng)建的對象不需要像c/cpp那樣delete、free掉,你能不能談?wù)劊珿C是在什么時候,對什么東西,做了什么事情?”
我自己分析一下這個問題,首先是“什么時候”,不同層次的回答從低到高排列:
1.系統(tǒng)空閑的時候。
分析:這種回答大約占30%,遇到的話一般我就會準(zhǔn)備轉(zhuǎn)向別的話題,譬如算法、譬如SSH看看能否發(fā)掘一些他擅長的其他方面。
2.系統(tǒng)自身決定,不可預(yù)測的時間/調(diào)用System.gc()的時候。
分析:這種回答大約占55%,大部分應(yīng)屆生都能回答到這個答案,起碼不能算錯誤是吧,后續(xù)應(yīng)當(dāng)細(xì)分一下到底是語言表述導(dǎo)致答案太籠統(tǒng),還是本身就只有這樣一個模糊的認(rèn)識。
3.能說出新生代、老年代結(jié)構(gòu),能提出minorgc/fullgc
分析:到了這個層次,基本上能說對GC運作有概念上的了解,譬如看過《深入JVM虛擬機》之類的。這部分不足10%。
4.能說明minorgc/fullgc的觸發(fā)條件、OOM的觸發(fā)條件,降低GC的調(diào)優(yōu)的策略。
分析:列舉一些我期望的回答:eden滿了minorgc,升到老年代的對象大于老年代剩余空間fullgc,或者小于時被HandlePromotionFailure參數(shù)強制fullgc;gc與非gc時間耗時超過了GCTimeRatio的限制引發(fā)OOM,調(diào)優(yōu)諸如通過NewRatio控制新生代老年代比例,通過MaxTenuringThreshold控制進(jìn)入老年前生存次數(shù)等……能回答道這個階段就會給我?guī)肀容^高的期望了,當(dāng)然面試的時候正常人都不會記得每個參數(shù)的拼寫,我自己寫這段話的時候也是翻過手冊的。回答道這部分的小于2%。
PS:加起來不到100%,是因為有確實少數(shù)直接說不知道,或者直接拒絕回答的#
分析第二個問題:“對什么東西”:
1.不使用的對象。
分析:相當(dāng)于沒有回答,問題就是在問什么對象才是“不使用的對象”。大約占30%。
2.超出作用域的對象/引用計數(shù)為空的對象。
分析:這2個回答站了60%,相當(dāng)高的比例,估計學(xué)校教java的時候老師就是這樣教的。第一個回答沒有解決我的疑問,gc到底怎么判斷哪些對象在不在作用域的?至于引用計數(shù)來判斷對象是否可收集的,我可以會補充一個下面這個例子讓面試者分析一下obj1、obj2是否會被GC掉?
classC{
publicObjectx
}
Cobj1、obj2newC()
obj1.xobj2
obj2.xobj1
obj1、obj2null
3.從gcroot開始搜索,搜索不到的對象。
分析:根對象查找、標(biāo)記已經(jīng)算是不錯了,小于5%的人可以回答道這步,估計是引用計數(shù)的太“深入民心”了。基本可以得到這個問題全部分?jǐn)?shù)。
PS:有面試者在這個問補充強引用、弱引用、軟引用、幻影引用區(qū)別等,不是我想問的答案,但可以加分。
4.從root搜索不到,而且經(jīng)過第一次標(biāo)記、清理后,仍然沒有復(fù)活的對象。
分析:我期待的答案。但是的確很少面試者會回答到這一點,所以在我心中回答道第3點我就給全部分?jǐn)?shù)。
最后由一個問題:“做什么事情”,這個問發(fā)揮的空間就太大了,不同年代、不同收集器的動作非常多。
1.刪除不使用的對象,騰出內(nèi)存空間。分析:同問題2第一點。40%。2.補充一些諸如停止其他線程執(zhí)行、運行finaliz《深入JVM虛擬機》的基本都能回答道這個程度,其實到這個程度我已經(jīng)比較期待了。同樣小于10%。4.除了3外,還能講清楚串行、并行(整理/不整理碎片)、CMS等搜集器可作用的年代、特點、優(yōu)劣勢,并且能說明控制/調(diào)整收集器選擇的。分析:同上面2個問題的第四點。