1. 程式人生 > >演算法工程師:雙非渣碩是如何獲得百度、京東雙SP

演算法工程師:雙非渣碩是如何獲得百度、京東雙SP

演算法工程師:雙非渣碩是如何獲得百度、京東雙SP

  本人本科碩士皆雙非,和牛客大佬們沒得比,目前拿到的還可以的offer就是百度SP和京東SP,都是做的推薦演算法,其他的不說了。

  先說一下個人經歷吧,學校比較水,實驗室沒有專案,實習經歷:騰訊實習+滴滴實習 比賽經歷:幾個資料探勘競賽Top5的名次。

  個人感覺,演算法崗確實看學校,但如果簡歷還可以的話,還是有面試機會的,內推投的簡歷,80%都給了面試機會吧。

百度提前批(feed部)

  3輪電話面,遠端桌面coding。百度的面試風格其實是比較好把控的,基本就是專案問答、coding、機器學習演算法、CS基礎,偶爾會有些概率題智力題。

  演算法題:

  1. 兩個有序陣列求中位數(leetcode)
  2. 判斷平衡二叉樹(劍指offer)
  3. 最長上升子序列(lintcode)
  4. 二叉樹轉雙向連結串列(劍指offer)
  5. LRU cache實現(leetcode)
  6. House Robber(leetcode)

  機器學習問題:無非就是樹模型(gbdt、xgboost、rf、lightgbm)原理,LR、FM原理,w2v原理,深度學習在推薦系統上應用(和麵試官討論了google的兩篇paper,其中wide&deep network講的時間比較長),神經網路embedding層和w2v中的embedding的實現區別,其他的記不清了。CS基礎:程序執行緒區別,多執行緒實現方式,執行緒衝突是什麼、怎麼解決,TCP三次握手細節,海量資料排序(分治),其他的不記得。

京東提前批(廣告部)

  2輪電話面,遠端寫code。京東的面試個人覺得不是太難,廣告部今年招人比較多,面試內容的話也是圍繞專案+機器學習演算法來問的,本人有京東演算法賽Top20,可能也是個加分項吧。

  演算法題:連結串列翻轉、判斷平衡二叉樹、最長公共子序列、海量資料topk問題、蓄水池抽樣演算法

  機器學習問題:也是簡歷上寫的演算法來問的,以及問了一些DL的基礎,不難。

蘑菇街

2輪電話面+1輪CTO面。

蘑菇街的面試只是圍繞專案進行的,2輪各30分鐘左右,都是在問專案,以及專案中用到的技術、演算法,不難。

騰訊

  對實習所在部門的工作不感興趣,於是提前離職參加了提前批。面了AI平臺部,感覺是經歷過最難的面試,面試官的問題一個接著一個,有點咄咄逼人,無奈水平不夠,跪了,校招時候,做了筆試沒被通知面試。

  1. 專案介紹
  2. 你這個專案中間哪些地方提升,中間過程分別提升了多少CTR?
  3. 你專案用的分散式LR的是用什麼優化方法,引數怎麼調的,mini-batch的batch是多少? parameter-server原理,如何解決資料一致性?
  4. 會分散式麼,hadoop,spark會麼,說說hadoop的災難處理機制
  5. hadoop一個節點資料量太大拖垮reduce,怎麼辦,Hadoop本身的處理機制是怎麼樣的,手工的話可以怎麼調
  6. hadoop資料傾斜問題如何解決
  7. L1、L2的區別,L1為什麼可以保證稀疏?
  8. 各種最優化方法比較 擬牛頓法和牛頓法區別,哪個收斂快?為什麼?
  9. 深度學習的優化方法有哪些? sgd、adam、adgrad區別? adagrad詳細說一下?為什麼adagrad適合處理稀疏梯度?
  10. DL常用的啟用函式有哪些?
  11. relu和sigmoid有什麼區別,優點有哪些?
  12. 什麼是梯度消失,標準的定義是什麼?
  13. DNN的初始化方法有哪些? 為什麼要做初始化? kaiming初始化方法的過程是怎樣的?
  14. xgboost裡面的lambdarank的損失函式是什麼?
  15. xgboost在什麼地方做的剪枝,怎麼做的?
  16. xgboost如何分散式?特徵分散式和資料分散式? 各有什麼存在的問題?
  17. lightgbm和xgboost有什麼區別?他們的loss一樣麼? 演算法層面有什麼區別?
  18. lightgbm有哪些實現,各有什麼區別?

  阿里的話二面跪了,內推的阿里媽媽,難度比較高,跪了也是意料之中。還有一些公司的面試沒有參加,滴滴(面試時間和騰訊筆試衝突了,放棄),網易(2次筆試都過了,不過拿到百度後就沒有去面了),搜狗(電話面了1面後,讓去現場面二面,放棄),拼多多(二面被面試官放鴿子)。

  蘑菇街、YY、Bigo這些,主要還是問專案,參考意義不大。 PS:Bigo的推薦演算法團隊非常厲害,都是百度高T出來的,而且今年待遇非常給力。

