ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

数据挖掘工程师笔试全解析:从贝叶斯到SQL的考点与备考策略

数据挖掘工程师笔试全解析:从贝叶斯到SQL的考点与备考策略 那两年大数据岗位刚热起来数据挖掘工程师的笔试题目不像现在这么“卷深度学习”反而特别看重基础功底和业务直觉。阿里巴巴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更重要的是逼着我把数据挖掘的知识体系完整地梳了一遍。希望这篇文章也能帮到你祝笔试顺利。
返回列表