1. 程式人生 > >演算法面試和實習經驗分享

演算法面試和實習經驗分享

本人是2018屆,去年實習拿了阿里演算法工程師offer,最終順利轉正,也是看了師兄師姐的經驗,飲水思源,於是將自己的總結一份,希望能夠幫到師弟師妹。

1. 學習準備

What you want?

想清楚自己要做什麼?

  • Follow自己的興趣方向 OR 現在什麼掙錢最多?
  • 演算法對理論和最新paper的學習,而且是長期的,能否承受。
  • 演算法各大公司HC是最少的,而競爭人數在爆炸增長。

理論基礎

  1. 基本的演算法理論,分類、聚類、優化演算法、深度學習······,可以看看《統計學習方法》,吳恩達的公開課,李巨集毅深度學習課程。。。
  2. 演算法的數學推導,如GBDT等。
  3. 自己的理解,應用之後的一些看法,如優缺點,應用場景。

程式設計

刷題,劍指offer,Leetcode,自己動手實現一遍。

語言最好熟悉Java或者C++,Python和SQL要熟練,處理資料和特徵工程很重要。

深度學習框架,TensorFlow應用比較廣泛,阿里實習時ODPS裡面都可以用,PyTorch學術界應用也挺廣泛。

實際專案

導師的專案,做的有多深入,理解是否到位,用的方法是否follow最新的paper。

是否發過文章,發在哪一類期刊上面。

比賽專案

比賽賽題的理解。

名次,越靠前越好,拿獎最好。

比賽中承擔什麼角色,做了哪些工作,自己是否還有能夠提高的地方。

總結自己整個過程,做了哪些,為什麼要那麼做,目前最新的方法是怎麼做的。

2. 面試經歷

簡歷

  • 簡潔:不要超過一頁*3,簡明寫出自己的match的經歷,面試的時候再詳細聊。
  • 獎勵:一定要是與職位match的,技術的就不要寫學生會、各種水獎勵。

面試心得

簡單自我介紹,一分鐘之內,準備好措辭。

面試時候儘量別緊張,沒什麼大不了,心態穩一點。

說話之前想好再說,思路要清晰,最好有個草稿紙寫寫畫畫。

面試官的問題,一定要問清楚再回答,面對不會的問題,不要說不會,要與多溝通討論這個問題的解決路徑,你困惑的地方,他會給你一些提示。如果實在是完全不會,也可以說沒有學過,下去了解下。

如果感覺掛了,面試之後問問面試官,自己哪裡還需要加強學習的地方。

HR面不要大意,很多HR都是做技術出身的,實力也很強,即使她不懂技術,表現也要謙卑

面試問題

阿里投了菜鳥,兩輪掛掉,然後又被撈起來,面了四次(其中一次面C++,問我什麼水平,我說hello word水平,於是這一面基本算是沒面,面試官隨便問了些問題),總共阿里面了6面。

下面總結了面試的各個公司的問題(不限於阿里),其中騰訊面遊戲部門時候,面試官居然問我玩不玩遊戲,王者榮耀什麼段位,(可能這造成了我在校招的時候別人都在找工作,而我卻在玩王者榮耀),但是主要就說了下自己對於影響和傷害的理解,那個英雄bug,面試官概括說這就是遊戲平衡性。

在回答問題的時候儘量基於數學來推理,騰訊有一面和麵試官在討論一個問題時,他說很少有人繼續分析為什麼,非常地滿意。所以有時候回答完,最好再說說為什麼。

演算法理論

  1. LR,SVM,KNN,GBDT,XGBoost,K-means,決策樹,PCA等原理和推導,數學上解釋其中細節,為什麼。
  2. 對深度學習的理解,CNN,LSTM原理。熟悉那些深度學習框架。
  3. 演算法對比,ID3和C4.5卻別,XGBoost、隨機森林和GBDT區別,Adaboost和Boosting的區別。
  4. 損失函式有哪些,自己的理解。
  5. 優化方法,如rule對比sigmod優勢,是否知道其他的函式。
  6. 知道的評價方式,優缺點,如AUC.
  7. 如何防止過擬合,L0、L1正則和L2正則,為什麼L1正則具有稀疏性,為什麼要交叉驗證。
  8. 不平衡資料的處理方法。
  9. 對推薦系統的瞭解,提升CTR有哪些方法,有哪些Learning to rank方法。

