拓冰建站拓冰建站
首页 / 资讯中心 / 正文

滴滴算法岗笔试复盘:题型识别、时间分配与避坑指南

2024年秋招的笔试场次安排得比往年更早滴滴的算法岗笔试链接弹出来那一刻我盯着屏幕有点愣神。不是害怕题目而是突然发现秋招这件事已经从“听学长说”变成“自己上”。这场笔试是线上双机位监控、90分钟、一共三道题平台是牛客网。经历过的人都知道线上笔试的难点从来不只是题目本身还有环境、设备、心态和临场判断。这篇文章不聊面经只聊笔试。我把这场考试从题目类型、拆题思路、算法选型到做题策略完整复盘一遍尤其把我在考场上踩过的坑和下来补齐的知识点都写清楚给接下来要打秋招算法岗的人做个参考。1. 先摸清滴滴算法岗笔试的盘面我见过很多人在笔试前疯狂刷LeetCode Hot 100结果上了考场发现题型分布和预期差距很大。所以第一步先把“这个岗位的笔试到底考什么”搞清楚比盲目刷题重要得多。1.1 线上笔试的整体结构与时间压力滴滴的算法岗笔试一般安排在晚上时长90分钟题量通常是3道编程题部分批次会混入几道选择题或问答题。牛客网平台全程双机位监控意味着你没法像平时那样随手翻本地笔记。即使没有监考90分钟3道题的强度也基本不允许你边做边查。从题型上看算法笔试的套路受岗位方向影响不大。无论投的是推荐算法、NLP算法还是图像算法笔试阶段基本统一考数据结构和算法而不是深度学习框架或模型细节。这点很多人判断失误以为投算法岗就要狂背Transformer和Attention公式结果笔试全是DP和贪心题直接被打懵。1.2 三道题常见的难度分布以我观察到的情况和身边的反馈来看三道题通常是“两道中等题一道困难题”也可能出现“一道签到题一道中等题一道较难题”的配置。第一题偏向简单到中等通常是模拟、字符串处理或者简单数据结构题。目的很直接就是让你过一道保底题。第二题中等偏上难度常见DP、二分答案、贪心加排序。这道题是区分度最大的题。第三题难题可能是复杂状态DP、图论、或者需要数学推导的题。目标是筛出综合能力最强的那批人。我的建议是对第三题不要抱太大的执念考试不是一个公平的“全做完”游戏而是一个“拿分最大化”游戏。优先保证第一题和第二题拿到充足分数第三题用暴力或部分分策略去蹭分整场的通过率会非常好看。1.3 题面描述里的隐藏信息现在很多笔试题目都会包装一个业务背景尤其是互联网大厂的笔试题。滴滴算法的背景往往和路径、订单、司机调度、拼车等相关。这类题目表面是业务题核心仍然是算法。比如“给定一个订单序列安排司机使得等待时间最小”剥掉外壳就是贪心区间调度“给定多个候选上车点求所有组合的最短路径”剥掉外壳就是旅行商问题的变体。所以读题的时候别被背景绕进去第一遍读完应该立刻问自己这题到底考的是哪种经典算法模型是区间DP是最小生成树是二分图匹配还是带权最短路快速归因到经典模型是拆题的关键能力。我考场上在第二题花了近半小时才意识到它是“带状态压缩的DP”这个归因速度如果能再快一点后面第三题还能多写一个暴力版本。2. 编程题的三种识别框架与应对套路从写法上讲刷题多的人会形成条件反射看到某些信号就联想到某类算法。下面我把笔试里最常出现的三类识别框架整理出来这些都是应考必备的思维工具。2.1 数据范围决定算法复杂度很多考生不看数据范围就上手设计算法。数据范围在笔试里是最重要的提示信息没有之一。当 n 在 10 左右优先考虑状压DP或者全排列暴力枚举。10! 是 300多万配合剪枝也许还能跑。2^10 的枚举更是轻轻松松。当 n 在 100~500 之间三维DP、O(n^3) 的Floyd、匈牙利算法等O(n^3)级别算法可以做。当 n 在 1000~5000 之间O(n^2) 的DP、二维前缀和、普通Dijkstra可用。当 n 在 10^5 到 10^6线段树、树状数组、O(n log n) 的排序、二分、单调栈、堆优化Dijkstra都行。当 n 到 10^9 量级必然涉及数学推导、矩阵快速幂、欧拉降幂或数论分块。我在滴滴笔试第一题里遇到一个看起来像模拟的题目数据范围给到 10^5如果直接二重循环模拟必挂但顺着数据范围推发现需要维护一个前缀极值数组问题立刻变简单了。这就是数据范围在帮你指路。2.2 字符串题与KMP家族的快速识别热词里反复出现KMP、BM、AC自动机等字符串算法。笔试中对字符串的考察其实非常克制但需要做足万全准备。KMP算法的特征非常明显题面里出现“求模式串在主串中出现的位置”“重复子串的最小周期”等表述。我记得有一道经典题模式串 pabacaba求其 next 数组这几乎可以作为KMP算法面试的先导题。KMP最难的不是写出来而是理解 next[i] 到底存的是什么对于模式串的前 i 个字符组成的子串其最长相等前后缀的长度。这个定义搞明白代码基本是默写。如果是字符串匹配且要求线性时间就用KMP如果匹配多个模式串且数据量大用AC自动机如果要求和最短回文串或者Z函数用Manacher或ExKMP。笔试中出现AC自动机频率极低我建议只要把KMP、Trie和Manacher用熟字符串题基本能应付。时间不够的人优先把KMP和Trie吃透常见场景足够覆盖了。2.3 图论题的信号识别与常用算法图论的识别信号是题面里出现“节点”“边”“连通”“最短路径”“环”等词汇。滴滴的业务和地图、路径高度绑定图论几乎是必考方向。Dijkstra考察频率最高尤其是堆优化版本。它适用于单源最短路径且边权非负的图。需要注意边权可能为0此时队列用普通队列SPFA其实最稳妥但面试官通常更认可Dijkstra。如果看到节点数在10^5、边数在10^5那必然是堆优化的Dijkstra或者BFS加状态压缩。二分图匹配的匈牙利算法也要准备识别特征是小数据量下的“配对”“安排”“覆盖”问题。我记得有一道题“有n个任务和m个人每个人只能做若干任务如何安排使更多任务被完成”这个就是标准二分图最大匹配n和m都在500以内用匈牙利算法跑一遍就行。kahn算法拓扑排序识别信号是“先后关系”“依赖顺序”“检测环”在调度类问题里极其常见。这些都属于常规考法不需要怕关键是识别速度。3. 机器学习与深度学习考点笔试第二战场虽然算法岗笔试以编程题为主但部分批次会在编程题之前或之后安排选择题考察机器学习、深度学习基础。这部分内容占分不高但错得太离谱会很伤心态。3.1 高频机器学习考点清单从历年的情况看机器学习选择题集中在以下几个模块监督学习方面线性回归、逻辑回归、SVM是老三样。SVM的核函数选择、软间隔与硬间隔的区别、支持向量的概念都属于送分题。KNN要注意它的K值选择影响、距离度量方式以及它是惰性学习算法这个特点。热词里提到“KNN算法的应用能力包括哪三个方面”这类考点在选择题里会以“下列说法正确的是”的形式出现需要特别留意。聚类方面K-means是必考。初始化质心的方式、收敛条件、K值选择方法手肘法都是经典考点。和K-means对比的DBSCAN也要了解它的优势在于能处理任意形状簇、不需要预设簇数、能识别噪声点。这几条几乎是固定答案。集成学习里XGBoost是重头戏。它的损失函数、正则项、梯度提升树结构、以及和GBDT的区别是选择题常客。很多人只背“XGBoost比GBDT快”但笔试常考的是XGBoost在目标函数中加入了正则项来控制模型复杂度以及它支持二阶导数信息。这些细节要背扎实。3.2 深度学习考点与常见坑深度学习部分常考的有激活函数性质、梯度消失原因、BatchNorm的作用、Transformer结构和注意力机制、CNN和RNN的区别。KL散度和ELBO这个点在热词里出现过这个考法比较深。KL散度的定义是衡量两个概率分布差异的非对称度量在变分推断中ELBO 证据下界 E[log p(x,z) - log q(z|x)]。笔试如果考到通常不是让你推导而是判断性质KL散度非负、不对称ELBO用于近似难以计算的后验。我在选择题里就遇到过关于KL散度非负性的判断细节决定成败。热门考点还包括音频重采样、图像锐化的拉普拉斯算子、Sobel边缘检测这类偏工程方向的题目。投算法岗的同学容易忽略多媒体处理基础但滴滴的业务涵盖图像、语音、地图数据因此公司笔试试卷里混入一两道图像算子和信号处理的题非常正常。Sobel算子的核心是用两个3x3卷积核分别计算水平和垂直梯度拉普拉斯算子是二阶微分算子常用于图像锐化。这类题会它就是送分不会它就是致命伤考前刷一遍常见算子总结非常划算。3.3 热词里的异常检测与工业场景热词里出现了“工业异常检测算法”这是近年来大模型和传统方法交汇很密的方向。笔试一般不会直接考复杂的异常检测模型但会考察PCA和autoencoder等降维重建方法在异常检测中的应用逻辑正常样本重建误差小异常样本重建误差大。记住这个逻辑相关选择题可以顺利拿下。有精力的话可以把BM25算法、模拟退火算法、粒子群算法的基本原理过一遍。这些算法不那么高频但考到就是拉开差距的点。BM25是信息检索领域的关键词相关性打分算法粒子群算法和模拟退火都属于启发式优化算法它们考法通常很浅判断“是否依赖梯度信息”“是否容易陷入局部最优”等性质。考前花两小时过一遍概念性价比很高。4. 考场上如何分配时间与争取最大得分笔试那天晚上我犯了一个很多考生都会犯的错在第二题上死磕了太久导致最后一题几乎没有时间写暴力解。复盘来看时间分配策略比继续刷三百道题更能提高笔试得分。4.1 按题目难度动态分配时间我的建议是拿到题先花3分钟通读三道题给每道题标注难度和思路方向然后按以下节奏推进第一题的实现时间控制在15分钟左右。大多数第一题是模拟题思路直白代码量中等偏大。写完立刻运行测试样例通过后不要反复重构直接下一题。第二题给到30分钟。如果15分钟内没理清DP状态转移方程先停止画状态图回到数据范围重新推复杂度再考虑是否能用二分答案或贪心优化。第三题分配最后30分钟。如果剩下时间不足30分钟放弃AC目标直接写暴力枚举或DFS回溯赚部分分会比硬啃最优解更高效。这里有一个经验之谈笔试判分系统通常是按通过的测试点百分比给分的暴力解也能拿到30%到40%的分数而空提交是0分。所以我宁愿用20分钟写一个时间复杂度很差的暴力版本也不要枯坐30分钟想正解。4.2 本地调试和牛客提交的差异牛客笔试环境里代码是提交到远端判题机运行的本地的输入输出格式必须抠清楚。很多题要求循环读入多个测试用例或者输入中混合了字符串和数字这时用 input() 或 sys.stdin.readline 要小心换行符和EOF处理。我在第一题就栽在这上面题目要求读取一行包含空格分隔的若干整数但我本机用 split() 转 int 时忘了处理空行导致被判运行时错误。这种基础问题浪费了快5分钟。对策是无论题目描述是否说明多次输入都在本地的测试代码里预先写好一个处理多行读取的模板。每次提交前单独再确认一下输入和输出示例的格式尤其是输出末尾是否需要换行。4.3 第三题的正解可能就在第一题的思路上这是一个反直觉但频繁出现的规律第三题有时是第一题的复杂版本用了相同的基础数据结构。比如第一题是区间查询最大值第二题可能是带区间更新的线段树第三题则可能是区间DP加线段树优化。我考场上第三题看着毫无头绪下来看题解才发现它的核心同样是维护区间极值只是外层套了一个动态规划的状态设计。所以不要轻易否定“看起来简单”的思路。如果你在第三题卡住了试着回头看看前两题它们的解法里有哪些基础算法组件是通用的把思路迁移过去哪怕只是完成一部分子任务也可能获得额外的分数。5. 笔试之外的细节环境、选题与复盘方法最后这部分聊的完全是“纸面之外”的内容。笔试最怕的不是不会做而是考场环境把你会做的题搅黄了。5.1 设备与网络必须提前演练一遍双机位监考要求手机和电脑同时在线所以在笔试前必须提前检查电脑摄像头能否正常启用、手机支架是否稳定、房间光线会不会导致人脸识别失败。建议至少提前一天做一次完整模拟把牛客网的开考流程、摄像头授权、屏幕分享等功能全部点一遍。网络策略也很有讲究。线上笔试断网5分钟以上极大概率导致提交失败所以我会优先使用有线网络而不是Wi-Fi。如果只能用无线关闭所有后台下载、视频通话和自动更新。有一次我朋友在笔试时电脑弹出系统更新重启的提示直接废了一次考试机会。这种细节没人提醒但在考场上代价极大。5.2 如何正确对待笔试中的新题与冷门算法热词里出现了“粒子群算法原理”“MTVP算法”“PID算法在CRPS PSU Power的作用”等冷门内容。这类算法在笔试题里出现的概率极低如果真的出现了更多是作为背景知识出现在选择题或方案设计题中不太可能要求现场手写粒子群算法。面对冷门知识正确的策略不是焦虑而是建立一个“保底认知层”知道它的核心思想和应用场景。比如粒子群算法是一种基于群体协作的随机搜索算法常用于连续优化问题PID算法是经典闭环控制算法核心是比例、积分、微分三个环节的调节。写答题卡时即使不会推导也能通过排除法得到大致正确的结果。笔试结束后的复盘比考试本身还重要。我会把每道题按“归因算法、状态转移、代码实现、边界处理、是否有更优解”五个维度做笔记。这样一套下来的收获比重复刷十道同类题更高。大多数人笔试挂了就只看分数不看题解这是最大的浪费。5.3 笔试与后续面试的衔接思考很多同学把笔试和面试割裂开认为笔试考完就结束了。实际上笔试中你写出来的代码和解题思路在面试环节可能被面试官调出来追问。滴滴的面试官很大概率会翻看你笔试的答卷问“你这题当时怎么想的”“这个状态转移方程能不能优化”。所以笔试结束后建议把每道题的完整题解和思考路径保存下来形成自己的笔试笔记它就是你后续面试的绝佳复习材料。秋招是一场长跑笔试只是其中一段。我身边既有笔试成绩一般但面试表现突出逆风翻盘的也有笔试高分却因为面试准备不足被刷下来的。所以放平心态把每一场笔试当成一次锻炼和反馈。个人经验是刷题量和笔试成绩并不完全线性相关真正拉开差距的是“对题型归因的速度”和“考场策略的稳定性”。拿到任何一道陌生题先归因到经典算法框架再根据数据范围决定复杂度最后分配好写题时间这套流程能保证你在大多数笔试里不会太吃亏。希望这篇复盘对正在备战算法岗笔试的人有帮助。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门