尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

网易数据挖掘笔试复盘:从贝叶斯到SQL的校招能力地图

网易数据挖掘笔试复盘:从贝叶斯到SQL的校招能力地图 每一次刷到“网易2018校招数据挖掘工程师笔试卷”这个词我都会想起那年秋天自己对着屏幕死磕概率题的场景。网易的笔试在互联网校招里算是比较有辨识度的题量不算变态但覆盖面很广从贝叶斯公式到SQL窗口函数从特征选择到业务指标一套卷子能把你平时积累的知识底子翻个底朝天。很多同学以为数据挖掘笔试就是刷机器学习算法题实际做下来会发现真正拉开差距的往往是那些被忽视的工程细节和业务理解。这份试卷对后来者的参考意义不只是“曾经的真题”它更像一张岗位能力地图。如果你正在准备数据挖掘工程师、算法工程师这类岗位完全可以通过这套试卷的结构反推面试官想看你什么数学基础是否扎实、写代码是否熟练、对业务指标是否敏感、在限时压力下能否做出合理取舍。这篇文章我就按自己的回忆和复盘把整套试卷拆成几个能力维度来聊每个维度都会还原典型题目补充解题思路再附上我个人的踩坑经验。1. 一份校招笔试的定位网易要筛选什么能力1.1 为什么笔试是“大筛子”校招流程里笔试的作用不是考倒你而是用最低成本筛掉明显不匹配的人。投递数据挖掘工程师的人里有本科阶段就大量实战过的也有简历写得漂亮但代码能力为负的笔试是唯一一个相对客观的过滤环节。网易的这套试卷整体难度中等偏上但它的重点不是“难”而是“杂”——它要求你在90分钟内同时调动数学、统计、机器学习、数据库、编程甚至业务分析的能力任何一级偏科都会被无限放大。我当时考完的感受是如果考前只刷了经典机器学习算法的原理大概率会在概率题和SQL题上卡住反过来如果只练SQL不补概率论算法题里的贝叶斯和马尔可夫又会让你怀疑人生。所以这套试卷的真实定位是通过多考点交叉快速勾勒出候选人的知识结构是否完整。它不需要你每题都对但需要你在有限时间内做出策略性取舍这本身就是数据工程师日常工作的缩影。1.2 岗位能力画像看懂职位描述再做题做笔试前我先找到网易当年数据挖掘工程师的岗位要求印象里核心写着熟悉常用数据挖掘算法掌握SQL和Python具备海量数据处理经验者优先对数据敏感能独立完成数据清洗、特征工程、建模评估。关键就藏在这里笔试考查点基本按照“算法理论-数据能力-编程能力-业务思维”四个维度出题四个维度的配比大概是4:2:2:2。我说这个配比是想让后来人别把精力全压在机器学习原理上。有同学对决策树、随机森林、XGBoost的原理倒背如流但碰到一道“如何用SQL求用户连续登录天数”就懵了这种人在笔试里非常吃亏。反过来如果你能把SQL窗口函数玩得顺溜面对纯算法题只要会推导朴素贝叶斯笔试整体分数反而不会低。搞清楚岗位要求之后再刷题比盲目刷一百道LeeCode效率高得多。2. 从试卷反推的知识版图核心考点分层拆解2.1 概率统计与贝叶斯数据挖掘的理论地基网易笔试卷里概率统计的占比很重基本占了四分之一以上。题型主要有两类一类是选择题直接考条件概率、全概率公式、期望方差另一类是简答题要求你推导某个概率分布或在给定模型下计算后验概率。我记得有一道选择题大概是一个袋子中有3个红球和5个白球有放回地抽取两次已知第一次抽到红球求第二次也抽到红球的概率。这种题本质就是条件概率但因为题目用文字包装了一下一些同学会把有放回和无放回搞混。这里提醒一个高频陷阱题目中的“已知第一次抽到红球”不等于“第一次抽到红球后不放回”。如果题目没明确说明“不放回”默认就是有放回两次抽取独立答案直接是3/8。很多人在这种简单题上丢分不是因为不会而是因为读题太快。我在考场上给自己定了一个规矩概率题先圈出“有无放回”“是否独立”“是否已知”三个关键词再开始计算绝不凭直觉直接选。贝叶斯公式是必考的。常见的原型是某疾病在人群中的患病率为0.1%检测方法的灵敏度是99%假阳性率是1%现在一个人检测结果为阳性求他真正患病的概率。这道题的计算核心是用全概率公式算分母但很多人栽在“灵敏度”和“假阳性率”的概念上。灵敏度是“患病者中被检测出阳性的比例”假阳性率是“未患病者中被误判为阳性的比例”。把这个理清楚之后代入贝叶斯公式P(患病|阳性) P(阳性|患病)P(患病) / [P(阳性|患病)P(患病) P(阳性|未患病)P(未患病)] 0.99 × 0.001 / (0.99 × 0.001 0.01 × 0.999) ≈ 0.0901。也就是说即使检测结果为阳性真实患病概率也只有9%左右。这个结果反直觉但很现实。如果只看“99%的灵敏度”就答“99%”这道题就废了。所以我一直建议备考时把贝叶斯公式当成核心中的核心结合假阳性、先验概率、后验概率这些概念反复推导直到能用一句话向别人解释清楚“为什么阳性不等于患病”。2.2 机器学习经典算法从信息增益到集成学习算法题是数据挖掘工程师笔试的主战场。网易这套卷子里的算法题没有刻意追求最新模型反而非常重视基础决策树的信息增益计算、SVM的间隔概念、K-means的收敛过程、朴素贝叶斯的独立性假设、Apriori算法的频繁项集生成。这符合一线互联网公司的习惯——基础不牢后面的业务建模都是空中楼阁。我记得有一道决策树的题要求根据给定数据集计算某个特征的信息增益然后判断根节点应该选哪个特征。信息增益的计算公式是Gain(S, A) Entropy(S) - ∑ (|S_v| / |S|) × Entropy(S_v)。这种题只要练熟不难但时间紧容易算错所以我建议平时就养成用表格逐步计算的习惯。我在考场上会先列出每个特征所有取值对应的子集再计算子集的熵最后加权相减。这样虽然看起来多花十几秒但能避免从整个数据集重算导致的混乱。另一个我印象深刻的点是“过拟合与正则化”。试卷里以选择题形式出现过给定一个高方差模型的场景以下哪种方法能降低过拟合风险选项包括增加训练样本、降低模型复杂度、引入L2正则化、增加特征数量。正确选项是前三个增加特征数量通常会加剧过拟合。这题考查的是对偏差-方差权衡的理解也隐含了特征选择的重要性。我在实际工作中也发现正则化参数的选择比很多模型细节更能影响线上效果笔试里考这种题非常务实。2.3 数据库SQL与数据预处理工程落地的第一关数据挖掘工程师不是纯算法研究员SQL和数据处理是日常工作的基础。网易的笔试里SQL题占了相当一部分而且喜欢结合业务场景出题常见的有求每个用户最近一次下单时间、统计连续登录天数、按类目计算销售额排名。这些题如果对窗口函数不熟就只能用麻烦的子查询和自连接去硬碰既容易出错又浪费时间。我记得有一道题要求“查询每个用户最近一次订单的金额”最简单的写法就是ROW_NUMBER()SELECT user_id, order_amount FROM ( SELECT user_id, order_amount, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY order_time DESC) AS rn FROM orders ) t WHERE rn 1;这题也算老经典了。但笔试里容易踩的坑是没有处理同一个用户在同一时刻下了多单的情况。如果订单表里order_time只精确到天并且一天内有多笔订单ROW_NUMBER会随机给一个排名导致结果不稳定。更稳妥的做法是再增加一个唯一排序字段比如ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY order_time DESC, order_id DESC) AS rn这个细节我在练习时没注意直到工作后做数据抽取才发现数据源里真的有这种边界情况。笔试虽然不一定要求处理到这个程度但能在答案里主动补充“按order_id进行次级排序”的考生通常会给面试官留下好印象。数据预处理相关考点一般以情景题形式出现比如“数据中有大量缺失值你会如何处理”“特征量纲差异大应该怎么办”。这类题没有唯一标准答案重点看你能不能说出多种方案并分析利弊。比如缺失值处理可以删除缺失率过高的字段、用均值/中位数填充、或用模型预测填充三种方式的适用场景不一样不能只背一个答案。这种开放题就是考工程判断力也是把“背题型选手”区分出去的关键环节。3. 一套典型综合题的完整推算过程3.1 题目场景用户流失预测网易的笔试卷里有一道综合题让我印象很深题目给了一个用户行为表包含用户ID、注册时间、最近一周登录次数、在平台内的消费金额、用户是否已流失这几个字段。要求回答三个问题第一你如何定义“流失用户”第二基于现有字段做特征工程第三选择至少一种模型预测用户流失并说明评估指标。这种题说难也难说不难也不难。它没有固定的计算答案考察的是你有没有跑过一个完整的数据挖掘流程。很多人第一次做这种题时会直接跳到“用逻辑回归”或者“用XGBoost”但完全忽略了第一步——流失定义。我当时的思路是留存类业务一般会把连续30天未登录且之后也没有恢复行为的用户标记为流失但由于题目只给了“是否已流失”这个字段那就先把它当作标签。3.2 特征工程与样本处理特征工程是这道题的高分点。从题目给的字段出发我可以构造出更多有业务含义的特征比如“注册时间到现在的天数”衡量用户生命周期比如“最近一周登录次数除以注册天数”衡量登录活跃密度比如“消费金额乘以登录次数”捕捉高活跃高消费用户群还可以构造“是否连续三天没有登录”这种短期流失信号。有经验的思维是宁可多构造一些能讲出业务逻辑的特征也不要只简单使用原始字段。样本处理上典型的坑是类别不平衡。流失用户往往远少于活跃用户如果直接训练模型预测结果会偏向多数类。解决方案包括下采样、上采样、SMOTE以及使用AUC、F1分数等评估指标。我在答案里写的是先统计正负样本比例如果负样本比例低于10%就考虑对多数类进行随机下采样同时保留验证集的原始分布确保评估结果真实可靠。这样回答既能体现你已经做过完整项目又能展示你对工程细节的理解。3.3 模型选择与评估细节模型选择不需要太多花架子这里用逻辑回归和随机森林做对比比较合适。逻辑回归的好处是可解释性强能直接看到每个特征的权重适合向业务方解释“哪些因素最可能导致流失”。随机森林的优点是能自动处理非线性关系在特征较多时效果更好。我建议答案里一定要写一句“模型最终选择需通过交叉验证和业务需求综合决定”这比只写一个模型显得成熟很多。评估指标的选择也是一个得分点。如果直接说用准确率很可能会被扣分因为流失预测是典型的不平衡分类场景准确率会被多数类主导。更合适的指标包括AUC、召回率、精确率以及卡在阈值调优上的F1分数。我在答题时还补充了业务视角如果运营部拿到预测结果后能够做定向召回那模型的召回率比精确率更重要因为漏掉一个流失用户的代价远大于错发一条文案。这类业务与模型结合的表述往往比单纯的技术回答更对面试官胃口。4. 我从这套试卷里挖出的三个隐藏考点4.1 宏观业务理解指标口径第一年准备校招时我压根没料到笔试会考“什么是日活跃用户数”“如何定义留存用户”但网易这套题里确实有类似的内容而且藏在选择题的选项里。这种题目看似简单其实很考验你对业务指标的透明度。比如“日活跃用户数”是按去重的用户ID数还是按设备数同一用户使用两台设备怎么算在不同的业务场景里答案不一样。笔试题目未必会问得这么细但会绕着“指标口径”考你对异常情况的分析能力。我的建议是备考时不要只读算法书也抽时间看看你目标公司公开的技术博客、数据平台相关分享了解一下他们如何定义核心指标。哪怕题目只是考了一个“GMV是什么”的概念你也能从“GMV不等于实际收入而是含未支付订单的交易总额”这种细节中展现自己的业务基础。业务理解不是速成的但笔试里涉及到的通常只是概念层多看点资料足够应付。4.2 代码实现能力Python模拟题网易笔试里还有一道代码填空题给了一段用Python实现K-means的伪代码要求补全中心点更新部分。我原来以为校招笔试只考算法选择题没想到还会直接考代码细节这让只刷《统计学习方法》不练手的我差点吃亏。K-means的核心步骤其实很机械先计算每个样本到各簇中心的距离将其分配到最近的簇然后重新计算每个簇内样本的均值作为新 center。这一段用Python写出来大概是def update_centers(data, assignments, k): centers [] for i in range(k): cluster_points [data[j] for j in range(len(data)) if assignments[j] i] if cluster_points: new_center [sum(col) / len(cluster_points) for col in zip(*cluster_points)] centers.append(new_center) else: centers.append([0] * len(data[0])) return centers表面上是补全代码实际在考你有没有亲自实现过基础算法。这种题没什么捷径只能靠平时多练至少把K-means、逻辑回归、朴素贝叶斯的Python实现从头到尾写过一遍哪怕是玩具版也好。代码题不会要求你写出高性能的分布式版本只要你逻辑清晰、边界处理合理分数稳稳拿到手。4.3 综合素质限时高压下的取舍这是最隐蔽但最关键的考点90分钟内面对难度分布不均匀的试卷你如何分配精力。我记得当时有几个同学考完感叹“最后一题来不及做”其实并不是题目难到无解而是前面耗时太多没有策略。笔试题一般按分数分配时间综合题即使只有一题分值也可能占据30%绝对值得预留20到25分钟。如果选择题卡住三分钟建议先标记最后再返回。我在考场上给自己定了一个“二八原则”用20分钟扫完全卷分辨哪些是送分题哪些是耗时的硬骨头然后先把送分题全部拿下再集中精力攻克分值高的大题。这样即便难题没算完基础分也已经保住。这个方法听起来简单但真正执行时很多人会因为“那道题我已经有思路了”而陷进去结果导致后面的大题全都没写。控制自己的投入比例其实比多会一个知识点更有用。5. 给后来人的实战备考清单5.1 三个月冲刺时间线如果你是离笔试还有三个月我的建议是第一个月补数学和统计基础尤其是概率论、线性代数中与矩阵、特征值相关的内容第二个月主攻机器学习算法从决策树、KNN、朴素贝叶斯到SVM和集成学习每个算法都要能手推核心公式第三个月集中做真题和刷SQL每个周末安排一次完整的模拟笔试严格按90分钟来训练自己的时间感。如果时间更紧只有两周那就优先保高频考点贝叶斯公式、信息熵和决策树、K-means与朴素贝叶斯推导、SQL窗口函数。这类知识点出现的概率极高且相对容易速成。把面铺得太广反而会样样都不精。不要觉得只学高频考点很功力和冒险在时间有限的情况下这正是最合理的投资策略。5.2 刷题方向与资料推荐刷题方向可分为三大类。第一类是概率统计题推荐《概率论与数理统计》教材的课后题以及牛客网上的历年校招概率选择题重点练贝叶斯、条件概率、期望方差。第二类是机器学习基础题推荐李航《统计学习方法》每章后面的例题尤其是决策树、朴素贝叶斯、SVM、K-means这四块能够手推信息增益、手写伪代码最好。第三类是SQL题推荐直接刷LeetCode的数据库题目从简单题入手慢慢过渡到需要用窗口函数的中等题。资料不在多而在精。我不建议一上来就啃大而全的西瓜书它有深度但对笔试备考来说性价比不高。李航老师的书更贴近国内校招笔试风格公式推导很规矩。如果英语阅读没问题也可以看看Sklearn官方文档里的算法对比图能帮你快速建立不同算法适用场景的直觉。网上很多“十天冲刺”帖子本质还是刷高频题不必过分依赖。5.3 笔试当天的时间分配策略笔试当天除了知识储备还有几个实操细节很关键。提前检查电脑、网络和浏览器兼容性别等到登入系统才发现环境有问题。开始答题后先花两三分钟快速浏览所有题目在草稿纸上记下每道题的预估耗时。我习惯按“送分题优先、高分题其次、难题最后”的顺序作答同时确保每道题留出至少1分钟填答题卡或提交代码避免最后交卷失败。如果是线上笔试注意代码题是否要求输出格式完全一致多一个空格都可能导致判错。我踩过一次坑题目要求输出小数保留两位但我没加格式化字符串结果答案错误。当时特别懊恼。所以笔试前一定看一遍平台给出的代码示例了解输入输出规范。这个习惯从网易笔试开始养成后来参加其他公司笔试时帮我少丢了不少冤枉分。6. 最后聊几句真实的体会这套笔试卷已经过去挺多年了但它对我的影响一直持续到现在。当年我备考的时候总觉得能答对所有的算法题最重要后来才发现真正把自己和其他候选人区分开的不是某个模型的理解深度而是对数据全链路的掌控能力。网易2018校招数据挖掘工程师笔试卷就像一次“全息投影”它不只是考知识也在提醒你数据挖掘工程师终究是要解决问题、支撑业务的而不是只会调包跑模型的工具人。如果你正准备类似岗位我的建议是不要只盯着一两道题的解法更要复盘整套试卷折射出的知识结构。把概率论打牢把SQL写熟把每一个算法至少动手实现一遍再带着业务视角去思考评估指标。这些东西在笔试里帮你拿分在工作里帮你走得更远。希望这份复盘能让你少走一些我当年走过的弯路。
返回列表