尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

美团2017秋招算法工程师笔试真题解析:考点与备考策略

美团2017秋招算法工程师笔试真题解析:考点与备考策略 算法工程师这个岗位的秋招笔试向来是筛选简历之后第一道大坎也是淘汰率最高的一环。美团2017秋招笔试真题-算法工程师A这份卷子我当年也做过后来带新人的时候又翻出来拆过好几遍。别看是2017年的题很多考点放到现在依然能打尤其是机器学习基础、概率统计、数据结构编程和业务建模这几块几乎年年换汤不换药。如果你正在准备大厂算法岗笔试或者刚入行想搞清楚算法工程师笔试到底在考什么这篇文章可以帮你把考察逻辑、高频考点和备考方向一次性梳理清楚。1. 这份真题在考什么从试卷结构看考察意图1.1 当年美团算法岗的岗位画像2017年的美团正处于O2O快速扩张的阶段外卖、到店、酒旅、配送这几条业务线都在大规模铺开。算法工程师这个岗位在那个时期不是做纯research而是非常贴近业务的外卖推荐列表、搜索排序、配送调度、补贴定价、风控反作弊每一个方向都需要算法工程师把数学模型落到真实场景里。所以笔试出题人的思路很直接不考那种“背熟公式就能拿分”的题目而是把业务中常见的数学问题、模型问题、编程问题抽象出来看你在有限时间里能不能反应快、推导稳、代码不翻车。这也解释了为什么这套卷子里同时出现了机器学习理论题、概率计算题、数据结构和编程题以及一小部分开放式的业务建模题。1.2 整卷题目模块盘点从试卷A的整体构成来看基本可以分成四个大模块选择题/填空题覆盖机器学习概念、概率统计、线性代数、数据结构复杂度、基础SQL等。这部分题量大、分值分散主要用来快速筛掉基础不牢的人。简答/推导题要求手推某个模型的目标函数、梯度更新公式或者给一个具体业务场景计算某个概率、期望考察数学基本功。编程题手写一到三道中等难度的算法题常见的方向是字符串处理、数组操作、动态规划、二分、贪心。业务场景题给一段业务描述让你设计解决方案包括目标拆解、特征选择、模型选型、评估指标。这四个模块看起来都是常规操作但美团的题目喜欢在描述上绕弯子。比如同一个知识点换个业务包装很多人就识别不出来了。这是整套卷子最值得复盘的地方。1.3 设计这套题的人到底想筛掉什么我后来自己面人、出题的时候才真正想明白这套真题的筛选目标不是“知识点最多的人”而是这三类人第一基本概念不扎实的人。很多人简历上写得天花乱坠但问到“L1正则化和L2正则化在优化上的本质区别”就讲不清楚。选择题里用几个场景一包装立刻原形毕露。第二不会把业务问题抽象成数学模型的人。美团特别喜欢给业务场景比如“外卖骑手平均配送时长怎么预估”、“新店没有历史数据怎么做推荐”这类问题没有唯一答案但能看出你有没有建模思维。第三现场写代码不稳的人。笔试编程题不像LeetCode可以反复调试时间一到就交卷。能在40分钟内写出一个无bug的解法比写一个复杂精妙但超时的解法重要得多。2. 机器学习与模型原理从公式到业务理解2.1 机器学习核心概念的考察深度这套真题在机器学习概念上的考察不是简单问“什么是过拟合”而是给一个具体场景让你判断或者让你在几个方案里做选择。常见的方向有这么几个偏差与方差给你一个训练集误差很低、验证集误差很高的模型判断是偏差问题还是方差问题该用交叉验证、正则化还是增加数据。正则化问L1和L2的区别为什么L1能产生稀疏解。这个问题的标准解释是L1的约束区域在坐标轴上有尖角更容易在坐标轴上取到最优解。特征处理连续特征离散化、类别特征one-hot、缺失值用均值还是中位数填充各自有什么优缺点。交叉验证K折交叉验证怎么划分数据为什么要用分层采样时间序列数据能不能随机打乱。这些概念本身不难但真题里喜欢混着出。比如给你一段特征工程的描述问“这样做会导致过拟合还是欠拟合”。如果你只记结论、不理解背后的数据流很容易被绕进去。我复盘的时候给团队列过一个自查清单每个候选人都该问自己能不能不看资料说清楚为什么L2正则化等价于权重衰减为什么逻辑回归用交叉熵而不用均方误差这些问题的回答深度决定了你不是在背八股。2.2 三个高频模型LR、SVM、GBDT在2017年美团这套卷子里逻辑回归、SVM、GBDT是出现频率最高的三个模型。原因也很实在这几个模型在当时的推荐、广告、风控场景里是绝对主力。逻辑回归的重点在两点一是它的损失函数为什么是交叉熵二是它的梯度更新公式怎么推导。很多人在面试时会说“LR的损失函数是交叉熵”但笔试要求你现场写梯度推导就卡住了。本质上是把极大似然估计的负对数似然作为损失然后对参数求偏导。SVM的重点在“间隔最大化”和对偶问题。笔试题一般不会让你完整推导整个SVM但会考“支持向量到超平面的距离公式”、“什么是KKT条件”、“为什么SVM对高维稀疏数据效果好”。这里有一个容易忽略的细节SVM只关注支持向量所以它对异常值比较敏感这一点和LR不同。GBDT在2017年已经很火了但笔试里不会让你手推整个算法更多是考“每一轮拟合的是什么”。标准答案是拟合损失函数关于当前模型的负梯度也就是残差的近似。很多人会回答“拟合残差”这在回归问题里没错但严格说是负梯度方向。这个细节能区分你到底真懂还是背过。我建议复习的时候把这三个模型放在一起对比损失函数、优化方法、正则化方式、适用场景、对异常值敏感度、特征尺度是否敏感。这一张表列清楚选择题基本稳了。2.3 一道典型的模型推导题与完整解答我根据当年同类考点的风格整理了一道很典型的推导题供你练手题目给定线性回归模型 y Xw ε其中 X 是 n×d 的样本矩阵y 是 n 维标签向量w 是 d 维参数向量。目标函数为L(w) ||y - Xw||² λ||w||²其中 λ 0 是正则化系数。请推导 w 的闭式解并说明 λ 的作用。这道题考了两个东西一个是矩阵求导一个是正则化理解。对 w 求梯度并令其为零∂L/∂w -2X^T(y - Xw) 2λw 0整理一下X^T X w λw X^T y所以w* (X^T X λI)^(-1) X^T y这个结果就是岭回归的闭式解。λ的作用可以从两个角度理解一是数学上当 X^T X 不可逆时加上 λI 之后矩阵一定可逆保证了唯一解二是从模型角度λ 越大w 的模长越小模型的复杂度越低越不容易过拟合。我当时做题的时候在这里吃过亏推导出来后没有补充解释 λ 的行为被扣了分。后来我复盘才明白笔试不只考计算还考你对结果的理解。光写出公式只能拿一半分能把每个符号背后的含义讲明白才是算法工程师该有的状态。3. 概率统计与数学基本功笔试里最容易被扣分的部分3.1 贝叶斯公式看着是送分题错的人反而多概率统计在美团这套题里占的比重不小因为推荐、风控、定价都大量依赖概率思维。而最常见的一类题目就是贝叶斯公式。我根据当年风格整理一个示例某外卖平台用户在工作日晚高峰下单的概率是0.2。已知用户下单则在15分钟内完成支付的概率是0.8用户未下单则在15分钟内产生支付行为的概率是0.05。现在随机抽到一位用户发现他在15分钟内产生了支付行为求他确实下单的概率。设 A 表示“用户下单”B 表示“用户在15分钟内支付”。题目给的是P(A) 0.2 P(B|A) 0.8 P(B|¬A) 0.05要求的 P(A|B) 用贝叶斯公式P(A|B) P(B|A)P(A) / [P(B|A)P(A) P(B|¬A)P(¬A)]代入P(A|B) 0.8×0.2 / (0.8×0.2 0.05×0.8) 0.16 / 0.2 0.8这题看似简单但很多人会算成0.8直接填上去也有人把分母写成 P(B) 0.8×0.2 0.16。关键点在于“未下单但支付”的概率也要算进分母里。真实业务中这个数其实很重要比如风控系统捕捉到支付行为就要判断这个支付是不是真的由真实订单产生。我的建议是不要死记公式画一棵概率树把“下单/未下单”和“支付/未支付”的分支全部画出来再对照题目条件往里填数字一般就不会出错了。3.2 期望、方差与常见分布的结合题美团这套题还喜欢把期望方差和业务场景放在一起考。比如“配送时间服从某个分布求平均配送时间的期望”、“某补贴策略的成本波动如何量化”等。本质就是离散型随机变量和连续型随机变量的期望计算。离散型随机变量期望的核心公式是 E[X] Σ x·P(Xx)连续型则要积分。常见分布的期望和方差一定要形成条件反射二项分布 B(n,p) 期望 np、方差 np(1-p)泊松分布的期望和方差都等于 λ均匀分布的期望是区间中点正态分布的期望 μ、方差 σ²。我见过不少候选人把泊松分布和二项分布搞混一看到“每小时的订单数”就写泊松。其实泊松分布适合描述单位时间内随机事件发生的次数而二项分布适合描述固定 n 次试验中成功次数。如果题目给你的是“某个骑手接单后每单超时的概率是0.1求5单中恰好2单超时的概率”那就是二项分布而不是泊松分布。3.3 矩阵运算与最优化基础数学模块里矩阵运算和凸优化也是高频考点。美团这套真题的推导题通常不会超过“矩阵求导、梯度、海森矩阵”这个范围但会暗中考察你对“可导、凸性、极值”这些概念的理解。一个常见的记忆要点是判断函数是否为凸函数对于可二次微分的函数可以看海森矩阵是否半正定。在机器学习里如果目标函数是凸函数那么局部最优解就是全局最优解这保证了梯度下降能找到最优解。这是为什么线性回归、逻辑回归、岭回归的优化很方便而神经网络目标函数往往非凸只能找局部最优的原因。线性代数里还有一个必考的点是矩阵的秩。比如给定一个样本矩阵 X问 X^T X 什么时候可逆。答案是当 X 列满秩的时候。如果列数大于行数X^T X 一定不可逆这时候就要靠正则化来解决。这个问题和之前岭回归那道题是连在一起的2017年美团的出题风格就是这样模块之间互相呼应。4. 数据结构与算法编程题笔试现场的硬仗4.1 编程题的选材风格美团2017秋招笔试的编程题整体难度介于剑指Offer和LeetCode Medium之间不考偏题怪题重点看两点一是编码基本功二是在时间压力下能否写出无bug的代码。和ACM竞赛题不一样这里的题目通常都带一点业务背景比如“外卖订单按时间排序”、“骑手路径去重”、“推荐结果的TopN输出”等但核心还是经典算法。从题目类型上看字符串处理、数组、链表、树、动态规划、二分查找、贪心是出现频率最高的几个方向。深搜广搜也偶尔出现但一般不会考到特别复杂的剪枝。我记得当年同批考的人里很多是在动态规划那一道上栽了跟头因为DP题一眼看不出状态定义就容易卡住。4.2 高频题型与解题套路我直接给一版整理好的优先级清单照着刷能覆盖大部分题目字符串类最长公共子串、最长公共子序列、字符串去重、正则匹配简化版、反转字符串。这类题优先想双指针和动态规划。数组类TopK问题、合并两个有序数组、旋转数组找最小值、连续子数组最大和。优先想堆、双指针、前缀和。链表类反转链表、判断链表是否有环、合并两个有序链表、找倒数第K个节点。这类题推荐画图理解代码量不大但容易写错指针。树类二叉树层序遍历、前序中序恢复二叉树、最近公共祖先。优先掌握递归和队列。动态规划爬楼梯、背包问题、最长递增子序列、编辑距离。先想清楚状态定义再想状态转移。二分查找有序数组查找、查找第一个不小于目标值的位置。重点练右边界到底取 left 还是 left1。贪心区间调度、分发饼干、跳跃游戏。这类题代码短但证明贪心策略有效的思考过程容易被忽略。我不建议搞题海战术也不建议只刷Hard题。美团这套真题更看重你对经典题型的熟练度刷透上面这些方向比刷200道不成体系的题有用得多。4.3 一道高频编程题的手写实现我把当年感受最深的一个类型“最长不含重复字符的子串”整理成今天笔试也能直接用的标准解法。题目是给定一个字符串 s请找出其中不含有重复字符的最长子串的长度。这是典型的滑动窗口题维护窗口左右指针 left 和 right用一个哈希集合记录窗口内的字符。每次右指针向右扩展如果遇到重复字符就移动左指针直到重复字符被移出窗口然后更新答案。def length_of_longest_substring(s: str) - int: char_set set() left 0 max_len 0 for right in range(len(s)): while s[right] in char_set: char_set.remove(s[left]) left 1 char_set.add(s[right]) max_len max(max_len, right - left 1) return max_len这段代码的时间复杂度是 O(n)因为每个字符最多被加入和移出集合各一次。空间复杂度是 O(min(n, m))m 是字符集大小。这道题很多人第一次写会踩两个坑一个是在 while 循环里直接把 s[right] 从集合里删掉结果漏删了 left 到重复位置之间的其他字符另一个是忘记在窗口移动时同步更新最大长度。所以我在写代码的时候会先在注释里标清楚窗口的维护逻辑再动手写这样现场不容易乱。4.4 笔试环境下的时间分配建议关于这套真题的实战节奏我给一个自己的经验值。假设笔试总共两小时20道选择题加3道编程题加1道简答题那么选择题建议控制在40分钟以内因为选择题大多考概念会就会不会也不要恋战。简答题留20到30分钟编程题留50到60分钟。编程题千万不要按题目顺序做先把三道题都扫一遍从“最有把握”的那道开始写。如果某道题卡了15分钟没有思路马上换下一道把能拿的分先拿到。笔试最可惜的不是不会做而是会做但没时间写。我当年认识的一个同学就是在一道DP上硬磕了40分钟结果最简单的字符串题反而来不及写。另外写代码前先花两三分钟在草稿纸上写伪代码或者画用例真的不是浪费时间。尤其是动态规划和双指针这类题先把状态转移或者窗口变化的过程在纸上走一遍提交的代码明显更稳。代码写完后要留出时间自己构造两个测试用例一个正常情况、一个边界情况跑一遍看输出对不对。边界情况最容易翻车比如空字符串、只有一个元素、全是重复字符等。5. 业务场景题算法工程师和“做题家”的分水岭5.1 为什么算法笔试会考业务题很多候选人看到业务场景题会愣住觉得“我算法题都刷不过来了还考业务”但美团这套真题偏偏就有这样的题。原因很简单算法工程师不是参加竞赛的选手是要解决业务问题的工程师。你能不能在拿到一个模糊业务问题后拆成清晰的技术方案这是岗位的核心能力。业务场景题通常不要求你写完整代码而是考察你的逻辑是否完整。例如给你一个外卖配送调度的场景问你怎么降低平均配送时长。这时候如果你的回答是“用强化学习”“用深度学习预测”那基本就挂了。出题人想看到的不是模型名词而是你能不能把问题进行结构化拆解。5.2 一个外卖配送调度场景题的答题框架我把2017年这轮题目里经常出现的配送调度题整理成一个标准答题框架你可以直接套用。先定义目标平均配送时长由“取餐等待时间 在途骑行时间 用户等待时间”组成。降低平均配送时长本质上是在优化这几个环节。再捋清约束骑手数量有限骑手有最大并行订单数商家出餐时间不确定用户地址分布不均匀每个订单有预计送达时间要求。这些约束决定了你不可能单纯追求“全局最短路径”必须同时考虑骑手时间窗和订单紧急程度。然后是方案设计通常有三个层次第一层是订单分配给新订单匹配一个最适合的骑手可以建立“每个骑手当前空闲时间和已有配送路线”的画像用贪心或匈牙利算法做匹配。第二层是路径规划骑手一次带多单时的取送顺序可以用TSP或改进的插入启发式算法把新增订单插入到已有路线中使绕路距离最小。第三层是出餐联动和商家打通出餐时间预测提前调度骑手到店而不是被动等骑手到了再等餐。最后是评估指标不能只盯平均配送时长还要看超时率、骑手空驶率、单均成本。因为如果为了追求平均时长而给每个订单单独派一个骑手成本会爆掉这在实际业务里是不可接受的。这个框架的要点是先目标再约束再方案再指标。按这个顺序答哪怕方案不是最优也能让阅卷人感受到你有完整的建模能力。5.3 推荐系统场景题的通用模板另一类常考的业务题是推荐场景。比如“如何给新用户做冷启动推荐”、“如何评估一个新的排序模型上线后的效果”。我做题的时候会固定用这个模板先定义用户与物品再定义行为反馈然后拆特征、选模型、定指标。定义用户与物品用户维度包括地理位置、历史行为、设备、时段偏好物品维度包括类别、价格、销量、质量分、供给状态。这一步看起来废话但能让你后面不慌。定义行为反馈在O2O场景里点击、下单、支付、复购的权重完全不同。推荐系统的目标不是点击率最高而是成交额或者订单量最大所以要明确优化目标到底是用点击率、转化率还是GMV。特征这一层重点说清楚冷启动怎么处理。新用户没有历史行为只能用位置、设备、时段这类上下文特征新商品没有点击数据可以用商家相似度、品类热度、图文信息来补。如果回答里提到“用内容特征和统计特征分层补充”会比笼统地说“用协同过滤”高一个档次。模型选型上当时的主流是LRGBDT的组合也可以提到FM、FFM处理稀疏特征。关键是讲清楚为什么选这个模型样本量、稀疏性、可解释性、线上延迟。最后用离线AUC、线上AB实验的转化率提升作为评估指标并说明指标统计显著性怎么判断。这样一套答下来业务题的分数基本稳了。6. 备考策略与踩坑实录6.1 按知识点优先级安排复习如果现在距离笔试还有一个月复习顺序一定要有取舍。我基于美团2017秋招真题-算法工程师A的知识分布给一个相对的优先级排序机器学习基础概念和公式推导排首位因为选择、简答、业务题都会涉及概率统计和线性代数紧随其后因为计算题占分稳定编程能力排在第三每天保持2到3道经典题的手写业务建模思维放在最后但考前至少要看5个典型场景案例。千万不要在第一周就陷入“SVM完整推导 各种聚类算法细节”的深坑。笔试考的是广度加重点深度不是冷门知识竞赛。我见过太多人花一周时间研究各种正则化变体结果一考最常见的梯度推导反而写不出来。6.2 现场考试的8个实操细节这些都是我自己和周围人踩过的坑整理出来给你提个醒先做会做的题顺序可以打乱但一定要在答题卡或编辑器上标注清楚题号。选择题遇到不确定的先跳过最后有时间再回来蒙一个不要空着。公式推导题先把已知条件和求解目标抄在草稿纸上不要上来就写。概率题画概率树或韦恩图能大幅降低条件概率方向搞反的概率。编程题先写边界判断例如空输入、长度1、负数场景再写主体逻辑。时间复杂度过高时先暂停代码写一个暴力的正确版本拿部分分比没分强。业务场景题如果时间不够写一个“目标-约束-方案-指标”的骨架也能拿到一半以上的分。全程不要慌张看别人笔试是个人战你的节奏比什么都重要。6.3 今天再回看这套真题我的几个体会整理这篇题目复盘的过程中我把当年的笔记又翻了一遍有个感受特别明显2017年这套题考的东西在今天的算法工程师面试里不仅没有过时反而成了公共基础。现在卷模型、卷论文、卷大模型微调但面试官随手还是会问“偏差方差怎么权衡”“逻辑回归如何推导”这类问题。因为这些基础是算法工程师识别问题、设计方案的底层能力和用什么框架、什么模型无关。备考算法工程师笔试不要把它当成一次突击考试而是当成一次系统梳理知识体系的机会。你自己能徒手推导的公式、你对业务场景的拆解框架、你写过的每一道经典算法题这些不会因为面试结束就归零它们会在你入行后的真实工作中一遍遍回来找你。如果这篇文章对你有帮助建议把里面提到的几个自拟题动手做一遍再把机器学习模型对比表自己填一遍。动手练和用眼睛看效果差很多。祝你在接下来的秋招笔试里稳稳拿下心仪的算法工程师岗位。
返回列表