來阿里也已經三年半了,其中認識了不少台灣的朋友,也面試過不少人。很多人會以為只有技術很厲害的程序員才能加入阿里,但其實阿里招募的崗位真的很多,工程師只佔了其中一小部分,其他崗位例如:產品、設計、運營、產品等等都有大量的缺。
這邊文章想分享的是「算法工程師」的準備方式。當然其中有些部分是各種崗位通用的,也可以加減參考一下。本篇只會寫「社會招聘」的流程,「校園招聘」不再此內:
- 招募渠道
- 履歷內容
- 面試流程
- 如何準備算法面試
- 如何準備Coding面試
招募管道
一般來說我招募管道有以下幾種:
- 官網投履歷
- 內部推薦
- 獵頭推薦
- 求職平台、社交網站
- 專場活動(例如:校園徵才)
這幾種招募管道並不會有面試難度的差異,最常見的是獵頭推薦,最少見的則是專場活動。但阿里的台灣專場活動我記得挺少的,如果有遇到的話大家可以把握一下機會。
就投遞效率而言,官網投履歷是能見度比較低的選擇,因為履歷實在是太多了,很容易石沉大海。如果有獵頭推薦或是內部推薦的話能見度就會高很多。
關於求職平台與社交網站,很多用人主管會在脈脈等平台自己找人,找到人之後再走內部推薦的方式。台灣人比較常用的則是LinkedIn,在上面也有機會碰到中國各大廠的面試邀請,也包括阿里。
履歷內容
身為面試官,我看履歷會重點看兩部分:你的過往經歷、以及你是否與崗位要求匹配。
過往經歷
這部分包含你的工作經歷、專案經歷、研究經歷、團隊經歷等等方面。這部分的內容其實全部照實寫加點潤飾即可,但是對於某些經歷需要特別強調:
- 得到傑出成果的經歷:證明自己的能力
- 與崗位描述非常契合的經歷:證明自己與崗位契合
- 創新的經歷:互聯網公司特別在乎創新性
另外,在描寫經歷的過程中,可以適度地描述細節。比方說,如果你曾經做過一個技術類型的專案,你可以把裡面的技術細節寫上,例如演算法的名稱、使用的開發框架等。這部分可以幫助面試官更容易了解你的擅長領域,在面試的時候也會更可能往這部分提問,讓你更容易準備。
與崗位要求匹配
崗位要求會以條列的方式寫在JD的最下面,這部分其實還是很簡單量化的。有些人會覺得崗位要求要全部滿足才能通過面試,但其實這不是非常硬性的規定。因為崗位是為了團隊而開,而一個團隊會需要比較廣的技能樹,單一候選人符合所有技能樹的可能性其實也是很低的。只要你能夠完全升任崗位裡面的某一個領域,就可能是這個團隊需要的人。
比方說,下列這個崗位要求是我團隊的JD。如果你沒有嵌入式平台或雲端的部屬和優化經驗,但只要你對視覺算法領域足夠孰悉的話仍然有很高的機會通過面試。反過來,即使你對深度學習與圖像算法只有基本的認知,但是對部屬跟優化有很紮實的功力與經驗的話也可以通過面試。
面試流程
阿里的面試流程每個人不一定,但是以往大概會分為以下5關:
- 電話面談
- 一面
- 二面
- 交叉面(即將取消)
- HR面
最近集團公告說低層級人員的面試將取消交叉面試,所以這部分就不寫了。
電話面談
這部分會針對你履歷裡面提到的經驗作一些基本考核。通常這一關的面試官會比較在意執行的部分,所以對你的工作細節、實現方式、還有技術細節會比較關注。
在面試的時候,最好能夠在有限的時間裡面清楚描述你的工作內容,說得太多反而會讓人一頭霧水。如果我要你介紹一下你的論文,我不期望你直接從學術背景講到數學細節,我只要你跟我講你在這篇論文的貢獻與你的貢獻即可。其他你沒講的部分面試官自己會接著問的。
一面、二面
這部分與電話面談差不多,但這裡面至少有一關會包含線上筆試。筆試的內容大約落在LeetCode中Data Structure, Strings, Algorithm這些方向,難度落在Easy到Medium之間。
這兩關會由比較高階的面試官擔任,也有可能會碰到你的未來主管。因此除了會問你做過的事情之外,也會問你沒做過的事情,試圖去理解你的思考邏輯以及問題處理能力(包括非技術的崗位也是)。舉例來說,如果你曾經做過一個「基於紅外線的夜間行人檢測系統」,面試官可能會問以下問題:
- 為什麼使用紅外線?如果不用紅外線還有甚麼解決方案?
- 夜間檢測與日間檢測是否有甚麼不一樣?設計上需要甚麼修改?
- 檢測行人為什麼使用這個演算法?是否有其他方法可以達到同樣的功能?
- 現有的方案是否有應用上的限制?要怎麼突破這些限制?
- 如果在訓練資料不夠的情況,怎麼實現這個方案?
- 如果把這套系統遷移到自駕車上,會有甚麼問題?有甚麼方法可以解決?
這部分的問題並沒有標準答案,只要你能夠提出你的思考邏輯與論證就可以通過。面試官提出這些問題,是為了從面試官的能力範圍內尋找你的知識邊界與推理能力。所以對於不知道的部分不要胡亂猜想,從自己已知的部份去慢慢發想,構築一個合理的回答是最好的策略。
HR面
HR面除了談薪水之外,額外關注員工的個人特質是否符合公司文化,類似Facebook的Behavior Interview。
我建議大家對於這個問題老實回答就可以了,一是因為說謊是很容易被看穿的,二是因為來阿里報到之後半年內不適應而離職的人真的很多。想想萬一靠著套路突破了面試,離鄉背井跨過山河大海,進來發現公司真的受不了,還得再回台灣真的很累。
如果你真的想做點功課,可以參考一下阿里的新六脈神劍:
如何準備算法面試
準備算法面試,有一部份與準備學校的口試差不多,你要對於自己做過的題目與專案瞭若指掌,對於可能的問題與改進的方向都要心裡有個底,才不會臨時被問倒。
除此之外,面試官可能會提問一些比較理論或基礎的問題,比方說:
- Batch Normalization的作用是甚麼?為什麼可以?
- Depth-wise Convolution的加速原理是甚麼?
- L1-Norm, L2-Norm的差別是甚麼?怎麼選擇使用時機?
這部分依賴平時的積累,如果平常知其然而不知所以然的話很容易被問倒。我建議 AI 相關的,有時間可以把 cs231n 的上課影片看過一輪,其他多看一些技術性的Blog、討論或是影片,可以慢慢地加強這方面的基礎知識。
如何準備Coding面試
多刷LeetCode。這部分還是非常仰賴刷題的,找個朋友結伴一起刷、參加周末競賽都是很好的方法。
值得一提的是,Coding練習的時候你可以全神貫注的解題,但是面試的時候我建議多跟面試官交流。比方說:
- 看到題目的時候,對題目描述不清楚的地方直接提問。
- 開始Coding前,跟面試官說你打算怎麼寫。
- Coding中,告訴面試官你為什麼這麼寫。
- 如果你發現你寫了一個Bug,可以大方地告訴面試官,然後修正回來。
為什麼建議多跟面試官交流?因為Coding面試除了在測試你的Coding能力之外,同時也是模擬你的工作場景:讓面試官能夠跟你順暢溝通、掌握你實作的進度、並且發現隱藏的問題。相比一句話不說直接把Code全部寫出來的人,不停的對話並慢慢寫出答案的人可能會更得到青睞。
如果你發現你卡住了,那很正常,你需要的是緩下來慢慢思考。我曾經碰過一個面試的同學,剛開始五分鐘就直接說他卡住了。之後透過慢慢地思考,一步一步把問題解出來,最終我也是給了他很高的分數。卡住不算甚麼,如果面試者沒有卡住,那只說明題目出得太簡單了。
文末彩蛋
我們團隊招人啦!!!!!!
徵求跟Machine Learning, Computer Vision, Algorithm Engineering相關的各路捧由,歡迎大家聯繫我投履歷!