演算法面試和實習經驗分享
本人是2018屆,去年實習拿了阿里演算法工程師offer,最終順利轉正,也是看了師兄師姐的經驗,飲水思源,於是將自己的總結一份,希望能夠幫到師弟師妹。
1. 學習準備
What you want?
想清楚自己要做什麼?
- Follow自己的興趣方向 OR 現在什麼掙錢最多?
- 演算法對理論和最新paper的學習,而且是長期的,能否承受。
- 演算法各大公司HC是最少的,而競爭人數在爆炸增長。
理論基礎
- 基本的演算法理論,分類、聚類、優化演算法、深度學習······,可以看看《統計學習方法》,吳恩達的公開課,李巨集毅深度學習課程。。。
- 演算法的數學推導,如GBDT等。
- 自己的理解,應用之後的一些看法,如優缺點,應用場景。
程式設計
刷題,劍指offer,Leetcode,自己動手實現一遍。
語言最好熟悉Java或者C++,Python和SQL要熟練,處理資料和特徵工程很重要。
深度學習框架,TensorFlow應用比較廣泛,阿里實習時ODPS裡面都可以用,PyTorch學術界應用也挺廣泛。
實際專案
導師的專案,做的有多深入,理解是否到位,用的方法是否follow最新的paper。
是否發過文章,發在哪一類期刊上面。
比賽專案
比賽賽題的理解。
名次,越靠前越好,拿獎最好。
比賽中承擔什麼角色,做了哪些工作,自己是否還有能夠提高的地方。
總結自己整個過程,做了哪些,為什麼要那麼做,目前最新的方法是怎麼做的。
2. 面試經歷
簡歷
- 簡潔:不要超過一頁*3,簡明寫出自己的match的經歷,面試的時候再詳細聊。
- 獎勵:一定要是與職位match的,技術的就不要寫學生會、各種水獎勵。
面試心得
簡單自我介紹,一分鐘之內,準備好措辭。
面試時候儘量別緊張,沒什麼大不了,心態穩一點。
說話之前想好再說,思路要清晰,最好有個草稿紙寫寫畫畫。
面試官的問題,一定要問清楚再回答,面對不會的問題,不要說不會,要與多溝通討論這個問題的解決路徑,你困惑的地方,他會給你一些提示。如果實在是完全不會,也可以說沒有學過,下去了解下。
如果感覺掛了,面試之後問問面試官,自己哪裡還需要加強學習的地方。
HR面不要大意,很多HR都是做技術出身的,實力也很強,即使她不懂技術,表現也要謙卑。
面試問題
阿里投了菜鳥,兩輪掛掉,然後又被撈起來,面了四次(其中一次面C++,問我什麼水平,我說hello word水平,於是這一面基本算是沒面,面試官隨便問了些問題),總共阿里面了6面。
下面總結了面試的各個公司的問題(不限於阿里),其中騰訊面遊戲部門時候,面試官居然問我玩不玩遊戲,王者榮耀什麼段位,(可能這造成了我在校招的時候別人都在找工作,而我卻在玩王者榮耀),但是主要就說了下自己對於影響和傷害的理解,那個英雄bug,面試官概括說這就是遊戲平衡性。
在回答問題的時候儘量基於數學來推理,騰訊有一面和麵試官在討論一個問題時,他說很少有人繼續分析為什麼,非常地滿意。所以有時候回答完,最好再說說為什麼。
演算法理論
- LR,SVM,KNN,GBDT,XGBoost,K-means,決策樹,PCA等原理和推導,數學上解釋其中細節,為什麼。
- 對深度學習的理解,CNN,LSTM原理。熟悉那些深度學習框架。
- 演算法對比,ID3和C4.5卻別,XGBoost、隨機森林和GBDT區別,Adaboost和Boosting的區別。
- 損失函式有哪些,自己的理解。
- 優化方法,如rule對比sigmod優勢,是否知道其他的函式。
- 知道的評價方式,優缺點,如AUC.
- 如何防止過擬合,L0、L1正則和L2正則,為什麼L1正則具有稀疏性,為什麼要交叉驗證。
- 不平衡資料的處理方法。
- 對推薦系統的瞭解,提升CTR有哪些方法,有哪些Learning to rank方法。
程式設計&資料結構
- HBase原理,Hive自定義函式UDF,udf、udaf、udtf區別,gfs和hdfs區別。說說map和reduce。
- java多執行緒問題,生產消費者模式。執行緒和程序區別。
- 紅黑樹原理,B樹等,排序二叉樹,hash表,連結串列查詢時間複雜度。
- 資料傾斜是什麼,怎麼處理,Join時候應該注意那些操作避免資料傾斜。
- Python yield,惰性求值,lambda表示式。
- Hashmap,TreeMap,LinkedHashMap原理與區別。
- 劍指offer上題目,如旋轉陣列等。
- SQL實現特定功能。
比賽
- 比賽賽題理解,建模問題。
- 比賽中耗時最多的部分?(特徵工程);特徵工程的看法,如何設計。
- 細節問題,為什麼要這麼做,有什麼理論依據。
- 業界常用的方法,最新方法。
基礎
- 計算機網路:如TCP三次握手,瀏覽器輸入地址到返回頁面整個過程。
- 作業系統:執行緒和程序區別。
智力題
- 概率問題:從數學上求的概率值而做出結論,不要憑感覺。
- 淘寶有1億總量的商品數量,你作為一個使用者通過什麼辦法得到京東的商品總量。
- size為100的陣列,範圍是1-101,有兩個重複的數字,線上性時間,常數空間下找出這兩個重複的數。
- 一個數組,size為n,對其中n-1個數做加1操作,然後最少經過多少次使得每個數都一樣。
交叉面
- 深度:問一些專案問題,看你的理解程度。
- 視野:業界有哪些方法。
HR問題
- 自我介紹。
- 專案和比賽細節。
- 介紹那邊主要業務,地點,薪資,補貼等各種。
- 有些HR問了怎麼看他們的公司和阿里。
3. 實習經歷
實習遇到了很多大牛。主管做了十多年機器學習,一個師兄以前是國外大學老師好像,數學基礎很好,成長很快。實習生一個來自UCB的小姐姐,一個雙鴨山發論文大佬,一個愣頭青(我不說是我)。
- 找paper,看paper,如何在專案上應用實現。在學校看的英文文獻比較少,雖然六級過了,其實閱讀能力在直線下降,平時多看看論文至少閱讀能力不會下降。
- 熟悉ODPS,UDF等,在上面做資料預處理,機器學習建模工作。對於演算法整個部署的流程,上線都瞭解了。有很多資料和許可權的問題需要和不同的人溝通討論,也保持存在感。
- 被Challenge,心態放開,記下被Challenge的點慢慢啃,最終主管對實習的工作還是比較肯定,評價是正式員工的工作完成度。
- 活動很多,可以認識挺多其他部門的人,還有認識了許多同校師兄。平時組內最多的就是運動,一起打籃球比較多,隔壁組好像比較喜歡王者榮耀開黑。
- 杭州夏天很熱,冬天很冷,飲食的話口味比較清淡。成都才是個好地方。
總結
- 平時多看看paper,擴充套件自己的視野和方向,有機會自己發幾篇。
- 基礎要紮實,像程式設計、數學、演算法理論。
- 對於自己的專案或者比賽,好好總結,對於其中的點要揭示出遇到什麼樣問題,為什麼要這麼做,比賽做完之後看看別人的程式碼和答辯視訊。
- 多看看別人面試經驗。
時間略長,想起來再繼續補充。。。。
其實無論那個崗位,要學些什麼自己心裡也是有點B number,有時候還是有太多惰性,想要找捷徑。記得有一句話,“找一個怪獸,讓他追著你,你就不會停下”。