下面說一下個人的學習經歷

  雖然是CS專業,但實驗室做的方向和ML半毛錢關係沒有,且實驗室也只有我一個人在搞ML,所以也算是野路子出身了。

  理論基礎:CS229視訊、西瓜書、統計學習方法、資料探勘導論、推薦系統實踐、深度學習

  實踐基礎:機器學習實戰(研一時候照著書上程式碼打了一遍)、利用Python進行資料分析(照著書敲過一遍)

  完成了這些基本功之後就是參加一些比賽了,剛開始入門的時候搞天池和Datacastle比賽,成績都很水,並且是孤軍作戰,箇中心酸只有親身經歷才能體會,後來研二後開始和一些外校的大神組隊,拿了幾個還可以的名次,也在大神身上學到了不少東西,所以個人感覺做比賽最好還是要組隊,思維更加開闊,一個人悶頭做很容易放棄。研二上學期末開始去實習,實習做的也是搜尋引擎、NLP、推薦演算法相關。

再說一下面試需要準備哪些

演算法工程師的面試其實就是圍繞幾項來展開的。

  1. 機器學習演算法理論:LR、SVM、樹模型、FM/FFM、EM、LDA、word2vec、推薦演算法等等,都會被問到,需要懂得演算法的推導、適用場景、使用的Trick、分散式實現。
  2. 深度學習相關:CNN、RNN、LSTM的基本原理,不同啟用函式的差異等等,如果是面的傳統機器學習崗的話,DL問的不深,但一定會問。
  3. 資料結構與演算法:leetcode高頻題、lintcode高頻題、劍指offer,大概這三樣準備好就夠了,校招前保證100多道題的積累量,面試時候寫code應該就手到擒來了。
  4. CS基礎:計算機網路、作業系統,推薦書籍:王道程式設計師面試寶典,這本書對於突擊面試很有幫助。
  5. 分散式:Hadoop/Spark這些,屬於加分項,會問點基本原理,還是需要看一下。
  6. 程式語言:雖然做比賽都是用的Python,但C++或者Java必須掌握其中一個,面試也會問一些語言相關的
  7. 海量資料處理:經常問的就是海量資料排序

Anyway,個人的秋招結束了(其實結束很久了),雖然有些遺憾,但拿的offer和薪資也都挺滿意了,知足,開始弄畢業論文了,希望能順利畢業吧,就寫到著吧,語序有點混亂,湊合著看吧。

PS:最近私信我的朋友太多,這裡再補充點

對於學校不那麼好的、又立志找演算法工作的同學,這裡給點建議:

一、儘快去實習!如果是3年學碩的話,研二上學期中下(11月-次年2月) 就可以去進廠裡實習了,這樣做的好處是可以避開春招實習生的招聘高峰,比較容易進大廠,據我所知,像百度、滴滴、頭條這些公司都有常年在招實習生的,當然了,大部分是在北京。那麼怎麼找這種實習呢,推薦幾種投簡歷的渠道:1. 實習僧 2. nlp job 3. 北郵人論壇的實習板塊。對於學校不那麼好的同學,如果簡歷上有一二線公司的實習經歷,那麼內推簡歷通過篩選的可能性就大的多了。

二、 關於資料探勘比賽,很多同學問我如何入門這塊,我的建議是分步進行,1. 先熟悉python的基本語法、numpy、pandas、sklearn、gensim、keras這幾個比賽中常用的庫的使用;2. 精讀優秀比賽選手的程式碼,學習比賽的套路;3. 做完以上兩步,就可以開始參與比賽了,天池、CCF、DataCaslte、Kaggle等平臺的比賽都可以,不要貪多,同一個時間段最多參加2個比賽就可以,然後每天堅持優化結果,雖然過程可能會有點枯燥,但是最終會有收穫的,經過觀察與親身實踐,這類比賽比較吃經驗(套路),要想取得比較好的名次,通常需要參加幾次比賽積累失敗的經驗才行,過程少則半年,多則一年。

三、演算法題一定要刷! 如果時間緊,就刷上面說的三件套(leetcode高頻題、lintcode高頻題、劍指offer),當然,要多刷幾遍,做到看到題目立刻想到思路並寫出bug free的程式碼。如果時間比較充裕,可以刷刷leetcode中medium和hard的題目,鍛鍊思維與編碼熟練度,總之,刷題是一個持之以恆的過程,切忌三天打魚兩天晒網!

四、專注於一個方向! 發現有些同學(包括我年輕時候),總喜歡這搞點那搞點,今天學一下機器學習,明天學一下Java後臺,後臺再學一下前端。這種方法對於大部分人來說是錯誤的(大牛忽略)!你要搞機器學習就專心搞,三條線並行搞:

  1. python -> 刷比賽
  2. java -> hadoop/mapreduce/spark
  3. python -> 深度學習,工作沒你想象中那麼難找

1.轉載地址: https://blog.csdn.net/weixin_39069037/article/details/79689650
2.備註: 原文內容、佈局、有稍做調整,如有侵權,還請指出。