前言
沒(méi)有對(duì)比就沒(méi)有傷害,沒(méi)有傷害就沒(méi)有上進(jìn)心!
本文的出發(fā)點(diǎn)主要有以下兩條:
- 讓大家通過(guò)對(duì)比能力模型,發(fā)現(xiàn)自己的不足;
- 知道自己的不足后,提供一條學(xué)習(xí)的路線建議。
如果不害怕暴擊10000000+的傷害,就請(qǐng)繼續(xù)往下。。。
1年
一年經(jīng)驗(yàn)還是職場(chǎng)菜鳥,你的立身之本就是扎實(shí)的基礎(chǔ)知識(shí),這也是你以后能走多遠(yuǎn)、走多快的保證。
--能力要求
- 數(shù)據(jù)結(jié)構(gòu)與算法:一般對(duì)應(yīng)屆生的要求就是數(shù)據(jù)結(jié)構(gòu)和算法的原理基本都理解,數(shù)據(jù)結(jié)構(gòu)包括:數(shù)組、鏈表、棧、隊(duì)列、樹、圖;算法包括:插入排序、快速排序、堆排序、廣度優(yōu)先、深度優(yōu)先等。
所以工作一年后,就會(huì)要求對(duì)這些理論的東西在java語(yǔ)言中能一一對(duì)應(yīng)起來(lái),在實(shí)踐應(yīng)用中能應(yīng)對(duì)自如; - 并發(fā)編程:理解concurrent包的用法,了解CAS、AQS的基本原理,熟悉線程池用法;
- IO:熟悉IO包的用法,理解BIO、NIO線程模型的區(qū)別和使用場(chǎng)景;
--學(xué)習(xí)建議
這個(gè)階段,有兩本書一定要啃下來(lái)的(這里說(shuō)的啃,可不是讀):《java數(shù)據(jù)結(jié)構(gòu)和算法》、《java編程思想》
--面試模擬
比如,面試官先問(wèn)你HashMap中插入一條數(shù)據(jù)的過(guò)程是怎么樣的?
你估計(jì)會(huì)回答,HashMap底層是用數(shù)組來(lái)存儲(chǔ)鍵值對(duì),先對(duì)key做hash,然后根據(jù)hash值確定數(shù)組的下標(biāo),存入數(shù)據(jù)。那面試官就會(huì)繼續(xù)問(wèn)你,如果該下標(biāo)處已經(jīng)有數(shù)據(jù),怎么辦?
你如果這個(gè)時(shí)候說(shuō)不知道的話,那這個(gè)問(wèn)題就到此結(jié)束了。如果你說(shuō)和已經(jīng)存在的數(shù)據(jù)通過(guò)鏈表方式放到一起。
那么面試官接下來(lái)就可能會(huì)問(wèn)你,除了鏈地址法,還有沒(méi)有其他方法?
如果你回答不上來(lái),那么到此為止。如果你依然回答上來(lái)了,那么面試官還會(huì)繼續(xù)問(wèn)你,你覺(jué)得它們兩個(gè)各有什么優(yōu)缺點(diǎn)?
如果你依然可以回答的話,那么面試官會(huì)繼續(xù)問(wèn)你,你覺(jué)得還有沒(méi)有比它更好或者更高效的實(shí)現(xiàn)方式?
如果你還能說(shuō)出來(lái)的話,那么就你所說(shuō)的實(shí)現(xiàn)方式肯定依然可以問(wèn)你很多問(wèn)題。
3年
如果在其他行業(yè),3年可能也就是個(gè)稍微高級(jí)點(diǎn)的菜鳥,但是在軟件開發(fā)行業(yè),3年已經(jīng)可以算是碼代碼的主力軍了,這個(gè)階段要求你不僅更深入了解前面的基礎(chǔ),還要求對(duì)各種框架原理、設(shè)計(jì)模式廣有涉獵。
--能力要求
- Java虛擬機(jī):主要包括三部分:GC、類加載機(jī)制、和內(nèi)存模型;
- 設(shè)計(jì)模式:四人幫搞出來(lái)的那一套基本都要能熟練掌握;
- 框架:結(jié)合設(shè)計(jì)模式熟悉springMVC、spring、mybatis等框架的實(shí)現(xiàn)原理;
--學(xué)習(xí)建議
同樣有兩本書要堅(jiān)持啃下來(lái):《深入理解Java虛擬機(jī)》、《Head First Design Patterns》;上面那三個(gè)框架的核心流程的源碼也是一定要熟悉的,這個(gè)熟悉過(guò)程和設(shè)計(jì)模式的學(xué)習(xí)可以相互對(duì)照。
這個(gè)階段啃下來(lái),對(duì)并發(fā)編程、IO線程模型就會(huì)有更深入的理解了。
同時(shí),可以根據(jù)這些框架的設(shè)計(jì)思想,自己去重復(fù)的造造輪子了。
--面試模擬
比如,面試官首先問(wèn)你內(nèi)存分為哪幾部分,這些部分分別都存儲(chǔ)哪些數(shù)據(jù)?
然后繼續(xù)問(wèn)你一個(gè)對(duì)象從創(chuàng)建到銷毀都是怎么在這些部分里存活和轉(zhuǎn)移的?
接著可能會(huì)問(wèn)你,內(nèi)存的哪些部分會(huì)參與GC的回收?
完事以后,可能還會(huì)問(wèn)你Java的內(nèi)存模型是怎么設(shè)計(jì)的?
你回答了以后,還會(huì)繼續(xù)問(wèn)你為什么要這么設(shè)計(jì)?
問(wèn)完以后,還可能會(huì)讓你結(jié)合內(nèi)存模型的設(shè)計(jì)談?wù)剉olatile關(guān)鍵字的作用?
你在談的時(shí)候,肯定會(huì)提到可見性,那么接著可見性這三個(gè)字,還可以繼續(xù)問(wèn)你并發(fā)的內(nèi)容。
5年
5年是開發(fā)人員的一個(gè)大門檻,到這個(gè)時(shí)期就要考慮個(gè)人往后的發(fā)展路線了,是繼續(xù)深入技術(shù),還是轉(zhuǎn)向管理。當(dāng)然對(duì)系統(tǒng)的全局把握能力是能跨過(guò)這個(gè)門檻的硬指標(biāo)。這里就只講技術(shù)發(fā)展的路線。
--能力要求
- 系統(tǒng)規(guī)劃能力:熟悉主流框架的特點(diǎn)和適合場(chǎng)景,能根據(jù)業(yè)務(wù)特點(diǎn)架構(gòu)起一套系統(tǒng)框架出來(lái),這個(gè)框架不僅僅是讓業(yè)務(wù)正常運(yùn)轉(zhuǎn)的框架,還要包括持續(xù)集成、自動(dòng)化測(cè)試、運(yùn)維、監(jiān)控、告警等等一套完整的體系;
- 性能調(diào)優(yōu)能力:虛擬機(jī)調(diào)優(yōu)、中間件調(diào)優(yōu)、數(shù)據(jù)庫(kù)調(diào)優(yōu)等;
- 領(lǐng)導(dǎo)力:逐漸建立在團(tuán)隊(duì)中的影響力;
--學(xué)習(xí)建議
- 深入了解各大開源框架的實(shí)現(xiàn)原理,做到按需選用,要快速的知道一個(gè)框架的優(yōu)缺點(diǎn),適不適合自己的業(yè)務(wù)場(chǎng)景,就需要前面深厚的基礎(chǔ)了。
- 熟悉大型互聯(lián)網(wǎng)系統(tǒng)架構(gòu)的高并發(fā)、高可靠、伸縮性、可維護(hù)、安全等各個(gè)方面,學(xué)習(xí)BAT的成功經(jīng)驗(yàn);
- 在持續(xù)集成、自動(dòng)化測(cè)試、運(yùn)維、監(jiān)控、告警等方面,打造一套成熟的方法論;
也推薦幾本書吧:《大型分布式網(wǎng)站架構(gòu)設(shè)計(jì)與實(shí)踐》、《深入分析Java Web技術(shù)內(nèi)幕》、《軟件架構(gòu)設(shè)計(jì)》、《Java并發(fā)編程實(shí)戰(zhàn)》、《Effective Java中文版》
--面試模擬
到這個(gè)階段,已經(jīng)沒(méi)有什么套路可言,就是根據(jù)以往的項(xiàng)目進(jìn)行詢問(wèn)。作為被面試人,要提前準(zhǔn)備好項(xiàng)目亮點(diǎn),并引導(dǎo)面試官在這些亮點(diǎn)上深入交流。如果沒(méi)有什么亮點(diǎn)的話,面試官可能禮貌性的問(wèn)點(diǎn)框架原理問(wèn)題,就over了。
總結(jié)
這段時(shí)間面試了不少開發(fā)人員,有不少工作可能六七年了,但真實(shí)水平還處于一年那個(gè)階段,關(guān)鍵自己對(duì)此還沒(méi)有一個(gè)清晰的認(rèn)識(shí),這里算是稍做總結(jié),給準(zhǔn)備換工作的人一個(gè)參考吧。
注 以上只描述了java相關(guān)的部分,并沒(méi)有涉及到項(xiàng)目管理工具、數(shù)據(jù)庫(kù)、前臺(tái)界面開發(fā),這些內(nèi)容可能很多java崗位也是需要考察的