
2023年百度秋招研发岗笔试我踩过的坑和复盘出来的经验又到一年秋招季后台好几个学弟学妹来问我百度研发岗笔试到底考什么、难度怎么样、该怎么准备。我去年完整走完了2023年百度秋招研发岗的笔试流程从收到笔试通知到做完最后一个算法题整个过程踩了不少坑也总结了一些挺实在的经验。今天不聊虚的直接把我记得的题型、考点分布、做题节奏、常见误区全部摊开来写给后面准备百度或者其他大厂笔试的同学一个参考。这篇文章不保证押中原题但能帮你在拿到试卷时心里有底知道时间该花在哪、哪些题该果断放弃。1. 2023年百度秋招研发岗笔试的全貌题型构成与整体难度定位先说说这张卷子整体长什么样。2023年百度的研发岗笔试基本延续了互联网大厂通用的笔试结构总时长我记得是90分钟题量不算特别大但信息量和思维量都不小。整体分为两个大的部分第一部分是客观题包含单选题和多选题主要考察计算机基础覆盖数据结构、操作系统、计算机网络、数据库、编程语言特性等第二部分是主观编程题一般两道偶尔会有一道偏算法的、一道偏工程实现的需要在编辑器里写出完整可运行的代码。很多人容易有一个误区觉得百度是搜索引擎起家算法题一定特别难、特别偏。实际上2023年的秋招笔试给我的感受是基础题占了相当比例拉开差距的反而不是难题而是简单题的正确率和中等题的完成度。客观题的部分大概占了30到40分左右覆盖面比较广。我记得印象比较深的题目有二叉树的遍历序列推导、进程和线程的区别、TCP三次握手和四次挥手的状态迁移、数据库索引失效的场景、哈希冲突的解决方法、C虚函数表相关的问题、Java垃圾回收的基本策略等。这些题目说难不难但如果基础不扎实很容易在一些细节选项上翻车——尤其是多选题少选、错选都不得分这对知识体系的精确度要求很高。编程题的部分两道题的分值一般是不均等的通常第一道题偏简单属于“热身题”大概占20到25分第二道偏难属于“分水岭题”大概占30到35分。考场上我自己的判断是第一道题必须拿满第二道题至少要拿一半以上的分数笔试才有希望进入面试环节。整体难度我做一个直观的对比比牛客网上大部分企业的模拟题要略难但比Codeforces的Div.2要简单和LeetCode的Medium偏上难度相当。如果平时刷题量在150题以上且不是单纯刷水题那么2023年这套卷子拿到及格分压力不大。还有一个细节值得注意百度的笔试系统是支持本地IDE调试的也就是说你可以用自己熟悉的编辑器写代码再用系统提供的测试用例自测最后粘贴代码到答题区域。这一点体验很好但同时也意味着系统对代码的边界条件检查会更严格因为你有充分的时间自测。2. 客观题深度复盘操作系统、网络、数据库的高频考点与易错细节客观题看起来只是选择题但我在准备过程中发现一个规律凡是选择题里出现的内容往往对应着面试中面试官喜欢追问的基础知识点。所以笔试选择题背后暴露出的知识盲区一定不要偷懒跳过面试时大概率还会见到它们的变体。2.1 操作系统进程线程、死锁、内存管理是三道必考题操作系统在选择题中的占比相当稳定大概在8到10题左右。我遇到的题目里进程与线程的对比出现了至少两道这不是巧合而是因为百度内部C和Java技术栈都在用进程线程模型是一切并发编程的基础。考察方式通常不是直接问“进程和线程的区别是什么”而是给一段具体的场景描述让你判断哪个特性属于进程、哪个属于线程。比如“同一进程内的多个线程共享什么、不共享什么”这种问题答案的边界非常容易模糊——共享地址空间、共享文件描述符表、共享堆但不共享栈、不共享寄存器状态。这类题只要你有一个知识点记忆不准确就很容易在多选里丢分。死锁相关的题目也算高频。四个必要条件互斥、持有并等待、不可剥夺、循环等待必须能够默写但更重要的是能够判断给定场景是否形成了死锁以及如何打破。我记得有一道题给了哲学家进餐问题的变体问“同时拿起左边叉子的策略会导致什么问题”这不只是考死锁理论还是考实际编码中资源竞争的直觉。内存管理方面虚拟内存、分页分段、页面置换算法LRU、FIFO、Clock是老面孔。这里有个易错点LRU算法的实现方式是用链表加哈希表而不是简单记录时间戳后再排序。选择题如果问“哪种数据结构最适合实现LRU”答案一定是“哈希表双向链表”而不是“优先队列”。我有个同学就是在这个选项上犹豫了半天最后选了个“数组时间戳”的干扰项。2.2 计算机网络TCP相关细节比HTTP更常考网络部分的题量一般有5到8题。很多人以为大厂笔试爱考HTTP状态码、HTTPS握手但2023年百度这套笔试给我的感觉是TCP的细节比HTTP考得更深。TCP四次挥手的状态迁移是高频题尤其是TIME_WAIT状态的作用——为什么主动关闭方要停留在TIME_WAIT状态2MSL答案有两个要点一是为了保证最后一个ACK能到达对端如果丢了还能重传二是为了让旧连接的报文段在网络中消失避免干扰新连接。这两个点都要能写出来多选题里少一个都算错。TCP拥塞控制里面的慢启动、拥塞避免、快重传、快恢复也出现了。我记得有一道题是给出一个拥塞窗口cwnd的变化过程要求判断是哪一种拥塞控制算法在起作用。这种题的关键是看窗口减半时是进入线性增长还是重新从1开始——如果减半后线性增长就是快恢复如果直接降到1重新慢启动就是传统拥塞控制。滑动窗口和流量控制部分我遇到了一道结合计算的选择题已知接收窗口大小、发送窗口大小、MSS大小问发送方的实际最大发送量。这种题不难但很多人容易漏掉“发送窗口取min(拥塞窗口, 接收窗口)”这个前置条件。考场上一紧张就容易直接用接收窗口算。2.3 数据库索引失效场景必须形成条件反射数据库的题量大概在3到5题。索引这块几乎每年必考2023年也不意外。索引失效的常见场景对索引列使用了函数或计算表达式使用了like前置通配符%xxx隐式类型转换导致索引列被类型转换or连接的条件中有一个非索引列。这些场景选择题和多选题都会出现建议直接形成条件反射看到这些特征就立刻能够判断。除了索引事务隔离级别也很常考。四个隔离级别读未提交、读已提交、可重复读、串行化分别解决什么问题、对应什么锁机制以及MySQL默认级别是可重复读而Oracle默认级别是读已提交这些对比性的内容如果平时没有整理过考场上是很难临时推理出来的。还有一类题值得警惕SQL语句的执行顺序。比如给一条包含WHERE、GROUP BY、HAVING、ORDER BY、LIMIT的SQL问执行顺序的先后。很多人写SQL很熟练但真要你按照数据库执行逻辑排序还是容易错。正确顺序是FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY→LIMIT。注意HAVING是在分组之后执行所以不能使用未出现在GROUP BY中的普通字段的别名这种细节经常出在选项陷阱里。2.4 编程语言特性C与Java双线考察百度很多部门用C所以C语言特性的题目比例不低同时又有大量Java后端团队所以Java的题目也会出现。2023年笔试给我的感觉是C略多于Java但不排除不同批次有差异。C的考察重点集中在虚函数表与多态实现的底层原理、智能指针shared_ptr、unique_ptr、weak_ptr的底层计数机制、构造函数和析构函数是否有virtual修饰、内存对齐、引用和指针的区别等。Java的考察重点集中在HashMap的底层结构在JDK7和JDK8之间的差异数组链表 vs 数组链表红黑树、HashMap为什么线程不安全、ConcurrentHashMap的分段锁与CAS机制、垃圾回收算法、ArrayList和LinkedList的时间复杂度对比等。这些题目本身并不超纲但有个共同点考的是实现原理而不是API用法。如果平时只是调用库函数写业务代码没有深入去看过源码和底层设计这部分的正确率会明显偏低。3. 编程题还原从题干到解题思路两道题怎么分配时间最合理编程题是整个笔试中分值占比最高、区分度最大的部分也是大家最关心的部分。由于2023年秋招批次不同题目会有差异但我根据自己的考试经历和周围同学的反馈把最有代表性的两道题还原出来供参考。3.1 第一道编程题中等偏下的模拟/贪心题目标是拿满分第一道编程题整体难度不高但代码量不一定小经常是“模拟题”或“简单贪心”。我遇到的那道题大意是这样的给定一个数组要求通过若干次操作使得数组中所有元素满足某种性质每次操作可以选择一个区间进行加一或减一问最少操作次数。这类题目曾经在多个大厂笔试中出现过类似的变体核心是差分思想。解题思路对于区间加减操作最常用的技巧是把原数组转化为差分数组。区间加一在差分数组上体现为两个端点的修改于是问题从“操作原数组”转化为“匹配差分数组中正负数对”最终最少操作次数就是差分数组中正数绝对值和负数绝对值中较大的那个。这类题的坑不在思路而在边界条件的处理。比如数组长度为1时差分数组的长度为0需要特判比如数据范围超过int范围要用long long存储中间结果。我的建议是第一道题不要急于提交先多编几组边界用例自测。因为这道题代码量不大考场上剩下的时间也足够用于测试。我遇到的常见自测用例包括数组已经满足要求答案为0、数组长度为1、数组中最大值或最小值位于端点、全部元素相同、序列严格递增或严格递减。3.2 第二道编程题带约束的搜索或动态规划目标是稳定得分第二道题通常是整套试卷的分水岭难度在LeetCode Medium偏上。2023年秋招的常见方向有带状态压缩的BFS、区间动态规划、二分答案加贪心验证、树上的DFS加状态转移等。我遇到的是一道和字符串有关的动态规划题大意是求一个复杂约束下的最优分割或匹配方案。直接暴力搜索会超时是显然的但如何设计状态和转移方程才是关键。这里分享一个应对陌生DP题的通用思路先关注数据范围中比较小的那个维度通常是字符串长度或集合大小在20以内想到可以用状态压缩如果数据范围在1000左右大概是O(n²)的区间DP如果数据范围在10的5次方级别很可能需要O(n)或O(nlogn)的贪心或二分。我当时看到数据范围是2000最先想到区间DP状态定义为dp[i][j]表示子串的某个最优值然后按区间长度从小到大枚举转移。写完之后提交发现有一组用例超时后来加了预处理优化和剪枝才通过。对于第二道题我的策略一直是不要强求AC先确保50%到70%的分数。怎么拿一半分呢数据范围小的时候直接写暴力递归或BFS能过一部分小数据用例如果题目允许用贪心思想做一个能过简单用例但不保证最优解的做法。考场上最亏的做法就是死磕第二题导致第一题的满分也没保证客观题也没时间检查。3.3 编程题的时间分配我踩过的最贵的坑这块单独拿出来说因为时间分配的错误是笔试中最遗憾的翻车方式。我第一年参加某厂笔试时第二道题想追求完美硬怼了40分钟没做出来导致第一道题只写了60%正确率的实现最后笔试分数不高连面试通知都没等到。2023年百度笔试我调整了策略拿到试卷后先用3分钟快速浏览两道编程题的题目不读细节只看数据范围和问题类型判断哪道简单哪道难先做客观题中的高频基础题遇到一两道卡壳的先标记跳过不要浪费超过2分钟给编程题留至少45分钟其中第一道题30分钟第二道题15分钟第二道题如果15分钟内没有清晰的完整思路立即转为“部分分模式”暴力解解法能拿多少算多少编程题写完必须运行自测用例宁可少做一道客观题也不能交一个没验证过的代码。这套节奏在2023年百度笔试中帮了我大忙最后两道编程题都提交了完整代码第一道题通过了所有自测用例第二道题拿下了部分用例的分数最终进入到了面试。4. 笔试考察的趋势从“会不会背”到“会不会用”百度对底层原理的要求在悄悄提高如果只是给一套题的复盘这篇文章的价值还不够。我更想聊的是2023年百度秋招笔试背后反映出的考察趋势这部分对2024年及以后的准备更有指导意义。4.1 多选题占比提高说明考察的是精准记忆2023年百度笔试的多选题数量比我预想的要多。和单选题不同多选题要求你对每一个选项都有确定的把握。如果你只是“大概知道”某个知识点在做多选题时几乎必错——因为干扰项往往就设置在你模糊记忆的边界上。比如进程与线程那道题选项里出现了“线程拥有独立的地址空间”这个经典错误表述。如果你只记得“进程拥有独立地址空间”很容易想当然地认为“线程也应该拥有”。但正确答案恰好相反线程共享进程的地址空间。这种出题方式本质上是在筛选基础扎实的候选人。所以备考时我建议不要只看面经了解大概而是把高频考点做成判断题集合逐条确认对错。比如操作系统这块“线程有自己的栈是对的”“线程有自己的堆是错的”“线程有自己的寄存器上下文是在特定条件下才成立的”……这些必须精确到每一个短句。4.2 底层原理考得越来越细源码级的问题是拉分关键我观察到的一个明显趋势是题目越来越偏向“源码级”的细节。以HashMap为例不仅考它底层是数组加链表还会追问红黑树化的阈值为什么是8、链表转红黑树之前为什么先尝试扩容。ConcurrentHashMap的面试热度更高JDK8为什么弃用分段锁而改用CAS加synchronized这种题目在选择题里也有出现。应对这种趋势没有捷径可走。唯一可靠的方法是对于核心的数据结构、容器、锁机制找源码和权威博客彻底读一遍并尝试用自己的话复述底层逻辑。我备考时是拿JDK8的HashMap和ConcurrentHashMap源码逐行读过一遍的读完再做选择题正确率提升非常明显。C方向的核心是虚函数表和智能指针。虚函数表是编译期还是运行期确定的、一个对象有几个虚表指针、多重继承下虚表的结构如何组织这些题目在选择题里的出现频率不低。智能指针的重点是引用计数在多线程环境下的安全问题以及weak_ptr如何解决循环引用。备考时不要停在概念描述层面最好能画一画对象关系和计数变化过程。4.3 场景化题目增加输入输出数据规模的敏感性2023年百度笔试还有一个特点题目背景更场景化了不再是干巴巴地给你一个算法的形式化描述而是会给一个偏向实际业务的问题场景。场景化本身不是难点难点在于它提醒你必须关注数据范围。一道题如果数据范围是n ≤ 100000那么O(n²)的算法几乎必然超时如果数据范围是n ≤ 20那么状态压缩和暴力搜索就是可行的。我备考时养成了一个习惯看到任何算法题的第一件事就是读数据范围然后才看问题描述。数据范围决定了思路的方向很多人在考场上看完题目直接开始写代码写着写着发现复杂度不对再回头换思路时间就浪费了。笔试中数据范围判断的速度决定了解题速度。另一个场景化的体现是代码风格和工程习惯。我用的本地IDE自测用例通过后在粘贴代码到答题框之前又检查了一遍变量命名是否清晰、是否有不必要的内存拷贝、是否有明显的异常边界。虽然笔试系统不会因为你变量名难看扣分但这种工程习惯的养成在面试手撕代码时反而会是一个隐形加分项。5. 刷题策略与赛前状态调整从牛客到LeetCode的资料搭配以及错题本的妙用身边很多人问我备考时间线怎么排。我的经验是分三个阶段但每个阶段侧重点完全不同。5.1 阶段一基础知识点过一遍真题和模拟题考前3到4周这一阶段的目标是把相对薄弱的科目系统过一遍。我建议用牛客网的历年真题和模拟题来摸底因为牛客的题库更加贴近国内大厂笔试的出题风格特别是选择题部分和百度笔试的真实匹配度很高。摸底的标准是一套模拟题卷子选择题正确率能否稳定在80%以上如果低于这个水平说明基础有盲区要回到对应科目的知识点重新梳理。注意刷完题之后的错题回顾比做新题更关键。我在这个阶段建立了一个错题文档把每一道做错的题对应的知识点都复制进去标注错误原因区分是记忆模糊还是理解错误然后每周集中回顾一次。这个动作帮我避免了很多重复踩坑。5.2 阶段二专项突破高频算法模板考前2周左右算法题的准备不能靠题海战术更高效的是专题式训练。我的方法是按高频考点分模块突破前缀和与差分、二分查找与二分答案、贪心与排序、常见DP模型背包、区间、状态压缩、BFS与DFS、并查集、单调栈与单调队列、最短路径与最小生成树。每个模块里我在LeetCode上找对应的经典题做熟。比如差分思想把1109题航班预订统计和37题解数独刷透状态压缩DP重点看旅行商问题变体和子集枚举类题目。2023年百度笔试第一道差分题我能在十分钟内稳定解题就是得益于这个阶段的训练。还有一个特别推荐的动作在LeetCode上按公司的标签刷题但要注意时效性。百度历年题库里的题会反复出现变体特别是动态规划和字符串处理题。不过要提醒标签里的老题可能距今有些年份了核心思路可以借鉴但不能指望原题重现。5.3 阶段三全真模拟与状态调整考前3到5天最后几天不适合再学新东西重点放在模拟和复盘上。我会按照考试的时间段比如下午14点到15点半完整做一套模拟题用真实考试的节奏来要求自己。重点不是做对多少而是适应时间压力下的决策流程——遇到不会的题怎么跳过、编程题做到什么程度该收敛、客观题是先做还是后做、最后剩10分钟该如何检查。考前一天不要再啃难题了把高频公式和模板过一遍就休息。操作系统里的进程状态转换、TCP状态迁移图、常见的算法模板并查集、快速排序、二分查找这些是考场上可能用到的“肌肉记忆”临时翻书反而容易乱。5.4 考场上的工具准备与文件管理百度的笔试系统允许本地IDE编译调试这个便利条件一定要用好。我建议提前一天装好并测试自己最顺手的IDE把环境变量配好熟悉一下快捷键。别到考场上才第一次用某款编辑器那样调试效率会低很多。编程题的代码文件命名和保存位置也要有规划。我的习惯是创建一个单独文件夹按题号命名每一道题保存为一个独立文件文件的头部注释写上题目编号、时间复制度和核心思路。这样即使考试结束需要反查代码也能快速定位。更重要的是写注释的过程本身会倒逼你把思路理清楚尤其是状态定义和转移方程这类容易写混的地方。6. 笔试通过后的下一步如何让笔试成果最大化转化为面试机会笔试拿到通过通知只是第一步但这一步的结果会直接影响到后续面试官对你的初始印象分。6.1 笔试复盘要在48小时内完成笔试结束后48小时内趁记忆还鲜活把做过的题目和当时卡壳的知识点复盘一遍。百度一般不会公布笔试的详细分数但你可以回顾哪些多选题是因为选项模糊导致失分编程题第二道卡在了哪一步是状态转移没有推导清楚还是数据范围判断失误复盘的产出不是“我下次要更努力”而是具体的行动项哪个知识点去看哪篇资料、哪类题目刷几道专项题、考场节奏上做什么调整。我备考时把每次复盘的产出整理成一张清单每次笔试前翻一遍效果比重新刷题更好。6.2 准备好笔试里出现但你没答好的问题用于面试笔试中出现过的、你觉得没底的知识点大概率面试时也会遇到。尤其是基础客观题里的内容面试官可能直接拿来做追问的切入点。比如笔试考了TCP四次挥手的状态迁移你如果做错了面试前一定要把为什么需要TIME_WAIT、TIME_WAIT持续多长时间、过多的TIME_WAIT如何优化都准备一遍。这样笔试暴露的问题就转化成了面试中展示深度的机会。6.3 技术面手撕代码时和笔试的差别面试手撕代码和笔试不一样的是面试官希望看到你在写代码的过程中思考和沟通而不是闷头写出一个答案。即使你笔试编程题全AC了面试手撕代码时不说话、不解释思路依然可能被挂。我当时的做法是拿到题目先和面试官确认几个例子和边界条件再口头描述一遍自己的思路和复杂度得到确认后才开始写代码。写完代码主动说测试计划先用正常用例再用边界用例。这套流程和笔试的“写完自测”是一脉相承的逻辑。7. 一套实战自查清单准备笔试的同学可以直接拿走最后放一套我自己整理的备考自查清单。它覆盖了2023年百度秋招研发岗笔试中让我印象深刻的考点核对一遍就知道自己大概处于什么水平。模块必会知识点常见出题方式自测水平强/中/弱数据结构数组、链表、栈、队列的时间复杂度选择题直接问访问、插入、删除的时间复杂度数据结构二叉树的遍历序列推导给出两种遍历求另一种遍历数据结构哈希冲突的解决方式链地址法、开放定址法多选题判断各方案的优缺点数据结构堆的调整过程给出数组序列问建堆后的结果操作系统进程与线程的区别和共享资源多选题判断哪些资源线程间共享操作系统TCP连接管理相关状态迁移的选择判定操作系统死锁产生的四个必要条件多选题或判断场景是否可能死锁操作系统虚拟内存与页面置换算法给定访问序列计算缺页次数计算机网络TCP三次握手与四次挥手细节选择题判断状态、字段、时间计算机网络TCP拥塞控制算法过程给出窗口变化图判断算法类型计算机网络HTTP与HTTPS区别、状态码语义多选题判断状态码含义数据库索引失效的常见场景多选题或单选判断哪些语句会走索引数据库事务隔离级别与并发问题给出场景判断属于哪种隔离级别数据库SQL执行顺序给出SELECT语句列出执行顺序编程语言C虚函数表与多态原理选择题判断虚函数调用方式编程语言C智能指针底层原理多选题比较shared_ptr与weak_ptr编程语言Java HashMap底层实现选择题问红黑树化条件、put过程编程语言Java并发容器实现原理多选题比较Hashtable和ConcurrentHashMap算法模板前缀和与差分模拟题/区间操作类编程题算法模板动态规划状态设计与转移区间DP/状态压缩DP题算法模板二分与贪心证明最优化类编程题算法模板图论基础并查集、最短路图相关场景编程题7.1 最后几个容易被忽视的小细节再补充几个容易被忽略的细节虽然不直接考知识点但会影响你的笔试体验和最终分数笔试系统对网络环境有要求提前一天确认设备和网络稳定别考试当天临时出状况。如果桌面端出现卡顿先检查浏览器版本和插件有些浏览器插件会干扰在线编码页面的键盘事件。编程题的输入输出格式要格外注意多组输入需要用while循环处理输出是否需要保留小数位、是否要求行末不出现多余空格这些细节在自测用例里都要确认一遍。很多同学思路对了却在输出格式上连续罚时非常可惜。最后想说的是笔试只是整个招聘流程中的一环它考察的是基础知识的厚度和算法思维的熟练度不考察运气和临场发挥的偶然性。我身边最终拿到百度offer的同学大多数不是竞赛出身而是把常规考点练扎实、把常见错误提前规避掉的普通人。我第一次参加大厂笔试时也曾在第二道编程题上死磕到最后一分钟交了一个自己都不确定对不对的答案。后来吃了几次亏才渐渐明白准备笔试不只是刷题更是学会在有限时间内做出最优的资源分配。这些复盘和经验写在这里希望能帮你少走一些弯路。