程式設計&資料結構

  1. HBase原理,Hive自定義函式UDF,udf、udaf、udtf區別,gfs和hdfs區別。說說map和reduce。
  2. java多執行緒問題,生產消費者模式。執行緒和程序區別。
  3. 紅黑樹原理,B樹等,排序二叉樹,hash表,連結串列查詢時間複雜度。
  4. 資料傾斜是什麼,怎麼處理,Join時候應該注意那些操作避免資料傾斜。
  5. Python yield,惰性求值,lambda表示式。
  6. Hashmap,TreeMap,LinkedHashMap原理與區別。
  7. 劍指offer上題目,如旋轉陣列等。
  8. SQL實現特定功能。

比賽

  1. 比賽賽題理解,建模問題。
  2. 比賽中耗時最多的部分?(特徵工程);特徵工程的看法,如何設計。
  3. 細節問題,為什麼要這麼做,有什麼理論依據。
  4. 業界常用的方法,最新方法。

基礎

  1. 計算機網路:如TCP三次握手,瀏覽器輸入地址到返回頁面整個過程。
  2. 作業系統:執行緒和程序區別。

智力題

  1. 概率問題:從數學上求的概率值而做出結論,不要憑感覺。
  2. 淘寶有1億總量的商品數量,你作為一個使用者通過什麼辦法得到京東的商品總量。
  3. size為100的陣列,範圍是1-101,有兩個重複的數字,線上性時間,常數空間下找出這兩個重複的數。
  4. 一個數組,size為n,對其中n-1個數做加1操作,然後最少經過多少次使得每個數都一樣。

交叉面

  1. 深度:問一些專案問題,看你的理解程度。
  2. 視野:業界有哪些方法。

HR問題

  1. 自我介紹。
  2. 專案和比賽細節。
  3. 介紹那邊主要業務,地點,薪資,補貼等各種。
  4. 有些HR問了怎麼看他們的公司和阿里。

3. 實習經歷

實習遇到了很多大牛。主管做了十多年機器學習,一個師兄以前是國外大學老師好像,數學基礎很好,成長很快。實習生一個來自UCB的小姐姐,一個雙鴨山發論文大佬,一個愣頭青(我不說是我)。

  1. 找paper,看paper,如何在專案上應用實現。在學校看的英文文獻比較少,雖然六級過了,其實閱讀能力在直線下降,平時多看看論文至少閱讀能力不會下降。
  2. 熟悉ODPS,UDF等,在上面做資料預處理,機器學習建模工作。對於演算法整個部署的流程,上線都瞭解了。有很多資料和許可權的問題需要和不同的人溝通討論,也保持存在感。
  3. 被Challenge,心態放開,記下被Challenge的點慢慢啃,最終主管對實習的工作還是比較肯定,評價是正式員工的工作完成度。
  4. 活動很多,可以認識挺多其他部門的人,還有認識了許多同校師兄。平時組內最多的就是運動,一起打籃球比較多,隔壁組好像比較喜歡王者榮耀開黑。
  5. 杭州夏天很熱,冬天很冷,飲食的話口味比較清淡。成都才是個好地方。

總結

  1. 平時多看看paper,擴充套件自己的視野和方向,有機會自己發幾篇。
  2. 基礎要紮實,像程式設計、數學、演算法理論。
  3. 對於自己的專案或者比賽,好好總結,對於其中的點要揭示出遇到什麼樣問題,為什麼要這麼做,比賽做完之後看看別人的程式碼和答辯視訊。
  4. 多看看別人面試經驗。

時間略長,想起來再繼續補充。。。。

其實無論那個崗位,要學些什麼自己心裡也是有點B number,有時候還是有太多惰性,想要找捷徑。記得有一句話,“找一個怪獸,讓他追著你,你就不會停下”。