聊到网易2018校招数据挖掘工程师的笔试卷,很多准备校招的同学私信问我到底考什么、该怎么复习。我在国内某厂做数据挖掘也快五年了,带过几届实习生,也帮部门出过笔试题,对这类校招笔试的出题思路还算熟悉。今天就把网易这套校招数据挖掘笔试卷拆开聊一聊,从考察方向、核心考点、答题策略到复习路线,把我的真实经验全部摆出来。无论是正在准备秋招的应届生,还是想转行数据挖掘方向的朋友,这篇都能帮你少走不少弯路。
网易这套卷子我整体刷下来的感觉是:不刁钻,但覆盖面很全,特别看重基础功和业务直觉。它不像有些公司喜欢出偏题怪题来卡人,而是通过一批“看着眼熟但细节多变”的题目,把基础扎实和只会背八股的同学区分开。如果你现在正在为数据挖掘岗笔试发愁,这篇文章建议先收藏,然后花半小时认真消化一遍。
1. 网易校招数据挖掘笔试的考察全局
1.1 网易的出题风格与筛选逻辑
先说一个很多人容易忽略的点:网易笔试的考察逻辑,不是看你“会不会”某个算法,而是看你在“真实业务约束下还能不能把算法用对”。它跟学校期末考试不一样,学校考的是公式定理的复现,笔试考的是面对不完整信息时做决策的能力。整套卷子下来,我印象最深的几个出题特点是:
题型混合度很高,选择、填空、简答、手写推导、SQL、编程题全都有。这就决定了你没法用“只刷算法题”来糊弄过去,每一块都得有一定的储备量。时间分配上,如果你在选择题上卡太久,后面的SQL和编程题基本来不及做完。
业务场景嵌入很深,它不会直接问你“什么是过拟合”,而是给你一个具体的业务场景(比如网易云音乐的歌单推荐、严选的商品销量预测),问你在这种场景下怎么识别和解决过拟合。这种题目看着不难,但如果没有真实项目经验,答起来就会很空,抓不住得分点。
基础概念考察灵活,针对经典算法不只是问优缺点,而是深入到“当数据出现某种变化时,这个算法的结果会不会变”这种细节层面。比如数据归一化之后决策树的结果变不变,K-Means初始点选不好会有什么后果,这类题目是拉开差距的关键。
结合这些特点,我建议的复习策略是:不要死记硬背机器学习算法的结论,而是要把每个算法的“最底层假设”和“业务适用边界”吃透。只有理解了模型为什么在这个业务下能用、换个业务为什么可能失效,面对网易这种偏业务场景的出题风格,你才能做到游刃有余。
1.2 整体考点分布与分值格局
网易这套卷子在我看来,考点分布大致可以分成四块:机器学习与概率统计、数据结构与算法、数据库与SQL、特征工程与业务场景题。从分值占比看,机器学习和概率统计是绝对的大头,估计占了40%以上,这也符合数据挖掘工程师岗位的核心要求。数据结构与算法相关的代码题大概占20%-30%,主要目的是“确保你真的会写代码,而不是只会理论”。SQL和业务题大约占20%-30%,这部分是很多科班出身但项目经验不足的同学最容易丢分的地方。
从难度梯度上看,这套卷子设计得相当有层次。基础题大概占50%,主要考察概念定义和经典结论,比如“什么是偏差方差分解”“常见聚类算法的区别”,这是决定你是否能过线的保底分。进阶题大概占30%,需要你做一些推导和计算,比如给我一组数据让你手动计算ID3决策树的信息增益,或者推导逻辑回归的梯度更新公式。区分题大概占20%,这些题目没有标准答案,更像是在跟面试官对话,考察你的思路是否清晰、能否把问题拆解清楚。
我把这四块的复习优先级排了个序:机器学习基础概念(尤其是算法原理与适用边界)> 概率统计计算能力 > SQL和编程基础 > 业务场景题框架。把这个优先级吃透了,你备考时就知道时间该往哪里砸了。
2. 核心考点拆解:机器学习与概率统计
2.1 经典机器学习算法的高频考法
网易笔试在机器学习算法部分的考察,最常出现的算法是逻辑回归、决策树、SVM、朴素贝叶斯、K-Means、随机森林和GBDT。注意我这里说的是“频繁出现”而不是“全部出现”,你可以根据目标岗位方向做局部调整,但核心算法群基本就是这些。
逻辑回归的考察深度在“损失函数推导”和“正负样本不平衡怎么办”。笔试里很可能给你一个逻辑回归的损失函数,让你化简求梯度。这里有个容易出错的地方,很多同学能背出交叉熵损失函数的样子,但一问到“为什么逻辑回归要用交叉熵而不是均方误差”,就愣住了。交叉熵配合sigmoid求导之后,梯度是干干净净的,没有sigmoid饱和区导致的梯度消失问题;而均方误差在sigmoid两端梯度几乎为0,收敛会非常慢。这个解释你写上去,阅卷人一眼就知道你真的懂。
决策树这边,重点绕不开信息增益、信息增益比和基尼系数。我之前见过一道印象很深的题:给一个只有8个样本的小数据集,让你手算当某个特征被选为分裂节点时,ID3和C4.5分别选哪个特征。这个题看上去简单,但手算过程非常考验细致程度,对数计算稍微马虎一点,结果就不对。我建议备考时把决策树的三种分裂指标的纯手工计算练到滚瓜烂熟,别依赖sklearn,否则考场上一紧张真的会算错。
SVM的经典考点是“硬间隔、软间隔的区别”“核函数的作用与选择”“为什么SVM对高维稀疏数据友好”。我当时备考时的一个心得是:不要死磕SVM的完整对偶推导,但一定要理解“最大间隔”这个直觉,以及核函数本质上是在做“隐式的特征映射”。把这两个点吃透了,SVM相关题目基本不会丢分。
对于朴素贝叶斯,网易很喜欢考“条件独立性假设在现实业务中失效了怎么办”这个点。比如在文本分类场景中,“的”和“地”这两个词在语法功能上相关,但朴素贝叶斯假设它们独立。这种题没有标准答案,核心是在考你有没有意识到“假设不成立时,模型会怎样”“实际工程中我们是怎么绕过去的”,比如用特征选择干掉强相关特征,或者换用线性SVM/逻辑回归。
聚类算法里,K-Means和DBSCAN是高频双雄。K-Means的考察重点是K值怎么选、初始点怎么选、对离群点敏不敏感。DBSCAN的考察重点是两个参数eps和min_samples怎么取值,以及它为什么能处理不规则形状的簇。这道题可以当作业务分析题来答,因为它本质上问的是“你拿到一堆无标签数据,怎么用合理的流程把它们聚成有业务含义的群体”。
2.2 概率统计题的三大方向
概率统计在数据挖掘笔试中的地位,怎么说都不为过。网易这套卷子的概率统计题,我总结为三个方向:条件概率与贝叶斯公式、期望与方差的性质、常见分布的参数估计。
贝叶斯公式基本是必考,但网易不喜欢考裸公式,而是喜欢套一个业务场景。比如“网易严选的一个商品推荐位,点击率是0.1,在点击的人中最终购买的概率是0.3,在未点击的人中购买概率是0.1,现在已知一个人购买了,求他曾经点击过的概率”。这题用贝叶斯公式一套就能做,关键是条件概率的分母要用全概率公式展开,很多同学在这步漏项。这类题考察的是谨慎,而不是技巧。
期望与方差的考察相对简单,但容易丢分的是“独立随机变量期望方差的性质”和“协方差与相关系数的区别”。给你两个分布让你求新随机变量的期望和方差,这是必须拿分的题。考试时可以把常考的几条性质提前写在小本子上,考前当天翻一遍,非常管用。
常见分布的参数估计,网易倾向于考最大似然估计。比如给一组服从正态分布的样本,让求均值和方差的最大似然估计。这题唯一的坑是方差的最大似然估计是有偏的,它除以的是n而不是n-1。很多人在这一步纠结要不要修正为无偏估计,但题目如果明确写“求最大似然估计”,那就不要修正,严格按似然函数最大化步骤来。这个细节,阅卷时是能看出你基础扎不扎实的。
2.3 手写推导与计算题的经验
网易笔试里有一类题是“纸上推公式”,很多同学一看就慌。其实这类题看起来吓人,但背后就是照着固定的几套路子在走。我备考时把常见推导分成四类:线性模型推导(逻辑回归梯度、线性回归闭式解)、概率模型推导(最大似然估计、朴素贝叶斯分类器)、距离计算(欧氏距离、曼哈顿距离、余弦相似度在具体数据上的计算)、树模型的信息增益计算。
做这类题,我有个特别实用的建议:平时练习一定要用纸笔完整地推每一个公式,不要眼高手低地只看不写。逻辑回归的梯度推导,你把链式法则展开到每一步都写清楚,考场上的手速和心态都会好很多。另外还要注意书写规范,推导过程不要跳步,因为它不是选择填空题,阅卷老师是按步骤给分的,跳步丢分真的很可惜。
还有一个很多同学不知道的细节:手写推导时,字母不要写得模棱两可,比如“l”和“1”、“z”和“2”容易混,阅卷时产生歧义是会扣分的。这是我当年惨痛教训,写公式跟写代码一样,宁可慢一点,也要保持清晰。
3. 特征工程与业务场景题
3.1 特征处理与特征选择的高频思路
特征工程这块,网易笔试的出题水平是我见过比较高的,它不会让你背“什么是独热编码”,而是会问你在“某个具体场景下你会怎么做特征”。这里我推荐一个特别好用的答题框架:先回答缺失值、异常值怎么处理;再回答特征缩放和编码怎么做;最后回答如何做特征选择和评估。这三个层次递进下来,就是一套完整的特征工程SOLUTION。
缺失值处理经常会提到的就是均值/中位数/众数填充,但要拿高分,你必须多补一句“根据业务含义决定是否填充、用什么填充”,比如点击率预估值缺失,直接用0填充可能比均值填充更合理。异常值处理不要只说“3σ原则”,还可以补充基于IQR的方法和基于业务规则的方法,比如某个订单金额超过历史峰值10倍,就不该用统计方法,而是应该先跟业务确认是不是数据错误。
特征编码这里,独热编码和标签编码的区别是基础,一定要知道。但网易更可能考的是“高基数类别特征怎么处理”。比如用户ID这种上千万级别的类别,直接独热编码会把特征维度炸开。实践中常用的是频数编码、目标编码、Embedding编码。笔试时你能把这些方法都讲清楚,并且说清楚各自的风险(比如目标编码容易过拟合),基本就是满分水平。
特征选择上,过滤式、包裹式、嵌入式这三大类你都要能说清楚,并给出对应的代表方法。我给你的记忆方法是:过滤式就是想快速筛选不依赖模型,比如卡方检验、皮尔逊相关系数;包裹式是把模型当作“试金石”,比如递归特征消除RFE;嵌入式是模型训练过程中自己选,比如L1正则和树模型的特征重要性。网易很爱考“L1正则和L2正则对特征选择的影响有什么不同”,本质就是在问嵌入式特征选择。L1会把不重要的特征系数压到0,天然做选择;L2只会让系数变小但不会为0,起的是防止过拟合的作用。
3.2 业务场景题的回答框架与话术
业务场景题是网易笔试的“区分题”,它考察的不是某一个算法,而是你面对一个不确定的业务问题时,能否有条理地把它拆成一个可执行的机器学习方案。我总结了一套万能四步框架,每次遇到这种题都按这个走,基本不会乱。
第一步:定义问题和目标。把业务问题翻译成数学问题。比如“预测严选商品未来7天销量”,你要说清楚这是回归问题还是时间序列问题、预测粒度是SKU还是品类、评价指标用MAE还是MAPE。第二步:数据与特征。说清楚需要哪些数据,数据从哪来,如何构造特征。第三步:模型选型与训练。给出候选模型,说明为什么选它,如何做验证。第四步:评估与上线。说明用什么指标评估效果,如果效果不好怎么迭代,如何做AB实验。
回答业务场景题的时候,一定要把“为什么要做这一步”说清楚,不要只列步骤。比如你说“对异常值做处理”,阅卷人可能会想“用什么方法处理?为什么用这个方法?”你补上一句“销量为负的日期是明显的异常,应该剔除而不是填充”,这个回答就会立刻显得有实战经验。
另外,业务场景题的答案没有唯一标准,我见过很多同学在这类题上写“我用XGBoost建模”就完事了,这样只能拿及格分。高分答案的差异在于:有没有人提出“这个问题其实可以拆成两个子问题”?例如销量预测可能应分别对待新品和存量品,因为新品没有历史数据,需要用相似品的数据来迁移,这种洞察一下就拉开了差距。
4. 数据结构、编程与SQL
4.1 数据结构与算法笔试的应对策略
网易数据挖掘岗笔试题里的编程题,不会像纯后端工程师那么夸张,但也不是白送分。从过往经验看,它通常不会跳开以下三个主题:字符串处理、数组与哈希、动态规划与递归。我备考时重点刷了LeetCode上与这三个主题相关的简单和中等难度题,效果非常明显。
字符串处理题常考“最长不重复子串”“字符串匹配”“字符统计”等。这类题一定要熟练掌握滑动窗口技巧,另外Python的字典和collections.Counter能用得特别熟。数组与哈希题目中,“两数之和”这种经典题要手到擒来,但还要学会“如何从暴力解法优雅地优化到哈希解法”,因为笔试有时会要求你先给出暴力解再给出优化解。
动态规划和递归在数据挖掘笔试中偶尔会出现,但难度通常不会太深。我备考时的策略是重点掌握斐波那契、爬楼梯、最长公共子序列、01背包这四大件。如果压轴编程题是动态规划,大概率也是这四件套的变种。实在不会也没关系,可以把递归的暴力写法写出来,并注明“可以加备忘录优化”,阅卷人也能看出你有思路。
还有一个容易被忽略的点:笔试编程题的环境和你本地IDE不一样,输入输出的处理很容易出错。网易笔试一般用的是牛客网或者赛码网,输入输出格式比较奇葩,有的一行多个整数用空格分隔,有的用换行分隔。建议考前一定要去牛客网用真题环境练几道题,把sys.stdin.readline()这种输入输出写法练熟,不然你解题思路完全正确,却因为输入解析写错了而0分,实在太冤了。
4.2 SQL高频题型与分析函数
SQL在数据挖掘岗位笔试中的重要性,怎么说都不为过。网易的SQL题基本不会只考简单的SELECT,而是集中在聚合统计、分组排序、留存率计算、连续登录这三大经典命题方向。
分组排序是最常考的,比如“找出每个类目下销量最高的前三个商品”。这类题用窗口函数ROW_NUMBER()或RANK()就能解决,先按类目分组,再按销量排序,然后取排名小于等于3的。唯一容易踩坑的点是要区分RANK、DENSE_RANK、ROW_NUMBER三者的差异,同一销量时这三个函数给出的排名结果是不同的,题目如果没有明确要求,建议先用ROW_NUMBER,因为它对主键唯一场景最安全。
留存率计算也是高频题,比如“计算用户次日留存率”。标准做法是用一个LEFT JOIN把某一天活跃的用户和第二天仍活跃的用户关联起来,再用COUNT(DISTINCT)来计算。这里要特别注意去重,一个用户在同一天内可能有多次活跃记录,不对用户ID去重的话,留存率会虚高。用COUNT(DISTINCT user_id)是稳妥的做法。
连续登录类题目是进阶题,考察“找出连续登录3天以上的用户”。核心思路是用窗口函数ROW_NUMBER()给每个用户的登录日期排序,然后用“登录日期减去排名天数”得到一个分组日期,连续登录的日期减排名后的值是相同的。你能理解到这个“日期减排名”的技巧,SQL这题基本就稳了。
我强烈建议你把窗口函数(ROW_NUMBER、RANK、DENSE_RANK、LAG、LEAD、SUM OVER)练熟。网易SQL题中大约70%的复杂查询都可以用窗口函数优雅解决。面试前用LeetCode数据库题库或者牛客SQL题库刷上几十道,手感就会完全不同。
5. 备考策略与实战经验
5.1 冲刺阶段的时间规划
如果你现在距离笔试还有一个月左右,我给你一套可执行的复习规划。这个方法我在辅导学弟学妹时反复推荐,亲测有效。
第一周,重心放在机器学习理论和概率统计上。花3-4天把算法原理串一遍,重点是那几个高频模型的损失函数、优化方法和适用场景。剩下3天专门刷概率统计题,尤其是贝叶斯和最大似然估计的手算题。第二周,重心转向编程和SQL。每天至少花2小时在LeetCode刷题上,同时花1小时刷SQL题。这周的目标是把代码的手感练出来,拿到一道题能在10-15分钟内有思路并跑通。第三周,重心是查漏补缺和整套模拟。找2-3套近年网易或其他大厂的数据挖掘真题,按真实笔试的时间限制来模拟。第四周就是考前冲刺,不再做新题,只翻错题集和笔记,把高频知识点和公式印在脑子里。
这套规划最关键的一点是:不要前松后紧。很多同学觉得算法基础好就大量练代码,把理论和业务题拖到最后,结果笔试时能编题写得飞起,但业务场景题却什么也写不出来,直接与面试擦肩而过。
5.2 考场时间分配与答题顺序
网易数据挖掘笔试的时间通常比较紧,2小时左右做一套题,题量不小。我在考场上最推荐的时间分配方式是:优先保证选择填空和简单计算题的准确率,因为这是你的“保底分”。然后再集中精力做SQL和编程题,这两块分值高且答案客观,容易拿分。业务场景题和推导题放在最后,它们没有唯一答案,就算时间紧张,写出框架也能拿一部分分数。
我踩过一个教训:那年笔试我在一道手推逻辑回归梯度的题上花了将近20分钟,还写错了最后一步,导致后面SQL题只写了一半。后来我把做题策略改了:先把所有题目快速浏览一遍,标记出自己“一眼就会”的题目并快速完成,再回头啃难啃的题目。别再跟一道题死磕,这么做并不值得。这个策略我在后来的所有线上笔试里一直复用,基本上能保证120分钟内有整体完成度。
还有一点是,线上笔试时千万注意“保存草稿”和“提交”的区别。牛客网这类平台,你可以先把答案写在草稿里,最后统一提交。要防止时间到自动交卷时,还有题目尚未填入答题区,那就真的血亏了。建议每隔20分钟看一眼剩余时间,按自己的进度动态调整。
5.3 错题复盘与长期思维
笔试结束之后,不要一下子把题目忘光。建议趁热打铁,把自己做错的、不会的、考场上蒙对的题全部整理进错题本。这也是我从校招一路到职场坚持下来的习惯。不要害怕错题多,数据挖掘岗的笔试复习本质上就是在“把错题中暴露出的盲区补齐”。我每年都会翻看自己当年的笔试错题本,很多当时卡住的概念,后来在工作中都成了日常操作。
长期来看,数据挖掘工程师的笔试复习不仅仅是应付考试。概率统计、特征工程、SQL、机器学习原理,这套东西跟真实工作中的建模流程高度重合。你在笔试阶段把这些基础打扎实,入职后会少走很多弯路。我个人在校招入职后的第一个月,就明显感受到:笔试时练过的“如何从业务问题转化为建模问题”的思维方式,直接帮我快速上手了第一个真实业务项目。
如果你能过笔试这一关,后续面试大概率会围绕项目经历和算法细节展开。但笔试阶段,请先把这些基础题稳稳地做好。回头看,网易这套2018校招数据挖掘工程师笔试卷,我最大的感受是:它不考你天赋,考的是你有没有认真准备过。把高频考点全部吃透,把该拿的分都拿到,你离网易数据挖掘工程师的offer就真的不远了。