2023百度秋招研发岗笔试复盘:题型考点与避坑经验
2026/9/1 17:27:36 网站建设 项目流程

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的同学,大多数不是竞赛出身,而是把常规考点练扎实、把常见错误提前规避掉的普通人。

我第一次参加大厂笔试时,也曾在第二道编程题上死磕到最后一分钟,交了一个自己都不确定对不对的答案。后来吃了几次亏,才渐渐明白:准备笔试不只是刷题,更是学会在有限时间内做出最优的资源分配。这些复盘和经验写在这里,希望能帮你少走一些弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询