1. 趁还有记忆,聊聊滴滴算法岗笔试到底在考什么
秋招这一轮下来,我投了好几家大厂的算法岗,滴滴的笔试是其中比较有特点的一场。网上关于滴滴笔试的帖子不少,但大多停留在“考了什么题”的层面,很少有人把题目背后的考点逻辑、岗位方向差异、以及怎么针对性准备讲透。这篇想把这些补上,给后面准备滴滴算法岗笔试的同学一些参考。
先说结论:滴滴算法岗笔试整体偏向基础算法与数据结构 + 机器学习理论 + 场景应用题的组合,难度中上,但远没到劝退的程度。关键是你要知道它“想考什么”,而不是盲目刷题。
我当时投的是滴滴出行旗下地图与交通方向的一个算法岗位,笔试一共两小时,题型是“单选 + 多选 + 两道编程题”的混合卷。不同方向(比如网约车策略、地图路径、安全风控、供应链优化)题目会有差异,但底层考察点基本一致。下面从准备阶段的思路、考点拆解、实战过程、再到踩坑教训,完整过一遍。
2. 笔试前的思路梳理:为什么滴滴的算法笔试是这个画风
2.1 滴滴算法岗的岗位差异决定了笔试侧重点
投滴滴之前,我花了不少时间研究它的业务矩阵。滴滴不是一家单纯的“打车软件”公司,它的算法团队分散在多个业务线:
- 地图与路径规划:这类岗位特别爱考图论、最短路径、路网匹配、ETA(预计到达时间)预测。
- 网约车策略:侧重供需预测、动态调价、派单算法、运力调度,机器学习模型和因果推断都有可能涉及。
- 安全风控:偏异常检测、序列模型、反作弊,机器学习基础题非常多。
- 供应链/运维优化:偏运筹优化,线性规划、整数规划、贪心策略出现概率高。
我投的地图方向,笔试里果然出现了图论相关题目,后面会细说。
2.2 为什么基础算法题是“必考题”
一个很现实的逻辑:算法工程师日常大量时间在写数据处理 pipeline、特征工程、模型调优,但笔试环节没法让你现场训练一个模型。所以公司只能用基础算法题来快速筛选候选人的代码能力、逻辑思维和工程素养。
滴滴笔试编程题不像字节、阿里那样动不动上 hard 难度,但它更偏向“业务场景包装 + 经典算法变形”。比如同样是考最短路径,它会包装成“司机接单的最优路线选择”;同样是考动态规划,它会变成“一天内多订单的最优收益组合”。这种出题风格要求你能识别题目的本质模型,而不是背模板代码。
2.3 机器学习理论题:覆盖广、挖得深
选择题部分,机器学习基础占比很大,但和学校期末考试那种“背公式”的考法不同,滴滴更倾向结合实际业务场景出题。
举个例子,它不会直接问“XGBoost 和 GBDT 的区别”,而是给出一个“预测某区域未来半小时叫车需求”的场景,问“在特征分布存在明显时间周期性时,采用哪种交叉验证方式更合理”。这种题目考察的不仅是“你知不知道这个概念”,更是在看你能不能把理论和业务目标结合起来思考。
3. 核心考点拆解:哪些知识点必须吃透
3.1 数据结构与经典算法:刷题是基本功
从我和身边同学的反馈来看,滴滴笔试的算法题高频考点集中在:
- 排序与查找:快排、归并排序、二分查找变种。尤其是“旋转数组的二分查找”“找第 K 大元素”这类经典变形,出现的频率非常高。
- 贪心与动态规划:区间调度、背包问题、最长上升子序列,属于必会。滴滴特别爱出“资源分配”类的贪心题,和它调度场景强相关。
- 图论:最短路径(Dijkstra、SPFA)、拓扑排序、并查集。地图方向基本必考。
- 字符串算法:KMP 的 next 数组、Trie 树在题库里也是常客,虽然考到编程题的概率不高,但选择题中容易考到原理。
我印象最深的一道选择题是关于 KMP 算法 next 数组的。它给了一个模式串p="abacaba",让计算 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 数组。
模式串p="abacaba",求 next 数组。我当时在草稿纸上快速推导了一遍。先明确 next[i] 的定义:对于模式串 p,next[i] 表示 p[0...i] 这个子串的“最长相等真前缀与真后缀的长度”。注意是“真前缀/真后缀”,不能包含整个子串本身。
推导过程如下:
- i=0,字符
a,没有真前缀和真后缀,next[0] = 0。 - i=1,子串
ab,前缀a,后缀b,不相等,next[1] = 0。 - i=2,子串
aba,前缀有a、ab,后缀有ba、a,最长相等是a,长度 1,next[2] = 1。 - i=3,子串
abac,前缀a、ab、aba,后缀bac、ac、c,无相等,next[3] = 0。 - i=4,子串
abaca,前缀和后缀的最长相等部分是a,next[4] = 1。 - i=5,子串
abacab,最长相等前后缀是ab,长度 2,next[5] = 2。 - i=6,子串
abacaba,最长相等前后缀是aba,长度 3,next[6] = 3。
所以 next 数组是[0, 0, 1, 0, 1, 2, 3]。
这题的关键就是定义要清楚。很多人会把 next[0] 定义为 -1(某些教材的写法),导致答案对不上。考试时如果遇到这种“定义不一致”的题,优先按照题目给出的定义来。
第二类:多选中的“缓解过拟合”题。
选项通常有:A. 增加 L2 正则化系数;B. 使用 Dropout;C. 在训练集上继续迭代更多轮次;D. 数据增强;E. 使用更复杂的网络结构。答案是 A、B、D,C 和 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 的defaultdict+find函数暴力匹配了,因为题目数据量相对较小,可以直接过。但如果是大数据的场景,建议用 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 <= 100:O(n^3) 可以接受。n <= 10^5:至少要 O(n log n)。- 如果涉及图遍历:确认是有向图还是无向图、有没有负权边。
我遇到的第一道加权区间调度题,数据量是n <= 10^5,这就直接排除了 O(n^2) 的 DP,必须用二分优化。看清楚数据范围再动手,能避免很多无效设计。
7. 笔试后的求职节奏与心态调整
笔试题量大、时间紧,考完感觉一般是很正常的事,我自己当时有一道选择题也是蒙的,编程题第二道用了低效的暴力解法。但最后仍然收到了面试通知,说明笔试只是筛选环节之一,不太可能要求你拿满分。
真正重要的是:每一次笔试都是一次查漏补缺的机会。我在笔试完当天,把错题和遗忘的知识点整理成了笔记,包括 KMP next 数组的定义、self-attention 的计算流程、加权区间调度的 DP 模板等。这些笔记后来在面试中也派上了用场,因为面试官常常会追问笔试里没做出来的题。
8. 最后一个实用小技巧:提前准备好笔试环境
笔试当天,建议提前半小时进入系统,调试摄像头、屏幕共享、网络环境。滴滴笔试用的是在线监控系统,会要求开启摄像头和屏幕录制,如果环境检测不通过,会被判定作弊风险。我那次就遇到摄像头无法启动的问题,折腾了五分钟才处理好,虽然没有影响答题,但确实影响了心态。
提前把手机调成勿扰模式、关掉所有无关的软件弹窗、准备好草稿纸和计算器(部分系统允许使用计算器),这些细节都能让你在笔试时更专注。