臨近年關,今年面試跳槽的人特別多,關注我的朋友都知道我不輕易做分享,因為這沒有標準答案,看法也因人而異。但我發(fā)現有些面試問題還挺普遍的,今天就說說我做面試官這幾年的經驗,從面試官的角度去看面試,希望對在準備面試以及想要提升的程序員們有點啟發(fā),以下僅是個人經驗總結:
? ? 如何閱讀候選人簡歷
閱讀候選人的簡歷,這是招聘流程中的第一項工作。候選人的簡歷各式各樣,工程師們一般都比較忙,如何快速的閱讀簡歷又不失重點呢?我根據自己的經驗總結了幾點,供大家參考:
首先,對于候選人來講,大公司的工作經歷是很重要的能力,而且級別越高可以粗略等同認為越優(yōu)秀,雖然也會有個例,但一般情況下,阿里 P8 要比 P7 技術能力優(yōu)秀,百度的 T7 要比 T6 優(yōu)秀。但是這種情況只針對大公司,對于一些小公司,Title 并不與能力劃等號,小公司技術總監(jiān)的技術能力不如大公司的一個普通的資深工程師的情況也是常有的事情。
其次,有比較有技術含量的項目經歷,我發(fā)現有很多工作年限比較長的候選人,簡歷十幾頁,項目大大小小幾十個,而很多項目都是 3,5 個月就做完,用到的技術也比較重復、淺顯。對于候選人的技術積累來說,10 年的經驗跟一年的經驗差不多,所以項目不在多,而在于能提現候選人的技術能力。
還有,有高質量的開源項目;項目背景比較切合;有在技術網站發(fā)表過文章或高質量的技術博客;做過一些業(yè)余項目等,都可以作為加分項。
? ? 少問記憶性問題和太理論性問題
有些 JAVA 面試官逢人便問 JVM 幾種垃圾回收算法優(yōu)劣對比,這種文科題目在我看來是沒有太大意義的,一方面沒有區(qū)分度,另一方便容易突擊準備,往往考察不出候選人的真實能力。所以我面試不直接問記憶性問題,也不直接問理論性問題,而是換個問法,將這些記憶性的、理論性的知識融入實踐。
比如,有些面試官為了考察候選人多線程方面的知識,經常會問到的題目比如 ConcurrentHashMap 的實現原理,volatile 關鍵詞的作用等,我之前也多次拿這些題目當做過面試題,但總結下來發(fā)現,大部分候選人都能答得七七八八,區(qū)分度很低。我之后換了一種問法,要求候選人將一個線程不安全的類改寫成線程安全的類,這期間涉及到 volatile,lock, 并發(fā)容器,Atomic 原子操作,CAS 無鎖編程等,發(fā)現只有極少部分候選人給出鎖粒度小,并發(fā)度高的代碼,部分候選人在提示下可以解決,一些候選人則僅能寫出一把 synchorinzed 大鎖的并發(fā)度很低的代碼。
事實很明顯,那些能夠給出優(yōu)秀答案的候選人,必定是有著實踐經驗,并且深入思考過,真正理解的人,而相反,其他人可能只是臨時看了幾篇技術博客而已。
? ? 白板編程真的有必要嗎
白板編程外企面試比較流行,國內有些候選人不怎么接受,特別是工作年限較長的,一說要寫個代碼,求職者就覺得是在“羞辱”他,覺得不應該從這么基礎的問起。
不過根據我的面試經驗發(fā)現,這種拒絕寫代碼的大齡碼農,滿嘴架構,高可用,高性能,分布式,往往一寫代碼就抓瞎,代碼寫的慘不忍睹。
白板編程一般會問哪種類型的題目呢?舉一個我之前經常用的例子:
“寫一個函數將 ipv4 地址字符串 (僅包含數字,點,空格) 轉化成 32 位整數,另外,數字和點之間的空格是合法的,其他情況均為非法地址,要求輸出合法地址的 32 位整型結果?!?/p>
這個題目不需要任何的算法背景和技巧,純粹考察候選人的基本編程素質:邏輯思維是否清晰,細節(jié)是否考慮全面,是否能寫出 bug free 的代碼,是否有計算機思維能關注時間空間復雜度等。而且在候選人完成代碼之后,我還會要求候選人將代碼講給我聽,當然不是因為我看不懂,而是這樣還能順帶考察候選人的表達能力,溝通能力,畢竟講給別人聽讓別人理解要比單純自己理解難很多。
? ? 智力問題為什么會收到青睞
我們經常在網上看到說谷歌,微軟等大外企經常會面試智力題目,我認為智力問題不在于候選人最終是否能提出標準答案,而在于提供一個話題跟面試者討論。考察候選人是否是一個有想法的人,思路是否清晰,邏輯推理能力是否夠強,總結能力是否夠強等等基本素質。
智力問題最好是比較開放性的問題,一定不要太難的問題,也不要是抖機靈的問題。有很多面試官拿數學難題考候選人,希望 45 分鐘答出來標準答案,這本身就是不可能,除非之前候選人已經看過,這樣的問題也就沒有意義了。
當然,智力問題也并不是適合所有的公司。一般成熟型的大公司,對候選人可以接受比較長的培養(yǎng)時間,而且默認聰明的人學習能力都很強,所以對過往技術經驗并非特別的看中,所以一般喜歡面試算法,智力問題。對于一些創(chuàng)業(yè)型公司,更看重候選人的工作經驗,青睞技術多面手,來了就能產出,所以就不適合在智力問題上浪費太多的面試時間。
? ? 把面試當做一場技術討論
篩選候選人就是篩選將來與你共事的人,所以為了更準確的反應候選人在以后的工作中的表現,不妨把面試當做一場與未來同事的技術討論,在討論的過程中感受候選人的技術能力。
技術面試就好比打乒乓球,一來一往中感受彼此的技術實力,面試的過程切忌類似與筆試一樣的一問一答單向溝通。特別是一些開放性問題,架構設計的問題,本身就沒有標準答案,背景又過于復雜開放,如果只是丟給候選人回答,中間沒有任何溝通交流和引導,候選人是很難抓住重點展現出面試官心里期望的表現。
比如我們面試過程中經常會讓候選人介紹某個項目的架構設計,如果面試官能一語中的的提出設計中的缺陷,或者追問架構中的技術難點,深入的跟候選人討論,這樣一方面能給候選人充分發(fā)揮的機會,另一方面,也會贏來候選人對公司技術的認可。
? ? 技術水平才是根本
相信很多工程師隨著面試經驗的積累,即便沒有經過培訓,面試工作也可以做的非常好,因為畢竟優(yōu)秀的工程師都邏輯清晰思維敏銳,而對于正在進階學習的程序員們,則需要通過系統(tǒng)地梳理來提高自己的技術水平和形成架構思維。
針對當前互聯網公司的技術需求以及結合主流技術,我自己整理了一套系統(tǒng)的架構技術體系。不少公司都很重視高并發(fā)高可用的技術,特別是一線互聯網公司,分布式、JVM、spring源碼分析、微服務等知識點已是面試的必考題,這些東西可能你們平時在工作中接觸過,但是缺少的全面系統(tǒng)的學習,后臺私信回復“架構”,免費領取架構資料,希望本文能給大家在成長的過程提供一點幫助。
一、工程化專題
二、性能優(yōu)化專題
三、源碼分析
四、分布式專題
大家可以通過掃碼進群,或是關注微信公眾號:Java資訊庫,回復“架構”,免費領取架構資料。其實我自己也比較喜歡技術,群里有一些阿里大牛,也有一線互聯網的資深HR,最近在面試的朋友或者在找工作的可以進來看看哦!