我是怎麼面試程式設計師的?

2021-02-19 深加思考

一般來說,一線成熟企業技術崗位的典型招聘流程分為以下幾個步驟:

初篩:一般由直接領導的技術經理或HR進行,重點考察教育和工作經歷

一面:一般由可能直接與之共事的工程師進行,重點考察基礎和工作能力

二面:一般由直接領導的技術經理進行,重點考察技術深度、廣度和發展潛力

HR面:由人力資源部門進行,重點考察入職時間、職業規劃、薪資要求等

當然,各個公司情況是不同的,有的公司可能會在面試前設置筆試或電話面試,有的公司會有兩輪以上的技術面,有的公司會有由兄弟部門再把關的交叉面,有的創業公司甚至可能只有CEO或CTO親自出馬的一輪面試……

在為58趕集集團工作的最後一年裡,我面試了近百位求職者。今天我想粗略地梳理總結一下,我關於技術面試所沉澱下來的思考。也許你應該先去讀讀我之前發表的這幾篇文章:《程式設計師最核心的競爭力是什麼?》、《N年工作經驗真的有用嗎?》、《怎樣才算「精通XX」?》、《工資真的越高越好嗎?》

給誰面試機會?

首先要明白的是,發起招聘的並不是一家公司,而是一個具體部門的技術經理。技術崗的簡歷來源主要有兩個渠道:行業垂直招聘網站 、HR或員工內推,在特別緊急的情況下,還會啟用獵頭。

招聘部門總是更歡迎那些有過類似業務開發經驗並使用相同技術棧的員工,這樣溝通成本會低很多。在一線成熟企業(比如某度和鵝廠)呆過一年以上的求職者也更有機會獲得面試機會,這是因為信任背書的力量:能通過一線成熟企業的面試,並順利度過實習期的人,不會差到哪裡去。

另外根據招聘部門情況不同,有時需要能攻堅能帶團隊的資深工程師,有時需要進來就能幹活的一線工程師,有時需要的是基礎好可培養的新人。當時我所帶領的團隊由於部門整合剛剛進行大換血,嚴重缺少人手,所以需要的是進來就能幹活的人

在剛開始招聘時,我認為所有人應該都擁有平等的機會,自己也缺乏從簡歷中篩選的經驗,於是採用海面的策略,只要不是應屆畢業生的求職者只要投簡歷就約面。在面試了數周后發現,面試的通過率實在太低,於是不斷總結思考,調整初篩策略,後期我所使用的策略是這樣的:

優先考慮2-3年工作經驗的人,因為工作才一年就跳槽的人大多不夠成熟,而工作多年還沒升管理崗又換工作的人大多古板平庸,技術棧僵硬,還自恃甚高;

不考慮從編程培訓班畢業的人,他們中的大多數人基礎不紮實,且缺乏自主學習能力;

不考慮一年內換過多次工作的人,因為這說明他浮躁且缺乏思考能力,經常做出不靠譜的決策;

不考慮在簡歷中多次提到「精通」字眼的人,因為這說明他不僅不精通,而且並不明白什麼是精通;

不考慮在簡歷中出現多處明顯拼寫錯誤和錯別字的人 ,因為連簡歷這麼重要的文件都不知道review的人,完全沒有責任心可言;

以上內容可能會讓部分朋友覺得不適,所以我需要特別說明一下:我並不是歧視工作經驗少或者從編程培訓班畢業的人。 近年來,大部分一線公司在招聘時對學歷的要求漸漸都從大專升級到了本科,但這並不是在歧視大專生,其邏輯是一樣的。

一年工作經驗、從編程培訓班畢業以及大專生群體中當然不乏出色的人才(我自己就是大專),但佔比實在太低。在做人員儲備的時候,標準可以適度放寬;但在鬧人荒的時候,有限的面試資源只能分配給合格概率更高的群體。

怎麼安排面試?

程式設計師的面試一輪通常是一個小時,由於雙方的信息不對稱,對求職者的考察往往不夠全面。有些一面表現非常出色的人,二面就原形畢露;也有一面表現平平,二面卻有驚人之舉的。在有限的時間裡,必須儘量獲取更多的信息,才對求職者的能力作出更準確的判斷。

