ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

2024秋招滴滴研发岗笔试全记录:题型拆解与备考攻略

2024秋招滴滴研发岗笔试全记录:题型拆解与备考攻略 2024年秋招-滴滴-研发岗笔试又到了一年一度的秋招季。作为亲身经历过2024年滴滴研发岗笔试的过来人我想把这次笔试的完整经历、题型拆解和备考思路好好整理一下给接下来要参加笔试的同学一个相对清晰的方向参考。滴滴的笔试在互联网大厂里属于中等偏上的难度整体风格务实看重代码基本功和算法思维不太喜欢出偏题怪题但会在基础知识点上挖得比较细这点需要特别注意。我参加的是2024年秋季校园招聘的研发岗统一笔试岗位方向是后端研发。整个笔试流程、题目类型和我自己的答题过程下面都会逐步拆开讲。不管你是准备投递滴滴还是其他互联网公司这套笔试的底层逻辑都有很强的参考价值。1. 笔试整体情况与前期准备1.1 2024年秋招笔试的基本盘滴滴2024年秋招研发岗笔试采用线上笔试的形式统一在牛客网平台进行。整个笔试时间长度为120分钟题量构成为10道不定项选择题加2道编程题。选择题覆盖计算机基础四大件加部分场景题编程题则偏向算法与数据结构的实际应用。我先说下整体感受时间真的不够用。120分钟听起来不少但10道不定项选择题每道都可能涉及三四个知识点的交叉加上2道编程题需要读题、思考、编码、调试实际分配到每道编程题的时间也就40分钟左右。如果选择题卡在某个模糊的知识点上纠结太久后面编程题基本就危险了。我身边就有同学因为选择题耗时过长导致最后一道编程题只写了一小半非常可惜。从投递时间线来看滴滴秋招的笔试通知通常会在简历投递后1到2周内发出面试前会有多批次笔试安排。建议尽早投递早批次的竞争压力相对小一些而且后续还有补录机会。笔试成绩会保留一段时间如果第一次发挥不佳有些批次可以参加第二次笔试但每场笔试的成绩都会作为面试官评估的参考能一次考好就不要指望二刷。1.2 针对性备考的准备工作在正式参加笔试之前我做了大约三周的集中准备这里分享一下我认为最有用的几个准备方向。第一是算法题的刷题范围控制。滴滴的笔试算法题不会刻意追求极难极偏的题目但非常看重对经典算法的熟练度。我重点刷了LeetCode Hot 100和中高频题特别是数组、字符串、链表、二叉树、动态规划、贪心这几类。每类题目不能只是做过还要能讲清楚时间复杂度和空间复杂度因为笔试虽然不直接问复杂度分析但编程题判题时会考察极端情况下的运行效率写了个On三次方的暴力解法就算逻辑对也可能超时。第二是计算机基础的查漏补缺。选择题部分覆盖得相当全面操作系统、计算机网络、数据库、数据结构都有涉及。操作系统重点看进程线程区别、死锁条件、内存管理、页面置换算法计算机网络重点看TCP/UDP区别、TCP三次握手与四次挥手、HTTP状态码、DNS解析过程数据库重点看索引原理、事务ACID、隔离级别、B树特性、SQL语句优化。这些知识点不需要背得多精深但概念必须精准因为不定项选择题最容易在多选漏选上丢分。第三是模拟笔试训练。我提前在牛客网上找了前两年的滴滴笔试模拟题按照真实的120分钟时限进行模拟。这一步非常关键因为线上笔试和平时刷题的心态完全不同限时压力下你会发现自己读题速度、代码打字速度、调试速度都不够用。模拟两三次之后你会逐渐找到自己的答题节奏比如哪些题目先跳过、每道题预留多少时间、什么时候该放弃一道做不出来的题。2. 题型深度拆解与应对策略2.1 不定项选择题的考点分布与难点滴滴2024年秋招笔试的选择题部分10道题目基本覆盖了计算机基础的核心领域。根据我的记忆和考后复盘考点大致分布如下操作系统相关2到3道、计算机网络2到3道、数据库1到2道、数据结构和算法1到2道、还有1道左右的综合场景题。不定项选择的难点在于你永远不知道正确答案有几个。这和单选完全不同多选漏选不得分多选错选也不得分所以对每个选项都要有明确的判断依据不能靠猜。我的策略是能确定的选项直接选不确定的选项宁可少选也不能乱选。比如一道题如果你能确定两个选项是错的但剩下两个选项中有一个不太确定那就只选那个确定对的不要冒险。这里举几个实际考到的知识点例子帮助大家感受一下考察深度。操作系统部分有一道题考察了死锁的四个必要条件四个选项分别对应互斥条件、请求与保持条件、不可剥夺条件、循环等待条件题目问的是哪些是死锁产生的必要条件这个知识点本身不难但选项描述方式比较隐晦需要仔细辨析。计算机网络部分有一道题给出了一个HTTP请求的完整流程问在整个过程中涉及哪些协议除了明显的HTTP、TCP、IP之外还涉及DNS、ARP有一些同学就容易漏选ARP这就是典型的陷阱。数据库部分有一道关于索引失效的题目给了几个SQL查询条件问哪些情况下索引会失效。这个知识点很实用但在笔试环境下需要快速判断。我在准备阶段特意整理了索引失效的常见场景比如对索引列进行函数运算、隐式类型转换、使用左模糊匹配、联合索引不满足最左前缀原则等这些都有助于在考场上快速排除选项。2.2 编程题的核心思路与解题框架编程题部分有两道一道偏向数据结构和算法的基础应用另一道偏向业务场景下的算法设计。两道题都需要自己处理输入输出这点和LeetCode上只需要实现函数体不同需要额外注意。第一道题我遇到的是关于数组操作的题目大致题意是给定一个数组允许进行某种操作求满足条件的最优解。这类题目的核心考察点是双指针或者贪心算法。拿到题目后我先分析了数据范围如果数组长度在10的五次方级别那就基本排除了暴力解法考虑On或者Onlogn的算法。然后根据题目要求的“最优解”关键词判断应该是贪心还是动态规划。第二道题偏向场景设计题目给出一个带业务背景的算法问题需要抽象成数学模型。这种题的关键在于从业务描述中提取核心数据结构往往看起来复杂的业务场景抽象之后就是一个经典的图论或排序问题。我遇到的那道题抽象出来后本质是一个拓扑排序的问题通过构造图和入度表用队列实现拓扑排序即可求解。编程题的解题框架我总结为四步第一步快速读题提取输入输出格式和数据范围第二步分析题目本质判断属于哪类经典算法问题第三步动手写代码前先用注释列出整体思路避免边写边想导致逻辑混乱第四步编写代码后进行简单的边界测试比如空数组、单个元素、最大数值等情况。这两道题我各用了大约35分钟第一道比较顺利第二道在调试边界条件时花了一些时间。3. 高频考点精讲与真题复盘3.1 操作系统与并发编程的核心考点操作系统是滴滴笔试选择题的重头戏尤其偏爱进程线程、死锁、内存管理这几个方向。从我的备考经验和实际考后的复盘来看有几个高频考点值得反复巩固。进程和线程的区别是最基础也是最常考的但不要只看表面的“进程是资源分配的最小单位线程是CPU调度的最小单位”这种标准答案要多想一层为什么进程拥有独立地址空间而线程共享进程间通信方式有哪些线程间同步用哪些机制这些延伸问题在笔试选择题中常常以不同形式出现。比如一道题考察线程同步方式选项里混入了一个进程间通信方式如果你只看过知识点而没有理解底层逻辑很容易被干扰。死锁部分除了掌握四个必要条件还要理解死锁避免和死锁检测的区别。银行家算法是死锁避免的经典算法理解它的核心逻辑是判断系统是否处于安全状态而不是简单地分配资源。选择题可能会问“在某个资源分配状态下系统是否安全”“哪些进程可以安全执行完”这就需要在考场上手动推演资源分配表平时多练习几道银行家算法的计算题会很有帮助。内存管理方面分页和分段是重点特别是逻辑地址到物理地址的转换计算。这类题一定会给具体的页表或者段表需要计算页号、页内偏移然后查表得到物理地址。我在准备时发现这类题容易在单位上出错比如页大小是4KB逻辑地址是以字节为单位计算页号时要记得偏移量的位数。另外虚拟内存的页面置换算法也是常考点LRU、FIFO、Clock算法要能手动模拟并计算出缺页次数。3.2 计算机网络与数据库的考点解析计算机网络部分TCP的三次握手和四次挥手几乎是必考的。但现在的考察方式越来越灵活不是简单问你“三次握手的过程是什么”而是给一个实际场景比如客户端和服务器之间建立一个连接然后断开中间经历了哪些状态转换某个状态下收到特定报文段应该如何处理。我在实际考试中就遇到一道题给出了一个TCP连接的状态序列问哪个选项描述的状态转换是不可能发生的这道题就很考验对TCP状态机每个状态的理解而不只是背过程。HTTP和HTTPS的区别也是高频考点但需要掌握到更细节的层面比如TLS握手过程、对称加密和非对称加密分别用在哪个环节、证书验证的目的。还有一个容易踩坑的点是HTTP状态码的分类1xx、2xx、3xx、4xx、5xx各自代表什么常见的如301和302的区别、403和404的区别选择题可能会给几个状态码让你判断正误。数据库部分索引是最核心的考点。除了前面提到的索引失效场景还要掌握B树的特性以及为什么数据库选择B树而不是B树或红黑树。这个知识点可以结合磁盘IO的角度来理解B树的高度更低、非叶子节点不存储数据可以容纳更多索引项、叶子节点之间通过指针相连便于范围查询这些特性都值得脱口而出。事务ACID属性和隔离级别也是常考的特别是不同隔离级别下会出现什么问题比如读未提交会导致脏读读已提交避免脏读但可能出现不可重复读可重复读避免不可重复读但可能出现幻读。选择题可能会给定一个隔离级别和具体场景问会出现什么问题这就需要把每个级别的特性记牢。3.3 两道真题的详细复盘从回忆和考后复盘来看两道编程题的做题过程都很有代表性。第一道编程题的具体场景是一个数组变换问题大意是给定一个正整数数组每次操作可以选择一个子数组将该子数组内的所有元素乘以负一目标是执行若干次操作后使整个数组的和最大求这个最大和。刚看到这道题时我先确认了操作的本质任意子数组乘以负一等价于可以选择任意区间将区间内元素的正负号翻转。由于可以执行多次操作实际效果是可以任意调整每个元素的符号那这道题就转化为把所有负数变成正数所有正数保持正数答案就是所有元素绝对值之和。但这里有个细节如果允许操作不限次数确实所有负数都能变成正数。所以我最终的解法就是遍历数组累加所有元素的绝对值。这道题的核心在于能否看出多次操作可以等价为每个元素独立变号其实考的是对操作本质的抽象能力。这道题我写了不到二十行代码复杂度On。第二道编程题的场景是一个任务调度问题大意是有N个任务某些任务之间有依赖关系需要判断给定的依赖关系是否形成循环依赖如果没有循环依赖输出一种可行的执行顺序。这个场景非常直白就是拓扑排序。我先把任务编号映射为图的节点然后根据依赖关系构建有向边和入度表再借助队列进行拓扑排序。在实现时注意了以下几点使用邻接表存储图的结构统计每个节点的入度循环取出入度为零的节点加入结果序列并将其指向的节点入度减一如果减一后入度变为零则入队。最终如果结果序列长度等于任务总数说明存在可行顺序否则说明存在环。这道题整体不算难但输入数据的解析需要小心因为输入格式可能是多个以空格分隔的整数要正确读取每一对依赖关系。我在调试时还特别注意了自环的情况即任务依赖自身这显然构成循环依赖需要正确判断。4. 答题节奏与时间分配心得4.1 两个小时的黄金分配方案120分钟的时间分配直接决定了你的笔试结果。根据我的实际体验我推荐一个比较稳妥的时间分配方案选择题控制在35到40分钟内编程题第一道控制在30分钟内编程题第二道控制在40分钟内最后预留10到15分钟做整体检查。这个时间分配不是拍脑袋想出来的而是基于各部分的得分效率反推的。选择题10道每道分值相同你花太多时间去纠结一道模糊题机会成本很高。我自己的策略是选择题一遍过遇到拿不准的题目先标记不在上面死磕等编程题写完后再回头思考。这样做的好处是确保高分值的编程题有充足时间。编程题的时间分配要结合预估难度动态调整。我拿到两道编程题后会先都读一遍题目大概判断哪道更简单先做简单的拿稳分再做难的争取分。这个习惯非常重要因为有些同学喜欢按照题目顺序做题结果第一道看上去简单但实际有一些边界条件需要处理卡了40分钟第二道本来能做的题反而没时间了。先做简单题让自己先拿到一部分分数心态也会更稳。最后留出的检查时间非常必要。我建议检查顺序是先检查编程题的输入输出格式是否符合要求再检查有没有明显的数组越界和空指针风险然后检查几个边界测试用例是否通过最后回到标记的选择题结合整体知识框架做最后判断。2024年的笔试环境支持本地编译器调试但提交时的判题环境是Linux要注意类名、包名、主函数签名等规范问题。4.2 考场上的心态管理与应变策略笔试考场上心态波动是不可避免的但如果能提前预判一些可能出现的情况就不会轻易被打乱节奏。我在考试过程中遇到了读题卡壳的情况第二道编程题题目很长包含了很多业务描述我第一遍读完甚至没有立刻反应过来是拓扑排序而是觉得像是某种复杂的状态机。这时候我深吸一口气把题目再读了一遍主动忽略业务背景描述只关注输入输出和依赖关系才识别出本质模型。识别不出算法模型时还有一个有效策略从数据范围反推算法。这一步在真实笔试中非常有用。比如题目给出的N的范围是10的五次方那On平方的算法就基本不可能通过说明需要Onlogn甚至On的解法。又比如N的范围只有20以内那可能就需要用状态压缩动态规划或者暴力搜索枚举。如果你能通过数据范围排除掉明显不合理的解法剩下的算法类型往往就能锁定到某几个方向再结合题目中的关键词确定具体算法。另一个考场上的常见问题是编程题编译或测试用例不通过这会在考场上制造很大的心理压力。我的应对方法是遇到测试不通过不要反复随机修改代码而是用简单的测试用例手动走一遍代码逻辑。比如用3个节点、两条依赖边的简单用例在纸上或注释里逐行推演变量的变化往往很快就能发现逻辑漏洞。如果始终找不出问题果断检查是不是输入解析出了错比如题目中的数字是用逗号分隔而不是空格这种情况浪费了我不少时间。后来我养成了习惯写代码之前先把手动构造的测试用例确定好包括普通用例和边界用例然后代码写完直接跑一遍这些用例能大大减少调试时间。5. 错题复盘与独家避坑指南5.1 我在笔试中踩过的几个坑每次笔试之后认真复盘比多刷十道题还有用。我在滴滴这次笔试中踩了几个坑写在这里给后来人提个醒。第一个坑是不定项选择题的多选风险。有一道操作系统题目考的是进程调度的几种算法我对时间片轮转和优先级调度比较有把握但选项中混入了一个比较冷门的调度算法我记得它正确却无法百分百确定于是选择了包含它的组合结果这个选项确实是错的整道题全军覆没。之后我在模拟练习中纠正了策略在不定项选择里凡是不确定的选项一律不选哪怕因此少拿一些分也不要冒险扣掉整道题的分。第二个坑是编程题的输入处理。我平时在LeetCode刷题习惯了只写函数实现忽略了输入解析的细节。滴滴笔试的第一道编程题输入是两行格式第一行是一个整数N第二行是N个整数中间用空格分隔。我一开始使用Scanner逐行读取但没有考虑到数组元素可能分布在多行结果提交后部分测试用例无法通过。后来我改成直接用Scanner持续读取N个整数问题就解决了。这个教训是线上笔试的编程题输入格式多变一定要使用稳健的读取方式不能想当然地假设输入在一行内。第三个坑是边界条件测试不够。第二道编程题中有一个测试用例是一个任务依赖自身形成自环。我当时的主逻辑能判断出存在环但在输出格式上出现了问题因为题目要求存在环时输出特定格式的提示信息我输出了错误的内容。这说明在写完主逻辑后一定要回顾题目描述中的输出要求把每种情况的输出格式都对上号。对于这种业务场景题输出格式往往比算法本身更容易导致丢分。5.2 独家算法与时间管理技巧在实战中我积累了一些比较有效的技巧这里挑几个最实用的分享。第一个是编程题的草稿纸使用。线上笔试虽然不在纸上写代码但准备一张草稿纸非常有用。读题时把核心约束、输入输出格式、数据范围、目标函数写在纸上然后画出算法的大致流程再动手写代码。这能避免写着写着忘记题目的关键约束也能帮助在调试时快速回顾原始需求。第二个是灵活使用暴力解法拿部分分。不是每道编程题都能在考场上想出最优解特别是遇到动态规划的状态转移方程比较复杂的情况。我的原则是如果五分钟内没有清晰思路就先用暴力解法写一版能够处理小数据量的代码至少通过部分测试用例拿到部分分数然后再尝试优化。笔试判题通常按测试用例计分暴力解法能拿到一半以上的分数远好过死磕最优解最后没有提交任何代码。第三个是善用本地调试环境。牛客笔试平台一般允许本地IDE编写代码然后复制到网页提交。我会先在本地IDE中写好代码用自己构造的多个测试用例跑一遍确认无误后再复制到提交框。本地IDE的调试能力远比在线编辑器强大比如可以输出中间变量查看状态、断点调试这些都能帮助快速定位逻辑错误。但要注意最后提交前把调试用的输出语句删除避免影响输出格式。5.3 笔试与后续流程衔接的注意事项笔试结束不意味着万事大吉后续的面试流程同样重要。这里给几个衔接阶段的建议。第一个是立刻做复盘笔记。笔试结束后的几个小时内趁记忆还清晰把考到的知识点、自己做错的原因、编程题的解题思路都记录下来。这份复盘笔记不仅能帮助你准备后续面试也能在面试官问起笔试题目时对答如流。我自己在面试时就被问到了笔试中第二道编程题的解题思路因为有复盘讲解得非常清楚面试官也比较认可。第二个是准备项目经历和基础知识面试问答。滴滴的面试通常会结合你的简历项目经历深入提问也会考一些基础知识。笔试中遇到的知识点比如索引失效、TCP状态转换、进程调度算法很可能在面试中被进一步追问。我的建议是笔试之后就开始系统梳理这些高频知识点的深层次内容不只是背结论还要能讲清楚原理和底层实现。第三个是留意笔试结果通知的节奏。一般来说笔试通过后一到两周内会收到面试邀约但也有可能因为批次原因延迟。在等待期间仍然要坚持刷题和复习不要因为一场笔试结束就松懈。我周围有不少同学在等待面试期间放松了刷题进度结果面试时手生写算法题明显变慢这就很吃亏。保持每天的刷题手感对后续每一轮面试都有直接帮助。6. 从笔试看滴滴研发岗的选拔逻辑6.1 笔试题目背后的能力考察重点透过滴滴这次笔试的题型和考点我们可以看到公司对研发岗位候选人的核心能力要求。首先是对计算机基础知识的掌握程度。选择题几乎覆盖了操作系统的进程管理、内存管理计算机网络的传输层和应用层数据库的索引和事务这些内容都是日常开发工作中最常用的理论基础。如果一个候选人连进程和线程的区别、TCP和UDP的适用场景、数据库索引的基本原理这些概念都不清晰很难让人相信他能独立解决开发中的实际问题。其次是算法思维和代码实现能力。两道编程题分别考察了抽象思维和经典算法的应用第一道题看似简单但需要对操作的本质有深入理解第二道题则直接考察了图论算法的应用能力。互联网公司的业务场景中任务调度、依赖管理、路径规划等需求非常常见能够熟练运用算法解决这些实际问题是一位合格研发工程师的基本功。最后是代码的规范性和鲁棒性。笔试虽然不直接考核代码风格但通过边界条件的处理、内存管理、异常情况的判断能够间接反映候选人的代码习惯。我在第二道编程题的答题中特意加上了对输入数据范围的校验和自环情况的判断这些细节虽然不一定在测试用例中体现但面试官在后续查看笔试代码时能够看到候选人考虑问题是否周全。6.2 这类笔试对求职者的长期价值准备和参加滴滴研发岗笔试的过程本质上是对大学四年计算机知识的一次系统梳理。即使你没有拿到滴滴的offer这段备考经历本身也有很高的长期价值。从知识体系的角度来看笔试涉及的知识点几乎覆盖了计算机专业的核心课程。操作系统、计算机网络、数据库、数据结构与算法这四门课是计算机专业的四梁八柱也是未来无论从事后端、客户端还是算法工程师都需要的基础能力。通过笔试备考把你之前学得模模糊糊的知识点重新拾起来建立整体知识框架这个收获是可以长期收益的。从应试能力的角度来看限时笔试锻炼的不仅是知识储备更是压力下的快速分析和决策能力。在120分钟内完成十几道题目你需要不断评估哪些题值得花时间、哪些题需要放弃、如何分配精力这种取舍能力在未来的工作和生活中都非常重要。工作后的线上故障排查、技术方案选型、需求优先级排序本质上都是一种限时决策。从求职策略的角度来看多参加大厂的笔试本身就是一个以考代练的过程。每一场笔试的题目风格和考点侧重都有所不同通过不断参加笔试并复盘你会逐渐摸清不同公司的出题套路做题速度和准确率都会稳步提升。我自己的感受是越到后面参加的笔试越从容因为见过了足够多的题型考场上遇到新题也不会慌。6.3 对准备秋招同学的几点建议根据这次滴滴笔试的完整经历我最后给准备秋招的同学几点实在建议。第一点基础知识复习不能只背概念要结合场景去理解。比如TCP三次握手不能只背三次过程还要知道为什么不是两次或四次每种状态转换在什么情况下发生数据库索引不能只记住B树还要理解为什么磁盘IO背景下的B树比哈希索引更适合范围查询。只有理解了底层逻辑才能应对不断变化的出题形式。第二点编程题刷题要注重效率而不是数量。每天刷几道高质量题目做完之后认真看题解对比自己的解法和最优解法的差距总结每一类题目的通用思路这样的刷题效率远高于一天盲目刷几十道但还是不会做新题。我备考期间每天刷5到8道题每道题做完后都写一句话思路总结三周下来形成了自己的解题工具箱考场上看到题目就能快速匹配对应的算法方向。第三点保持平稳的备考节奏不要搞突击冲刺。秋招是一个持续几个月的过程不是一场考试定胜负。笔试过后还有面试面试过后还有HR面每个环节都需要良好的状态。我比较推荐的方式是每天保持固定的刷题量和复习时间同时留出时间锻炼和休息保持精神饱满的状态这样在每一场笔试和面试中才能发挥出最好的水平。第四点建立自己的错题本和笔记库。无论是笔试模拟中的错题还是面试中回答不完善的问题都值得记录下来并定期回顾。我在备考期间就建立了一个云笔记库按照操作系统、计算机网络、数据库、算法等分类记录了所有遇到的知识点和易错点每次笔试前翻阅一遍效果非常明显。这套笔记在后续面试中同样发挥了很大作用算是这次秋招我自己最满意的一个准备工作。
返回列表