先交代一下背景:这份“网易2018校招数据挖掘工程师笔试卷”虽然已经是好几年前的题目了,但每年校招季都有人翻出来重新做、重新研究。原因也很简单——数据挖掘岗的笔试核心知识体系一直没大变,机器学习基础、概率统计、SQL、特征工程、业务思维,翻来覆去就是这些模块。网易这套题的价值在于,它的出题风格很典型:既考理论深度,又考工程落地,还会塞两道让你“现场设计解决方案”的开放性题目。这篇文章我就以这套卷子为线索,把数据挖掘工程师校招笔试里那些绕不开的考点、答题思路和实战经验一次讲透。
不管你是正在准备校招的应届生,还是想转行数据挖掘的工程师,都可以把这篇文章当作一份备考地图来用。我会按照试卷的题型模块展开,每个模块都给出核心知识点、典型解题思路,以及我当时刷题和实际面试时踩过的坑。文章里的代码和案例都是基于常见实践补全的,不是原卷的官方答案,但足以帮你建立完整的解题框架。
1. 试卷整体结构与考察意图拆解
1.1 从题型分布看网易的用人偏好
网易这套笔试卷的题型结构大致是:单选题、多选题、填空题、编程题、SQL题、案例分析题。这个结构在当时算是比较标准的互联网大厂数据岗配置,现在很多公司也还在沿用。
单选题和多选题主要覆盖统计学基础、概率论、机器学习理论。比如给你一组数据的均值、方差,让你判断分布特征;或者给一个模型训练结果,让你分析是偏差问题还是方差问题。这类题目表面上考的是记忆,实际上考的是你对核心概念的理解是否足够本质。我见过太多人在“偏差-方差权衡”这类题上翻车,原因不是不知道概念,而是题目稍微换个业务场景就不会迁移了。
填空题和技术题则更偏工程。比如常见的考察点包括:写出某个损失函数的数学表达式、说明L1和L2正则化的区别、给定一段Python代码让你写出输出结果。这些题目考察的是你对模型细节的掌握程度,以及在真实编码环境中的熟练度。
编程题和SQL题是拉开差距的关键。网易的编程题通常不会特别难,但很看重代码风格和边界条件处理。SQL题则会结合具体业务场景,比如让你统计某段时间内用户的留存率、计算商品类目的销量Top N等。这类题目考察的是你把业务问题转化为技术方案的能力。
案例分析题是整套卷子的压轴戏,也是最能体现一个人综合素质的部分。通常会给你一个业务场景,比如“某资讯App的推荐系统点击率下降了,你怎么排查原因”,或者“如何设计一个用户流失预警模型”。这类题目没有标准答案,考察的是你的分析框架、业务理解、模型选型和工程落地能力。
1.2 为什么这套卷子到现在还有参考价值
很多人会问,2018年的题,现在做还有意义吗?我的答案是:有,而且意义不小。数据挖掘工程师的核心技能树,这些年并没有发生颠覆性的变化。深度学习确实火了好几年,但LR、GBDT、FM这些传统模型在一线互联网公司的推荐、风控、搜索场景里依然是中流砥柱。面试官不会因为你是2025年毕业的就只问你Transformer和BERT——基础不牢,照样挂。
另外一个原因是,网易这套题的难度梯度设计得比较合理。它不是一上来就考多深的模型原理,而是从基础概念逐步过渡到工程实践,最后再用开放性问题来考察你的思维高度。这种递进式的考察方式,和大多数互联网大厂的数据岗笔试风格是一致的。所以把这份卷子吃透,相当于是提前做了一次通用的题型训练。
我当时备考的时候,把这套卷子反复做了三遍。第一遍是限时模拟,感受考场节奏;第二遍是逐题拆解,把每道题背后的知识点都整理成笔记;第三遍是举一反三,把每道题改编成不同的业务场景,锻炼迁移能力。事实证明,这个方法是有效的,后面我去其他公司面试时,遇到的很多题目都能看到这套卷子的影子。
2. 核心知识点精讲与答题思路
2.1 概率统计与机器学习基础:高频考点的本质理解
概率统计是数据挖掘笔试的重头戏,网易的卷子里这部分占比不低。常考的知识点包括:条件概率与贝叶斯公式、常见分布(正态分布、二项分布、泊松分布)、期望与方差的性质、大数定律与中心极限定理、假设检验与p值、极大似然估计等。
这里我特别想说的是贝叶斯公式。题目可能会直接考计算,比如“某种疾病的检出率为99%,误报率为1%,人群患病率为0.1%,问检测阳性的人真正患病的概率是多少”。这道题光背公式是不够的,你得真正理解先验概率和后验概率的关系。很多人在这个题上栽跟头,是因为算出来结果后不敢相信答案——阳性了居然还大概率没病?这恰恰就是贝叶斯公式的威力所在,它告诉你要结合先验信息,不能只看单一的证据。
机器学习基础部分,高频考点包括:偏差与方差、过拟合与欠拟合、交叉验证、常用评估指标(准确率、精确率、召回率、F1、AUC、LogLoss)、正则化(L1 vs L2)、梯度下降原理、常见模型对比(LR、SVM、决策树、随机森林、GBDT)。网易的题很少直接让你背定义,而是喜欢给你一个具体场景,让你判断模型行为或选择方案。
举个例子,题目可能会这样出:“在线性回归模型中增加一个高维稀疏特征,会导致什么结果?如何解决?”这道题考察的就是你对特征稀疏性、正则化、模型复杂度之间关系的理解。答案的核心是:高维稀疏特征容易导致过拟合,L2正则化会让特征权重趋近于0但不会等于0,L1正则化可以直接将不重要的特征权重压缩为0,从而实现特征选择。这种题考察的不是单一知识点,而是你对整个建模流程的把握。
再比如评估指标的选择。日志类题目常考:在正负样本极度不平衡的场景下(比如点击率预测,正样本通常只有1%-5%),为什么不能用准确率作为评估指标?因为准确率在样本不平衡时会产生严重误导——全部预测为负样本,准确率也可能高达95%以上。这时候应该用AUC、PR曲线、F1等指标。尤其要记住:在正负样本不平衡的场景下,PR曲线的变化比ROC曲线更敏感,更适合作为模型对比的参考。
2.2 SQL与数据处理:从取数到分析的必备技能
SQL部分几乎是数据岗笔试的标配,网易也毫不例外。考察点主要集中在:基础查询(SELECT、WHERE、GROUP BY、ORDER BY)、多表连接(INNER JOIN、LEFT JOIN等)、子查询、窗口函数(ROW_NUMBER、RANK、DENSE_RANK、SUM OVER等)、留存率计算、连续登录天数、Top N问题等。
有个很典型的题目类型是“求用户连续登录天数”。很多人在第一反应是先用GROUP BY按用户分组,然后数日期个数。但这里有个坑:如果用户在同一天登录多次,直接COUNT(DISTINCT login_date)倒是能去重,但如果登录日期不连续,你怎么判断哪些是连续的?正确的解法是使用“行号减法”技巧:先按用户分组、按日期去重排序,然后用日期减去行号,连续日期的差值会是同一个值,再按这个差值分组计数。这个技巧非常经典,不但在笔试里常考,实际工作中也经常用到。
窗口函数的掌握也很关键。比如“求每个商品类目下销量排名前3的商品”,用ROW_NUMBER() OVER(PARTITION BY category ORDER BY sales DESC)就能搞定。这一题的变体会很多:要求并列排名、要求取第几名到第几名、要求按不同时间窗口统计。你得把RANK和DENSE_RANK的区别刻在脑子里——RANK遇到并列排名会跳号(比如1、1、3),DENSE_RANK不会跳号(1、1、2)。
我建议准备SQL笔试时不要只刷题,最好在本地装一个MySQL或者直接用SQLite,把每个查询都实际跑一遍。因为笔试时的SQL题不会只考你语法,还会让你分析结果。你如果只看题不运行,很难发现自己在NULL处理、隐式转换、数据类型匹配等细节上的问题。另外,写完SQL后一定要检查边界情况:空表怎么办?全部NULL的列怎么办?多表连接后数据量变大怎么办?这些都是隐藏的得分点。
2.3 算法与数据结构:编程题的基本功
网易的编程题一般不会出特别偏难怪的算法,但也不会让你轻松拿满分。常见题型包括:字符串处理、数组操作、链表反转、二叉树遍历、动态规划入门题、排序算法的变种等。考察重点在于代码的准确性、时间空间复杂度控制,以及边界条件的处理。
准备这部分内容时,我建议以LeetCode的简单和中等难度题目为主,重点刷“数组、哈希表、字符串、链表、二叉树、动态规划”这六个分类。没有必要去抠难题、偏题,数据挖掘岗编程题考察的是工程基本功,不会像算法工程师岗位那样要求你现场推演复杂的动态规划状态转移方程。
有一个让我印象深刻的题是“给定一个字符串,找出最长无重复字符子串的长度”。这题看起来很简单,但很多人第一次写都会漏掉滑动窗口的优化思路,写了个O(n²)暴力解。虽然能跑通部分用例,但效率不达标。标准解法是滑动窗口加哈希表,时间复杂度O(n)。这种考察“能不能写出规范解”的风格,在网易的笔试题里非常典型。
另外我要提醒一点:笔试的时候如果遇到不会的题,一定要写思路,不要留白。哪怕只能写出暴力解,也尽量把代码框架搭出来。因为很多公司的笔试系统会记录你的代码提交历史,面试官后续看卷子时,能看到你的思考过程。完全空白的题,面试官想给你加分都找不到依据。
3. 核心笔试题实操演示与拓展
3.1 从读题到建模:一道用户购买预测题的完整拆解
我根据这套卷子的典型风格,构造了一道有代表性的案例分析题:“某电商平台希望预测用户在未来7天内是否会购买某个商品类目,现有数据包括用户历史行为(浏览、点击、收藏、加购、下单)、用户画像、商品属性和时间特征。请设计一个完整的建模方案。”
拿到这种题,第一件事不是想模型,而是把问题定义清楚。要判断“用户未来7天是否购买”,这是一个典型的二分类问题。标签怎么构造?取观测日之后的7天,如果用户在该类目下产生了购买行为,就标记为正样本,否则为负样本。这里有一个常见的坑:时间窗口的划分。如果用全量数据随机切训练集和测试集,会造成数据泄露——训练集里包含了测试集时间段的信息,模型在训练时“看到”了未来。正确做法是按时间切分,比如用前80%的时间段做训练,后20%做验证。
特征工程是这类题目的灵魂。用户历史行为特征可以构造:过去7天、30天、90天内在该类目下的浏览次数、点击次数、收藏次数、加购次数、下单次数;这些行为的频次、时间间隔、以及最后一次行为距离观测日的时间差。还可以构造比率特征:加购转化率、下单转化率、收藏后购买率等。用户画像特征包括:年龄段、性别、城市等级、会员等级、历史消费金额分位数。商品特征包括:类目热门度、价格区间、折扣率。时间特征包括:观测日是星期几、是否月初、是否节假日前后。
模型选型上,对于这类表格型数据,我当时最常用的方案是GBDT(LightGBM或XGBoost)。原因很简单:这类模型对特征尺度不敏感,能自动处理缺失值,还能捕捉特征间的非线性关系。在工业界的数据挖掘竞赛和实际业务里,GBDT家族的模型是性价比最高的选择。如果你还想进一步提升效果,可以在GBDT的基础上叠加一个简单的LR模型(用GBDT做特征变换),利用GBDT的分裂结果生成高阶组合特征,再用LR做最终分类。这个方案在当时是很多推荐系统的主流配置。
评估指标方面,由于电商购买行为是典型的不平衡数据(购买用户占比通常很低),准确率不适合作为主要评估指标。我会以AUC作为模型排序能力的参考,同时关注召回率在特定精确率下的表现。业务角度上,还可以计算每个模型在不同阈值下的提升度(Lift),和运营同学讨论到底希望模型更激进还是更保守。这一套完整的思路,在案例分析题中展示出来,面试官会认为你具备闭环思维,而不只是会调包。
3.2 SQL实战:用户留存率计算的完整实现
留存率是互联网数据分析中最高频的概念之一,也是SQL笔试的常客。题目通常是这样的:“给定用户登录日志表user_login(user_id,login_date),计算每日新增用户的次日留存率、7日留存率、30日留存率。”
第一步是找到每日新增用户。所谓新增用户,就是该用户第一次登录的日期。可以用这样的SQL来实现:
SELECT user_id, MIN(login_date) AS first_date FROM user_login GROUP BY user_id;第二步是把新增用户表和登录日志表关联起来,计算每个新增用户在未来某天是否产生了登录行为:
SELECT t1.first_date AS dt, COUNT(DISTINCT t1.user_id) AS new_user_cnt, COUNT(DISTINCT t2.user_id) AS retain_user_cnt FROM (SELECT user_id, MIN(login_date) AS first_date FROM user_login GROUP BY user_id) t1 LEFT JOIN user_login t2 ON t1.user_id = t2.user_id AND DATEDIFF(t2.login_date, t1.first_date) = 1 GROUP BY t1.first_date;这里DATEDIFF(t2.login_date, t1.first_date) = 1就表示次日留存。如果把= 1换成= 6,就是7日留存。需要注意的是,7日留存的口径在不同公司里可能不一样。有的公司定义为“第7天当天是否登录”,有的定义为“第1天到第7天之间任意一天登录过”。面试时如果题目没有明确说明,建议先确认口径,或者干脆在答案中注明你采用的是哪种口径,否则容易失分。
这张表的实现有个很容易忽略的坑:连接后的数据量会膨胀。假设一个用户在7天内登录了10次,那么这个用户会产生10行连接结果。如果你用COUNT(*)而不是COUNT(DISTINCT user_id)去统计,结果就会错得离谱。我在笔试时就吃过这个亏,后来总结了一条规则:凡是涉及多表关联后再去重的统计,一律用COUNT(DISTINCT)。这也是SQL笔试里最高频的易错点之一。
再补充一个进阶版本:如果需要一次性计算多种留存率,可以灵活运用条件聚合。将上面的SQL改造成,使用不同的间隔天数做条件聚合,然后把结果放到同一行输出。这样做的好处是结果表更紧凑,便于后续的可视化和报表展示。实际工作中,这类需求很常见,能用一条SQL解决的就不要拆成多条。
4. 常见问题与避坑指南
4.1 笔试中那些容易丢分的细节
结合我自己刷这套卷子、以及后来参与校招面试官工作的经验,我总结出数据挖掘笔试里最容易丢分的几个细节,你可以对照自查。
第一个是概率统计题的计算粗心。比如求期望和方差时,没有看清随机变量是离散型还是连续型;或者在使用贝叶斯公式时,漏乘了先验概率。我的经验是,这类题分值虽然不大,但往往是整套卷子中送分的部分,丢掉非常可惜。做题时建议先把公式写在草稿纸上,代入数据时逐步计算,不要跳步。
第二个是机器学习理论题的概念混淆。最典型的是把L1和L2正则化的效果记反:L1使权重稀疏,L2使权重平滑,这个必须刻在脑子里。另外,对于“为什么L1会产生稀疏解”这个经典问题,你要能解释清楚:L1正则化的约束区域是菱形,优化过程中更容易在坐标轴上取得最优解,因此部分权重为0。L2的约束区域是圆形,最优解很难恰好落在坐标轴上。
第三个是模型评估指标的适用场景混淆。什么时候用精确率和召回率,什么时候用AUC,什么时候关注LogLoss?对于排序类业务(如推荐、广告),AUC是基本盘;对于风险控制类业务,更关注高阈值下的精确率,因为误杀成本很高;对于概率校准有要求的场景(如竞价广告出价),LogLoss更合适。这些内容在笔试里不会只以背诵方式出现,而是给你一个业务场景让你自己选。
第四个是案例分析题的泛泛而谈。很多人写方案时,只会写“用XGBoost训练一个模型”,但完全不提特征怎么构造、数据怎么划分、评估指标怎么选、业务上怎么用、失败怎么办。这种回答在面试官眼里等于什么都没写。一个高质量的案例分析答案,至少要包含问题定义、数据探查、特征工程、模型选型、评估方案、上线与监控这几个环节。哪怕每个环节只写两三句话,也要展示出完整的思考链路。
4.2 从笔试到面试:如何把卷面答案变成面试素材
笔试不是终点。很多时候,笔试只是让你拿到面试的入场券,面试官会针对你卷子上的答案做深入追问。我建议你在提交笔试卷之前,给自己留个心眼:每个你写下的答案,都要准备一个“为什么”。
比如你在一道案例分析题里写了“用LightGBM”,面试官可能会问:为什么不选XGBoost?为什么不用深度学习?这个时候你不能只回答“因为LightGBM更快”。你要能讲出LightGBM的直方图算法、叶子生长策略(leaf-wise)与XGBoost的差异,以及在这类表格型数据场景下,为什么树模型通常优于深度模型。如果回答不了这个层次,面试官会觉得你只是会调包,不是真懂。
另外一个很实用的技巧是:把笔试中的题目改造成自己的项目经验。比如笔试卷里有一道“用户购买预测”的题,你就可以把它延伸成一个完整的项目,放在简历里:明确业务目标、说明数据来源、展示特征工程和模型迭代过程、给出最终的评估指标和业务收益。校招简历上最缺的就是这种“有头有尾”的项目,而笔试题恰好是现成的素材来源。把这个项目吃透,面试时被问到相关问题时就能从容应对。
很多人对刷笔试真题有一种误解,觉得只要题做得多就行了。其实企业校招笔试的题量是有限且固定的,光靠题海战术不能保证你对知识的理解深度。我更推荐的做法是:每做完一道题,都对着题目复盘“这道题考察了什么知识点”“如果换一个业务场景我还会不会做”。20道题吃透,比200道题做完就忘要有用得多。
4.3 时间分配与答题顺序的经验建议
网易这套笔试卷的题量不算小,如果按正常校招笔试的时间安排(一般在120到150分钟),时间是比较紧张的。我个人的策略是:先花5分钟快速浏览全卷,按“简单题→中等题→难题”的顺序答题,而不是按题号顺序从头做到尾。
对于数据挖掘岗的笔试卷,我通常的建议是:先把概率统计、机器学习理论的简单题做完,这部分是拿分基础;然后是SQL题,熟练的话每道题10到15分钟可以拿下;紧接着是编程题,至少留出40分钟;最后做案例分析题,留出30分钟以上来写方案。如果案例分析题放在最后但时间不够了,优先写出框架和关键词,用列表形式把自己的思路列清楚,不要为了写完整段落而牺牲逻辑框架。
还有一个容易被忽视的细节:笔试前一定要测试自己的代码运行环境。很多在线笔试系统用的是自定义的代码编辑器,和本地IDE的体验差别很大——没有自动补全、没有代码高亮、缩进可能错乱。提前适应这种环境,可以有效减少考场上的额外压力。我见过有人因为不熟悉在线编辑器,连Python的冒号都漏了,导致代码编译失败,非常可惜。
5. 从一套笔试卷看数据挖掘工程师的能力模型
5.1 知识广度与专业深度的平衡
回看网易这套笔试卷,你会发现它其实在传递一个清晰的信号:数据挖掘工程师需要同时具备“广度”和“深度”。广度指的是你对完整数据链路有认知——从数据采集、清洗、存储、ETL,到特征工程、模型训练、效果评估、上线监控,每个环节都要知道是怎么回事。深度指的是你在某些关键环节上要有真正的专业积累,比如特征工程里的高级技巧、GBDT内部原理、SQL性能优化等。
很多准备校招的同学,容易陷入两个极端:一个是只看机器学习理论,SQL和编码能力很弱;另一个是天天刷题,但机器学习基础一问三不知。这两种都过不了网易这类公司的笔试。正确的备考方式应该是:以机器学习基础为核心,同时保持SQL、Python、业务分析三条腿齐头并进。这套卷子之所以经典,就是因为它把这几项能力均匀地分布在不同的题型里,哪项偏科都会吃亏。
5.2 业务理解能力在校招中的权重
还有一个值得关注的点是,网易这套卷子非常重视业务场景。即使是最基础的机器学习理论题,也喜欢套上一层业务外壳。这背后的原因是:数据挖掘工程师在实际工作中,不是坐在工位上纯跑模型,而是要和产品经理、运营、销售、老板打交道。你需要能把一个模糊的业务问题翻译成清晰的技术问题,再把技术结果翻译回业务语言。
这道“翻译题”的能力,体现在笔试卷上,就是案例分析题的回答质量。我批改过不少校招笔试卷,发现一个普遍现象:很多候选人的技术功底不错,但一写业务方案就露怯——要么只谈模型不谈业务,要么只谈业务不懂技术落地的难度。要避免这个问题,平时可以多看看行业里的公开解法和竞赛方案,比如Kaggle上的经典案例、各大厂的公众号技术文章。看的时候多问自己一句:如果这个业务场景发生在我面前,我会怎么分析?带着这个问题去积累,笔试时才能写出有业务洞察力的答案。
从我自己走过来以及后来带新人的经验看,数据挖掘工程师这个岗位,技术能力和业务能力是缺一不可的。技术能力决定了你能不能把事做成,业务能力决定了你做出来的东西有没有价值。网易这套笔试卷设计的精妙之处,就在于它通过一张卷子同时考察了这两方面的潜力。
最后分享一个我个人的体会:刷笔试题的意义,不在于考试本身,而在于帮你建立一套属于自己的知识框架和分析方法论。这套卷子里的每一道题,都可以看作是一个思维训练的切片。你把它们一个个吃透、串联起来,最终得到的是一整套面对陌生问题时“不慌、有章法”的能力。这份能力,才是校招笔试真正想考察的东西。