我會儘量避免在早上安排面試。一方面,面試雙方都可能因為高峰期堵車而導致遲到;另一方面,早上可能會有一堆積累的事務要處理,PM討論一下需求,QA提兩個BUG,回復完郵件,精力就已經消耗得差不多了,馬上又臨近飯點,飢腸轆轆下很難集中注意力進行面試。

因此,我一般會把面試安排在自己精力最充沛的時間,也就是下午3點-5點之間,在午休完處理完所有緊急事務之後。這個時間段也躲開了上下班高峰期,不太可能因為交通原因而遲到。

確定面試安排後,我會打電話通知求職者面試時間,並通過郵件發送面試地點、交通路線和注意事項,並要求對方收到後進行確認回復。在面試前1個小時,我還會再次打電話核實對方的安排。

有的求職者接受了一個Offer之後,就沒把其他公司的面試放在心上,然而這樣會浪費面試官的時間和精力,留下很差的印象。我甚至還遇到過個別奇葩求職者,完全忘掉了已經安排好的面試,居然還能厚著臉皮提出改時間再約……

面試時最應該考察什麼?

面試經驗不豐富的求職者,往往一開始會表現得比較緊張。所以在走向面試地點的路上,我通常都會閒聊幾句前公司夥食如何之類的話,目的是拉近距離感,緩和一下緊張的情緒。在面試正式開始前,我還會先讓求職者進行簡短的自我介紹,讓他儘快適應這個陌生的環境,並調整到讓雙方都覺得舒服的聲線。而我則會認真地傾聽並不時點頭反饋,讓求職者感受到我們更像是在進行一場對話,而不是考試。

一場面試,不外乎是從能力和潛力兩個方面來考察求職者。

1、能力:主要考察求職者掌握了多少知識與技能,以及擁有多少實戰經驗。

事實上,這些在求職者的簡歷裡都已經寫得很清楚了,只多不少。能來參加面試的求職者,其簡歷上所描述的能力必然已經滿足了招聘者設立的基本條件,沒有人會願意在不夠格的簡歷上浪費時間。所以面試官的工作主要是驗證簡歷上面描述的真實性和可靠性

只要求職者在面試中的表現能充分印證簡歷上的描述,最好再能表現出一點點超出預期的地方,就能讓招聘者滿意。因此求職者最忌諱的,就是在簡歷上對自己的經歷和能力進行不實的描述。比如明明只分擔了某系統中的一個模塊,非寫成整個系統是自己主導開發的;明明只是寫過一個demo,就說自己精通XXX……

由於面試的時間短暫,所以 面試官只能對求職者的經歷和能力進行抽樣考察。我在考察求職者的工作經驗時,一般會讓他先挑一個最有把握、最能展示自己實力的項目,然後讓他講解這個項目,並追問一些技術細節和實現方式。如果這個過程中發現他對這個項目其實並不了解,說不清楚核心邏輯是怎麼回事,那其他的就不用再問了。

另外,還有一個難以從簡歷判斷,只有當面才能考察的重要能力:溝通能力。溝通能力強的人很容易理解他人的意圖,也能清晰地表達自己的想法,和他們合作會讓人感覺很放心;而溝通能力差的人則是團隊的噩夢,你總得在他們身上多操份心,否則他們可能到了上線前最後一天才會告訴你任務完不成,你懂得。

2、潛力:主要考察求職者的品質、習慣和態度。

這個人是否誠實?是否能客觀地認識自己?會不會不懂裝懂?

這個人是否熱愛學習?喜不喜歡讀書?讀完有沒有行動?

這個人是否願意去琢磨事物背後的原理?有沒有刨根問底的精神?

這個人是否有總結和反思的習慣?曾經犯過哪些錯誤?

這個人是否有優化和控制風險的意識?是否有追求完美的精神?

……

以上任何一個話題展開來,都可以寫一篇長文,這裡限於篇幅不便一一細講,等我有機會再撰文和大家分享。

