演算法工程師:雙非渣碩是如何獲得百度、京東雙SP
演算法工程師:雙非渣碩是如何獲得百度、京東雙SP
本人本科碩士皆雙非,和牛客大佬們沒得比,目前拿到的還可以的offer就是百度SP和京東SP,都是做的推薦演算法,其他的不說了。
先說一下個人經歷吧,學校比較水,實驗室沒有專案,實習經歷:騰訊實習+滴滴實習 比賽經歷:幾個資料探勘競賽Top5的名次。
個人感覺,演算法崗確實看學校,但如果簡歷還可以的話,還是有面試機會的,內推投的簡歷,80%都給了面試機會吧。
百度提前批(feed部)
3輪電話面,遠端桌面coding。百度的面試風格其實是比較好把控的,基本就是專案問答、coding、機器學習演算法、CS基礎,偶爾會有些概率題智力題。
演算法題:
- 兩個有序陣列求中位數(leetcode)
- 判斷平衡二叉樹(劍指offer)
- 最長上升子序列(lintcode)
- 二叉樹轉雙向連結串列(劍指offer)
- LRU cache實現(leetcode)
- 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平臺部,感覺是經歷過最難的面試,面試官的問題一個接著一個,有點咄咄逼人,無奈水平不夠,跪了,校招時候,做了筆試沒被通知面試。
- 專案介紹
- 你這個專案中間哪些地方提升,中間過程分別提升了多少CTR?
- 你專案用的分散式LR的是用什麼優化方法,引數怎麼調的,mini-batch的batch是多少? parameter-server原理,如何解決資料一致性?
- 會分散式麼,hadoop,spark會麼,說說hadoop的災難處理機制
- hadoop一個節點資料量太大拖垮reduce,怎麼辦,Hadoop本身的處理機制是怎麼樣的,手工的話可以怎麼調
- hadoop資料傾斜問題如何解決
- L1、L2的區別,L1為什麼可以保證稀疏?
- 各種最優化方法比較 擬牛頓法和牛頓法區別,哪個收斂快?為什麼?
- 深度學習的優化方法有哪些? sgd、adam、adgrad區別? adagrad詳細說一下?為什麼adagrad適合處理稀疏梯度?
- DL常用的啟用函式有哪些?
- relu和sigmoid有什麼區別,優點有哪些?
- 什麼是梯度消失,標準的定義是什麼?
- DNN的初始化方法有哪些? 為什麼要做初始化? kaiming初始化方法的過程是怎樣的?
- xgboost裡面的lambdarank的損失函式是什麼?
- xgboost在什麼地方做的剪枝,怎麼做的?
- xgboost如何分散式?特徵分散式和資料分散式? 各有什麼存在的問題?
- lightgbm和xgboost有什麼區別?他們的loss一樣麼? 演算法層面有什麼區別?
- lightgbm有哪些實現,各有什麼區別?
阿里的話二面跪了,內推的阿里媽媽,難度比較高,跪了也是意料之中。還有一些公司的面試沒有參加,滴滴(面試時間和騰訊筆試衝突了,放棄),網易(2次筆試都過了,不過拿到百度後就沒有去面了),搜狗(電話面了1面後,讓去現場面二面,放棄),拼多多(二面被面試官放鴿子)。
蘑菇街、YY、Bigo這些,主要還是問專案,參考意義不大。 PS:Bigo的推薦演算法團隊非常厲害,都是百度高T出來的,而且今年待遇非常給力。
下面說一下個人的學習經歷
雖然是CS專業,但實驗室做的方向和ML半毛錢關係沒有,且實驗室也只有我一個人在搞ML,所以也算是野路子出身了。
理論基礎:CS229視訊、西瓜書、統計學習方法、資料探勘導論、推薦系統實踐、深度學習
實踐基礎:機器學習實戰(研一時候照著書上程式碼打了一遍)、利用Python進行資料分析(照著書敲過一遍)
完成了這些基本功之後就是參加一些比賽了,剛開始入門的時候搞天池和Datacastle比賽,成績都很水,並且是孤軍作戰,箇中心酸只有親身經歷才能體會,後來研二後開始和一些外校的大神組隊,拿了幾個還可以的名次,也在大神身上學到了不少東西,所以個人感覺做比賽最好還是要組隊,思維更加開闊,一個人悶頭做很容易放棄。研二上學期末開始去實習,實習做的也是搜尋引擎、NLP、推薦演算法相關。
再說一下面試需要準備哪些
演算法工程師的面試其實就是圍繞幾項來展開的。
- 機器學習演算法理論:LR、SVM、樹模型、FM/FFM、EM、LDA、word2vec、推薦演算法等等,都會被問到,需要懂得演算法的推導、適用場景、使用的Trick、分散式實現。
- 深度學習相關:CNN、RNN、LSTM的基本原理,不同啟用函式的差異等等,如果是面的傳統機器學習崗的話,DL問的不深,但一定會問。
- 資料結構與演算法:leetcode高頻題、lintcode高頻題、劍指offer,大概這三樣準備好就夠了,校招前保證100多道題的積累量,面試時候寫code應該就手到擒來了。
- CS基礎:計算機網路、作業系統,推薦書籍:王道程式設計師面試寶典,這本書對於突擊面試很有幫助。
- 分散式:Hadoop/Spark這些,屬於加分項,會問點基本原理,還是需要看一下。
- 程式語言:雖然做比賽都是用的Python,但C++或者Java必須掌握其中一個,面試也會問一些語言相關的
- 海量資料處理:經常問的就是海量資料排序
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後臺,後臺再學一下前端。這種方法對於大部分人來說是錯誤的(大牛忽略)!你要搞機器學習就專心搞,三條線並行搞:
- python -> 刷比賽
- java -> hadoop/mapreduce/spark
- python -> 深度學習,工作沒你想象中那麼難找
1.轉載地址: https://blog.csdn.net/weixin_39069037/article/details/79689650
2.備註: 原文內容、佈局、有稍做調整,如有侵權,還請指出。