技術(shù)面試是一個(gè)工程師成長到一定階段后必然要承擔(dān)的一項(xiàng)工作炒瘸,優(yōu)秀的技術(shù)面試官能幫助公司篩選出優(yōu)秀的工程師淤堵,并且潛移默化的吸引候選人選擇加入公司。相反什燕,糟糕的面試不僅會(huì)錯(cuò)失優(yōu)秀候選人粘勒,甚至還會(huì)給公司招來大麻煩竞端。盡管技術(shù)面試如此重要屎即,我還是了解到,很多公司的技術(shù)面試官都是“無證上崗”事富,hr 隨便抓壯丁去面試技俐,面試質(zhì)量參差不齊。本文就這個(gè)問題统台,根據(jù)我自己的面試經(jīng)驗(yàn)和思考雕擂,總結(jié)了一些面試技巧分享跟大家,希望有所幫助贱勃。
如何閱讀候選人簡歷
閱讀候選人的簡歷井赌,這是招聘流程中擺在我們面前的第一項(xiàng)工作。候選人的簡歷各式各樣贵扰,我曾經(jīng)見過很多人的簡歷寫超過 10 頁仇穗,項(xiàng)目零零總總羅列幾十個(gè),也有見過個(gè)人評價(jià)可以像散文一樣寫半頁紙的戚绕,工程師們一般都比較忙纹坐,如何快速的閱讀簡歷又不失重點(diǎn)呢?我總結(jié)了兩點(diǎn):忽略掉主觀性太強(qiáng)的描述舞丛,比如簡歷中的自我評價(jià)耘子,重復(fù)性的項(xiàng)目經(jīng)歷,一些熟悉某某技術(shù)球切,精通某某語言的主觀性很強(qiáng)的描述谷誓,這些都可以一眼帶過。另一方面吨凑,抓住候選人的亮點(diǎn)捍歪,亮點(diǎn)就是那些非常有力的能證明候選人能力的經(jīng)歷,我根據(jù)自己的經(jīng)驗(yàn)羅列了一些怀骤,供大家參考:
1:首先费封,對于候選人來講,大公司的工作經(jīng)歷是很重要的能力背書蒋伦,而且級(jí)別越高可以粗略等同認(rèn)為越優(yōu)秀弓摘,雖然也會(huì)有個(gè)例,但一般情況下痕届,阿里 P8 要比 P7 技術(shù)能力優(yōu)秀韧献,百度的 T7 要比 T6 優(yōu)秀末患,騰訊的 T3.1 要比 T2.3 優(yōu)秀。但是這種情況只針對大公司锤窑,對于一些創(chuàng)業(yè)公司璧针,小公司來講,Title 并不與能力劃等號(hào)渊啰,小公司技術(shù)總監(jiān)的技術(shù)能力不如大公司的一個(gè)普通的資深工程師的情況也是常有的事情探橱。:
2:其次,有很好的教育背景绘证,GPA 高也是很大的加分項(xiàng)隧膏,比如清北復(fù)交畢業(yè),雖然都說做技術(shù)學(xué)歷不重要嚷那,但好學(xué)校的學(xué)生對計(jì)算機(jī)基礎(chǔ)知識(shí)/通識(shí)知識(shí)掌握的更好胞枕,計(jì)算機(jī)思維,邏輯思維更強(qiáng)魏宽,相對要聰明一些腐泻,而且在工作中發(fā)現(xiàn)成績好的同學(xué)往往在工作中表現(xiàn)出很高的執(zhí)行力和快速交付能力 / 溝通能力,工作中的表現(xiàn)更優(yōu)秀队询。
3:再次派桩,有比較有技術(shù)含量的項(xiàng)目經(jīng)歷。為什么強(qiáng)調(diào)是“有技術(shù)含量”的項(xiàng)目經(jīng)歷呢娘摔?因?yàn)槲野l(fā)現(xiàn)窄坦,有很多工作年限比較長的候選人,簡歷十幾頁凳寺,項(xiàng)目大大小小幾十個(gè)鸭津,而很多項(xiàng)目都是 3,5 個(gè)月就做完肠缨,用到的技術(shù)也比較重復(fù)/淺顯逆趋,對于候選人的技術(shù)積累來說,10 年的經(jīng)驗(yàn)跟一年的經(jīng)驗(yàn)差不多晒奕,所以項(xiàng)目不在多闻书,而在于能提現(xiàn)候選人的技術(shù)能力。:
4:還有脑慧,有高質(zhì)量的開源項(xiàng)目魄眉;項(xiàng)目背景比較切合;有在技術(shù)網(wǎng)站發(fā)表過文章或高質(zhì)量的技術(shù)博客闷袒;做過一些業(yè)余項(xiàng)目等坑律,都可以作為加分項(xiàng)。
如何設(shè)計(jì)面試題目
一般來講囊骤,大部分的面試流程都會(huì)先安排一輪電話面試晃择,通過之后再安排現(xiàn)場面試冀值。電話面試的主要作用就是簡歷擠水分篩選掉特別差的候選人,因?yàn)殡娫捗嬖嚠吘共槐阌跍贤ü溃瑢τ谝恍?fù)雜問題也沒有其他輔助方式來幫助理解和表達(dá)列疗,所以面試題目最好不要過于開放,能夠有標(biāo)準(zhǔn)答案的最好浪蹂,類似筆試抵栈,也以基礎(chǔ)知識(shí)或過往項(xiàng)目的簡單詢問為主。而現(xiàn)場面試一般比電話面試在溝通上更有優(yōu)勢乌逐,在題目設(shè)計(jì)上可以更靈活竭讳。
一般來講,公司里面是沒有面試題庫的浙踢,一般都是面試官自己想的,來源有很多灿渴,網(wǎng)上看到的洛波,項(xiàng)目里面涉及到的,自己被面試時(shí)遇到的問題等骚露。拿來主義得到的面試題最好要修改一下蹬挤,特別是網(wǎng)上常見的,以免候選人也看到過棘幸。
面試題目的設(shè)計(jì)一定要有同理心焰扳,簡單的講就是要學(xué)會(huì)換位思考,要站在候選人的角度去看待面試題目是否合適误续,是不是難度太大吨悍?題目背景是否容易解釋的清楚?是否能讓候選人對題目的理解跟面試官一致等等蹋嵌。這一點(diǎn)聽起來比較簡單育瓜,但做好比較難。張小龍說過最牛逼的產(chǎn)品經(jīng)理要有能瞬間把自己變成小白用戶來認(rèn)識(shí)自己設(shè)計(jì)的產(chǎn)品的能力栽烂。我們在設(shè)計(jì)面試題目的時(shí)候躏仇,也要學(xué)會(huì)放空自己,努力做到忘記答案腺办,再去考量這個(gè)問題的難度焰手。不過我們還有一個(gè)側(cè)面的方法了解面試題目設(shè)計(jì)的是否得當(dāng):先把題目講給周圍的同事聽,看看他們是否能很容易的理解怀喉,能夠答出來书妻。
面試題目最好能層層遞進(jìn),先從簡單的問起磺送,如果候選人能很好的回答驻子,再繼續(xù)深挖灿意,逐級(jí)遞進(jìn),當(dāng)面試者無法繼續(xù)回答出來時(shí)崇呵,大體上就能知道面試者對此方面知識(shí)掌握的深度了缤剧。
舉一個(gè)我經(jīng)常用的面試題: “有一個(gè)數(shù)組,數(shù)組中存儲(chǔ)的是 Cat 對象域慷,每個(gè) Cat 對象有多個(gè)成員變量荒辕,其中一個(gè)代表顏色 color,有兩個(gè)值白色和黑色犹褒,要求編寫一個(gè)函數(shù)將數(shù)組中所有的白貓都放到黑貓前面抵窒。”
如果候選人能夠順利解答叠骑,我會(huì)繼續(xù)加大難度:“如果貓的顏色有三種李皇,白色、黑色宙枷、灰色掉房,編寫一個(gè)函數(shù)將數(shù)組中白貓放到最前面,灰貓放到中間慰丛,黑貓放到最后面卓囚,比如:原來數(shù)組為 黑白灰白白黑灰灰,經(jīng)過排序之后白白白灰灰黑黑”诅病。
還可以繼續(xù)加大難度:“不僅白灰黑之間按順序排列哪亿,而且白貓,灰貓贤笆,黑貓各自內(nèi)部原來的先后順序也不能變蝇棉。” 雖然解題思路差不多苏潜,但顯然需要處理的細(xì)節(jié)變多了银萍,難度比之前兩個(gè)都要大了。
這樣一層一層遞進(jìn)恤左,難度逐漸加大, 這樣的面試題一方面有區(qū)分度贴唇,另一方面不至于太難導(dǎo)致候選人完全答不上來。
少問記憶性問題和太理論性問題
有些 JAVA 面試官逢人便問 JVM 幾種垃圾回收算法優(yōu)劣對比飞袋,這種文科題目在我看來是沒有太大意義的戳气,一方面沒有區(qū)分度,另一方便容易突擊準(zhǔn)備巧鸭,往往考察不出候選人的真實(shí)能力瓶您,所以我面試有個(gè)原則,不直接問記憶性問題,也不直接問理論性問題呀袱,比如 Spring AOP贸毕,IOC 的實(shí)現(xiàn)原理,Spring Transaction 有哪幾種事務(wù)傳播方法夜赵,分布式一致性的解決方法有哪些懊鞴鳌?JVM 垃圾回收算法寇僧?Zookeeper 的應(yīng)用場景有哪些疤浮?
并不是說這些技術(shù)不重要不需要考察嘁傀,而是換個(gè)問法兴蒸,將這些記憶性的、理論性的知識(shí)融入實(shí)踐细办,比如考察剛剛提到的 Spring 中的 AOP, IOC 原理概念橙凳,我一般會(huì)這樣子設(shè)計(jì)面試題目: 給一些包含 Spring 功能特性的代碼片段,讓候選人闡述一下從應(yīng)用啟動(dòng)到代碼執(zhí)行都經(jīng)過了哪些主要的操作蟹腾?當(dāng)然還會(huì)告訴候選人主要考察 spring 的 AOP/IOC 特性痕惋,并且提示候選人越詳細(xì)越好,以免候選人不能理解面試官的意圖娃殖,答非所問。這樣的問法讓候選人言之有物议谷,而且避免機(jī)械記憶性的背誦炉爆,更能測試出候選人是否真正的理解。
再比如卧晓,有些面試官為了考察候選人多線程方面的知識(shí)芬首,經(jīng)常會(huì)問到的題目比如 ConcurrentHashMap 的實(shí)現(xiàn)原理,volatile 關(guān)鍵詞的作用等逼裆,我之前也多次拿這些題目當(dāng)做過面試題郁稍,但總結(jié)下來發(fā)現(xiàn),大部分候選人都能答得七七八八胜宇,區(qū)分度很低耀怜。我之后換了一種問法,要求候選人將一個(gè)線程不安全的類改寫成線程安全的類桐愉,這期間涉及到 volatile,lock, 并發(fā)容器财破,Atomic 原子操作,CAS 無鎖編程等从诲,發(fā)現(xiàn)只有極少部分候選人給出鎖粒度小左痢,并發(fā)度高的代碼,部分候選人在提示下可以解決,一些候選人則僅能寫出一把 synchorinzed 大鎖的并發(fā)度很低的代碼俊性。事實(shí)很明顯略步,那些能夠給出優(yōu)秀答案的候選人,必定是有著實(shí)踐經(jīng)驗(yàn)定页,并且深入思考過趟薄,真正理解的人,而相反拯勉,其他人可能只是臨時(shí)看了幾篇技術(shù)博客而已竟趾。
程序員面試社區(qū):236283328
白板編程真的有必要嗎
白板編程就是在面試現(xiàn)場讓候選人在白板上寫一段代碼,當(dāng)然白板只是一個(gè)代指說法宫峦,也可能是白紙上岔帽,也有可能是 Google Doc 共享文檔里。白板編程外企面試比較流行导绷,國內(nèi)有些候選人不怎么接受犀勒,特別是工作年限較長的,一說要寫個(gè)代碼妥曲,求職者就覺得是在“羞辱”他贾费,覺得不應(yīng)該從這么基礎(chǔ)的問起。不過根據(jù)我的面試經(jīng)驗(yàn)發(fā)現(xiàn)檐盟,這種拒絕寫代碼的大齡碼農(nóng)褂萧,滿嘴架構(gòu),高可用葵萎,高性能导犹,分布式帜讲,往往一寫代碼就抓瞎报腔,代碼寫的慘不忍睹。所以只要是面試一線技術(shù)研發(fā)崗位服傍,不管是資深工程師卷雕,架構(gòu)師节猿,還是開發(fā) leader,我都會(huì)要求候選人現(xiàn)場至少寫一段代碼漫雕。
哪種類型的題目適合白板編程呢滨嘱?舉一個(gè)我之前經(jīng)常用的例子:
“寫一個(gè)函數(shù)將 ipv4 地址字符串 (僅包含數(shù)字,點(diǎn)蝎亚,空格) 轉(zhuǎn)化成 32 位整數(shù)九孩,另外,數(shù)字和點(diǎn)之間的空格是合法的发框,其他情況均為非法地址躺彬,要求輸出合法地址的 32 位整型結(jié)果煤墙。”
這個(gè)題目不需要任何的算法背景和技巧宪拥,純粹考察候選人的基本編程素質(zhì):邏輯思維是否清晰仿野,細(xì)節(jié)是否考慮全面,是否能寫出 bug free 的代碼她君,是否有計(jì)算機(jī)思維能關(guān)注時(shí)間空間復(fù)雜度等脚作。而且在候選人完成代碼之后,我還會(huì)要求候選人將代碼講給我聽缔刹,當(dāng)然不是因?yàn)槲铱床欢蛱危沁@樣還能順帶考察候選人的表達(dá)能力,溝通能力校镐,畢竟講給別人聽讓別人理解要比單純自己理解難很多亿扁。
除此之外,我個(gè)人也不建議編程題目涉及需要記憶的算法鸟廓,比如被很多人詬病的面試題:寫個(gè)快排从祝,沒有人會(huì)天天背誦快排算法,寫不出來也理所應(yīng)當(dāng)引谜,如果換個(gè)問法牍陌,比如給候選人講一下快排的思想,然后讓候選人代碼實(shí)現(xiàn)员咽,測試候選人是否能寫出 bug free 的代碼毒涧,我覺得這反倒是一個(gè)比較好的編程題目。
還有贝室,我也不建議面試需要特殊解題方法或技巧的編程題目链嘀,比如需要用到動(dòng)態(tài)規(guī)劃,線段樹档玻,Trie 樹等高級(jí)一點(diǎn)的解題思路,畢竟大家工作中不常用到茫藏。
智力問題為什么會(huì)收到青睞
我們經(jīng)常在網(wǎng)上看到說谷歌误趴,微軟等大外企經(jīng)常會(huì)面試智力題目,面試智力問題到底有沒有意義呢务傲?答案是肯定的凉当,我認(rèn)為智力問題不在于候選人最終是否能提出標(biāo)準(zhǔn)答案,而在于提供一個(gè)話題跟面試者討論售葡,考察候選人是否是一個(gè)有想法的人看杭,是否跟面試官在一個(gè)思維層次上,溝通流暢挟伙;更重要的是考察候選人思路是否清晰楼雹,邏輯推理能力是否夠強(qiáng),信息挖掘能力是否強(qiáng),總結(jié)能力是否夠強(qiáng)等等基本素質(zhì)贮缅。
舉一個(gè)我之前曾經(jīng)用的面試題目榨咐,也是我面試谷歌時(shí)被問到的一個(gè)問題:
新建了一棟 100 層的辦公樓,設(shè)計(jì)一個(gè)電梯調(diào)度系統(tǒng)谴供,能讓大家上下樓都節(jié)省時(shí)間块茁,這個(gè)問題沒有標(biāo)準(zhǔn)答案,你會(huì)發(fā)現(xiàn)不同的候選人回答相差很大桂肌,優(yōu)秀的候選人會(huì)不停的挖掘背景信息数焊,定義清晰需求,理清楚思路崎场,通過一步一步嚴(yán)密的邏輯推理計(jì)算佩耳,合理的假設(shè),讓問題變得清晰可解照雁,而有些候選人則無從下手蚕愤。
我個(gè)人認(rèn)為智力問題最好是比較開放性的問題,一定不要太難的問題饺蚊,也不要是抖機(jī)靈的問題萍诱。有很多面試官拿數(shù)學(xué)難題考候選人,希望 45 分鐘答出來標(biāo)準(zhǔn)答案污呼,這本身就是不可能裕坊,除非之前候選人已經(jīng)看過,這樣的問題也就沒有意義了燕酷。比如網(wǎng)上比較流行的“扔雞蛋測樓高的問題”“沙漠如何背最多水問題”籍凝。
當(dāng)然,智力問題也并不是適合所有的公司苗缩。一般成熟型的大公司饵蒂,對候選人可以接受比較長的培養(yǎng)時(shí)間,而且默認(rèn)聰明的人學(xué)習(xí)能力都很強(qiáng)酱讶,所以對過往技術(shù)經(jīng)驗(yàn)并非特別的看中退盯,所以一般喜歡面試算法,智力問題泻肯。對于一些創(chuàng)業(yè)型公司渊迁,更看重候選人的工作經(jīng)驗(yàn),青睞技術(shù)多面手灶挟,來了就能產(chǎn)出琉朽,所以就不適合在智力問題上浪費(fèi)太多的面試時(shí)間。
程序員面試社區(qū):236283328
把面試當(dāng)做一場技術(shù)討論
篩選候選人就是篩選將來與你共事的人稚铣,所以為了更準(zhǔn)確的反應(yīng)候選人在以后的工作中的表現(xiàn)箱叁,不妨把面試當(dāng)做一場與未來同事的技術(shù)討論墅垮,在討論的過程中感受候選人的技術(shù)能力。
技術(shù)面試就好比打乒乓球蝌蹂,一來一往中感受彼此的技術(shù)實(shí)力噩斟,面試的過程切忌類似與筆試一樣的一問一答單向溝通。特別是一些開放性問題孤个,架構(gòu)設(shè)計(jì)的問題剃允,本身就沒有標(biāo)準(zhǔn)答案,背景又過于復(fù)雜開放齐鲤,如果只是丟給候選人回答斥废,中間沒有任何溝通交流和引導(dǎo),候選人是很難抓住重點(diǎn)展現(xiàn)出面試官心里期望的表現(xiàn)给郊。
比如我們面試過程中經(jīng)常會(huì)讓候選人介紹某個(gè)項(xiàng)目的架構(gòu)設(shè)計(jì)牡肉,當(dāng)候選人講解完項(xiàng)目的架構(gòu)設(shè)計(jì),如果面試官一個(gè)問題都不提然后就跳到其他問題淆九,這種體驗(yàn)對不管是候選人來說還是面試官來說都不是很好的统锤。而相反,如果面試官能一語中的的提出設(shè)計(jì)中的缺陷炭庙,或者追問架構(gòu)中的技術(shù)難點(diǎn)饲窿,深入的跟候選人討論,這樣一方面能給候選人充分發(fā)揮的機(jī)會(huì)焕蹄,另一方面逾雄,也會(huì)贏來候選人對公司技術(shù)的認(rèn)可。
最后腻脏,總結(jié)
相信很多工程師隨著面試經(jīng)驗(yàn)的積累鸦泳,即便沒有經(jīng)過培訓(xùn),面試工作也可以做的非常好永品,因?yàn)楫吘箖?yōu)秀的工程師都邏輯清晰思維敏銳做鹰,也希望本文能給大家在成長的過程提供一點(diǎn)幫助。