【資料探勘面經】騰訊+百度+華為(均拿到sp offer)--轉
最近秋招也已經慢慢接近尾聲了,從去年 8 月底開始,先後參加了 datacastle ,阿里天池,牛客網各自舉辦的資料探勘比賽(都是 top10 ),今年 4 月份又先後去百度,騰訊實習,到現在秋招快結束,也將近一年的時間,最終拿到手的比較有分量的 offer 主要是騰訊,百度,華為三家企業的 offer ,都是 sp ,下面就將過去一年的一些經驗做一下小總結,不一定是最合適的方法,但是當毫無頭緒的時候,可以參考參考。
(一) 簡介
1. 首先介紹企業對該崗位的一些能力需求,直接貼
( 1 )百度:機器學習 / 資料探勘工程師
( 2 )阿里:演算法工程師
( 3 )騰訊:基礎研究
2. 個人感覺資料探勘是一個比較大的概念,可以理解為:
資料探勘 = 業務知識 + 自然語言處理技術( NLP ) + 計算機視覺技術( CV ) + 機器學習 / 深度學習( ML/DL )
( 1 )其中業務知識具體指的是個性化推薦,計算廣告,搜尋,網際網路金融等;
( 2 )在選擇崗位時,各個公司都沒有一套標準的稱呼,但是所做的事情無非 2 個大方向,一種是主要鑽研某個領域的技術,比如自然語言處理工程師,計算機視覺工程師,機器學習工程師等;一種是將各種領域技術應用到業務場景中去解決業務需求,比如資料探勘工程師,推薦系統工程師等;具體的稱呼不重要,重要的是平時的工作內容;
PS :在網際網路行業,資料探勘相關技術應用比較成功的主要是推薦以及計算廣告領域,而其中涉及到的資料主要也是文字,所以
3. 根據之前的分析,也可以看到該崗位所需要的 3 種基本能力分別是業務經驗,演算法能力與工程能力;
(二) 入門
1. 工程能力
( 1 )程式設計基礎:需要掌握一大一小兩門語言,大的指 C++ 或者 JAVA ,小的指 python 或者 shell 指令碼;需要掌握基本的資料庫語言;
建議: MySQL + python + C++ ;語言只是一種工具,看看語法就好;
推薦書籍:《 C++ primer plus 》
( 2 )開發平臺: Linux ;
建議:掌握常見的命令,掌握 Linux 下的原始碼編譯原理;
推薦書籍:《 Linux 私房菜》
( 3 )資料結構與演算法分析基礎:掌握常見的資料結構以及操作(線性表,隊,列,字串,樹,圖等),掌握常見的計算機演算法(排序演算法,查詢演算法,動態規劃,遞迴等);
建議:多敲程式碼,多上 OJ 平臺刷題;
推薦書籍:《大話資料結構》《劍指 offer 》
( 4 )海量資料處理平臺: hadoop ( mr 計算模型, java 開發)或者 spark ( rdd 計算模型, scala 開發),重點推薦後者;
建議:主要是會使用,有精力的話可以看看原始碼瞭解叢集排程機制之類的;
推薦書籍:《大資料 spark 企業級實戰》
2. 演算法能力
( 1 )數學基礎:概率論,數理統計,線性代數,隨機過程,最優化理論
建議:這些是必須要了解的,即使沒法做到基礎紮實,起碼也要掌握每門學科的理論體系,涉及到相應知識點時通過查閱資料可以做到無障礙理解;
( 2 )機器學習 / 深度學習:掌握 常見的機器學習模型(線性迴歸,邏輯迴歸, SVM ,感知機;決策樹,隨機森林, GBDT , XGBoost ;貝葉斯, KNN , K-means , EM 等);掌握常見的機器學習理論(過擬合問題,交叉驗證問題,模型選擇問題,模型融合問題等);掌握常見的深度學習模型( CNN , RNN 等);
建議:這裡的掌握指的是能夠熟悉推導公式並能知道模型的適用場景;
推薦書籍:《統計學習方法》《機器學習》《機器學習實戰》《 UFLDL 》
( 3 )自然語言處理:掌握常見的方法( tf-idf , word2vec , LDA );
3. 業務經驗
( 1 )瞭解推薦以及計算廣告相關知識;
推薦書籍:《推薦系統實踐》《計算廣告》
( 2 )通過參加資料探勘競賽熟悉相關業務場景,常見的比賽有 Kaggle ,阿里天池, datacastle 等;
PS: 以上都是一些入門級別的介紹,在長期的學習中,應該多看頂會 paper ,多讀開原始碼,多學習優秀解決方案;
PS: 以上推薦的書籍對應的電子版可以聯絡本人( Q:1434909067 )
(三) 求職
1. 簡歷
( 1 )格式:個人資訊(姓名,聯絡方式,教育背景,求職意向,照片可有可無) + 競賽經歷 + 實習經歷 + 專案經歷 + 掌握技能 + 獲獎情況;
PS: 最好寫成一頁;
( 2 )加分:部落格, github ,競賽 top10 ,頂會 paper ;
PS: 如果感興趣的話可以聯絡我要簡歷模板( Q:1434909067 )
PS: 牛逼的簡歷可以讓你有更多的面試機會,更關鍵的是讓面試官在面試時潛意識給你打高分,當然前提是簡歷要真實,所以平時得為了牛逼的簡歷多做準備工作;
2. 海投
( 1 )國內設有該崗位且還不錯的公司:
百度,騰訊,阿里,網易(網際網路,遊戲,有道),華為,今日頭條,滴滴研究院,一點諮訊, 360 ,美團等;
( 2 )如果選擇留在廣東深圳發展,就業的機會比較少,比較好的主要就是百度深研,騰訊總部,華為深圳,京東好像在深圳也有個做資料探勘的團隊;(樓主傾向去深圳發展)
( 3 )個人建議在 3 月份的時候可以通過實習生的身份進入相關企業,爭取實習生留用;一般企業給應屆生的 hc 分配比例大概是實習生留用:校招提前批:校招正式 =4 : 3 : 3 ,實習生留用相對比較容易;
( 4 )一般投遞簡歷時,儘量聯絡公司內部的師兄師姐或者熟人,幫忙將簡歷直接給到團隊 leader 手中,這樣做的好處是可以同時面試同個公司的多個團隊,前提是簡歷在公司校招系統未被鎖定的前提下,具體情況多諮詢公司內部熟人,在求職過程中,資訊來源非常重要,一定要注意這點,不然會踩很多坑;
( 5 )加入各種求職交流群,多認識些人,共享資源;
( 6 )投簡歷時候儘量內推,很多公司內推可以免筆試;
PS :筆試純屬看 rp ,總之就是多刷題,上牛客網多練練並針對性複習就好;
3. 面試
( 1 )一般該崗位的面試起碼都有 3 輪, 2 輪技術面, 1 面 hr 面, hr 面主要看情商,這裡不多說; 2 輪技術面的區別就是越到後面面試官的級別越高,所以面試的風格也可能越偏向於技術視野等一些吹水的話題上;
( 2 )一般技術面有以下一些環節:自我介紹,專案介紹,演算法提問(推公式),資料結構提問(寫程式碼);
1 )自我介紹:一般儘量簡短,主要講清楚自己的研究方向,所取得成就以及優勢所在即可;
2 )專案介紹:簡歷上的專案一定要熟悉,介紹時候分三部曲:專案背景,專案方案,專案成果;對專案中涉及到的一些技術點一定要很熟悉;
3 )演算法提問:一般是問常見機器學習模型原理或者一些機器學習常見問題的解決方案(比如正負樣本不平衡之類的),所以常見的機器學習模型一定要很清楚原理,必須會推公式,能知道工程實現的一些 trick 的話,那你就離 sp 不遠了;
4 )資料結構提問:常見的資料結構一定要掌握,基礎的程式碼一定要會手寫(快排,冒泡,堆排,歸併排序,二分查詢,二叉樹的遍歷,二叉樹增刪查改);劍指 offer 的題目要會;有精力的話可以刷下 leetcode ;
( 3 )面試的時候多準備一些素材,在面試過程中主動引導面試官提問,比如面試官讓你講解 gbdt 原理時,這會你可以跟他說一般說起 gbdt ,我們都會跟 rf 以及 xgboost 一塊講,然後你就可以主動地向面試官輸出你的知識;面試並不是死板地你問我答,而是一種溝通交流,所以儘可能地把面試轉化成聊天式的對話,多輸出自己一些有價值的觀點而不是僅僅為了回答面試官的問題;
( 4 )在面試過程中,除了基礎的東西要掌握,可以適當地向面試官展示你的一些其他的亮點,比如跟面試官談論某些最近 paper 的進展以及一些技術方面的想法等,突出自己的與眾不同;
( 5 )不同公司的面試風格都略有不同:
1 )百度:技術派,現場面,最大的風格就是寫程式碼, 2 面技術加一面經理面,技術面必寫程式碼;
2 )阿里:內推可以電話面,主要是聊專案跟問一些基礎的資料結構方面的知識,看看劍指 offer 一般可以應付;
3 )騰訊:內推可以電話面,主要聊專案跟推公式;
4 )華為:主要聊專案,智力題以及聊價值觀之類的東西;
5 )滴滴研究院:百度系,面試風格跟百度差不多;
( 6 )常見面試題(由於有的面試時間較久,主要靠記憶寫下來)
1 )幾種模型( svm , lr , gbdt , em )的原理以及公式推導;
2 ) rf , gbdt 的區別; gbdt , xgboost 的區別(爛大街的問題最好從底層原理去分析回答);
3 )決策樹處理連續值的方法;
4 )特徵選擇的方法;
5 )過擬合的解決方法;
6 ) kmeans 的原理,優缺點以及改進;
7 )常見分類模型( svm ,決策樹,貝葉斯等)的優缺點,適用場景以及如何選型;
8 ) svm 為啥要引入拉格朗日的優化方法;
9 )假設面試官什麼都不懂,詳細解釋 CNN 的原理;
10 )海量的 item 算文字相似度的優化方法;
11 )梯度下降的優缺點;
12 ) em 與 kmeans 的關係;
13 ) L1 與 L2 的區別以及如何解決 L1 求導困難;
14 )如何用盡可能少的樣本訓練模型同時又保證模型的效能;
15 )解釋 word2vec 的原理以及哈夫曼樹的改進;
16 )對推薦演算法的未來看法;
17 )在模型的訓練迭代中,怎麼評估效果;
18 )有幾個 G 的文字,每行記錄了訪問 ip 的 log ,如何快速統計 ip 出現次數最高的 10 個 ip ;如果只用 linux 指令又該怎麼解決;
19 )一個繩子燒完需要 1 個小時,假設所有繩子的材質都不一樣,也不均勻,怎麼取出 1 小時加 15 分鐘;
20 )假設有個 M*N 的方格,從最左下方開始往最右上方走,每次只能往右或者往上,問有多少種走法,假設中間有若干個格子不能走,又有多少種走法;
21 )實現 hmm 的狀態轉移程式碼;
22 )最短路徑程式碼;
23 )拼車軟體是如何定價的以及如何優化;
24 ) 100 張牌,每次只能抽一張,抽過的牌會丟掉,怎麼選出最大的牌;
25 )怎麼預測降雨量;
26 ) kmeans 程式碼;
27 ) mr 方案解決矩陣相乘的程式碼;
28 ) sql 語句的一些優化技巧;
29 )關於叢集排程的一些經驗 trick 掌握多少;
30 )設計一個系統可以實時統計任意 ip 在過去一個小時的訪問量;
31 )設計 LRU 系統;
PS: 以上的面試題僅供參考,主要是提供一個方向,大概瞭解這個崗位的面試考核方向,具體還得多刷刷面經(牛客網);