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