比如說, 我最討厭的就是不懂裝懂的人,這種人說話完全不負責任,想到什麼張口就來,還底氣十足。和對事實真相的探索比起來,更看重自己在別人心中的形象,演著演著連自己都相信自己真的已經懂了。這樣的人真的很可怕,因為關鍵時刻如果你不懂,他就把你給蒙了,到時候怎麼死的都不知道。

再比如說,我堅信學習力才是一名程式設計師的核心競爭力,如果有兩位能力相當的應聘者,那我一定會選擇更會學習、更會分享的那一位。因為能力只說明了他現在處於什麼位置,是一個衡量積累量的絕對值;而學習力決定了他今後能走多遠,相當於速度和加速度。能力可以通過時間來不斷積累,而學習力想要發生蛻變的難度是不可想像的。

什麼才是最有效的面試題?

大公司很喜歡用算法題來面試,然而一來算法在工作中的實用性並不高,而來很容易被求職者提前刷題應試,所以一直被人詬病。而直接問一些知識類的問題,感覺又很low,容易被求職者diss。那到底什麼面試題才能有效地考察求職者的能力與知識面呢?

我特別喜歡下面這個從前任領導王磊那裡得來的面試題:

假設你所負責的一個api接口正常的請求響應時間在50ms以內,某一天突然監控報警,發現很多線上請求的響應時間都超過了500ms,該如何定位並解決問題?

要迅速定位一個未知的問題出在哪裡,這需要紮實的經驗基礎和清晰的思維能力,以及問題分解和隔離調試的意識。通過這個問題,能夠全面考察求職者的知識面及分析和解決問題的能力:

在招聘的後期簡歷大增,一一面試根本安排不過來,只能先進行15分鐘的電話面試。我就只問這一個問題,然後追問下去,很快就能判斷出這個人到底是行還是不行。只要節奏明快,層層遞進追問,也很容易辨別出求職者是真有經驗還是提前準備過。能通過電面的,當面面試的結果也都是很滿意的。

大家可能都玩過通過問「是與不是」來猜詞的遊戲,有一種比較無恥的合理策略是:記住對方問過的所有問題,在符合條件的所有答案集合中不斷地切換答案。其實這個思路也是完全可以用在面試中的。

一開始,我會先假設一個導致問題發生的原因,比如網卡故障、DB連接被打滿、某個同步調用的服務異常……如果求職者沒有對整個流程的主要環節進行分析判斷,那就算他憑直覺(或運氣)找到了我預設的問題原因,我也會合理地切換答案,讓他繼續進行思考和探索,直到他表示「沒辦法了」為止。

大多數人只知道按自己曾操作過的模式,去解決自己曾解決過的問題。最典型的是一上來就去翻SQL慢查詢,我說沒有慢查詢,他們就一籌莫展了。要知道,現實工作中我們遇到的問題,大多都是以前沒有經歷過的新問題,如果只會靠百度找答案的話那就完蛋了。

而優秀的求職者知道如何通過設計針對性的測試,來迅速縮小問題的範圍。他們會有條不紊地提出一系列問題,排除最有可能的原因:上線事故、遭受攻擊、流量變化、服務異常……這些都是多年處理問題的經驗沉澱,可以說是處理問題的「緩存」。然而優秀者並不依賴緩存,當緩存沒有命中時,優秀者也具備按索引查找的能力,必要時還可以啟動全表掃描。

該不該提前結束面試?

不管面試進展如何,我每次都會用足一個小時,對此領導頗有微詞,認為我在浪費時間,有些人聊上15分鐘就可以打發走了。而我覺得面試是雙方共同選擇的結果,雙方的時間是等價的(實際上由於路途往返的原因,求職者時間成本會更高一些),所以我應該給求職者足夠的時間和展示機會。我總會把事情往好的方向考慮:

會不會我正好問到的是他不熟悉的領域?
他是不是有點緊張,沒有發揮好?
……

退一萬步講,儘管這個人明顯不能滿足招聘的要求,但由於每天下午的日程安排都很緊湊,就算提前結束了面試,多出來的一點點碎片化時間也無法拿來做高產出的工作,只能被無謂地消耗掉。

