易數(shù)據(jù)挖掘工程師筆試復盤:機器學習考點與編程題全解析)
說實話看到網(wǎng)易2023校招筆試提前批“數(shù)據(jù)挖掘算法工程師”這個崗位的時候我心里其實是有點打鼓的。一方面提前批意味著競爭更聚焦身邊全是各路神仙另一方面數(shù)據(jù)挖掘這個方向太寬泛了從傳統(tǒng)的統(tǒng)計分析到機器學習、深度學習、工程落地全都要懂一點。我投遞之后大概等了一周多收到了筆試通知用的牛客網(wǎng)系統(tǒng)三個小時題目類型有單選、多選、編程題和簡答題。整套卷子做下來最大的感受是不偏不怪但非常考驗基礎功底的扎實程度尤其是對細節(jié)的把握。這里把能回憶起來的考點和復盤心得整理出來給后面打算投遞網(wǎng)易或者類似互聯(lián)網(wǎng)大廠數(shù)據(jù)挖掘崗位的朋友一個參考幫你們少走點彎路。1. 筆試整體情況與題型分布先說一下整場筆試的大概框架。提前批的筆試時間是120分鐘或180分鐘我這場是180分鐘。題目數(shù)量不算多但是分值分布很微妙編程題占比最大其次是多選題單選題和簡答題次之。系統(tǒng)是??偷慕浀浣缑孀筮咁}目列表右邊答題區(qū)域編程題要求自備編譯器思路在線OJ判題。由于提前批的筆試通常不只是篩人還承擔著人才評級的功能所以難度不會太低也不會刻意刁難重點考察的是知識面的廣度和思維的縝密程度。從題型分布來看單選題大概10題左右覆蓋數(shù)據(jù)結構、概率統(tǒng)計、機器學習基礎、算法復雜度分析。多選題8到10題交叉考察機器學習和深度學習概念以及部分工程場景。編程題3題純算法題難度分布約為LeetCode中等偏上到困難。簡答題1到2題偏向業(yè)務場景建模和策略設計。這里特別想強調一下多選題。多選比單選要狠得多因為少選、多選、錯選都不得分。整個答題過程必須對每個選項都非常確定但凡有一絲猶豫這一題大概率就丟了。我復盤時發(fā)現(xiàn)失分最多的恰恰就在多選題的模棱兩可的部分。建議備考時一定要把概念比較性內容整理成表格例如L1和L2正則化的區(qū)別、Bagging和Boosting的區(qū)別、各種聚類算法的適用場景等。另外提一句時間分配。我身邊有同學因為單選題糾結太久導致編程題只做了一個半小時最后一道DP動態(tài)規(guī)劃題沒來得及優(yōu)化直接暴力解提交后只過了部分用例。我自己的策略是單選和多選控制在45到50分鐘簡答題控制在15分鐘剩下100分鐘全部放在編程題上。這套卷子的編程題對時間復雜度的要求很嚴格暴力解大概率只能通過少量數(shù)據(jù)。2. 數(shù)據(jù)挖掘與機器學習考點詳解數(shù)據(jù)挖掘算法工程師這個崗位筆試里機器學習的占比自然不低。網(wǎng)易的題目風格和很多公司不一樣它不直接問“什么是過擬合”而是給一個具體場景問你在這個場景下用什么方法解決。這就需要你真正理解算法的原理和使用條件而不是背八股。2.1 特征工程與數(shù)據(jù)預處理有一道多選題涉及特征的標準化和歸一化。選項里出現(xiàn)了StandardScalerZ-score、MinMaxScaler、RobustScaler、MaxAbsScaler然后給出幾個業(yè)務場景讓你選擇適合的標準化方法。比如稀疏數(shù)據(jù)、存在異常值的數(shù)據(jù)、數(shù)據(jù)分布有界的數(shù)據(jù)等。這題的核心掌握原則是如果特征大致服從正態(tài)分布Z-score是常用選擇如果數(shù)據(jù)分布有界且沒有嚴重異常值MinMaxScaler更合適如果數(shù)據(jù)含異常值RobustScaler能減少極端值影響因為它基于中位數(shù)和四分位數(shù)。這里有個很多新人容易忽略的細節(jié)標準化和歸一化在中文語境里經常混用但實際含義并不同。歸一化一般指縮放到[0,1]區(qū)間標準化指調整到均值為0、方差為1。在梯度下降類模型中特征尺度差異過大會導致收斂變慢或震蕩所以預處理非常關鍵。對于樹模型其實不做標準化影響不大但筆試題目里不會這么直白它會給你一個樹模型的場景問需要不需要預處理選項里往往藏著“特征之間存在量綱差異較大時樹模型不依賴特征縮放”這種正確表述。另外有一道關于缺失值處理的簡答題問的是在用戶行為日志數(shù)據(jù)中某個關鍵特征缺失率達到60%以上如何決定缺失值處理策略。我的答題思路是先判斷缺失機制是MCAR、MAR還是MNAR再結合特征重要性決定是刪除、填充還是單獨建模。如果是關鍵特征且與業(yè)務強相關可以考慮缺失指示變量加填充值把缺失本身當成一種信息如果特征重要性低直接丟棄反而更穩(wěn)定。網(wǎng)易這種大廠比較看重這種根據(jù)數(shù)據(jù)情況靈活選擇的思維而不是讓你無腦填均值。2.2 經典機器學習算法與模型評估筆試選擇題里出現(xiàn)了K-Means聚類的初始質心選擇問題引入了KMeans的思路。題干的問法很典型傳統(tǒng)的隨機初始化可能導致聚類結果收斂到局部最優(yōu)KMeans通過什么方式改善這一情況。選項里有“根據(jù)樣本點密度選擇質心”“按照距離已有質心的概率選擇新質心”“選取樣本中方差最大的特征對應的點”等。正確答案應該是按照概率選擇離已有質心更遠的點這題考的是對KMeans原理的理解。還有一道概率題問的是某分類器在樣本不均衡數(shù)據(jù)集上的準確率為95%能否說明模型效果很好這道題考的是評估指標的選擇在正負樣本比例懸殊時準確率沒有參考價值應該看Precision、Recall、F1-score或者AUC。網(wǎng)易的筆試比較喜歡把這類“看似正確的陷阱”藏在選項里如果你對評估指標理解得比較淺很容易被帶偏。關于AUC有一道多選考到了AUC0.7的統(tǒng)計學含義。選項里出現(xiàn)了“隨機抽取一個正樣本和一個負樣本正樣本的預測值大于負樣本預測值的概率為0.7”“模型在正負樣本上的分類準確率為70%”“模型在所有閾值下的平均F1為0.7”等。正確答案是第一個。實際上AUC衡量的是排序能力和概率預測值本身沒有直接關系。實際工作中我發(fā)現(xiàn)有的面試官會接著追問如果線上預測分數(shù)整體偏高但排序不變AUC會怎樣答案是不變。這就是AUC的排序不變性在筆試里不會直接問但理解了這一層面對類似選擇題能秒殺。2.3 過擬合與正則化從原理到應對策略網(wǎng)易有一道題特別經典在高維稀疏特征場景下如何控制過擬合選項覆蓋了L1正則化、L2正則化、Dropout、特征選擇、早停法。這類題目看起來簡單但難在判斷“哪個不能起到作用”。比如在邏輯回歸中加入L1正則化可以讓一部分特征的系數(shù)變成0這本質上是特征選擇L2正則化只會讓系數(shù)趨近于0不會為0。Dropout主要在神經網(wǎng)絡中使用對邏輯回歸無效所以如果有“使用Dropout來防止邏輯回歸過擬合”這種選項就是錯的。備考時建議把每個正則化手段的適用模型、數(shù)學表達、效果差異整理成表格。L1和L2的區(qū)別是高頻考點我見過有人直接問“加上L1正則化后為什么特征系數(shù)會為0而L2不會”這個問題要解釋清楚得從梯度更新的角度理解——L1的梯度是常數(shù)當權值為正時每次減去一個固定量最終會減到0而L2的梯度是線性的越接近0梯度越小衰減會越來越慢理論上不會真正等于0但在浮點精度限制下會趨近于0。筆試雖然不會讓你寫推導過程但理解了這個原理多選題里的“在訓練迭代過程中L1正則化可能導致部分特征權重變?yōu)?”就能大膽勾選。2.4 優(yōu)化算法選型從SGD到Adam網(wǎng)易選擇題里有一道老生常談但容易答錯的題在深度模型訓練中Adam和SGD哪個更容易收斂到尖銳極小值哪個更可能陷入局部最優(yōu)正確結論是SGD更容易收斂到平坦的極小值泛化性往往更好Adam收斂速度快但收斂點可能在尖銳區(qū)域。這題選項里如果出現(xiàn)“Adam的收斂速度通??煊赟GD”這是正確的“在相同迭代次數(shù)下Adam的泛化性能一定優(yōu)于SGD”這是錯誤的。關鍵在于“一定”這種絕對化表述筆試多選題里出現(xiàn)概率極高的絕對化字眼往往就是錯誤的點。有很多資料把Adam吹得特別好但實際工程中在CV任務里SGD帶momentum的效果常常比Adam更穩(wěn)尤其是到了訓練后期微調階段。所以筆試考到優(yōu)化算法時不要只背默認的“Adam是深度學習首選優(yōu)化器”這種結論要明白每種優(yōu)化器背后的自適應學習率機制差異——Adam對每個參數(shù)單獨調整學習率適合稀疏梯度和不平穩(wěn)目標而SGD全局使用同一個學習率需要精心調整學習率調度策略。理解這些碰到問“在什么場景下應該優(yōu)先選擇SGD而不是Adam”之類的簡答題時才能答出具體的工程化理由。3. 數(shù)據(jù)結構與算法編程題實戰(zhàn)復盤接下來進入重頭戲筆試里分值最高的編程題。數(shù)據(jù)挖掘崗位的編程題不會太偏門一般圍繞排序、查找、動態(tài)規(guī)劃、貪心、字符串處理展開。網(wǎng)易出的這3道題我印象深刻分別涉及堆、差分數(shù)組和狀態(tài)壓縮DP。下面把每道題的思路和核心代碼寫一下代碼用C描述因為筆試時我用的是C不過換Java和Python思路完全一致。3.1 第一題TopK問題的變體考察堆與排序的結合題目大意給定一個長度為N的整數(shù)數(shù)組找出其中第K大的數(shù)并且要求平均時間復雜度為O(n)空間復雜度為O(1)。常規(guī)的做法是直接sort然后取倒數(shù)第K個但這樣的時間復雜度是O(nlogn)如果N很大例如10的7次方級別會超時。這道題真正考的是快速選擇算法QuickSelect本質上是快排的partition過程平均復雜度可以達到O(n)。我當時在考場上第一反應也是堆——維護一個大小為K的最小堆遍歷數(shù)組遇到比堆頂大的元素就替換最后堆頂就是第K大。這個方法的時間復雜度是O(nlogK)能通過大部分用例但題目明確要求平均O(n)所以堆的解法可能拿不滿分。由于時間還算充裕我最后改成了快速選擇int quickSelect(vectorint nums, int left, int right, int k) { if (left right) return nums[left]; int pivot nums[left rand() % (right - left 1)]; int i left, j right; while (i j) { while (i j nums[j] pivot) j--; nums[i] nums[j]; while (i j nums[i] pivot) i; nums[j] nums[i]; } nums[i] pivot; if (i k) return nums[i]; else if (i k) return quickSelect(nums, i 1, right, k); else return quickSelect(nums, left, i - 1, k); }這里的k傳入的是目標索引比如找第1大就傳0。注意partition時用的是nums[j] pivot和nums[i] pivot也就是把大于pivot的元素往左邊放小于pivot的往右邊放這樣最終pivot的位置i就是它在降序排列中的索引。踩過的坑是隨機pivot的選擇。如果每次都取第一個元素作為pivot而且數(shù)組近有序快選會退化成O(n^2)導致最后一個大數(shù)據(jù)量的用例直接超時。我一開始取中間位置做pivot效果還行后來干脆用隨機索引雖然多了一點開銷但穩(wěn)定性好很多。筆試環(huán)境里隨機數(shù)生成器的性能也要考慮如果循環(huán)里頻繁隨機可能會有額外耗時所以只隨機一次或者取左中右三數(shù)取中是更穩(wěn)妥的方案。3.2 第二題區(qū)間操作差分數(shù)組讓復雜度大幅下降題目大意給定一個長度為N的數(shù)組初始全為0進行M次區(qū)間加法操作每次操作格式是[l, r, value]表示對[l, r]區(qū)間內每個元素加上value經過M次操作后輸出數(shù)組每個位置的值。N和M都可以達到10的5次方甚至10的6次方級別。如果直接模擬每次操作遍歷區(qū)間時間復雜度是O(NM)必然超時。正確解法是使用差分數(shù)組。差分數(shù)組diff[i]表示原數(shù)組相鄰元素的差值對區(qū)間[l, r]加value只需diff[l] value、diff[r1] - value最后對diff數(shù)組做前綴和就能還原出最終的數(shù)組。復雜度降到O(NM)。這里有個容易寫錯的邊界差分數(shù)組的長度要開成N2因為更新r1的位置可能在N1如果數(shù)組長度不夠會越界。我當時第一次寫成了N1結果最后一個位置老是不對排查了一會兒才意識到是數(shù)組越界又回來寫內存。這個題目本身不難但邊界條件能卡掉很多人尤其是用C/C做題的同學一定要留意。vectorint diff(n 2, 0); for (int i 0; i m; i) { int l, r, v; cin l r v; diff[l] v; diff[r 1] - v; } vectorint res(n); int cur 0; for (int i 1; i n; i) { cur diff[i]; res[i - 1] cur; }差分數(shù)組的思想在很多區(qū)間操作的題目里都會用到比如LeetCode 370題Range Addition以及空調、航班預訂統(tǒng)計等變體。數(shù)據(jù)挖掘崗位雖然業(yè)務上接觸這類純算法題不多但筆試就是會考所以把這些基礎模型吃透是必須的。3.3 第三題狀態(tài)壓縮DP考察位運算與遞推能力題目大意給定一個N行M列的網(wǎng)格N和M都很小不超過10但也不低于4每個格子有一個權值要求選擇若干個格子使得任意兩個被選中的格子不能相鄰上下左右都不相鄰求選中格子和的最大值。這道題其實是非常經典的狀壓DP模型——鋪磚問題或者獨立集問題。我考場上看到這道題時心里是比較穩(wěn)的因為之前刷過類似的題。思路是枚舉每一行的狀態(tài)maskmask的二進制位表示該行哪些列被選中先預處理出所有合法的行內狀態(tài)不能有相鄰位即mask (mask 1) 0再枚舉相鄰兩行的狀態(tài)組合保證上下行沒有同一列被同時選中即(mask1 mask2) 0。最后用DP[i][mask]表示前i行且第i行的選中狀態(tài)為mask時的最大權值和轉移方程是dp[i][mask] valSum(i, mask) max(dp[i-1][prevMask]) // 其中 prevMask 滿足 (mask prevMask) 0 且 prevMask 是合法狀態(tài)由于N和M不超過10每行的狀態(tài)最多有2^M 1024種但去掉相鄰位后可行狀態(tài)會大幅減少。兩層循環(huán)在所有合法狀態(tài)之間轉移總復雜度約為O(N * stateCount^2)這里stateCount在狀態(tài)少的時候可能只有10到20個完全可控。這道題真正的難點不在DP轉移本身而在于位運算的熟練度。很多人不是不知道狀壓DP而是到了考場上寫位運算的時候總是少一個括號或者少一個移位導致結果完全偏掉。我的教訓是在寫mask (mask 1) 0這類表達式時一定加括號寫成(mask (mask 1)) 0因為C的優(yōu)先級里比要高不加括號的邏輯完全變了。這種低級錯誤能讓人debug到崩潰。3.4 與數(shù)據(jù)處理常客KMP、堆排序、快速冪等熱點的聯(lián)系這次筆試雖然沒有直接考KMP和快速冪但在準備過程中這類經典算法同樣是重點。尤其是KMP數(shù)據(jù)挖掘崗位實際工作中處理文本特征時匹配模式串的需求并不少見筆試也愛出next數(shù)組求法之類的基礎題。題目里提到過對模式串pabacaba求next數(shù)組這種題型很經典思路就是前綴后綴的最長公共長度。KMP的next數(shù)組其實不難難的是不同教材對next數(shù)組的定義有差異。有的是“當前字符匹配失敗后模式串應該跳轉到的位置”有的是“最長公共前后綴的長度”。網(wǎng)易筆試如果有選擇題考到這種通常會給明確定義但如果你只記住了一種說法做題時就會發(fā)蒙。建議把兩種定義都理解清楚然后統(tǒng)一用一種做推導。我習慣用next[i]表示當?shù)趇個位置匹配失敗時模式串回退到的位置下標。在這種定義下pabacaba的next數(shù)組為[-1, 0, 0, 1, 0, 1, 2, 3]注意這里我把next[0]設為-1作為邊界。如果題目使用的是“最長公共前后綴長度”的定義則數(shù)值上會整體錯開或不同做題時務必先確認約定??焖賰缫彩枪P試??碗m然這次沒有直接出現(xiàn)但網(wǎng)易以往數(shù)據(jù)分析崗出過類似“計算a的n次方對p取?!钡念}。模運算下的快速冪核心思想是把指數(shù)按二進制拆解每次將底數(shù)平方乘上二進制位為1的部分。遞歸和迭代兩種寫法都要熟練迭代版本更推薦因為遞歸可能爆棧尤其指數(shù)范圍到10的9次方以上時。4. 深度學習的神經網(wǎng)絡題目解析數(shù)據(jù)挖掘崗位在網(wǎng)易參與的業(yè)務往往不只是傳統(tǒng)機器學習模型近些年深度模型在用戶行為預測、信息流推薦、內容理解中大范圍應用所以筆試對深度學習基礎概念的考察比例明顯上升。幾個高頻考點集中在CNN感受野計算、RNN梯度消失、注意力機制、激活函數(shù)、損失函數(shù)、Dropout原理等。這里把我遇到的和能回憶的考點拆開講講。4.1 感受野計算與卷積結構理解有一道選擇題問一個輸入為32x32的灰度圖像經過一個3x3卷積padding1stride1再經過一個2x2最大池化stride2最后再經過一個3x3卷積padding1stride1輸出特征圖的尺寸是多少這個題就是純計算公式是卷積輸出尺寸 (輸入尺寸 2 * padding - kernel_size) / stride 1池化輸出尺寸 (輸入尺寸 - kernel_size) / stride 1按公式計算第一層卷積后尺寸為32x32因為padding1保持了尺寸池化后變成16x16第二次卷積后還是16x16。所以最終輸出是16x16。這道題的陷阱在于如果你沒有考慮padding第一層變成30x30后面跟著就全錯了。另外考場上要注意題面給的是“灰度圖”還是“三通道彩色圖”如果是三通道輸入尺寸后面還要帶通道維度但卷積計算只關注空間尺寸變化。感受野的計算方式也是類似套路從最后一層往前遞推感受野大小 (輸出感受野 - 1) * stride kernel_size。建議把所有層的stride和kernel_size整理成表格從后往前算不容易出錯。4.2 從RNN梯度消失到Transformer的自注意力機制網(wǎng)易對序列模型的考察主要集中在RNN、LSTM和Transformer的比較。有一道多選題問為什么Transformer能緩解長距離依賴問題選項包括RNN的梯度傳播路徑過長導致梯度消失、LSTM通過門控機制改善了梯度流動、Transformer通過自注意力機制可以實現(xiàn)任意兩個位置之間的直接關聯(lián)、Transformer通過位置編碼引入順序信息。這些選項都是對的所以題目本質上是考你是否理解不同架構的優(yōu)劣勢。有一個常見的誤區(qū)是“LSTM完全解決了梯度消失問題”事實并非如此。LSTM通過門控可以緩解梯度消失但若序列過長梯度仍然會衰減所以長距離依賴能力依然有限。面試官和筆試多選題里都很喜歡用“完全解決”“徹底解決”這類詞作為干擾項。備考時把“緩解”和“解決”區(qū)分開這種題基本不會錯。Transformer的細節(jié)也是高頻考點。自注意力計算需要Q、K、V三個矩陣注意力打分方式使用縮放點積attention其中縮放因子是sqrt(d_k)。為什么要除以sqrt(d_k)?因為點積結果隨維度增大而增大在softmax后梯度會變得非常小需要縮放來保持梯度的穩(wěn)定性。如果筆試考到多頭注意力的維度劃分只要記住輸入維度除以頭的數(shù)量每個頭在子空間學習不同的關系即可。4.3 激活函數(shù)與損失函數(shù)的選型分析激活函數(shù)幾乎每次筆試都會涉及。單選題可能考ReLU在x0時梯度為0的特點問這種“死亡ReLU”問題如何避免。選項里有LeakyReLU、PReLU、ELU、GELU等在負半軸有非零梯度的替代方案。我復盤時發(fā)現(xiàn)網(wǎng)易特別喜歡把激活函數(shù)和梯度消失聯(lián)系起來考比如問“在深層網(wǎng)絡中Sigmoid作為隱藏層激活函數(shù)可能帶來的問題有哪些”。你需要從兩個角度回答一是Sigmoid輸出不是零均值導致后一層輸入偏正影響梯度更新效率二是在兩端飽和區(qū)域梯度接近0反向傳播時梯度連乘會迅速衰減。損失函數(shù)方面數(shù)據(jù)挖掘場景最常考的是交叉熵和Focal Loss。有一道場景題是在點擊率預估中正負樣本比例嚴重不平衡使用標準交叉熵訓練出來的模型預測值偏向低分如何改進標準做法有負樣本下采樣、調整正負樣本權重、使用Focal Loss等。筆試多選題里還可能問Focal Loss相比標準交叉熵在哪些方面做了改進——它對容易分類的樣本降低損失貢獻對難分類樣本加大權重。核心公式是FL(p_t) -alpha_t * (1 - p_t)^gamma * log(p_t)其中gamma調節(jié)專注難樣本的程度。建議把這個公式背下來因為在簡答題里如果只是說“降低易分樣本權重”而沒有寫公式會顯得不夠專業(yè)。4.4 Batch Normalization和Dropout的工程細節(jié)BatchNorm也是筆試??途W(wǎng)易喜歡考歸一化層的維度。如果輸入特征圖是[N, C, H, W]BatchNorm是在每個通道上做歸一化統(tǒng)計的均值和方差是N、H、W方向上的也就是每個通道一個均值和方差而LayerNorm是在每個樣本上做歸一化NLP里效果更好。選擇題如果問圖像分類里用BatchNorm是在哪個維度上計算應該選“通道維度”。Dropout的考察點是訓練和測試時的行為差異。訓練時以概率p隨機關閉神經元測試時保留全部神經元但為了保持期望輸出一致權重需要乘以(1-p)?,F(xiàn)在主流實現(xiàn)是inverted dropout訓練時對保留的神經元除以(1-p)測試時什么都不用做。多選題如果出現(xiàn)“測試階段需要將權重乘以(1-p)”和“測試階段不需要修改權重因為訓練時已經做了縮放”后者是正確的。這個細節(jié)特別容易混淆我當年學的時候也繞了很久。5. 業(yè)務場景題與項目經驗考察簡答題是網(wǎng)易筆試富有區(qū)分度的部分。它不考你背了多少概念而是給你一個具體的業(yè)務問題看你能不能從數(shù)據(jù)挖掘的角度給出解決方案。這類題其實是在模擬日常工作場景比純知識點更能反映一個候選人的思維成熟度。這次簡答題遇到的問題是用戶流失預測相關的題干描述相對詳細我完整復述一下我的答題思路。5.1 流失用戶定義與樣本構建題目大概是某內容類App要建立用戶流失預警模型分析用戶在平臺上的活躍行為、付費行為等數(shù)據(jù)目標是提前識別出未來30天內可能流失的用戶請設計完整的數(shù)據(jù)挖掘方案。這種問題是典型的數(shù)據(jù)挖掘項目設計題回答結構一般包括問題定義、樣本構建、特征工程、模型選擇、評估方法和上線策略。我首先把問題定義為二分類問題當前時刻T預測未來30天內用戶是否會流失。流失的定義需要明確這里我采用“未來30天內未登錄且無任何內容消費行為”作為正樣本同時設置觀察窗口和表現(xiàn)窗口。正負樣本比例為1:10左右如果直接建模需要特殊處理但題目不要求那么精確最重要的是展示你有樣本構建的意識——包括觀察端的特征取值窗口、表現(xiàn)端標簽的定義、驗證集的切分方式等。樣本構建是數(shù)據(jù)挖掘項目的基礎。我在回答中明確提出了觀察窗口為歷史30天特征是用戶在觀察窗口內的行為統(tǒng)計包括每日登錄次數(shù)、平均使用時長、近7天活躍趨勢、歷史付費金額、內容消費類型分布等。同時把訓練集按時間切分為前60天作為訓練集、中間20天作為驗證集、最后10天作為測試集避免隨機切分導致的時間穿越問題。5.2 特征工程策略與模型選擇特征工程這塊我梳理了四個方向活躍度特征、消費行為特征、內容偏好特征、生命周期特征?;钴S度特征包括近N天登錄頻次、使用時長均值、活躍間隔天數(shù)等消費行為特征關注付費金額、購買頻次、最近一次付費距今時間內容偏好特征用主題分布、類目占比、曝光到消費的轉化率生命周期特征包括注冊天數(shù)、歷史活躍度曲線斜率、是否經歷過連續(xù)活躍后停止等。這些特征既要考慮時間窗口的衰減還要關注特征在不同用戶群體間的分布差異。模型選型上我在簡答題里寫的是“以LightGBM為baseline同時嘗試LR用于可解釋性要求較高的場景后續(xù)可以引入深度模型如DIN或者BST來建模行為序列”。理由在于GBDT系列模型對表格型數(shù)據(jù)效果好訓練快特征重要性容易解釋LR簡單可部署便于業(yè)務策略溝通深度模型適合捕捉用戶行為的序列依賴但需要足夠的樣本量。筆試簡答題不需要做到這種顆粒度但展現(xiàn)出“梯度提升樹邏輯回歸兜底深度模型進階”的層次感會讓閱卷人對你的工程成長路徑產生好感。5.3 模型評估與線上A/B測試方案流失預測模型的評估不能只看準確率。我明確寫了要看召回率、精確率、F1和AUC同時對TopN用戶的命中率專門給出評估指標即模型預測流失概率最高的K個用戶中真實流失的用戶占比。這個業(yè)務導向的指標在實戰(zhàn)中比AUC更有參考價值因為線上運營資源有限需要集中觸達最有可能流失的那部分用戶。線上評估方案要提到A/B測試對照組和實驗組的劃分要保證樣本同分布實驗周期定為30天觀察兩組用戶的次日留存率、7日留存率和30日流失率差異。同時強調模型上線后需要監(jiān)控特征分布漂移設置每日特征監(jiān)控報表當分布發(fā)生顯著變化時觸發(fā)告警并考慮重訓練頻次。這類運營細節(jié)能反映你是否真的做過端到端項目而不僅僅是調包訓練。5.4 數(shù)據(jù)挖掘崗位與算法崗位的區(qū)別認知網(wǎng)易的筆試往往也會從答題思路里判斷你是否理解“數(shù)據(jù)挖掘算法工程師”和“算法工程師”的差異。數(shù)據(jù)挖掘崗位更關注從數(shù)據(jù)到業(yè)務價值的閉環(huán)算法模型只是手段落地效果和業(yè)務可解釋性同樣重要。比如在用戶流失預警場景里模型輸出只是第一步還要配合運營規(guī)則——自動給高流失概率用戶推送優(yōu)惠券、推送個性化內容、發(fā)送Push召回等。我在簡答里也加了一句“模型預測結果需要轉化為可執(zhí)行的運營策略并進行成本收益評估”這部分在算法工程師的崗位里可能不那么強調但在數(shù)據(jù)挖掘崗位里是加分項。6. 踩坑記錄與備考建議筆試結束后我花了不少時間復盤從自己丟分的地方總結出幾條比較實在的經驗也結合身邊人的情況整理成踩坑清單希望對備考的朋友們有幫助。筆試的評分有時比想象中嚴格細節(jié)決定能否進入下一輪。6.1 選項里的絕對化表達是主要丟分點整場考試最深刻的教訓就是多選題中的絕對化表述一定要小心。比如“深度學習一定優(yōu)于機器學習”“LSTM解決了RNN的梯度消失”這類帶“一定”“完全”“所有”的選項大部分時候都是錯的。但也不能一概而論個別題目選項里有“一定不會”也可能是對的關鍵要看有沒有例外情況。備考時可以把歷年題目里出現(xiàn)過的絕對化表達整理出來逐個分析對錯原因形成“敏感詞”清單考試時遇到這類字眼至少多停留10秒審視。6.2 編程題卡住的常見原因編程題丟分的原因不外乎幾種一是時間復雜度估計不足暴力方法只能過部分用例二是邊界條件不完整導致數(shù)組越界三是狀態(tài)轉移方程推導錯誤。解法改進方向是提前準備好模板二分查找、TopK、并查集、拓撲排序、滑動窗口、前綴和、差分數(shù)組、單調棧等刷題時不只是做對題目還要把模板背下來。數(shù)據(jù)挖掘崗位編程題一般不會出特別惡心的計算幾何或字符串高級算法但動態(tài)規(guī)劃、貪心和數(shù)據(jù)結構基礎是必須掌握的。6.3 時間分配策略與草稿紙使用時間分配上我建議先把所有題目快速掃一遍標記出哪些送分題、哪些需要重點突破、哪些可能要放棄。單選題一般可以直接按知識點秒答多選題如果糾結超過2分鐘就先跳過編程題從最簡單的開始做不要卡在最后一題。草稿紙上先把需要推導的公式和思路寫下來不要直接在代碼編輯器里亂敲。我筆試時遇到復雜的狀態(tài)轉移題先在草稿紙上枚舉了一個2x2小樣例推了一遍轉移過程才動手寫代碼避免了改來改去的混亂。6.4 不同基礎水平的備考側重點如果你還在校課程里有機器學習和數(shù)據(jù)結構那備考的核心就是把LeetCode熱門題型和機器學習基礎概念梳理清楚。不要只刷題不做總結每個知識點至少形成一篇自己的復盤筆記。如果你已經有實習經歷重點是回顧自己做過的項目把特征工程、模型選型、評估指標這些細節(jié)重新梳理尤其是項目里踩過的坑要能講得出深度。網(wǎng)易筆試的簡答題很貼近真實業(yè)務場景有項目經驗的人在這一塊會明顯占優(yōu)勢。從我個人投遞網(wǎng)易提前批的經驗來看校招筆試本質上是知識儲備、思維方式和臨場心態(tài)的綜合測試。數(shù)據(jù)挖掘算法工程師的崗位要求你既要懂算法又要懂業(yè)務既要能寫代碼又要能講清楚方案背后的邏輯。這篇復盤雖然無法覆蓋到每一道原題但把核心考點和復習方向都羅列出來了希望對志同道合的朋友們有參考價值。校招是持久戰(zhàn)每一場筆試都值得認真對待把每次題目都當成學習機會成功不會太遠。