菜鳥程序員的超神之路 -- 面試成功之道
一年前我寫過菜鳥程序員的超神之路 – 從校園到職場,承蒙不棄也從知乎騙了將近 300 贊,拖更一年姍姍來遲帶來了超神系列的第二篇,算是補個前傳。
近幾年在鵝廠也算面試過不下 100 名的初級與中級程序員了,雖然他們背景不同性格迥異,甚至連面試崗位的要求也有差別,然而,成功通過者就沒有共同點了嗎?當然有,我總結為以下四點:對工作經歷的充分掌控、對對知識的靈活理解、對問題的主動推進、對挑戰的好奇進取。
以下分點舉例說明。
對工作經歷的充分掌控
小H是我的一名前同事兼好友,現在在某家云主機廠商負責業務安全策略,工作之中用到了大數據分析,但模型以入門級別為主(例如邏輯回歸);小H一直希望脫離「策略」的范疇邁向「算法」的世界,但是一直覺得現在的工作經歷過分偏重業務而非算法,出去面試心底有點發虛。當我和小H聊到他們近期做的一個入侵檢測業務,我說這就是一個典型的 RNN(遞歸神經網絡)和 LSTM(長短期記憶模型、RNN 的變種)的落地場景,為什么不去試試呢?
對工作經歷的掌控能力好的面試者,首先散發著由內而外的自信心。這種自信心并不是無根之木(也面試過對互聯網數研崗位缺乏認識卻自信爆棚的跨行業求職者,無一例外悲劇),它來源于:
- 能夠清晰定義問題。比如講明白文本相似度模型是用來解決話題聚合不收斂的問題,而不是一上場就 balabala 算法有多酷炫。
- 能夠獨立思考路徑。比如引入條件隨機場是因為它有助于詞與詞之間的前后關系映射,而不是微博大V劉知遠說過這是最好的方法。
- 能夠明確問題瓶頸。比如 SVM(支持向量機)面對大規模數據集的訓練效率問題會是瓶頸,能提到這點兩眼放光就基本上沒問題了,再想到與 MapReduce 的結合更是加分項。
- 能夠嘗試潛在路徑。剛才小H就顯然是個反面案例,哪怕神經網絡并不在當前場景下最優,起碼對前沿的方法的積極應用會讓面試官給你的探索精神打個高分。沒有 low 的業務,只有 low 的方法論和執行力。
對知識的靈活理解
小U算是在校學生當中機器學習知識較為扎實的那種了,無論是傳統的機器學習還是新潮的深度學習,各種概念都是手到擒來。直到我問了一個看似簡單的送命題:ROC 和 AUC 分別是什么意思?趁著他再一次精準無誤的命中答案,我又拋出了第二個問題,ROC 和 AUC 相對于其他指標有什么區別?這時我能感覺到輕微的卡殼,那么我又拋出第三個問題,既然有準確率、召回率、F1 Score 等指標描述一個模型的好壞,為什么還需要 ROC 或 AUC?這時我開始發現小U開始顧左右而言他了。
工作和學習之間最明顯的區別就是,單純掌握知識并不形成生產力,知識只有與實踐結合才能有所用處。對知識的靈活理解,意味著當你面對一個具體的問題,你能自發與那些飄在天際的理論相互印證,然后大呼一聲,哦,原來如此!所以在面試的準備環節,各個知識點最好都能通過實踐印證一遍,哪怕只是一個很小的場景,關鍵是將知識與實踐打通。
對問題的主動推進
算法工程師這個崗位的特殊之處就在于,既不像埋首于論文堆的研究員也不像流連于代碼架構的開發工程師,相比之下更加強調將前沿算法與業務場景靈活結合的能力。
小G是極少的讓我給出S評價的面試者。讓我印象尤為深刻的是,小G作為某大廠一個入職不到兩個月的新人實習生,負責一個通用分類組件的構建,實際承擔的也是執行而非主導的角色,但卻對該組件的業務需求和應用痛點了若指掌,甚至對每一痛點對應的算法優化方向也都提出了自己的見解。
當我問小G為什么能在這么短的時間內積累到這么深入的業務認識,小G的回答是這樣的:如果只是悶頭優化算法而對業務需求不管不顧,那么哪怕算法做得再精美絕倫也不會產生任何的業務價值。所以他會利用一切正式和不正式的溝通機會去了解業務方的痛點,真正做到以終為始(參見高效能人士的七個習慣),結合業務需求給出算法優化方向的建議(注意,是建議而已)。
對問題的主動推進能力一直是我最為關注的軟技能。優秀的團隊總是那些每個人都有可能成為發動機的團隊,我真心盼望能多招幾個發動機。
對挑戰的好奇進取
X是三年前面試過的一位社招候選人,當時給的無論算法能力還是開發能力評價都是優秀,但是最后我卻加了一個問號。這個問號來自于當我問他是否有什么問題要問我時,X表示沒有問題。當我不厭其煩給他介紹我們團隊的業務范圍以及待解決問題之后,我發現X也沒有任何的興奮感,只有一些客套的應對。
Y是同一時間面試的畢業生,由于我的慣例是會給面試者拋出一道海量數據排序的題目,要求直接在白紙上裸寫代碼。Y由于編程經驗嚴重不足,這個環節顯然難以完成,但是Y沒有畏難情緒,通過提問和思考把問題一步步抽絲剝繭,最終在白紙上畫出了解決問題的流程圖。
最終我們給X和Y同時發了 offer,結局卻有所不同:Y持續超出我們的預期,并取得了最高的考核績效;X因為試用期表現低于預期只能讓他遺憾離開了團隊。這其實是三年以上工作經驗候選人的普遍通病,就是容易被重復的工作磨平了好奇心和進取心,甘于去做一顆做普通的螺絲釘。而這種好奇與進取恰恰就是在職場能持續進步的根源,而反映到面試之中,就是:
- Tips A: 如果你真的對一個崗位感興趣,你就該通過一切渠道去了解公司、團隊以及團隊里的每個成員
- Tips B: 面試不等同于考試,遇到挑戰不要站在問題的角度,而是應該站在你的角度,想你有什么方法和資源去解決問題
外界許多教新手程序員面試的攻略總是聚焦于基礎和技能,但我想能從優秀的人之上再脫穎而出的,是一個人發自內心的爆發力,是一個人對待萬事萬物的方法論。希望以上的面試之道,能對你們有所啟發。