與其這樣,我更願意在接下來的時間裡,讓他多積累一點面試經驗,幫助他發現自己的問題出在哪裡,給他一些可行性的建議,對他產生一些好的影響,讓自己這一個小時變得更有價值一些。哪怕就算是幫求職者做下職業規劃,順便給公司做下正面宣傳也是好的。

沒有達到預期的目的,並不一定就在浪費時間。一次理想的面試下來,無論結果是否通過,面試雙方都應該得到了成長。在面試過程中,求職者和我的知識體系發生直接碰撞,雙方都有可能得到思路上的啟發,並認識到自己在某個領域的認識上不夠完整和嚴謹。通過向求職者追問和解說,我不僅鍛鍊了自己的表達和總結能力,也鞏固並強化了自己的知識體系。

不過,我回過頭來也需要反思:

為什麼這名求職者能夠通過我的初篩?
我在哪些環節還可以改進,以避免類似的情況再次發生?
……

後話

面的人多了,我就不禁想在為數不多的通過面試者身上找到一些共同的特質,藉此提升以後面試的效率和準確率。結果發現,應聘者大致可以分為以下兩類:

有的人想讓自己變得更優秀。他們會把面試看作一次學習和成長的機會,當遇到不會的問題時坦誠自己不知道並謙虛求教。他們在說「不知道、沒用過、沒聽過」時,不會覺得不好意思。因為他們明白「全知全能」是絕無可能的,也是毫無意義的。

有的人只是想讓自己看起來很優秀。他們會把面試當作看作一次表演,為了維護自己的形象,即便不懂也要裝懂,演著演著連自己都相信自己真的已經懂了。當面試者指出他們的問題時,他們便進入防禦戰鬥姿態,千方百計要證明自己是強者。孰不知只有弱者,才會想用語言來證明自己很強。而真正的強者,只是默默地站在自己「做到」的結果旁邊。

下面這張圖引自劉傳的「認知學習法」課程:


不同的思維模式,決定了人是持續成長還是固步自封。然而只要你能意識到自己的思維模式,就可以改變它。就像給大腦刷一個新版本的作業系統一樣。

你,是哪一種?

(本文初稿寫於2017.3.13,經重新修訂與補充章節)

我堅信

一個人的價值

並不在於他得到過什麼

而在於他給這個世界留下了什麼

