假如你準(zhǔn)備在金三銀四跳槽的話,那么作為一個(gè)Java工程師,應(yīng)該如何利用1個(gè)月的時(shí)間,快速為即將到來(lái)的面試進(jìn)行充分的準(zhǔn)備呢?
總結(jié)起來(lái),面試官考察候選人的時(shí)候主要是從技術(shù)廣度、技術(shù)深度、基礎(chǔ)功底、系統(tǒng)設(shè)計(jì)、項(xiàng)目經(jīng)驗(yàn)幾個(gè)角度來(lái)進(jìn)行的。
本文就針對(duì)每一塊內(nèi)容,具體說(shuō)一下面試的考察點(diǎn),更重要的是針對(duì)考察的這些點(diǎn),如何來(lái)快速的進(jìn)行準(zhǔn)備。
一、技術(shù)廣度
技術(shù)廣度,顧名思義,作為一個(gè)合格的工程師,在開(kāi)發(fā)一個(gè)系統(tǒng),完成一些具體的技術(shù)任務(wù)時(shí),必然要使用到很多的技術(shù),而且針對(duì)這些技術(shù)還需要掌握一些常見(jiàn),各種不同的系統(tǒng)可能會(huì)涉及到的一些技術(shù)架構(gòu)/技術(shù)方案。
舉個(gè)例子,一個(gè)互聯(lián)網(wǎng)公司比較重要的系統(tǒng),首先肯定會(huì)用到分布式服務(wù)框架,比如dubbo/spring cloud,這樣可以將系統(tǒng)拆分為分布式的架構(gòu),或者說(shuō)現(xiàn)在很流行的說(shuō)法是微服務(wù)架構(gòu),這樣每個(gè)人負(fù)責(zé)一個(gè)服務(wù)或者是一個(gè)子系統(tǒng)。
接著這個(gè)系統(tǒng)很可能為了支撐一些特殊的技術(shù)場(chǎng)景會(huì)用到其他各種技術(shù)。
常見(jiàn)的比如說(shuō)為了應(yīng)對(duì)高并發(fā)的讀會(huì)用到Redis緩存技術(shù),為了做系統(tǒng)異步調(diào)用會(huì)用到RocketMQ技術(shù),為了支撐大數(shù)據(jù)量的高性能檢索會(huì)用到Elasticsearch技術(shù),等等。
那么假如這個(gè)互聯(lián)網(wǎng)公司在招聘Java工程師的時(shí)候,他的招聘要求是什么?
是不是必須得要求候選人起碼在dubbo、Redis、RocketMQ、Elasticsearch等多個(gè)技術(shù)領(lǐng)域,都有實(shí)際的生產(chǎn)項(xiàng)目使用經(jīng)驗(yàn),而且還對(duì)這些技術(shù)的各種特性以及落地項(xiàng)目的時(shí)候常見(jiàn)的技術(shù)架構(gòu)/方案都比較熟悉,這樣招聘這個(gè)人進(jìn)來(lái)之后才能上手立馬干活。
要求一個(gè)候選人對(duì)各種常見(jiàn)的技術(shù)以及相關(guān)架構(gòu)都有實(shí)際的項(xiàng)目經(jīng)驗(yàn)以及對(duì)技術(shù)本身也足夠熟悉,這就是所謂的技術(shù)廣度,站在招聘候選人的角度來(lái)分析一下,想必大家就理解這個(gè)“技術(shù)廣度”考察項(xiàng)了。
實(shí)際上技術(shù)廣度這個(gè)東西,都說(shuō)了是技術(shù)廣度了,所以肯定不僅僅只是上面提到的那點(diǎn)東西。
實(shí)際上,一個(gè)合格的適合互聯(lián)網(wǎng)公司的工程師在技術(shù)廣度上,還需要掌握其他很多東西。
比如分布式事務(wù)、微服務(wù)架構(gòu)、分布式鎖、性能優(yōu)化、Java虛擬機(jī)優(yōu)化、Web Server優(yōu)化、數(shù)據(jù)庫(kù)優(yōu)化,等等。
越是大型的互聯(lián)網(wǎng)公司,就越是會(huì)針對(duì)技術(shù)廣度這塊,考察的可能會(huì)越廣泛,要求更高一些。
二、技術(shù)廣度的快速準(zhǔn)備
這個(gè)問(wèn)題,我們分成兩種情況來(lái)說(shuō)。
假如說(shuō)你平時(shí)就很勤奮很努力,過(guò)去幾年一直在不停學(xué)習(xí)。那么恭喜你,這塊東西百分百難不住你,因?yàn)槟氵^(guò)去幾年持續(xù)的學(xué)習(xí),可能已經(jīng)把技術(shù)廣度的每個(gè)點(diǎn)的一些東西都研究過(guò),而且或多或少都有一些使用的經(jīng)驗(yàn)。
對(duì)于你學(xué)習(xí)過(guò)或者實(shí)踐過(guò)的東西,你肯定都記錄了一些筆記。你最好的準(zhǔn)備方式,就是快速回顧自己的筆記,把各種常見(jiàn)技術(shù)的核心原理和項(xiàng)目實(shí)踐都通過(guò)筆記回顧的方式快速回憶起來(lái),在大腦里形成一個(gè)知識(shí)網(wǎng)絡(luò)。
如果你是一個(gè)不那么勤奮的工程師,或者是一個(gè)工作才兩三年,涉世未深的小年輕,此時(shí)怎么辦呢?
那也沒(méi)關(guān)系,記住一句老話:臨陣磨槍,不快也光。你雖然沒(méi)啥積累,但是你都要面試了,怎么著也得臨陣突擊一下吧。
下面就是要教你的方法:你可以自己把技術(shù)廣度可能涉及到的各種點(diǎn)都羅列出來(lái),然后上網(wǎng)百度一下各個(gè)技術(shù)點(diǎn)常見(jiàn)的一些面試問(wèn)題,或者是基本的一些核心原理。
通過(guò)百度各個(gè)技術(shù)點(diǎn),然后從各種技術(shù)博客中快速了解一個(gè)技術(shù)的方式,短時(shí)間內(nèi)可以迅速建立起來(lái)對(duì)技術(shù)廣度中涉及到的各個(gè)點(diǎn)的一些基本認(rèn)知、核心原理,這樣在面試的時(shí)候避免一問(wèn)三不知。
當(dāng)然,大家也清楚,技術(shù)這東西是沒(méi)法速成的,你采用第二種方法來(lái)突擊,跟你第一種情況下有幾年的積累厚積薄發(fā),最后落地到面試的時(shí)候,表現(xiàn)是截然不同的,也會(huì)直接決定不同的人會(huì)進(jìn)入不同層次的公司。
第二種情況的同學(xué)可能面試的時(shí)候問(wèn)到一個(gè)問(wèn)題,就只能說(shuō)個(gè)一兩分鐘,但是第一種情況的同學(xué),功夫都在平時(shí),只要復(fù)習(xí)到位,面試的時(shí)候問(wèn)到一個(gè)問(wèn)題往往可以舉一反三,一下子給你說(shuō)個(gè)十多分鐘都可以。這就是區(qū)別所在。
不過(guò),就算你只說(shuō)一兩分鐘,總比一問(wèn)三不知,和面試官大眼瞪小眼好,對(duì)吧?
最后還是給各位強(qiáng)調(diào)一下,成功無(wú)捷徑,作為一個(gè)優(yōu)秀的技術(shù)工程師,最重要的事情是一年365天,每天都不停的學(xué)習(xí)積累,堅(jiān)持很多年。
吃得苦中苦,方為人上人,筆者早年進(jìn)行技術(shù)積累的時(shí)候,也是這樣過(guò)來(lái)的。每天晚上學(xué)習(xí)到凌晨一兩點(diǎn),周六周日全天學(xué)習(xí),堅(jiān)持了很多年。分享一個(gè)架構(gòu)師圈子:854601507,適合兩年及以上朋友交流。
只有通過(guò)幾年的積累,你才能夠厚積薄發(fā),量變產(chǎn)生質(zhì)變,菜鳥(niǎo)變成大牛。
三、技術(shù)深度
簡(jiǎn)單來(lái)說(shuō),假如你有了上面說(shuō)的技術(shù)廣度,這不能說(shuō)明你有多優(yōu)秀,僅僅只能說(shuō)滿足了面試的最基本要求,招聘進(jìn)來(lái)后立馬就可以上手干活了,沒(méi)太大的培養(yǎng)成本。
決定你未來(lái)技術(shù)的高度有多高,還有你能否成為團(tuán)隊(duì)里頂梁柱的,是你的技術(shù)深度。
技術(shù)深度,顧名思義,就是說(shuō)你對(duì)一個(gè)技術(shù)掌握的深度,舉個(gè)最簡(jiǎn)單的例子。假如你們公司的一個(gè)系統(tǒng)里用到了kafka這個(gè)技術(shù),好那么現(xiàn)在問(wèn)題來(lái)了,線上生產(chǎn)環(huán)境中,每當(dāng)高峰到來(lái)的時(shí)候,不知道為啥寫(xiě)kafka總會(huì)偶爾拋個(gè)異常出來(lái),或者是說(shuō)寫(xiě)入到kafka中的數(shù)據(jù)不知道為啥每天統(tǒng)計(jì)下來(lái)總會(huì)少一些。
線上生產(chǎn)環(huán)境遇到這種稀奇古怪的問(wèn)題的時(shí)候,往往就是團(tuán)隊(duì)里技術(shù)大牛出場(chǎng)的時(shí)候。技術(shù)大牛,一定是對(duì)各種技術(shù)都有一定深度研究的人,能否在遇到技術(shù)問(wèn)題的時(shí)候,直接從本質(zhì)和底層出發(fā),分析和定位問(wèn)題,最后帶領(lǐng)團(tuán)隊(duì)解決問(wèn)題。
比如上面說(shuō)的那些問(wèn)題,那要解決的話,首先需要一個(gè)技術(shù)大牛對(duì)kafka的源碼有過(guò)一定深度的研究,接著就是在遇到問(wèn)題的時(shí)候根據(jù)當(dāng)時(shí)的故障現(xiàn)場(chǎng)以及一些日志,結(jié)合源碼的運(yùn)行流程,來(lái)一步一步分析和定位出來(lái)問(wèn)題所在,最后可能就是通過(guò)一些kafka的參數(shù)的調(diào)整,就可以解決上述棘手的生產(chǎn)問(wèn)題。
上述描述的場(chǎng)景和能力,就是技術(shù)深度的體現(xiàn),比如說(shuō)你對(duì)某個(gè)技術(shù)有過(guò)完整的、全方位的、深入底層的源碼研究,這就已經(jīng)是常人不可及的技術(shù)深度了。
因?yàn)楹芏嗳苏f(shuō)是看過(guò)源碼,但是其實(shí)都是淺淺的看過(guò)一點(diǎn)點(diǎn),理解不太深入。
同時(shí)如果還有一些對(duì)某個(gè)技術(shù)在線上生產(chǎn)環(huán)境遇到過(guò)一些棘手問(wèn)題,通過(guò)源碼分析來(lái)解決問(wèn)題的經(jīng)驗(yàn)的,那么就是更優(yōu)秀的技術(shù)深度的體現(xiàn)。
技術(shù)深度的體現(xiàn),不一定是說(shuō)看過(guò)源碼,這只是其中一種表現(xiàn)形式而已,其他的還有,比如說(shuō)對(duì)某個(gè)特別有難度的技術(shù)場(chǎng)景,比如說(shuō)公司雙11每秒幾十萬(wàn)QPS并發(fā)請(qǐng)求下,你負(fù)責(zé)了其中支付系統(tǒng),成功應(yīng)對(duì)超高并發(fā)量。
在這個(gè)過(guò)程中,你對(duì)系統(tǒng)架構(gòu)的設(shè)計(jì),對(duì)系統(tǒng)做的大量的并發(fā)優(yōu)化、性能優(yōu)化,都可以成為你在某個(gè)技術(shù)領(lǐng)域的技術(shù)深度的體現(xiàn)。
四、技術(shù)深度的快速準(zhǔn)備
其實(shí)也很簡(jiǎn)單,分為兩種情況來(lái)討論。
如果你在過(guò)去幾年,自己就深入閱讀過(guò)大量開(kāi)源技術(shù)的源碼,在閱讀源碼的過(guò)程中,自己還把源碼的架構(gòu)圖、流程圖,手工畫(huà)了大量的圖出來(lái)。
那么此時(shí)你完全就可以把過(guò)去幾年的源碼研究筆記翻出來(lái),快速過(guò)一下,練習(xí)如何在面試現(xiàn)場(chǎng)在白板上純手工把各種技術(shù)的源碼架構(gòu)圖和流程圖現(xiàn)場(chǎng)畫(huà)出來(lái)。
或者在過(guò)去幾年,你對(duì)某個(gè)技術(shù)領(lǐng)域,針對(duì)很高的技術(shù)難度做過(guò)什么復(fù)雜的系統(tǒng),在那個(gè)技術(shù)領(lǐng)域扎下了很深的研究的話,那么此時(shí)你也可以針對(duì)過(guò)去的筆記快速的復(fù)習(xí),在面試現(xiàn)場(chǎng)一定要現(xiàn)場(chǎng)畫(huà)圖把你做過(guò)的復(fù)雜系統(tǒng)以及技術(shù)難度都說(shuō)清楚。
但是如果你過(guò)去幾年沒(méi)上述所說(shuō)的任何積累,那咋辦呢?
一般面試官在考察技術(shù)深度的時(shí)候,很可能會(huì)問(wèn)你:你對(duì)哪個(gè)技術(shù)比較熟悉一些?
遇到這個(gè)問(wèn)題的時(shí)候,希望大家頭腦清醒一些,千萬(wàn)不要腦子發(fā)熱隨便亂說(shuō),因?yàn)槟阋龊靡粋€(gè)心理準(zhǔn)備,一旦你說(shuō)出某個(gè)技術(shù)出來(lái),比如你說(shuō)你平時(shí)用dubbo用的比較多,接著面試官可能會(huì)開(kāi)啟深入源碼級(jí)別的10連擊模式。
比如說(shuō),面試官立馬就會(huì)開(kāi)始問(wèn)你對(duì)你熟悉的某個(gè)技術(shù),各種底層的機(jī)制和原理,讓你說(shuō)源碼的理解,給你出各種技術(shù)挑戰(zhàn)之下這個(gè)技術(shù)該如何應(yīng)對(duì),等等諸如此類的問(wèn)題。
我見(jiàn)過(guò)太多沒(méi)經(jīng)驗(yàn)的同學(xué)隨便說(shuō)個(gè)熟悉的技術(shù),其實(shí)他就僅僅只是會(huì)用罷了,但是一旦當(dāng)我深入提問(wèn)的時(shí)候,基本就進(jìn)入一問(wèn)十不知的情況了。
如果發(fā)生上述情況,會(huì)讓面試官對(duì)你的印象和態(tài)度極其不好,大家一定切記切記!
所以,假如你要是確實(shí)沒(méi)有過(guò)對(duì)什么技術(shù)的深入的積累,這里也教你一個(gè)臨陣磨槍的辦法:
你可以從簡(jiǎn)歷中挑選出某個(gè)你相對(duì)來(lái)說(shuō)用的比較多,熟悉一點(diǎn)點(diǎn)的技術(shù),然后直接用萬(wàn)能的百度,搜索“XX技術(shù)源碼分析”,“XX技術(shù)底層原理”。
通過(guò)幾天的時(shí)間快速的 “ 死記硬背 + 軟磨硬泡 ”,力爭(zhēng)對(duì)某個(gè)技術(shù)相對(duì)有一些稍微底層一些的理解。
這樣做,起碼在面試的時(shí)候被要求問(wèn)到一些技術(shù)深度的時(shí)候,能相對(duì)給出一些比普通工程師的回答更好一些的分析,起碼能在面試的時(shí)候,讓你拿到好點(diǎn)的offer概率會(huì)相對(duì)更大一些。
還是那句話,做,總比不做好。你能對(duì)底層做了準(zhǔn)備,有一些了解,總是要?jiǎng)龠^(guò)那些浮于表面,只會(huì)使用API的工程師吧!
同樣筆者這里要說(shuō),回歸技術(shù)的本質(zhì),對(duì)于技術(shù)深度的積累,那更是沒(méi)有任何捷徑可言,更不是幾個(gè)月可以完成突擊的。
因?yàn)檎嬉屑夹g(shù)深度的話,你可能需要花費(fèi)至少2年的時(shí)間,從底層開(kāi)始研究一些基礎(chǔ)性的技術(shù)。
在打通你的底層技術(shù)任督二脈之后,再去對(duì)常見(jiàn)的開(kāi)源技術(shù)進(jìn)行深入的源碼研究,比如說(shuō):dubbo、zookeeper、spring cloud、redis、rocketmq、elasticsearch,等等。
有了幾年的積累過(guò)后,最后你在面試的時(shí)候,技術(shù)深度的體現(xiàn),其實(shí)都是厚積薄發(fā)的。
除此之外,還需要一個(gè)系統(tǒng)的學(xué)習(xí)方法和交流經(jīng)驗(yàn)的架構(gòu)圈子,平時(shí)的積累和技術(shù)擴(kuò)展一定離不開(kāi)交流,同時(shí)要將吸收的技術(shù)點(diǎn)進(jìn)行系統(tǒng)整理。為此,針對(duì)當(dāng)前互聯(lián)網(wǎng)公司的技術(shù)需求,我整理了一份系統(tǒng)的架構(gòu)技術(shù)體系,大家可以進(jìn)群Java資源分享群:(854601507)下載相關(guān)技術(shù)資料,群里有阿里大牛,也有一線互聯(lián)網(wǎng)的資深HR,或關(guān)注微信公眾號(hào):Java資訊庫(kù),免費(fèi)領(lǐng)取架構(gòu)資料。
五、基礎(chǔ)功底的快速準(zhǔn)備
我的建議是,如果真的還有1個(gè)月要去面試了,那你最起碼用幾天的時(shí)間,網(wǎng)上搜三五十個(gè)最常見(jiàn)、最典型的算法題,反復(fù)練習(xí)、務(wù)必熟練。
熟練到什么程度呢?
你需要反復(fù)練習(xí),最后自己能夠在白紙上一遍就手寫(xiě)出沒(méi)有bug的代碼。
哪些題目是最常見(jiàn)、最典型的?舉個(gè)例子,經(jīng)典排序算法以及其時(shí)空復(fù)雜度分析,經(jīng)典查找算法,棧、隊(duì)列、鏈表、二叉樹(shù)等常見(jiàn)數(shù)據(jù)結(jié)構(gòu)的算法題,這些相關(guān)的基礎(chǔ)題目都要熟練掌握。
當(dāng)然最好的對(duì)于基礎(chǔ)的算法之類的東西的積累,還是在平時(shí),比如你要是堅(jiān)持每天就在leetcode或者lintcode上花費(fèi)半小時(shí)刷一個(gè)算法題,堅(jiān)持一年,你就刷了至少300道算法題,堅(jiān)持兩年,你就積累了七八百道算法題。
這個(gè)時(shí)候有了足夠的積累,起碼面試是不用擔(dān)心任何基礎(chǔ)性手寫(xiě)算法之類的問(wèn)題了,功夫其實(shí)還是在平時(shí)的。
至于算法題目的難度選擇,只需要LeetCode或者Lintcode上easy難度和medium難度即可。
社招對(duì)算法和數(shù)據(jù)結(jié)構(gòu)的要求是低于校招的,校招是因?yàn)閷W(xué)生沒(méi)有太多項(xiàng)目經(jīng)驗(yàn),只能考察你數(shù)據(jù)結(jié)構(gòu)算法,看你聰不聰明。
這是一張lintcode上對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)算法題的難度 vs 求職的一個(gè)對(duì)照?qǐng)D,大家可以參考下。
還是那句話,搞定easy和medium難度的題目即可。曾經(jīng)網(wǎng)上流傳著一句話:如果你能手寫(xiě)所有easy和medium的題目,3遍之內(nèi)通過(guò),可以搞定硅谷大部分公司的技術(shù)面試,包括谷歌、Facebook等頂級(jí)公司的面試,這個(gè)在國(guó)內(nèi)也差不多的情況。
這篇文章從技術(shù)廣度、技術(shù)深度、基礎(chǔ)功底,三大塊出發(fā),給大家講了講每一塊會(huì)如何考察,以及大家從長(zhǎng)期積累和短期突擊兩個(gè)方面來(lái)看分別應(yīng)該如何準(zhǔn)備。
不過(guò),其實(shí)我個(gè)人一向是秉持著技術(shù)是長(zhǎng)期積累的事兒,不是短期突擊的事兒的態(tài)度。
但是如果你真的就是沒(méi)長(zhǎng)期積累,又要去面試,希望大家好好看下這篇文章,對(duì)你會(huì)被考察的能力有個(gè)思想準(zhǔn)備。
-
工程師
+關(guān)注
關(guān)注
59文章
1565瀏覽量
68406 -
JAVA
+關(guān)注
關(guān)注
19文章
2952瀏覽量
104484
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論