
1. 趁还有记忆聊聊滴滴算法岗笔试到底在考什么秋招这一轮下来我投了好几家大厂的算法岗滴滴的笔试是其中比较有特点的一场。网上关于滴滴笔试的帖子不少但大多停留在“考了什么题”的层面很少有人把题目背后的考点逻辑、岗位方向差异、以及怎么针对性准备讲透。这篇想把这些补上给后面准备滴滴算法岗笔试的同学一些参考。先说结论滴滴算法岗笔试整体偏向基础算法与数据结构 机器学习理论 场景应用题的组合难度中上但远没到劝退的程度。关键是你要知道它“想考什么”而不是盲目刷题。我当时投的是滴滴出行旗下地图与交通方向的一个算法岗位笔试一共两小时题型是“单选 多选 两道编程题”的混合卷。不同方向比如网约车策略、地图路径、安全风控、供应链优化题目会有差异但底层考察点基本一致。下面从准备阶段的思路、考点拆解、实战过程、再到踩坑教训完整过一遍。2. 笔试前的思路梳理为什么滴滴的算法笔试是这个画风2.1 滴滴算法岗的岗位差异决定了笔试侧重点投滴滴之前我花了不少时间研究它的业务矩阵。滴滴不是一家单纯的“打车软件”公司它的算法团队分散在多个业务线地图与路径规划这类岗位特别爱考图论、最短路径、路网匹配、ETA预计到达时间预测。网约车策略侧重供需预测、动态调价、派单算法、运力调度机器学习模型和因果推断都有可能涉及。安全风控偏异常检测、序列模型、反作弊机器学习基础题非常多。供应链/运维优化偏运筹优化线性规划、整数规划、贪心策略出现概率高。我投的地图方向笔试里果然出现了图论相关题目后面会细说。2.2 为什么基础算法题是“必考题”一个很现实的逻辑算法工程师日常大量时间在写数据处理 pipeline、特征工程、模型调优但笔试环节没法让你现场训练一个模型。所以公司只能用基础算法题来快速筛选候选人的代码能力、逻辑思维和工程素养。滴滴笔试编程题不像字节、阿里那样动不动上 hard 难度但它更偏向“业务场景包装 经典算法变形”。比如同样是考最短路径它会包装成“司机接单的最优路线选择”同样是考动态规划它会变成“一天内多订单的最优收益组合”。这种出题风格要求你能识别题目的本质模型而不是背模板代码。2.3 机器学习理论题覆盖广、挖得深选择题部分机器学习基础占比很大但和学校期末考试那种“背公式”的考法不同滴滴更倾向结合实际业务场景出题。举个例子它不会直接问“XGBoost 和 GBDT 的区别”而是给出一个“预测某区域未来半小时叫车需求”的场景问“在特征分布存在明显时间周期性时采用哪种交叉验证方式更合理”。这种题目考察的不仅是“你知不知道这个概念”更是在看你能不能把理论和业务目标结合起来思考。3. 核心考点拆解哪些知识点必须吃透3.1 数据结构与经典算法刷题是基本功从我和身边同学的反馈来看滴滴笔试的算法题高频考点集中在排序与查找快排、归并排序、二分查找变种。尤其是“旋转数组的二分查找”“找第 K 大元素”这类经典变形出现的频率非常高。贪心与动态规划区间调度、背包问题、最长上升子序列属于必会。滴滴特别爱出“资源分配”类的贪心题和它调度场景强相关。图论最短路径Dijkstra、SPFA、拓扑排序、并查集。地图方向基本必考。字符串算法KMP 的 next 数组、Trie 树在题库里也是常客虽然考到编程题的概率不高但选择题中容易考到原理。我印象最深的一道选择题是关于 KMP 算法 next 数组的。它给了一个模式串pabacaba让计算 next 数组的具体数值。这题看起来基础但我周围不少人都栽了原因不是不理解 KMP而是对 next 数组“前缀和后缀最长匹配长度”的边界定义记混了。后面我会在实操部分把完整推导过程写出来。3.2 机器学习基础模型原理、损失函数、评估指标选择题和多选题里机器学习的考察范围非常广。我整理了一下出现频率最高的几个知识点损失函数与优化交叉熵损失、hinge loss、L1/L2 正则化的区别、梯度下降的各种变体SGD、Momentum、Adam。它尤其喜欢考“L1 为什么能产生稀疏解”这种有推导空间的题。模型评估精确率、召回率、F1、AUC、ROC 的含义和计算。注意它喜欢给你一个具体混淆矩阵或者一组预测概率让你手算这些指标而不是问定义。过拟合与正则化训练误差和测试误差的关系、交叉验证方法K-Fold、留一法、时间序列切分、Bagging 和 Boosting 的区别。树模型决策树的分裂准则信息增益、增益率、基尼指数、随机森林和 GBDT 的区别、XGBoost 的正则项设计逻辑。多选题目里“下列哪些措施可以缓解过拟合”这种题型频繁出现。选项通常包括正则化、Dropout、数据增强、减少模型复杂度、增加训练数据等。看起来简单但容易在多选上漏选或者多选。3.3 深度学习基础概念 主流模型结构深度学习部分的考点主要围绕CNN卷积计算输出尺寸公式、感受野计算、池化层作用。有一道题给出一个输入特征图尺寸、卷积核大小、步长和 padding让手算输出尺寸属于送分题但计算要细心。RNN/LSTM梯度消失的原因、门控机制的作用、序列建模的适用场景。Transformer自注意力机制的计算流程、多头注意力的作用、位置编码的必要性。这个近几年几乎必考滴滴这种业务场景极其依赖序列数据的公司对 Transformer 的关注度很高。优化器Adam 为什么能自适应学习率、和 SGD 相比的优势和局限性。深度学习题目整体不难但如果只背结论不推公式遇到“给出 Query、Key、Value 向量让手算 self-attention 输出”这类题就会懵。3.4 场景应用题从业务角度理解算法滴滴笔试最有特色的部分是场景应用题。它不是单纯考算法而是把算法放到网约车业务里去考察。比如有一道选择题的大意是某个区域在晚高峰时期乘客呼叫量远大于可用车辆数作为算法工程师你会优先采用哪种策略来提升平台整体成交率选项包括动态调价、排队派单、跨区域调度、乘客等待时间预估优化等。这种题没有标准答案考察的是你对业务目标GMV、成交率、用户体验、司机收入之间权衡的理解。我当时选择的是“动调 排队 跨区调度组合策略”并重点说明动态调价在调节供需失衡时的杠杆作用。遇到这种题千万不能只选一个孤立策略要体现出系统性的思考。4. 实操过程复盘从看题到提交的完整流程4.1 选择题部分的答题策略进入笔试系统后我首先快速浏览了整体题型分布单选 20 道、多选 10 道、编程题 2 道。我的策略是先做选择题再集中精力做编程题因为选择题相对独立不依赖 IDE适合快速拿分。单选题中有几道关于排序算法的复杂度分析、hash 表冲突解决方法、B 树与 B 树的区别等基础题这类题只要基础扎实基本秒过。真正拉开差距的是下面几类第一类手算 KMP 的 next 数组。模式串pabacaba求 next 数组。我当时在草稿纸上快速推导了一遍。先明确 next[i] 的定义对于模式串 pnext[i] 表示 p[0...i] 这个子串的“最长相等真前缀与真后缀的长度”。注意是“真前缀/真后缀”不能包含整个子串本身。推导过程如下i0字符a没有真前缀和真后缀next[0] 0。i1子串ab前缀a后缀b不相等next[1] 0。i2子串aba前缀有a、ab后缀有ba、a最长相等是a长度 1next[2] 1。i3子串abac前缀a、ab、aba后缀bac、ac、c无相等next[3] 0。i4子串abaca前缀和后缀的最长相等部分是anext[4] 1。i5子串abacab最长相等前后缀是ab长度 2next[5] 2。i6子串abacaba最长相等前后缀是aba长度 3next[6] 3。所以 next 数组是[0, 0, 1, 0, 1, 2, 3]。这题的关键就是定义要清楚。很多人会把 next[0] 定义为 -1某些教材的写法导致答案对不上。考试时如果遇到这种“定义不一致”的题优先按照题目给出的定义来。第二类多选中的“缓解过拟合”题。选项通常有A. 增加 L2 正则化系数B. 使用 DropoutC. 在训练集上继续迭代更多轮次D. 数据增强E. 使用更复杂的网络结构。答案是 A、B、DC 和 E 反而会加重过拟合。这类题在牛客题库里反复出现多做几套自然就有感觉。4.2 编程题实战一道经典的二分贪心题编程题一共两道一道偏数据结构和模拟一道偏贪心/二分难度大约在 LeetCode 中等偏上。当时做的那道题我记得很清楚大意是给定一组司机的接单记录每个记录包含接单时刻、完成时刻、以及订单收益。司机一次只能执行一个订单。问在给定时间内司机最多能获得多少总收益。看到这道题第一反应是“加权区间调度”问题经典动态规划模型。按结束时间排序后定义 dp[i] 为“前 i 个订单能获得的最大收益”转移方程就是dp[i] max(dp[i-1], dp[p(i)] profit[i])其中p(i)表示“结束时间不超过第 i 个订单开始时间的最靠后的那个订单下标”需要在排序后二分查找得到。这里有一个常见的优化点不要用 O(n^2) 的转移。题目给的订单数据量可能是 10 的 5 次方量级O(n^2) 必超时。我当时直接用二分查找预处理p(i)整体复杂度降到 O(n log n)顺利通过所有测试用例。提交完之后我复盘了一下这道题本质上就是“加权区间调度”代码本身不复杂但如果你的 DP 功底不够扎实很容易卡在状态转移的推导上。平时刷题时可以多积累这类“经典模型 业务包装”的题目。4.3 另一道编程题字符串处理与哈希第二道编程题偏字符串处理。大意是给定一组关键词统计它们在多段文本中出现的次数并且要考虑关键词重叠的情况。典型解法是用 Trie 树 哈希表进行匹配和计数。当时我直接用 Python 的defaultdictfind函数暴力匹配了因为题目数据量相对较小可以直接过。但如果是大数据的场景建议用 KMP 或 AC 自动机优化。这里也反映出一个实战经验不要盲目追求最优解先根据数据范围判断。考试时间有限暴力能过就尽量别过度设计。5. 备考资源与刷题路径建议5.1 牛客网真题库是最高效的入口准备滴滴笔试我首推的就是牛客网的真题库。上面有近几年的滴滴笔试原题虽然题目不完全相同但是题型分布、考察侧重点、出题风格都很有参考价值。建议至少刷 3 套以上的滴滴真题重点复盘选择题的考点和编程题的常见解法。5.2 LeetCode 按标签刷题对于编程题部分LeetCode 上按标签刷效率最高。我当时的刷题优先级是动态规划背包、区间调度、最长上升子序列、编辑距离等高频题。贪心区间问题、跳跃游戏、任务调度器等。图论Dijkstra、拓扑排序、并查集、最小生成树。二分查找各种变种尤其是“在有序数组中查找边界”这类。字符串KMP、Trie、滑动窗口。每天保持 3-5 道题的量持续两周左右基本能覆盖滴滴笔试的编程题难度。5.3 机器学习理论的复习资料机器学习理论部分我建议用李航《统计学习方法》 周志华《机器学习》西瓜书作为主教材配合PRML作为扩展。重点章节是决策树、支持向量机、集成学习、聚类、降维。如果时间不够可以直接刷牛客网机器学习题库里面整理了大量常考的选择题和多选题覆盖面和滴滴笔试的重合度很高。6. 踩坑记录与避坑指南6.1 编程题环境与输入输出格式这是我第一次做滴滴笔试时踩的最大坑。滴滴的笔试系统用的是赛码网和 LeetCode 的“补全函数”模式不同赛码网很多题目要求你自己处理标准输入输出stdin/stdout。第一道编程题我一开始没注意到输入格式直接写了个函数就提交了结果编译不通过。后来仔细看题才发现要input()读入、print()输出。建议在笔试前至少去赛码网官网上熟悉一下环境跑一道“A B”类型的基础题。6.2 选择题的时间分配我当时的教训是选择题尽量不要超过 40 分钟。有些多选题特别是机器学习理论相关的会诱导你反复思考一旦陷进去后面的编程题时间就被压缩了。我的建议是单选题会就选不会就标记不要恋战。多选题但凡有一个选项拿不准先标记最后统一再回来思考。编程题优先拿第一题的稳妥分再做第二题。实际考试时我身边有个同学就是在“Transformer 是否具备位置编码”的多选上纠结了 10 分钟最后编程题只做出了一道的暴力版非常可惜。6.3 不要忽略“数据范围”对复杂度的提示许多编程题会在题干里明确给出数据量级这直接影响你选什么算法。n 100O(n^3) 可以接受。n 10^5至少要 O(n log n)。如果涉及图遍历确认是有向图还是无向图、有没有负权边。我遇到的第一道加权区间调度题数据量是n 10^5这就直接排除了 O(n^2) 的 DP必须用二分优化。看清楚数据范围再动手能避免很多无效设计。7. 笔试后的求职节奏与心态调整笔试题量大、时间紧考完感觉一般是很正常的事我自己当时有一道选择题也是蒙的编程题第二道用了低效的暴力解法。但最后仍然收到了面试通知说明笔试只是筛选环节之一不太可能要求你拿满分。真正重要的是每一次笔试都是一次查漏补缺的机会。我在笔试完当天把错题和遗忘的知识点整理成了笔记包括 KMP next 数组的定义、self-attention 的计算流程、加权区间调度的 DP 模板等。这些笔记后来在面试中也派上了用场因为面试官常常会追问笔试里没做出来的题。8. 最后一个实用小技巧提前准备好笔试环境笔试当天建议提前半小时进入系统调试摄像头、屏幕共享、网络环境。滴滴笔试用的是在线监控系统会要求开启摄像头和屏幕录制如果环境检测不通过会被判定作弊风险。我那次就遇到摄像头无法启动的问题折腾了五分钟才处理好虽然没有影响答题但确实影响了心态。提前把手机调成勿扰模式、关掉所有无关的软件弹窗、准备好草稿纸和计算器部分系统允许使用计算器这些细节都能让你在笔试时更专注。