相關焦點

  • 40歲的程式設計師面試,面試官委婉拒絕,看到程式設計師的表情不淡定了
    近日,在職場論壇,筆者便看到這樣一則職場案例,有位面試官吐槽道:公司面試來了一個40歲的程式設計師,因為現在已經失業半年,上有老下有小,可是在面試的時候,面試官得知程式設計師的技術能力確實比較差
  • 程式設計師婉拒面試,HR言論引爭議!網友:HR情商居然沒程式設計師高
    程式設計師婉拒面試,HR言論引爭議!網友:一個HR情商居然沒程式設計師高大概就是面試的程式設計師可能因為各種原因不想去面試這家公司,找了一個相當硬核不管是誰都無法拒絕的理由推掉了面試...但是由於朋友圈的原因被HR看到了,所以HR明白過來以後開始吐槽!
  • 「不會Linux,怎麼當程式設計師?」面試官:等著被淘汰吧!
    說起優秀程式設計師的必備技能,我想大家都可以說很多,比如:數據結構、算法、數學、程式語言等等。還來面試? 1、自學Linux,但是使用起來發現指令繁多、參數複雜,查資料又發現答案卻五花八門,甚至一度想要放棄 2、面試開發,卻因為不會Linux而直接被拒 3、到了新公司,別的開發都用
  • 程式設計師怎麼晉升最快?
    程式設計師怎麼晉升最快? 你知道嗎~~~全球大學排名的文章清華大學的計算機科學位列第一 然後就有小夥伴說了都是網際網路高薪資催動的 呃,好像也有那麼一點道理哦那網際網路行業中什麼崗位最有前景呢?
  • 35歲程式設計師面試時被嫌棄年紀大,被婉拒了
    現在都是說程式設計師都是30多歲找工作很難了,很多公司也是以30歲為門檻,不知是不是真的,程式設計師是不是青春飯我不知道,但有點可能肯定,程式設計師是技術飯。張工是一名程式設計師,最近去應聘java高級工程師崗位,面試張工的是一名年輕小夥子,看上去比張工年輕些,經過談話,得知比張工小了兩歲。雙方剛開始面談還談得很融洽,可面試官最後卻說,張工年紀太大,不適合貴公司的工作崗位。張工聽了有點不可思議,年紀大?面試前,你們不就知道我的年紀了嗎?
  • 程式設計師硬核婉拒面試,HR言論引爭議!網友:大爺當慣了,不讓拒絕
    也許面試的程式設計師出於各種原因不想面試公司,所以無論誰也不能拒絕,他都以非常艱難的理由拒絕了面試...但是人力資源部看到是因為朋友圈,所以人力資源部明白了,並開始吐出這句話! 合理地說,通常面試被推遲的時候會被推遲。你不需要這個面試機會,你面試的公司不一定是你的。沒什麼好說的。雖然原因有點難懂,人力資源的脾氣卻有些沒道理!
  • 5年經驗大專程式設計師面試:屢戰屢敗,終於知道學歷的重要性
    5年經驗大專程式設計師面試:屢戰屢敗,終於知道學歷的重要性!都說學歷就是一塊敲門磚,年輕的時候,很多人都光顧著玩,不認真學習,以至於上不了好的大學,等到步入社會才知道,學歷對我們是多麼的重要。近日,一位程式設計師發帖表示:自己5年工作經驗的Java,大專學歷,一般都是項目Leader,帶團隊2年,前後端都會寫,框架也會搭建,目前新技術都會,想在深圳找個20K,你們覺得我的要求高嗎,上家公司在上海19K,這幾個星期天天面試,沒有一點消息,是不是我要高了。
  • 新手程式設計師注意了:程式設計師老鳥教你如何準備面試!
    相信對於很多剛畢業的新手程式設計師來說,如何找到一份工作?如何準備自己的面試?相比而言還是比較迷茫的!畢竟很多新手都存在研發經驗相對較少或者直接沒有研發經驗的情況。這種情況下,小夥伴對求職過程中的面試環節了相比而言還是比較擔心的,這一點小編也是深有體會的。
  • 程式設計師硬核婉拒面試,HR言論引爭議!網友:大爺當慣了不讓拒絕
    特別是程式設計師,這不: 大概就是面試的程式設計師可能因為各種原因不想去面試這家公司,找了一個相當硬核不管是誰都無法拒絕的理由推掉了面試...但是由於朋友圈的原因被HR看到了,所以HR明白過來以後開始吐槽
  • 程式設計師的三大難題:禿頂、面試、找女朋友
    多數程式設計師都不太喜歡跟外行解釋程式設計師到底是幹什麼的,但是因為白板面試太遭程式設計師恨了,以至於多數也不得不跟外行吐槽什麼是白板面試,可見白板面試到底有多讓人頭疼。很多人都覺得白板面試飽受詬病,但是不論國內外,白板面試反倒是越來越火。
  • Java程式設計師面試時遇到基本概念該怎麼解讀
    對於Java程式設計師來說,在面試的過程中,如果遇到一些基礎概念,要想解釋清楚往往還是具有一定難度的,而且面試官可以通過應聘者對於這些基礎概念的理解,來判斷其對於Java程式語言的理解程度。Java中的基本概念雖然看似簡單(每天都在用),但是要想解釋清楚也並不容易,也能夠在很大程度上說明程式設計師對於Java語言自身的認知程度。所以,對於Java開發人員來說,不論是面試初級開發崗位,還是主力開發崗位,都應該重視對於Java基礎概念的理解。
  • 面試感悟:3年工作經驗java程式設計師應有的技能
    面試完LZ多方了解了一下,對方認為我基本功什麼的都不錯,但是實際項目經驗還是欠缺一些,因為對方是創業型公司,需要人上手就能幹活,因此我在這個時候還不是特別適合他們團隊至於其他成功的四家公司,給LZ的面試評價都挺高的貌似,但LZ也不想記流水帳,因此就不一一列舉每家公司的面試過程了,下面LZ主要談談作為一名工作三年左右的Java程式設計師應該具備的一些技能以及個人的一些其他感悟。
  • 程式設計師面試時的自我介紹想要「脫穎而出」?幾個必知的面試小技巧
    前言「誰的程式設計師生涯沒幾次跳槽?」,對於程式設計師這種高流動性的崗位來說,面試其實可以說得上是「家常便飯」。面試官想要聽到什麼?首先,小王同學認為,面試官想聽到隱藏在簡歷裡面的深度。因為對方公司邀請你過來面試,肯定是仔細看過了你的簡歷,對你的簡歷內容感興趣。也就是說,面試官是提前在你的簡歷上下過功夫的。
  • 提高程式設計師面試技能,我推薦這10本書
    程式設計師求職面試(微信號:CoderJob)整編
  • 3年的java程式設計師,歷經3月7輪面試入職阿里,最後薪資意外
    最近有一名java程式設計師,成功拿到了阿里雲的offer, p6的java開發崗,這本來算是一件可喜可賀的事情,可是這名java程式設計師怎麼也高興不起來,並且還是相當的糾結,這是為什麼呢?,況且我想這三個月來這名程式設計師沒少請假,在上家公司的狀態也不會好到哪裡去,也許領導已經看出問題,只不過沒說罷了,如果繼續呆在上家公司也不是很好,這讓他陷入兩難境地。
  • 程式設計師因事來不及參加面試,給面試官發了一條簡訊,HR連連稱讚
    大家不斷地在適應新生活,在新的環境中找尋新的工作機會和工作環境,那麼面試就成了家常便飯。近期網上傳出這樣一個帖子,一個HR在帖子中說道,最近面試了一個程式設計師,因為家裡有事來不及參加面試,所以發了條簡訊過來,看到簡訊後,面試的HR對這位程式設計師很滿意,連連稱讚,決定再給這位程式設計師一次面試的機會。
  • 程式設計師面試心得:面試認真準備,強大到自己都不知道
    去面試的時候,做充分的準備是非常重要的,因為這樣不僅可以提高我們的自信心,還能提高面試的通過率。一位程式設計師就感慨:面試其實是需要認真準備的,準備後連自己都不知道自己有多強大,像阿里騰訊的面試內容其實八九不離十都在準備的內容裡面,通過面試不在話下。對於網友請教怎麼準備,樓主的解釋是:其實就是計算機網絡,數據結構,中等的算法,還有就是你做過的項目,這是主要的。
  • (面試感悟)一名3年工作經驗的程式設計師應該具備的技能
    面試完LZ多方了解了一下,對方認為我基本功什麼的都不錯,但是實際項目經驗還是欠缺一些,因為對方是創業型公司,需要人上手就能幹活,因此我在這個時候還不是特別適合他們團隊至於其他成功的四家公司,給LZ的面試評價都挺高的貌似,但LZ也不想記流水帳,因此就不一一列舉每家公司的面試過程了,下面LZ主要談談作為一名工作三年左右的java程式設計師應該具備的一些技能以及個人的一些其他感悟。
  • 國企程式設計師辭職去面試,卻反問面試官15個技術題,領導:誰面試誰
    我想大家可能都知道,如果想要去應聘一個自己心儀的工作,那麼面試就一定是重中之重,也正是因為如此,大多數應聘者在面試的時候都是唯唯諾諾的,而那只是大部分時候,除此之外,還是有很多有自信的人的,甚至有時候就自信過了頭了。
  • 面試官中文夾雜英語,程式設計師蒙了,前來圍觀的網友熱鬧了
    擁有高水準的英語能力也讓很多人在工作中如魚得水,比如文秘翻譯英文資料、業務經理和外商做商務談判、程式設計師閱讀英文文檔、在StackOverflow上查閱解決方案等。儘管有著廣泛的應用,英語在一些場景下也可能讓人感覺尷尬。最近,一位程式設計師網友就分享了他的一次英語體驗。雖然詞不多,但他表示已經聊蒙了,並且心情很不好。到底是怎麼回事呢?一起來看看吧。