6 年大厂面试官,谈谈我对算法岗面试的一些看法
文 | 不敢透露姓名的 Severus 和小軼
面試官坐在那撇著大嘴的,“咳,給你一機會,最短的時間內讓我記住你。”這個我會,我掄圓了“啪!”,扭頭我就走。我剛到家,錄取通知書就來了,請你務必馬上來一趟。
——出自郭德綱的相聲
大家好,我是Severus,一個在某廠做中文文本理解的程序員。同時,也感謝小軼與我一同討論和梳理本文的內容。
2021年的秋季招聘已經過去了,大概是從著名的“擁抱變化”開始,每一年的秋季招聘,都能看到知乎里面的陣陣哀嚎,比如,2020年算法崗一片紅海,2021年算法崗灰飛煙滅,2022年算法崗人間地獄……。算法崗招聘標準看上去水漲船高,“內卷”這個詞用在近幾年的校園招聘上再合適不過。
我瀏覽各個技術公眾號,或者技術交流平臺,也是充斥著各種各樣的面經、秋招指南等等。我深感其中存在許多觀點很是有誤人子弟的可能性。大概是由于這些文章多來源于當年剛剛斬獲 offer 的畢業生,以至于這些經驗也只是站在作者個人的面試經歷來說,普適性很低。另外,應試者自身可能也并不清楚自己秋招成功,為面試官所賞識的關鍵點是什么,因而 ta 所分享的秋招攻略可能也頗具誤導性。
那今天,我作為一個工作了6年,同時也是一個有相當經驗的面試官,乘著現在的 offer 已經該發都發了,來分享一下我 從一個面試官的角度,是怎么看待算法崗求職的 。當然,以下的面試風格,有我非常濃厚的個人印記。我的工作,兼有基礎算法研發、前沿探索以及部分工程、落地應用開發,所以自有我的面試要求及職業發展規劃,但我也敢說,搞得定我,就能搞得定大部分一二面面試官。
這篇文章將圍繞以下幾個問題展開。前兩個問題其實是我關于算法崗求職的一些概括性的觀點,后面三個問題會涉及具體的面試細節。
算法崗求職真的有那么卷嗎?
我面試時,會考察什么?
簡歷有多重要?
我如何和應試者聊項目?
只要刷完三百道 LeetCode,就一定能通過算法考察嗎?
算法崗求職真的有那么卷嗎?
那么,從我們面試官的視角來看,這個行業招聘的時候卷不卷?
這里我也想給各位計劃進入業界的在校生打一個強心針
——雖然卷,但我們也是真的很缺人!!! 我們每年面試季,能遇到真正優秀的工程師鳳毛麟角。本人工作6年有余,面試過后真正認為優秀的候選人只有4人;而最后一起共事的,僅有2人。所謂“卷”,完全是從應試者的角度看。從我們面試者的角度看,仍然是求賢若渴的狀態。所以要具備基本的信心:只要你確實具備一名合格算法崗的潛質,一定會被各個大廠爭搶。
那大家可能還是會覺得:求職者這么多的情況下,你們還是挑不出滿意的,不是更加說明算法崗求職之艱難嗎?如果我沒有名校光環,沒有頂會論文,是不是根本不可能脫穎而出?
對于這樣的疑問,我還希望能夠為大家樹立一點信心的是:名校光環/頂會論文絕不是頂級 offer 的充要條件。論文等身的清北博士卻拿不到頂級 offer 并不罕見,而普通高校本科畢業卻能拿到 SSP 的也大有人在。是否應試成功的關鍵,還是在于其本身的能力是否過關,以及與應聘崗位的需求是否 match。上面提到招來共事的2人之一,當時就沒有已發表的論文,但這沒有成為他的短板。他們的優秀在于在自身研究領域內做得足夠深入,分析問題非常全面,每一步創新有據可循,所以我認為和他合作,一定會高效且愉快。
我面試時,會考察什么?
那么,我面試的時候究竟會著重考察哪些方面呢?
關于這個內容的答案,其實我很多已經寫在了我的上一篇推送《工作6年,談談我對“算法崗”的理解》中。我這篇推送中,我分享了我眼中算法崗所必須具備的能力。那我對面試者的考察要求,其實和我個人對算法崗的理解是一脈相承的。
除了盡可能客觀地考察應試者的能力,這里我還想再補一點——那就是,我面試的最終目標還是考察我是否愿意與這個人一起共事。沒錯,面試的過程就是這樣的,不僅僅要看這個人的客觀技術水平,還要看我的主觀合作意向。也就是說,哪怕所有的問題都回答了,但如果面試過程中發現了一些非技術層面的問題。例如溝通困難、邏輯表達混亂、情商過低等,都可能作為考量因素。
列位可能要問了,非技術層面的考察會不會帶有過多面試官的主觀性?沒錯,確實并非完全客觀,但也不意味著不公平。實際上,這也就是所謂 “team match” 的過程,是完全雙向的。就像相親一樣,面試官在考察候選人是否適合,候選人也同樣要斟酌和這個面試官共事是否會愉快。
不過大家也不用過于緊張。大多數面試官,比如我,一般都是抱著“挑刺兒”的心態進行面試的。對我來說,面試的一大目標還是盡可能去挖掘候選人的優勢,而不是找不足。
基于以上目標,各個面試官都會有自己的手段。而我按照面試風格,大體分為三種:
有固定題庫,簡歷不相關的模板面試,多見于統招面
簡歷強相關,流程不固定的定制面試,多見于定向的團隊面試
二者相結合,先用模板面試初步篩選,再使用定制面試深入了解
而我大多數情況是第二種,本篇我也著重于介紹第二種面試。當然,根據候選人情況不同,我的面試流程也會直接退化到第一種面試(其實就是簡歷內容可聊的點不多的時候,只能用模板化面試先挖掘一些潛質)。
簡歷有多重要?
作為一個面試官,每一次面試之前,我也是要準備的。開始我會要到簡歷,花一點時間瀏覽一下。
網上有很多關于如何寫求職簡歷的經驗分享,對簡歷的重要性強調得很重。確實,簡歷會給我下一個第一印象,但簡歷絕不是最終 offer 的決定因素。簡歷的主要作用,是用于篩選是否給予面試機會。一般來說,只要有方向 match 的崗位,簡歷不是過于離譜,都是會給予初面機會的。事實上,我也遇到過很多簡歷平平但面試發現非常驚喜的候選人。
所以,對于簡歷,我能給出的建議就是,真誠與專注。
真誠是指實實在在的寫出自己的經歷、能力等,如果在面試的過程中發現問出來的表現和簡歷上寫的東西有區別,會是非常掉分;
專注指的是簡歷內容集中針對技術崗位的求職,甚至只針對某個細分方向。其余的東西(比如什么學生干部經歷什么的),至少對于技術崗位來講,是不需要,且不會被關注的(在我這種性格比較隔路的面試官眼里甚至可能是減分項)。
其他的方面,比如在項目經歷排序、刪減上,針對不同的崗位可能都會有不同的安排(當然項目經歷在介紹簡歷環節可能也是要調整著重點的),體驗上來講,如果是多頁的簡歷,第一頁一定是最想要對這個崗位展示的內容。
作為技術面試官,在看簡歷的時候,第一眼注意到的一定是研究經歷或實習經歷部分。看一看候選人做過什么項目,里面是怎么寫的。如果主要的研究領域我了解不足,我會花一些時間迅速了解一下該域的經典做法、前沿做法等。如果候選人貼出了論文,我也會粗讀一下,了解他選擇了什么樣的方法;如果貼了 GitHub repo,我也會翻一翻,大體觀察一下。這一套功課做下來,少則10分鐘,多則一兩小時。
如果有預設的問題,也會事先記錄下來,留著面試的時候去問,碰到簡歷上有什么疑慮(為防止被拿去反套路,這部分不會詳細闡述),也會記下來當成決定面試結果的依據。也就是說,當我看過簡歷后,自然而然地就對候選人產生了一系列的疑問,面試過程中,部分問題也是在解決這些疑問。
這里也從技術面試官的角度,談談某些關于簡歷的江湖傳聞。
首先是簡歷格式,現在絕大多數的簡歷模板都還不錯,格式上比較干凈美觀,沒什么可說的。不過,電子簡歷的格式,肯定是 pdf 為最好,盡可能不要傳 doc 的簡歷過來,因為 doc 格式文檔可能因為使用編輯軟件不同,或者同一個編輯軟件,版本不同,導致格式亂套,首先在感官上就造成了非常糟糕的體驗,而且可能一些內容會直接看不到。
相對來講,簡歷是什么郵箱地址發過來的確實沒有那么重要(不存在QQ郵箱發過來就low了,Gmail發過來就高端的說法)。至少簡歷到我手里的時候,我是不會特意去注意候選人的聯系方式那一欄的(至于篩簡歷的HR怎么想我就不知道了)。
我如何和應試者聊項目?
模板化的面試中,考察算法的方式多數是直接問基本概念、公式推導、以及一些證明之類的(例如比較著名的,BatchNorm 有什么用,SVM 公式推導),這些題目流行的現象也被戲稱為“面試八股化”。實際上,這些題目是非常容易準備的(當然針對這個也有了不少的培訓手段),畢竟,其是固定題庫,面試之前,以應試的思路突擊復習即可,形式實則更像是筆試,但有時作為初步篩選的手段是有效的,畢竟都是學校課程,這些都不會,就別談后面的東西了。
在我這里,從自我介紹開始,算法考察就開始了。
對于我比較有面試興趣的簡歷,我的第一個問題往往是:請選擇簡歷中,認為最滿意的一個項目給我整體介紹一下。這個問題實際上就是想看一下,候選人的技術品味是什么樣子的,同時也看得出,候選人對哪個項目的掌握程度是比較有自信的。在候選人介紹的過程中,遇到我感覺比較模糊或有疑慮的地方,會記錄下來。在介紹之后,一個一個確認,而在這個過程中,真正考察的,就是候選人對這個問題本身、及對他的方法背后的背景知識的理解程度。往往通過這個過程,就可以判斷,這個候選人到底是在搭積木撞運氣還是真的有本事了。這里,我關注的細節有:候選人增加的模塊自己是否知道是為什么要加。是否有理論上的推導過程以及對應的消融實驗;如果將這個模塊更換為其他的模塊是否可以。例如:將圖神經網絡建模的依存分析樹更換為 用 self-attention 直接對文本建模是否可以?圖神經網絡中是否使用了邊 embedding 將不同種關系投影到了不同的空間中?
每個項目介紹之后,我也會去詢問,這個項目如果要繼續做的話,會怎么做,繼續引出一系列的討論,而這個討論,就是宏觀層面上,技術視野的交鋒,看一下候選人對項目整體把控怎么樣,技術成長空間大不大。
通常這類問題的背后,考察的就是候選人對他所使用的算法的理解程度,到底是僅限于定義,還是有自己的理解。這個交流的過程中,有的候選人能夠完完全全說服我,有的候選人則是經不住我多次挑戰。
以上是考察候選人在自己的研究領域的深入情況。在考察完深度之后,我就會用我的一個固定題庫去試探廣度。
是的,我也有題庫,題庫里面僅僅有一道題。
▲我們的算法題上圖就是我們題庫的縮影。說是題庫,實則是我們的“面試指導書”。這道題提出了一個非常粗的需求,也只給出了大體數據規模。需要候選人從理解這個需求開始,直到將完整的算法設計出來,圖中,每一個分支都代表了一類解決方案,向下的細分支則是一個個算法的應用考察點。這就要求候選人知道,想要達到某一個目的,可以去應用什么樣的算法,遇到了某一些問題,可以用什么樣的思路去解決。我們認為,這種思路,相比于機械記憶要有價值得多。畢竟現在的深度學習有強力的框架支持,豐富的文檔。相比于精準記憶怎么推,更應該充分理解怎么用。
以上整個過程,說是面試,實則是思想交流,期間,我不僅僅是在提問題,引導候選人把自己的項目講清楚,我也會提觀點,與候選人的思想碰撞,看與候選人是否能對得上頻率。
只要刷完三百道 LeetCode,就一定能通過算法考察嗎?
專項的工程能力考察,實際上就是基礎數據結構/算法,以及代碼實現、需求實現等。
算法面試中,實際上也可以部分了解到工程能力,比如候選人對自己工作的完成情況、實驗情況等,如果算法面試中得到的反饋已經讓我對其工程能力放心了,專項的工程能力考察我或許會跳過。
我看到的很多面經,或準備面試的說辭中,多數是在 LeetCode 上下功夫,或者看一些類似于《劍指offer》之類的書,或者靠刷題博客來試圖通關基礎數據結構/算法考察。但,在我這里,單靠無腦刷題一般會失效。
可以說,很多朋友們刷題是不會刷的。他們在刷題的時候,更像是在背考試題庫,想要對題庫里面的題形成肌肉記憶,而非去理解題目背后對應的算法思維。但我們在問候選人這類題目的時候,考察的從來不是肌肉記憶、思維定勢,而是思維方式。學習數據結構/算法,從來也不是學習解決某一類或者某幾類固定問題的模板,而是學會以計算機思維高效解決問題的方式,而這些本應是 CS 專業的基本功(這里想要吐槽,一些 CS 朋友們本科課程沒學好,以為上岸 AI 了之后就更可以彌補 CS 的不足了,不是的)。在實際工程開發中,我會不斷地利用基礎數據結構/算法優化我的項目,題目也往往是從實際需求中抽象而來。
哪怕是使用成題,我會盡可能避免從 LeetCode 中或其他面試題庫中選題;哪怕是從題庫中選題,我也會在條件上有所增減,或者腦子里有一個比市面上流通的答案更好的解法(反套路),才會用于面試。而那些例如限制零內存的類似于腦筋急轉彎之類的問題,我倒是認為,至少我們不會在那樣的硬件環境里面工作,所以我也不會去考察那種問題。
其余的,例如代碼風格等,只要不是太離譜,一般我都認為是可以培養的,所以寫代碼方面的考察我倒是標準比較松。
這里插播一段有趣的經歷,幾年前我找工作的時候,流傳一個江湖傳說,就是面試的時候,如果被問到了算法題,哪怕這道題已經會了,那第一次回答的時候也說最笨的方法,等面試官說“你再想想”之后,再看似艱難地說出標準答案。但是朋友們,你們能看到的江湖傳說,面試官也能看到,莫不如真誠一些。我入行的導師告訴我,如果他真出了這種題,那一定準備好了比標準答案更好的算法,如果候選人能從暴力方法跨越到標準答案,那也一定能推出更優的方法。
巧合的是,在8月的一場面試中,我也遇到了這個套路,驚嘆于還有人使用,故在此說出,以為誡勉。
小結
以上,是我以面試官的角度,對面試的理解。出于避免被針對、被反套路,以上的內容中,沒有涉及到太具體的觀察手段,以及考評標準,具體的題目也只放了高糊圖,沒有披露細節。
寫這篇的目的,也是看著滿世界的面經,以及內卷的所謂人間地獄的哀嚎,給出一些屬于我個人的回應以及態度。自大一些,也是想講出我心中求職季的正風,希望有志于此的學生,以及需要人才的崗位,以后都能夠容易一些。
從我求職,到現在成為“老司機”,我一直堅信,技術崗位的面試、工作,貴在簡單、純粹、真誠。面試過程中的套路,終歸有在工作中見真章的時候,實習期、試用期實際上都是考察期。從我的角度,不妨功在平常,而非在套路與突擊。
最后,也祝愿所有正在求職的讀者小伙伴們都能夠找到自己滿意的工作,正在招聘的老伙伴們都能夠找到自己想要的人才。
萌屋作者:Severus
Severus,在某廠工作的老程序員,主要從事自然語言理解方向,資深死宅,日常憤青,對個人覺得難以理解的同行工作都采取直接吐槽的態度。筆名取自哈利波特系列的斯內普教授,覺得自己也像他那么自閉、刻薄、陰陽怪氣,也向往他為愛而偉大。
作品推薦
深度學習,路在何方?
數據還是模型?人類知識在深度學習里還有用武之地嗎?
在錯誤的數據上,刷到 SOTA 又有什么意義?
后臺回復關鍵詞【入群】
加入賣萌屋NLP/IR/Rec與求職討論群
后臺回復關鍵詞【頂會】
獲取ACL、CIKM等各大頂會論文集!
總結
以上是生活随笔為你收集整理的6 年大厂面试官,谈谈我对算法岗面试的一些看法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 加了元学习之后,少样本学习竟然可以变得这
- 下一篇: NLP、炼丹技巧和基础理论文章索引