技術面試別扯智力題
作者 | 阿文
責編 | 伍杏玲
出品 | 程序人生(ID:coder_life)
所謂「面試造火箭,入職擰螺絲」。
對於一名開發者而言,我相信很多開發者在求職面試過程中並不會有機會現場進行代碼編寫。甚至在一些公司里,技術面試已變成「測試智商」,比如谷歌微軟等知名外企曾出過一些腦筋急轉彎類的題目,還有是考查程序員一些很難的、但是在實際工作中用不上的演算法題。
說實話,這樣的「高逼格」「高標準」的技術面試真的能選擇出優秀人才嗎?
回答這個問題之前,我們先來看企業為什麼要出這些複雜的智力題?因為僅僅用不到一小時是很難考察出面試者的水平,畢竟求職者的經歷是可以美化和造假的。
通常來說,開發類技術面試中的問題大致可以分為 5 類,演算法和數據結構只是其中一小類:
- 編碼:考察面試者的編碼能力,一般要求面試者在 20 ~ 30 分鐘之內編寫一段需求明確的小程序。
- 設計:考察面試者的設計和表達能力,一般要求面試者在 30 分鐘左右內給出一個系統的大致設計。
- 項目:考察面試者的設計和表達能力以及其簡歷的真實度。
- 腦筋急轉彎:考察面試者的「反應和智力」。
- 查漏:考察面試者對某種技術的熟練度。
那些奇葩的智力測試題
很多年前一些書籍和電影會把谷歌微軟等外企的技術面試說得很「高大上」,比如問「井蓋為什麼是圓的」之類的問題,還有:
一輛校車能裝下多少個高爾夫球?
如果讓你清洗西雅圖市所有的窗戶,你會對此索價多少?
在一個重男輕女的國家裡,每家每戶都想生男孩。若一戶人家生了一個女孩,便會再生一個,直到生下的是男孩為止。請問這個國家的男女比例是多少?
後來谷歌也承認這些臭名昭著的智力題對其招聘毫無用處,因為它無法判定面試者的真實能力。
複雜的演算法題
雖然很少有求職者會被問腦筋急轉彎類題目,但是在技術面試環節里,演算法題目是絕對逃不掉的,例如谷歌、騰訊、百度、微軟等都會問一些演算法題目,例如:
一個長度為n的數組,其中只有一個數字出現了奇數次,其他均出現偶數次,問如何使用優秀的時空複雜度快速找到這個數字。
兩棵二叉搜索樹如何使用線性的時間複雜度,將它們合併成一棵二叉搜索樹。
還有一些演算法題目傾向於考察基礎數據結構與演算法:排序演算法、搜索演算法、圖論、動態規劃、基礎技巧、數組與鏈表、樹與圖、堆、字元串等等。
面試官考察這些題目的優點是顯而易見的:首先,考察面試者的基本功是否紮實,科班學生肯定學過這些知識點。如果你是一個半路轉行的求職者或者剛剛參加完編程培訓班,這些題目可能對你來說有一些難度。因此這批人很容易就被過濾掉。
不過現在很多求職者都會在面試前刷 LeetCode,這個網站上的題都是一些經典的公司用來面試應聘者的面試題,很多人通過刷這些題來應聘一些喜歡面試演算法的大公司。
白板編程考察代碼能力?
其實,最令面試者頭痛是編碼類問題,因為幾乎所有的當面技術面試均要求面試者在白板上寫出代碼,而不是在面試者熟悉的 IDE 或是編輯器中寫出。
很多面試者肯定抱怨過:「如果能在計算機上編程,我早就把它搞定了!」這是因為大家平常太依賴開發工作了,導致白板編程時腦里一片空白。
面試官考察白板編程,並不是讓面試者一下子寫出 0 Bug的代碼,而是想看下求職者的思考過程和編碼習慣是否清晰。
不僅是現場寫代碼,在視頻面試時,有面試官也會讓候選人在視頻的那邊進行編程。其實不管是白板編程還是 IDE 寫代碼知識考察求職者的一種方式。事實上,很多程序員不善於言談,如果要求其在白板寫下代碼會令其很緊張。然後無法完成題目,難道這就說明其不能勝任工作嗎?
項目經歷
在求職過程中,面試官通常會問求職者此前的一些項目經歷和在項目過程中所擔任的角色,使用的一些技術,以及為什麼採用這類技術,它的優勢是什麼?遇到了哪些問題,是如何解決的。
通過這一系列問題,可以有效的判斷求職者的項目經歷是否有水分,以及在項目過程中遇到問題解決問題的思路。
面試官應該避免什麼
1、避免人口調查式收集求職者信息
這個主要是針對國內一些公司,在求職者還未進行面試之前就做人口調查式的收集求職者相關信息,例如家庭成員、職業、電話。這讓很多求職者非常反感,事實上一些基本的信息求職者的簡歷都已經提供了,根本無需再次現場重複填寫一遍。
2、避免「機器人面試」與自動評估
很多公司會簡單電話面試,然後就扔一個在線的評估系統來要求求職者去實現類似「家庭作業」似的任務,然後系統根據標準答案自動評估。因為這樣可以節省成本,但我覺得有些高級工程師會拒絕做這種面試。
3、避免白板面試
上文已詳細分析。
4、避免全天採訪
許多公司一面試就一整天,面試甚至多達 5 到 8 次,這讓請假來面試的求職者很難參加。而通過遠程面試,可以很好地解決這個問題。
5、避免大規模的「家庭作業」
有些公司要求面試者在面試時間之外去實現一些系統的設計或服務搭建,這是不尊重人們的時間。
技術面試應該如何做
首先,要尊重面試者的時間,合理與面試者溝通面試時間、地點、注意事項、避免遲到。
其次,要確認自己需要找什麼樣的人才,需要他完成什麼樣的工作。
不同崗位的要求肯定是不一樣的,應該根據崗位的實際需求來考察求職者是否適合,而不是千篇一律用統一標準化來面試,這樣的話就很難招聘到滿意的人才。
例如你要招聘一名運維人員,不應該把考察其演算法作為重點,而是應該考察其運維相關技術棧和處理故障的能力(包括操作系統原理和相關服務原理的理解是否透徹為主)以及面試者的工作經歷是否與本崗位相符合,他在工作中遇到的複雜問題是如何解決的。
而不是為了體現公司的高大上,想出一系列很難讓人理解和解答的智力題,畢竟大部分崗位招聘都是為了找到滿意的能夠解決實際業務問題的人才而不是尋找科學家。
事實上,現在很多外企都在重新設計面試流程,例如微軟,微軟完全改變了面試軟體開發人員的方式,以確保候選人具備完成工作的實際技能。微軟使用「替代面試框架」,在新流程下,微軟會提前分享面試問題,以便考生做好準備。在面試過程中,候選人可能會遇到團隊試圖解決的真實場景或問題。
此前微軟的面試可能具有很強的技術性,比如反向鏈接列表 ,並且包括數學遊戲,比如要求候選人弄清楚有多少乒乓球會填滿747,但是這兩類問題很少與員工實際上每天在工作中做的事情有關 。
在新框架中更具包容性,通過更多地依靠尋找真正問題的解決方案,而不是依靠深奧或深入的技術知識,對於那些不是來自傳統技術行業背景的人來說,更容易發光。微軟還致力於確保採訪者能夠反映公司多元化的員工隊伍。
求職者應該如何準備
首先,在平常大家可以通過創建 GitHub 賬號,閱讀一些技術書籍,建立技術影響力,例如參與一些大型知名的開源項目並貢獻自己的代碼,寫技術博客等,這樣面試時可以提供給面試官真實、明確、可度量的經歷。
其次要有紮實的基本功,對於工作中會經常使用到的演算法和數據介面一定要多去看多去練。對於面試崗位所需要的技能一定要多去鞏固,例如面試一名 Java 工程師,你必須掌握一些 Java 基礎知識,例如對基本的數據類型、泛型、多態、OOP 等基礎知識點的掌握以及一些常見框架和中間件的原理和使用,並能通過所學知識解決實際的問題。
刷題沒有問題,但是要避免成為應試機器,避免把題目背下來,雖然有可能通過面試,但是在實際工作中可能會變成一個水貨。
不要試圖在簡歷上造假,可以適當美化你的簡歷,但是一定不能造假,造假是不可饒恕的,包括學歷造假和經歷造假。
參考:
In defence of the technical interview
作者簡介:阿文,網易雲擔任高級工程師,在邊緣計算、雲計算領域有多年的從業經歷,曾擔任過講師,主講思科路由交換技術。個人博客地址:https://awen.me


※Chrome成為互聯網看門人!
※均薪連續三年過萬,北上深人才需求大!| 5G 人才報告
TAG:CSDN |