
那兩年大數據崗位剛熱起來數據挖掘工程師的筆試題目不像現在這么“卷深度學習”反而特別看重基礎功底和業務直覺。阿里巴巴2016年這場筆試當年在圈子里流傳很廣我身邊好幾個朋友都參加過考完之后在群里吐槽了一整天。現在回頭看這套題的價值其實超出了“一場面試”本身——它基本劃出了數據挖掘工程師這個崗位的能力邊界概率統計、機器學習算法、數據結構、SQL、業務建模思維一個都不能少。即便放到今天這套考察邏輯依然適用只是算法框架換成了更新的版本而已。這篇文章我不打算逐題貼答案那個網上能找到不少。我更想做的是把筆試背后真正想考察的東西拆開結合當年備考和實際工作里的一些體會講清楚“數據挖掘工程師筆試到底在考什么”“每類題背后的能力要求是什么”“怎么準備才不白費功夫”。無論你是正在準備數據崗筆試的在校生還是想轉行做數據的職場人這篇文章應該都能給你一些參考。1. 2016年的這場筆試究竟在考什么能力1.1 數據挖掘工程師的崗位定位要理解筆試題目為什么這么出先得搞清楚2016年前后“數據挖掘工程師”這個崗位在互聯網公司里承擔什么角色。那會兒不像現在搞個推薦系統就是深度學習模型端到端跑通。當時的典型工作流是從埋點日志和業務數據庫里取數做清洗和特征工程訓練一個邏輯回歸或者GBDT模型上線做預測或排序再通過AB實驗驗證效果。整個過程里數據挖掘工程師是連接“數據”和“業務決策”的關鍵角色。這意味著崗位要求的能力是復合型的。你得懂業務知道GMV掉了一個點該從哪個維度的數據找原因你得會寫代碼至少SQL和Python要熟練你得懂統計和機器學習不然特征做出來不知道合不合理模型結果也不敢拍板你還得有工程意識因為模型最終要上線不能只在本地跑通Jupyter Notebook就行。2016年阿里巴巴的筆試題目本質上就是在篩選具備這種復合能力的人。整套卷子不會只考一個方向它會有計算題、算法題、SQL題、業務場景分析題各種類型交叉出現目的就是看你在“數據挖掘工程師”這個崗位上能不能全面cover住。1.2 筆試考察的三個維度從題目結構來看核心考察點可以歸納成三個維度。第一個維度是數理基礎。概率論、統計學里的經典知識點幾乎必考比如貝葉斯公式、期望方差、常見分布、假設檢驗、極大似然估計。這些不是死記硬背就能應付的往往會包裝成業務場景讓你現場計算。第二個維度是機器學習算法原理。2016年還不流行直接問Transformer和注意力機制更多是問LR邏輯回歸、SVM、決策樹、樸素貝葉斯、K-Means、協同過濾這些經典算法的推導、適用場景和優缺點。而且有些題目會故意挖坑比如給你一堆前提條件其實對應的算法根本不適用就看你有沒有真正理解算法的內在邏輯。第三個維度是工程與數據能力。SQL是肯定要考的因為這是日常取數的基本功。數據結構的基礎題也會涉及畢竟寫特征工程和UDF用戶自定義函數的時候代碼能力和算法思維很重要。還有一類容易被忽視的題是“估算題”比如“估算杭州有多少個加油站”這類題考察的是你的邏輯拆分能力這在做特征工程和數據建模時非常關鍵。我當時備考的一個體會是所有題目看似分散歸根結底都在考察“把模糊問題轉化為可計算問題”的能力。筆試不是單純考你會不會某個公式而是考你在真實業務中能不能找到用這個公式的入口。2. 核心知識點拆解統計、算法、工程三足鼎立2.1 概率統計高頻考點是怎么包裝的2.1.1 貝葉斯公式與樸素貝葉斯貝葉斯公式是當年筆試的“頂流考點”幾乎每年都有。它本身不難P(A|B) P(B|A) * P(A) / P(B)。但筆試題目往往會套一個實際場景不會直接告訴你P(A)、P(B)。舉個例子題目可能這么出某個推薦位的歷史點擊率是5%在推薦位展示的商品中被用戶收藏過的商品占比30%而在被點擊的商品中被收藏過的商品占比60%。現在一個商品被收藏了問它被點擊的概率是多少。這道題用貝葉斯公式列出P(點擊|收藏) P(收藏|點擊) * P(點擊) / P(收藏) 0.6 * 0.05 / 0.3 0.1。答案就是10%。題目本身不復雜但考場上容易亂在“哪個是條件哪個是結果”。我當時總結過一個判斷技巧先看最后問的是什么把問的內容放在條件概率的前面然后再往回找另外兩個概率。再升級一點就會和樸素貝葉斯分類器結合。題目給你一堆訓練樣本每個樣本有幾個離散特征比如“是否周末”“是否有折扣”“用戶年齡段”然后要求預測某個新樣本的類別。這時候你需要用拉普拉斯平滑來處理某個特征取值在訓練集中沒有出現的極端情況。很多人考完后悔的就是“我明明背過拉普拉斯平滑但做題的時候忘了用。”這類題目考的不是你會不會背公式而是你在具體計算時有沒有把邊界條件納入考慮。2.1.2 期望與方差的業務化包裝期望和方差的考點通常藏在“AB實驗”和“成本評估”里。比如一個活動頁有兩種設計方案方案A預計有10%的用戶會點擊點擊用戶中平均每人帶來5元收入方案B預計有15%的用戶會點擊但點擊用戶中平均每人只帶來3元收入。假設用戶量是10萬問選哪個方案。計算期望收入方案A期望收入 100000 * 0.1 * 5 50000方案B 100000 * 0.15 * 3 45000。單看期望應該是A但這里有個坑方案B的點擊率高方差表現可能更穩定。如果題目進一步問“哪個方案更穩妥”你可能還需要考慮分布和置信區間。這就是把統計學知識放進業務決策里考察而不單純是算一個數。這類題目給我的啟發是筆試想看的不是你會不會套公式而是你在一個真實業務目標面前能不能快速定義一個量化指標來輔助決策。這種思維在后來做數據挖掘的實際工作中太重要了——業務方不會問你“這個特征的方差是多少”而是問你“這個方案靠不靠譜”。2.2 經典機器學習算法推導比調參更重要2.2.1 邏輯回歸為什么是“入場券”2016年的筆試邏輯回歸的“出鏡率”高得離譜。倒不是題目多難而是它太適合出題了既能考推導又能考理解還能和業務場景結合。常見考法有三種。第一種是推導損失函數和梯度更新公式。你得能寫出似然函數、取對數、求梯度并解釋為什么用梯度下降而不是直接求解析解。第二種是問邏輯回歸的優缺點比如它為什么適合做大規模稀疏特征訓練快、可解釋性強、容易并行化但缺點是決策邊界是線性的對非線性關系擬合能力有限。第三種是給你一個實際業務場景比如預測用戶是否會流失特征是用戶的登錄頻率、訂單金額、客服投訴次數等然后問你怎么評估模型效果——這就引出了AUC、準確率、召回率等概念。我見過很多人在“為什么邏輯回歸的損失函數用交叉熵而不用均方誤差”這類題上栽跟頭。原理其實不復雜邏輯回歸的sigmoid函數會把輸出壓到0到1之間如果使用均方誤差損失函數關于參數不是凸函數梯度下降容易陷入局部最優而交叉熵損失在邏輯回歸中是凸函數有全局最優解。但考場上容易慌忘了從“凸性”這個角度去回答。備考時把這層“為什么”想透比刷十道題都管用。2.2.2 決策樹與集成學習決策樹的考點集中在特征選擇準則上信息增益、信息增益率、基尼指數這三者的區別和適用場景必須搞清楚。ID3用信息增益C4.5用信息增益率CART用基尼指數。當時常見的題是給一個數據集然后讓你手動計算某個特征的信息增益判斷該選哪個特征做分裂。這種題看起來繁瑣但其實分值是大頭只要耐心就能拿穩。我當時備考的方法是列出表格每個特征單獨算一遍寫清楚log2的計算過程避免因為粗心丟分。后來我發現手動推導決策樹的價值不只是應付筆試它能幫你真正理解為什么XGBoost會選擇某些特征做分裂調參時理解也更深。集成學習在2016年的筆試里已經有不少涉及主要考Bagging和Boosting的區別、隨機森林的隨機性體現在哪些地方樣本采樣隨機、特征選擇隨機、GBDT的負梯度擬合思路。這些問題不會問得太深但需要你用自己的話把原理說清楚。我當時總結的口訣是“Bagging減少方差Boosting減少偏差”——雖然這句話有點簡化但應付筆試的判斷類題目夠用了。2.2.3 相似度計算與聚類聚類和相似度計算幾乎是數據挖掘筆試的保留節目。歐氏距離、曼哈頓距離、余弦相似度這三種要能列出公式并說明適用場景。我記憶中有一道題給了幾個用戶對兩部電影的評分讓算用戶之間的相似度用余弦相似度還是歐氏距離結論會有差異題目故意設了這個坑讓你討論。K-Means的考點包括算法流程、如何選擇K值手肘法、輪廓系數、初始中心點的影響K-Means是對這個問題的改進。還考過一道很經典的題在K-Means迭代中如果某個簇為空怎么辦。答案是重新隨機初始化該簇中心或者將其設為距離最遠的點。這種題書上不一定會細講但實際面試和筆試都愛出因為它考察你是不是真的手寫過K-Means而不是只背了步驟。2.3 數據結構與SQL工程能力篩選2.3.1 SQL窗口函數與多表查詢SQL筆試幾乎必考因為這是數據挖掘工程師每天的日常工具。2016年的題目雖然不會要求寫太復雜的UDF但窗口函數的題目已經出現了。比如查詢每個用戶最近一次下單時間和累計下單金額這就是典型的ROW_NUMBER() SUM() OVER()組合使用。這類題目想一次做對要養成一個習慣先看題目要“每個組”的什么指標定位分組字段和排序字段再想“累計”還是“最近”決定用什么窗口函數最后再排查是不是要加WHERE過濾條件。很多人一上來就寫大段子查詢結果窗口函數簡單幾步就搞定了。多表關聯的細節也值得留意。INNER JOIN、LEFT JOIN、RIGHT JOIN的區別是必須掌握的但2016年的筆試更傾向于考察關聯條件是否會“放大數據量”。比如訂單表和訂單明細表關聯如果關聯字段不是唯一鍵會產生笛卡爾積式的膨脹。這類題實際工作中太常見了我那時候就踩過坑訂單表一個訂單ID對應明細表多行我只想統計訂單數結果直接JOIN之后COUNT(DISTINCT 訂單ID)數據算翻了好幾倍。筆試其實就是在提前幫你避開這種低級錯誤。2.3.2 數據結構基礎與手撕算法雖然數據挖掘崗位不像純后端那樣重算法但筆試里多少會涉及一些數據結構和算法基礎題。常見的有鏈表反轉、快排、二分查找、兩個棧實現隊列、最長公共子串等。這些題目不算難但需要你手寫或者在有限時間內給出思路。我當時的準備策略是把《劍指Offer》里高頻的30道題刷熟尤其是指針操作、遞歸和動態規劃入門題。因為筆試的算法題一般不是最難的卡住的人往往不是因為不會而是因為緊張導致代碼細節寫錯。建議平時練習時養成在紙上或白板上寫代碼的習慣畢竟線上筆試的環境和IDE差別很大沒有自動補全和調試提示。還有一類題是“大數據量下的統計”。比如給你一個超大文件里面有幾十億個整數如何在內存有限的情況下找出出現頻率最高的數。這類題考的是分治和Hash的思想先把大文件按Hash分片再分別統計每個片的最大值最后歸并。這是MapReduce思想的基礎版本也是數據挖掘工程師需要具備的“數據處理直覺”。3. 典型題型分析與解題思路復盤3.1 概率計算題從題目條件反推考點我印象里有這么一道概率題憑記憶復述大意一批商品中有5%的次品采用某種檢測方式次品被檢出的概率是98%正品被誤判為次品的概率是3%。現在隨機抽一個商品檢測結果為次品問它真的是次品的概率是多少。這道題看著繞實際上是標準的貝葉斯公式題。設A表示“商品是次品”B表示“檢測結果為次品”。題目給出P(A)0.05P(B|A)0.98P(B|非A)0.03。要求P(A|B)。用全概率公式算出P(B)0.050.980.950.030.0490.02850.0775再算P(A|B)0.049/0.0775≈0.6323。這道題的關鍵陷阱在于很多人算出63%后不敢置信覺得檢測準確率這么高怎么真次品概率才六成多。其實是因為次品率本身只有5%即使誤判率只有3%因為正品基數太大誤判出來的“次品”會很多。這就是貝葉斯公式反直覺的經典體現。做題的技巧是把條件列清楚不要憑直覺答題。我后來在實際做反欺詐模型時這個思維特別有用——模型預測“欺詐”的人里有很大比例其實不是欺詐因為欺詐本身的先驗概率太低了。理解了這一點才能正確設定閾值而不是機械地看模型的準確率。3.2 業務場景題如何把模糊問題轉化為建模問題業務場景題是數據挖掘筆試的“區分度擔當”。這類題一般沒有一個標準答案但能看出你的分析思路是否縝密。比如有一道類似這樣的題平臺發現用戶在某段時間的停留時長明顯下降讓你分析可能的原因并設計一個方案來定位問題。這道題拿到手切忌上來就談模型而是應該分層拆解。首先確認數據來源是否可靠是不是埋點上報出了問題——這是數據挖掘工程師的本能因為很多“異常”其實是數據質量問題。其次從時間維度看下降是突發性的還是持續性的是某個時間段還是全天都有從用戶維度看是全體用戶都在下降還是只有某個渠道、某個新版本、某個特定人群在下降從產品維度看最近有沒有上線新功能、改版首頁、調整推薦策略。接下來才是建模分析。如果要做歸因可以用維度下鉆對比不同維度的指標差異如果想要量化影響可以設計假設檢驗或者構建一個預測模型預估“如果沒有某個改動停留時長應該是多少”再與實際值對比算出“增量”部分。我當時對這類題的感受是業務場景題沒有唯一答案但考官通過你的回答能判斷你是“只會跑模型的人”還是“能解決業務問題的人”。備考時我建議練習一個習慣——回答任何業務分析題都按“確認數據→拆解維度→提出假設→設計驗證→給出建議”這個框架來邏輯清晰了分數自然不會被壓。3.3 估算題以“北京有多少輛出租車”為例估算題在筆試里不算主流但偶爾會出現而且實際面試中問得更多。數據挖掘工程師做特征工程時經常需要估算一些指標的合理范圍所以這種題挺能體現一個人的數感。估算題的核心思路是“從需求端拆分”。比如問“一個城市一天產生多少筆外賣訂單”可以從人口端拆城市常住人口約2000萬外賣滲透率假設30%即600萬潛在用戶其中每天實際下單的比例假設20%那日活躍用戶約120萬每人每天平均下單1.2單所以總訂單約144萬單。如果你對數字沒有概念寧可先給出一個粗略假設也要把計算鏈路寫完整考官更看重的是邏輯而不是數字的精確度。這類題平時練習時可以多做“數量級敏感度”訓練看到任何一個宏觀數字先猜一個數量級再用乘法或除法拆解驗證。比如“全國的快遞量”“一個熱門APP的日活”“一個城市的地鐵日客運量”都試著估算一下。熟練之后在做數據質量校驗和業務異常排查時你的“數據直覺”會明顯比同行靈敏。4. 備考過程和時間投入策略4.1 我用過的備考時間軸我是提前一個月開始集中準備的前一周會先做摸底把概率統計和機器學習的基礎知識點過一遍確認自己的薄弱點在哪里。對于基礎比較扎實的同學可以直接刷真題對于基礎不夠牢固的同學我建議先用一到兩周補齊短板不然刷題時處處卡殼效率很低。我的時間分配大致是前10天專攻概率統計和機器學習算法每天上午推導2-3個算法邏輯回歸推導、樸素貝葉斯計算、決策樹手算等下午做對應的題目。中間7天主攻SQL和數據結構SQL每天練10道題從簡單查詢到窗口函數再到復雜多表關聯數據結構每天刷5道高頻題。最后一周做整套模擬嚴格按考試時間限制來把做題節奏和心態調整好。另外我強烈建議建一個“錯題本”不是簡單抄題目和答案而是寫下“我當時為什么錯”“正確思考路徑是什么”“下次怎么避免”。當年筆試前我反復翻錯題本很多容易踩的坑比如條件概率搞反、JOIN條件忘加去重、信息增益計算時漏掉log底數都能快速回憶起來這比臨時刷題管用得多。4.2 知識體系梳理優先于盲目刷題備考過程中最容易犯的錯誤是一頭扎進題海里卻忽視了構建知識框架。數據挖掘筆試的題目看似雜實際上每個知識點之間是有邏輯關系的概率統計是機器學習算法的基礎機器學習算法是業務建模的工具SQL和數據結構是工程實現的支撐。建議在正式開始刷題前先拿一張紙畫出自己的知識圖譜標出哪些是熟悉的哪些是模糊的哪些是完全不會的。根據這個圖譜安排復習節奏比你每天隨機刷題要高效得多。以概率統計為例知識圖譜可以這樣分基本概念概率公理、條件概率、獨立性、隨機變量分布函數、期望方差、常見分布、數理統計點估計、區間估計、假設檢驗、貝葉斯統計先驗、后驗、共軛分布。每一項下面再掛對應的筆試考點和常見題型復習的時候對照圖譜過一遍哪里薄弱補哪里。4.3 模擬筆試比看起來更重要模擬筆試不是自己在家做兩套題就算完。我建議嚴格按真實筆試的時間限制和環境來定時一小時不能查資料不能中途看答案做完再統一對答案。2016年那會兒線上筆試還是用牛客網或者其他在線OJ系統環境的代碼框很小沒有自動補全打錯一個括號都讓你煩躁。提前適應這種環境考場上就會穩很多。模擬完一定要做復盤。復盤不只是看錯題還要統計你每類題型的用時和正確率。比如你會發現概率計算題雖然不難但你要花20分鐘SQL題寫得順手正確率卻只有70%。這時候就要調整做題順序——拿到卷子先快速瀏覽全卷先做自己有把握的、分值高的題再做需要深入思考的題。避免在一道題上耗太久導致后面大題來不及寫。5. 數據挖掘筆試背后的行業觀察與實用心得5.1 為什么經典考點至今仍不過時2016年的筆試考題放到現在看很多內容依然是數據崗面試的高頻考點。邏輯回歸仍然是廣告點擊率預估的主力模型之一至少在深度學習大規模落地前是這樣貝葉斯公式仍然是做垃圾郵件過濾和反欺詐的基礎SQL窗口函數仍然是數據分析師的日常工具。核心原因在于數據挖掘工程師這個崗位的“底層操作系統”沒有變。無論工具換成Spark、Flink還是更復雜的深度學習框架你處理問題的思路仍然是“定義問題—拆解數據—特征工程—建模評估—業務驗證”。筆試里那些概率題和算法推導題表面考的是知識記憶實際考的是這個“操作系統”是否運行順暢。我記得入職之后參與的第一個項目是用戶流失預警。當時我們用的模型是XGBoost特征有幾十個但最初版本的效果并不好。后來我們回頭用邏輯回歸做了一版基線然后用簡單的分位數分析和交叉表去排查特征才發現有幾個特征的取值分布存在嚴重傾斜處理后模型效果才上去。這和筆試里“貝葉斯公式結合業務先驗概率判斷結果可信度”的思路一模一樣。經典知識的價值不在于它永遠是最前沿的而在于它是你理解一切新東西的骨架。5.2 筆試之外的加分項與軟實力筆試只是入場券但筆試成績高不代表你能拿到offer面試環節其實更重要。不過筆試成績對面試官的影響還是蠻大的筆試排名靠前面試時面試官會先入為主地認為你基礎扎實問問題的深度和態度都會不一樣。所以準備筆試時除了刷題我建議同時準備幾個“加分項”。第一是整理自己做過的項目哪怕只是課設或者Kaggle比賽也要能一句話講清楚“背景、數據、方法、結果”。第二是準備機器學習算法的“講故事”能力比如講XGBoost的時候不要只講公式而是講“我用它做過一個特征重要性排序發現某個特征的權重異常高排查后發現是數據泄漏”。這種活生生的案例比背誦更能加分。第三是可以看看當年的技術博客和面經了解阿里巴巴數據團隊在關注什么方向比如AB實驗的實踐、用戶畫像體系的搭建、推薦系統的冷啟動等。5.3 考后復盤與長期職業發展筆試結束后無論結果如何我都建議做一次徹底的知識清單復盤。把這次筆試中暴露出的薄弱點記下來哪怕你已經拿到offer也值得花時間補上。我當時筆試發現自己對SQL窗口函數掌握不夠熟練于是花了兩個周末專門練了50道窗口函數題后來入職第一年寫各種日報、周報SQL時幾乎沒卡過殼。基礎能力這種東西早補早受益它會成為你職業生涯里長期復利的一項投資。另外持續關注行業變化也很重要。2016年那會兒深度學習剛剛開始大規模應用自然語言處理和圖像識別已經有了比較大的突破但在推薦和廣告領域還是傳統模型占主導。過了幾年DeepFM、DIN這類深度模型就變成了標配。如果你只是守著2016年的知識體系很快就會被淘汰。筆試備考是“打底”持續學習才是數據從業者的生存方式。6. 給后來人的幾點建議最后說幾條我踩過坑之后的實在建議吧。如果你近期要參加數據挖掘工程師的筆試可以先按這幾個方向自查一下概率統計里的貝葉斯公式和全概率公式能不能脫稿寫出步驟邏輯回歸的損失函數和梯度推導能不能12分鐘內完成SQL窗口函數ROW_NUMBER、RANK、DENSE_RANK、SUM OVER能不能熟練使用決策樹三個特征選擇準則的區別能不能用一句話講清遇到一個模糊的業務問題能不能快速梳理出分析框架。如果這些基本點都過關了那么再挑戰一些綜合題和開放性題目。遇到不會的題不要慌先寫下已知條件再寫嘗試的求解思路最后給出一個階段性結論閱卷人通常會給過程分。坦白說一場筆試考的是多個維度絕大多數人都不可能完美拿分能穩定拿住基礎分適當沖擊難題就已經能在排名上超過大部分人了。還有一個小技巧筆試前找幾篇當年的面經和真題回憶帖過一遍不是為了押題而是為了知道出題風格和難度。數據挖掘筆試的題型之間差異很大有些人概率統計強但SQL弱有些人算法推導強但業務題弱提前了解題型分布你才能在考場上合理分配時間發揮出自己的最好水平。2016年的那場筆試過去很久了但我到現在依然覺得那段備考經歷很值。它不僅幫我拿到了心儀的offer更重要的是逼著我把數據挖掘的知識體系完整地梳了一遍。希望這篇文章也能幫到你祝筆試順利。