发布时间:2026/8/29 7:47:02
百度研发笔试题深度解析:算法、数据结构与系统设计核心考点 1. 写在前面为什么一份2016年的笔试题还值得拿出来说看到这个标题可能有人第一反应是2016年的题目那都多少年前的老古董了现在还有参考价值吗我最初整理这份东西的时候也是这么想的。但真正把题目一道一道过完我发现一个很扎心的事实技术栈会过时框架会被淘汰但笔试里真正考察的那些底层能力这么多年几乎没变过。百度2016研发工程师在线模拟笔试题目范围覆盖了数据结构、算法、操作系统、网络、C/Java语言基础还有一部分系统设计。那年我还在校招季拿着这份模拟题反复刷了三遍后来正式笔试的题目里至少有三分之一能在模拟题里找到同类型的影子。现在回头看这份题的价值不在于题目本身而在于它反映了大厂笔试命题的底层逻辑不是考你会不会某个API而是考你在限定时间内能不能用最扎实的基础知识解决一个从没见过的实际问题。所以这篇文章我打算换个写法不按题号一篇篇贴答案而是把题目按考察维度重新归类讲讲每一类题背后的命题意图、解题思路以及我当时踩过的坑。2. 题目整体拆解大厂笔试到底在筛什么2.1 从题目分布反推命题思路先说整体形式。百度这种体量的公司校招笔试通常在线完成时间90到120分钟题型大致分为三类客观题选择题、判断题覆盖语言基础、数据结构、网络、操作系统一般20到30道。编程题2到3道需要在OJ在线评测系统里完整写代码并跑通测试用例。主观设计题给出一个场景让你描述方案这类题比较开放考的是工程设计思维。这份模拟笔试基本复刻了上述结构。从命题分布来看可以发现几个规律。第一算法和数据结构是绝对的大头占比接近40%。排序、链表、二叉树、动态规划是高频中的高频。原因很简单这是能最快区分会不会写代码和能不能写好代码的试金石。第二语言基础题抠得非常细。比如C里拷贝构造函数什么时候被调用、虚函数表的内存布局、Java里HashMap的扩容机制这些题目不是考背书而是考你平时写代码的时候有没有真的想过底层发生了什么。第三网络和操作系统题目趋于场景化。不会直接问你TCP三次握手是什么而是给你一个实际故障场景问你从TCP状态的角度怎么排查。2.2 这套题目背后的筛选标准我后来作为面试官参与过几次校招回头看这种命题结构理解会更深入一层。在线笔试的天然限制是面试官不在现场无法观察你的思考过程。所以笔试题目必须以结果为导向——要么是客观题的对错要么是代码能否AC。这就要求题目必须具有区分度。基础题用来筛掉只会调框架、不懂原理的人。这类人可能简历很漂亮项目里写了各种高深词汇但一问基础就露馅。中档题用来筛掉算法只会背模板、不理解本质的人。典型表现是LeetCode刷了200道但题目稍微换个包装就不会了。高档题通常是最后一道编程题或设计题用来筛选真正有算法思维和工程判断力的人。这类人能够把复杂问题拆解成子问题并且能根据面试官/题目的暗示选择最优解法。所以如果你打算通过刷题来应对这类笔试最忌讳的就是背题。你需要做的是理解每种解法背后的复杂度分析、适用场景、边界条件。3. 核心题目逐类拆解3.1 排序与查找不只是背模板模拟笔试里有一道典型的排序变体题在海量数据中找出Top K个最大元素。这道题看似是送分题但实际得分率并不高。很多人第一反应是全排序然后取前K个如果数据量小比如几千条这是完全OK的。但题目如果限定10亿个整数内存只有1GB全排序就彻底不行了——10亿个int占用约4GB内存都装不下。这道题的正确解法是维护一个大小为K的最小堆遍历数据流每次和堆顶元素比较如果比堆顶大就替换并调整堆。时间复杂度是O(n log K)空间复杂度O(K)。在K远小于n的场景下这是最优方案。我用C写个核心伪代码#include vector #include queue using namespace std; vectorint topK(const vectorint data, int k) { if (data.empty() || k 0) return {}; priority_queueint, vectorint, greaterint minHeap; for (int num : data) { if ((int)minHeap.size() k) { minHeap.push(num); } else if (num minHeap.top()) { minHeap.pop(); minHeap.push(num); } } vectorint result; while (!minHeap.empty()) { result.push_back(minHeap.top()); minHeap.pop(); } return result; }这里有一个关键点容易被忽略为什么用最小堆而不是最大堆因为我们要维护的是当前最大的K个用最小堆时堆顶是这K个里最小的新元素只需跟堆顶比就能判断是否值得加入效率最高。如果反过来用最大堆你根本不知道堆顶是不是要淘汰的那个。这类题考察的是两个层面的能力一是知道标准解法二是知道为什么这个解法适用于这个场景。全排序之所以不行不是因为方法错而是因为时间和空间的复杂度不满足海量数据的约束。另外要注意如果题目允许用哈希预处理去重可以先做去重再维护堆这样堆内元素不会因为重复值白白占用空间。但哈希本身也有内存开销具体取舍要看数据特征。3.2 动态规划从暴力递归到状态压缩的思维跃迁笔试里最经典的一道DP题是01背包问题变种给定一个数组问能否把数组分成两个子集使得两个子集的和相等。我第一次做这道题的时候第一反应是DFS穷举所有子集。理论上可行但数组长度一旦超过302的30次方是10亿级别O(2^n)的复杂度在OJ上必超时。这道题的关键在于转化为凑零钱问题如果数组总和为sum那么问题就等价于能否从数组中选出若干个数使它们的和恰好为sum/2。如果sum是奇数直接返回false——这是最容易被忽略的剪枝条件。然后就是经典的背包DP用dp[i][j]表示前i个元素能否凑出和为j。状态转移方程是dp[i][j] dp[i-1][j] || dp[i-1][j-nums[i-1]]意思就是对于第i个元素要么不放要么放。代码实现可以压缩到一维因为每一层只依赖上一层bool canPartition(vectorint nums) { int sum 0; for (int n : nums) sum n; if (sum % 2 ! 0) return false; int target sum / 2; vectorbool dp(target 1, false); dp[0] true; for (int num : nums) { for (int j target; j num; j--) { dp[j] dp[j] || dp[j - num]; } } return dp[target]; }这里有一个非常关键的细节内层循环必须倒序遍历。因为一维数组状态下如果正序遍历dp[j]会被本轮刚更新过的dp[j-num]影响导致某个元素被重复使用。这是从二维DP压缩到一维DP时最常见的bug。当时我身边有不少同学问过我为什么不直接用回溯加剪枝理论上回溯也能过一些小数据但笔试的测试用例通常会给到极限规模用O(2^n)的算法去赌数据量小风险太大。而且在线笔试没有根据数据规模选择算法的反馈机会错了就是错了没有解释空间。对于动态规划类题目我的建议是拿到题先不要急着写代码先花两三分钟确认三个问题——状态是什么转移方程是什么初始状态是什么这三件事想清楚代码就是翻译的工作。3.3 字符串处理笔试里的隐形杀手字符串类题目在模拟笔试里出现频率很高但很多人会轻视。比如这道给定一个字符串找出最长的不含重复字符的子串长度。这题有两个解法方向。第一个是暴力把所有子串枚举一遍逐个检查有没有重复字符复杂度O(n^3)或者O(n^2)数据量大时必超时。第二个是滑动窗口维护一个窗口用哈希集合记录窗口内出现过的字符右指针向右扩展遇到重复字符时左指针收缩直到窗口内无重复。滑动窗口代码并不长#include unordered_set #include string using namespace std; int lengthOfLongestSubstring(string s) { unordered_setchar window; int left 0, maxLen 0; for (int right 0; right (int)s.size(); right) { while (window.count(s[right])) { window.erase(s[left]); left; } window.insert(s[right]); maxLen max(maxLen, right - left 1); } return maxLen; }这个解法的精髓在于窗口内始终维护一个无重复字符的子串right指针遍历整个字符串left指针只在出现冲突时移动。因为每个字符最多被加入和移出集合各一次整体复杂度是O(n)比暴力枚举高出一个量级。字符串题目的坑往往藏在细节里比如C里char的取值范围、中文字符串在UTF-8下的字节长度问题还有Java里String的不可变性导致的反复拼接开销。这些不会在核心逻辑上难住你但极容易在边界测试用例上扣分。4. 计算机基础题那些年我们一起忘掉的知识点4.1 操作系统进程与线程的区别不是八股文模拟笔试里有这么一道选择题多线程程序比多进程程序更高效的主要原因是什么选项无非是A. 线程切换开销小 B. 线程共享内存 C. 线程创建速度快 D. 线程可以并行执行。这道题正确率很高但很多人其实是被感觉引导的能说清楚为什么的人不多。线程切换开销小是因为同一进程内的线程共享地址空间切换时不需要切换页表。页表切换是CPU的TLB失效重填代价很大。而进程切换必须切换完整的地址空间TLB基本全部失效缓存命中率也会暴跌。这个点在后来的面试中经常被追问。面试官可能会继续问为什么引入线程而不是直接用多个进程 共享内存通信答案是线程的创建代价远低于进程因为不需要复制地址空间且共享内存的通信方式天然比进程间通信IPC更简单直接。但线程的代价是同步问题要处理锁、原子性、可见性这些远比进程间通信的规则复杂。笔试不会要求你写一个完整的线程池但会考你对线程池核心参数的理解。比如线程池的核心线程数和最大线程数有什么区别、队列满了之后采用什么拒绝策略。这类题目没有唯一答案但考察你有没有真正在项目里用过线程池而不是只看过八股文。4.2 网络从状态机角度理解TCP模拟笔试里有一道典型的TCP题目客户端主动关闭连接时服务端会经历哪些TCP状态变化答案是服务端从ESTABLISHED进入CLOSE_WAIT然后等自己发完剩余数据后进入LAST_ACK收到客户端ACK后关闭。如果我在做这道题的时候只知道背状态迁移图没有理解每个状态背后的语义那遇到变种题就麻烦了——比如问如果客户端进程崩溃了服务端一直处于CLOSE_WAIT可能是什么原因这时候需要结合网络编程实践来答。CLOSE_WAIT的出现说明客户端已经发出了FIN但服务端被动的close没有触发——通常是服务端程序忘记关闭socket或者还有引用导致对象无法释放。线上服务出现大量CLOSE_WAIT是排查方向上的关键状态。这类题目想表达的是网络协议不仅是理论更是排查线上问题的工具。如果你只是背了握手挥手的状态图没有真正通过netstat命令观察过这些状态遇到故障场景时很难快速定位。4.3 数据库事务隔离级别和索引必须配套理解模拟笔试里数据库题目不多但高频考点和大多数公司一样事务隔离级别、索引失效场景、乐观锁和悲观锁实现。有一道题是这样在可重复读隔离级别下一个事务内两次SELECT的结果一定相同吗这道题的正确率意外地低。很多人选一定相同忽略了当前读和快照读的区别。在MySQL InnoDB里普通的SELECT走的是快照读在事务开始时生成一个快照之后所有普通SELECT都从这个快照读但SELECT ... FOR UPDATE或UPDATE语句走的是当前读读取的是最新已提交数据。如果另一个事务提交了修改当前读会看到新数据而快照读不会。所以即便是在可重复读级别下两次查询是否一致取决于你用的是快照读还是当前读。这是理论派和实践派最大的分水岭——只看了书、没实际操作过数据库隔离级别的人很容易在这道题上翻车。5. 编程题实战从思路到AC代码的完整过程5.1 现场还原一道链表题目的完整解题路径模拟笔试有这么一道题给定两个单链表判断它们是否相交如果相交返回第一个相交节点。拿到题目我的第一反应是暴力枚举遍历第一个链表的所有节点每遇到一个节点就遍历第二个链表找相同节点。时间复杂度O(m*n)大概率超时。然后是哈希表方案把第一个链表的所有节点地址存进哈希集合然后遍历第二个链表第一个在哈希集合中命中的节点就是交点。时间复杂度O(mn)空间复杂度O(m)。但如果笔试要求用O(1)空间怎么办那就需要想到双指针法计算两个链表的长度记为lenA和lenB长链表指针先移动|lenA - lenB|步然后两个指针同步前进第一个相遇的节点就是交点这个解法空间O(1)时间O(mn)。我贴一下完整代码struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { if (!headA || !headB) return NULL; int lenA 0, lenB 0; ListNode *pa headA, *pb headB; while (pa) { lenA; pa pa-next; } while (pb) { lenB; pb pb-next; } pa headA; pb headB; int diff abs(lenA - lenB); if (lenA lenB) { while (diff--) pa pa-next; } else { while (diff--) pb pb-next; } while (pa pb) { if (pa pb) return pa; pa pa-next; pb pb-next; } return NULL; }这道题里有一个很关键的判断链表相交指的是指针相等同一内存地址而不是节点值相等。很多人在笔试时忽略了这一点用值比较去判断交点结果在重复值用例上挂掉。值相等只是巧合地址相等才是相交的本质定义。5.2 二叉树递归转迭代的思维换挡模拟笔试里还有一道树的题目二叉树的中序遍历要求不使用递归。递归写法几乎所有人都能写但OJ对递归栈的深度有限制一旦树的深度超过递归栈上限程序直接爆栈。所以非递归写法是必须掌握的。中序遍历非递归核心思想是显式维护一个栈#include vector #include stack using namespace std; struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; vectorint inorderTraversal(TreeNode* root) { vectorint res; stackTreeNode* st; TreeNode* cur root; while (cur || !st.empty()) { while (cur) { st.push(cur); cur cur-left; } cur st.top(); st.pop(); res.push_back(cur-val); cur cur-right; } return res; }刚学这个写法的人会有一个困惑为什么内层循环要一直往左走到底因为中序遍历的顺序是左-根-右你只有先走到最左的叶子节点才能开始访问节点。栈天然具备回溯的能力——每压入一个节点就是记住等我处理完左子树后回来访问它。这种递归转迭代的能力笔试里看起来只是考一道小题实际上考察的是你能不能在没有函数调用栈帮忙的情况下手动模拟调用栈的行为。这种能力在写非递归DFS、序列化甚至设计业务系统里都经常用到。5.3 海量数据题大数据场景的算法映射除了LeetCode风格的程序设计题模拟笔试里还出现了一些海量数据处理的经典问题比如给定一个日志文件每行包含用户的访问URL如何统计访问次数最多的前10个URL这类问题的标准解法是分而治之。文件太大不能一次性读到内存那就先切分成多个小文件——哈希取模把相同URL映射到同一个文件再对每个小文件用哈希表统计每个URL的访问次数最后把每个小文件的Top10汇总归并得到全局Top10。我第一次做这种题的时候吃亏了因为没意识到题目的核心根本不是统计频率而是内存不够怎么办。如果你回答直接建哈希表计数面试官基本可以断定你没处理过真实的大日志。所以看到这种题第一步不是写代码而是反问自己数据量多大可用内存多大可以做分布式吗允许近似结果吗很多时候只要你能正确地把内存限制这个约束条件转化为分片处理的决策依据这道题就已经通过了一半。6. 备考攻略与实战经验6.1 时间分配90分钟题目的答题策略做过在线笔试的人都知道最大的敌人不是题目难度而是时间。我个人的策略是先把所有客观题快速过一遍遇到拿不准的标记不要恋战控制在3分钟以内。客观题往往在最后会有一个检查环节但编程题没有——编程题如果思路断了10分钟可能连编译都没法通过。编程题的顺序建议从易到难。在线OJ通常可以选任意顺序做题我的习惯是先看所有编程题的题面快速判断难度先做最有把握的题把分稳稳拿到手再做需要思考的中档题最后剩下的时间给看起来会做但没完全做出来的题至少把暴力解法写上去能过部分测试用例就有部分分在真实面试中一个很实用的技巧是在大公司笔试中即使不会做也尽量写一个暴力解并标明“该解法只用于小规模数据大规模可优化”。因为有些OJ采用部分测试点给分的方式暴力解能过小数据就能拿基础分。6.2 刷题方法论题海战术的性价比边界每年校招季都有人问刷题到底刷多少道才能稳过笔试我的回答一直是数量不是关键覆盖度和理解深度才是。你要保证自己见过所有核心题型并且每道题都能把思路讲明白。我建议从这几类题型入手链表反转、合并、找环、相交二叉树遍历递归非递归、最近公共祖先、层序遍历动态规划背包、编辑距离、最长递增子序列、区间DP字符串滑动窗口、回文串、子序列排序与TopK快排变种、堆排、归并图论DFS/BFS、拓扑排序、最短路径、并查集这里的重点是把每一类题吃透而不是把每一道题背下来。比如你搞懂了滑动窗口解决最长无重复子串那么最小覆盖子串和字符串排列这类变种题本质上只是换了个判定条件解法框架完全一样——右指针扩展左指针收缩窗口内维护一个可行解。我当时采用的策略是每做完一道题用思维导图记录它的核心思路和变种方向标注这道题还能改什么条件。这套方法保证了我在笔试场上遇到变种题时不慌因为万变不离其宗。6.3 心态管理在线笔试最容易被忽略的坑最后说一个很多人不会告诉你的事情在线笔试的环境本身就会影响心态。在线OJ的编译器版本通常和你本地的开发环境不一致。C的编译器版本决定了哪些标准库特性和语法糖可用Java的JDK版本决定了某些API是否支持这些都可能让本地通过的代码提交到OJ上编译报错。我见过太多人全场都在跟编译器搏斗而不是在解题。我的建议是提前查一下目标公司OJ使用的编译器版本和标准尽量用兼容的写法不要在笔试时用太生僻的语言特性越朴素的写法越不容易出错本地写代码时用与OJ一致的编译选项编译一遍再提交如果有自动保存功能建议开启如果没有每写完一段就手动保存另外一个非常实际的建议是提前在线体验一下该公司的OJ环境。很多公司会提供模拟笔试链接先用模拟题熟悉界面和判题规则能显著降低正式笔试的紧张感。我第一次用牛客网做笔试的时候就因为在输入输出格式化上浪费了大量时间——那种在线OJ和本地跑代码的输入输出格式差异平时根本不会注意到。7. 编程语言细节决定成败的隐藏考点7.1 C拷贝、引用和内存管理的高频陷阱模拟笔试中C题目主要集中在对象生命周期和内存布局上。有一道经典题下面代码会调用几次拷贝构造函数vectorint getVector() { vectorint v(100, 1); return v; } int main() { vectorint v2 getVector(); return 0; }在C11之前这个过程可能有两次拷贝返回时拷贝一次赋值时拷贝一次如果编译器有RVO/NRVO优化可能一次拷贝都不发生。这就带来了一个很现实的问题同一个程序在不同优化级别下行为一致但性能不同。笔试考这类题不是考你背编译优化规则而是考你有没有理解返回值优化的前提条件——对象的类型必须完全一致且编译器可以确定返回值和接收变量是同一个对象。C的另一个高频考点是虚函数机制。题目可能是这样的含有虚函数的类其对象内存布局是怎样的答案对象开头有一个虚函数表指针vptr指向该类的虚函数表vtable表中存储了虚函数的函数指针。继承时每个基类子对象可能都有自己的虚函数表指针这就是多重继承下指针地址偏移的原因。这类题目在笔试里比重不高但一旦出现区分度极高。因为很多人写C代码时从没想过对象的内存长什么样而底层思维恰恰是衡量C工程师水平的重要标准。7.2 JavaJVM基础知识是一道分水岭Java方向的高频考点通常是HashMap原理、JVM内存区域划分、垃圾回收的基本算法。以HashMap为例模拟笔试里出现过这样一道题HashMap在什么时候会从链表转换为红黑树答案涉及两个条件链表长度达到8且数组容量达到64。注意是两个条件同时满足只要有一个不满足就不会树化。如果你只记得链表长度到8那就会掉进陷阱。这类题目考察的是你有没有认真看过JDK源码的注释。HashMap的注释里明确写了树化的原因因为哈希碰撞形成的链表长度达到阈值后查找复杂度O(n)会退化到不可接受而红黑树的查找复杂度是O(log n)。但树化本身也有开销树节点的内存占用大约是普通节点的两倍所以必须同时要求桶数组容量足够大确保整体空间布局合理时才会树化。这类问题无法靠死记硬背应付因为面试官往往会继续追问为什么是8为什么不是16因为这个数字来自概率统计。JDK作者经过泊松分布计算认为负载因子0.75下桶中链表长度达到8的概率极低千万分之一级别如果真达到了8说明当前哈希函数极其差劲此时用红黑树优化是最合理的兜底方案。这种追根究底的考察方式在笔试和面试中几乎没有区别。7.3 语言选择题的实战技巧对于笔试中的语言选择题我试过一个非常有效的策略用极端值/边界值代入法。比如一道题问int i 2147483647; i 1 的结果是什么如果你不确定可以直接取文本里最大的可能值代入。2147483647是int的最大值加1后就发生了有符号整数溢出变成-2147483648。这类题本质上在考整型溢出而代入极端值让你根本不需要背溢出规则就能推出来。另一个技巧是注意题目问的是正确的是还是错误的是。这个听起来是废话但在限时高压环境下真的会有人把错误的是看成正确的是。我的习惯是用笔在草稿纸上把关键词圈出来如果是线上笔试用鼠标划选这个动作能减少相当一部分不必要的失误。8. 系统设计题开放性题目的答题套路8.1 短URL系统一道经典设计题的拆解模拟笔试最后往往有一道设计题。我印象比较深的是短URL系统设计。题目大概是这样的设计一个短网址服务将长URL转换为短URL支持用户访问短URL时重定向到原始URL。要求说明存储方案、冲突处理、性能估算。很多人看到设计题就懵因为平时开发中很少会从零设计一套系统。但实际上设计题有固定的答题框架功能需求、非功能需求、估算、方案设计、优缺点讨论。先讲功能需求核心是把长URL转成短URL反向解析支持过期时间。非功能需求高并发读、低延迟、短URL全局唯一。存储方案我当时的答案是使用哈希表存储映射关系key是短码value是原始URL。但问题在于短码怎么生成。两个方向一是对原始URL做哈希取模但会产生冲突需要检测并处理二是全局发号器利用数据库的自增ID再将十进制ID转换为62进制编码包含数字、大小写字母这样结果更短。性能估算在这道题里很重要。假设每天产生1亿条新URL每条映射关系存储两个字符串加时间戳大约200字节。一天就是20GB一年约7TB。这个量级用单机MySQL存储已经不够需要分库分表或引入KV存储来支撑。短URL的读取量通常远大于写入量所以在短码生成的环节可以做哈希预生成放进内存缓存把热点数据的查询QPS扛在内存层。设计题没有唯一标准答案判分点在于你是否覆盖了需求、存储、冲突、性能这几个核心维度你的估算数字是否合理不是凭空编造你是否讨论了方案的局限性和备选方案8.2 设计题里的分数量级意识做设计题最容易犯的错误是一上来就画架构图、写组件但完全没有量化概念。比如让你设计一个排行榜系统如果你上来就说用Redis的Sorted Set这是正确的技术选型之一但如果面试官追问预计同时在线用户1000万排行榜需要实时更新Redis内存够不够你就必须算一下。1000万用户每个用户的ID按8字节算加分数按8字节算大约16字节。Sorted Set在Redis内部还有额外的dict和skiplist开销实际内存大约是原始数据的数倍粗略按50字节一个元素算1000万用户也就500MB左右单台Redis完全能扛住。但如果用户量到1亿内存需求就变成5GB单台Redis可能不够了需要考虑集群化或者对userId分片。这里体现的核心能力是在动手设计之前先量化问题的规模再选择方案。这个能力在笔试中的体现是你写的估算过程能够让你的答案显得有工程基础而不是泛泛而谈。8.3 回答设计题时的语言组织在线笔试的设计题是文字作答和面试时口述不太一样。我总结了一套适合写出来的结构先用一句话概括系统的核心链路用列表拆解功能需求和非功能需求给出核心数据结构和存储设计附上关键字段估算数据量、QPS、存储成本描述二到三个关键场景的处理流程最后写如果面临XX问题可以如何优化这套结构的好处是即使你的方案不是最优的判卷人也能快速看到你的思路完整度至少在思考全面性上不会失分。设计题最怕的不是方案平庸而是只回答一个点完全没有展开。9. 复盘我在这份模拟笔试中踩过的坑9.1 第一坑过度追求最优解丢了基础分第一次做这份模拟笔试时我有一道编程题题面很简单给定一个整数数组找到所有和为target的两个数。我的第一反应是这太简单了用哈希表一遍扫描就能解决。结果没想到我忽略了题目还有一个约束条件——要求输出所有满足条件的组合而不是只输出一个。于是我写的双指针解法虽然能找出至少一个解但输出格式和题目要求不符导致测评结果不通过。这个教训让我后来养成一个习惯写代码前先反复读题两遍把输入输出样例完全验证再动手。很多时候笔试翻车不是败在能力上而是败在审题上。9.2 第二坑本地能跑线上编译不过还有一次我在本地用C实现了一道题运行结果正确但提交到OJ系统直接编译失败。原因是我用了#include bits/stdc.h这个万能头文件本地编译器支持但OJ的编译器版本不支持或者未配置该头文件。这是个非常经典的坑因为很多本地IDE默认装了完整环境但在线OJ的编译器不一定认这个头文件。现在我的习惯是写笔试代码时永远只用标准的头文件不依赖任何本地环境专供的写法。9.3 第三坑忽略极端输入还有一道题是在一个排序数组中查找目标值的第一个和最后一个位置。我很快写好了二分查找但没有考虑空数组的情况——空数组时直接返回{-1,-1}。在线OJ的测试用例里空数组恰好排在前面一个空输入让你的程序直接崩溃。从那以后我养成一个习惯写完代码后列出至少三到五组边界测试用例自己过一遍——空输入、单元素、目标值不存在、目标值在数组两端、所有元素都相同。这个习惯在真实工作中也很有用很多线上bug就是边界条件没考虑到。10. 写在经验之外这份百度2016研发工程师在线模拟笔试放在今天来看题目的具体内容已经有些年头但它考察的核心能力和现在的校招笔试并没有本质区别。算法、数据结构、计算机基础、编程语言、系统设计这些永远是大厂筛人的基本盘。如果你正在准备校招笔试我的建议是不要沉迷于刷怪题偏题把核心知识体系吃透远比多刷100道题更有效。拿这份模拟题来检验一下自己的知识盲区针对性补齐效果会比盲目刷题好得多。最后再分享一个小技巧做题的时候把每道题的考点关键词写在草稿纸上——比如TopK-堆、DP-背包、滑动窗口。等你做完所有题目回头检查时一眼就能看出每道题的核心脉络比重新读一遍题目快得多。这套方法陪伴我走过了整个校招季希望对你也有帮助。

相关新闻

2026/8/29 7:47:02

控球率之外:用空间创造与死球权量化足球控球质量

控球率是足球转播里被引用最多的数据之一,但也是比赛分析里最容易被高估的数据之一。一支球队长时间控球,并不等于它一直在制造进攻威胁;后场倒脚、门将短传、边路回传,都可以让控球率看起来不错。这套“Space-Creating versus De…

2026/8/29 7:47:02

大规模AI Agent模拟系统:架构、部署与工程实践

这里要聊的东西,严格说不是一个“软件”,而是一类正在被反复验证的工程方向:用海量 AI 智能体在虚拟环境中模拟真实世界的行为。最近讨论度很高的“用数十亿 AI Agent 模拟地球”就属于这个方向,核心是把每个模拟个体都做成一个能…

2026/8/29 7:57:03

大型机开发技能包pcstack设计与实现指南

各位做大型机(Mainframe)开发的同行,或者正在从传统主机开发向 DevOps 转型的团队,应该都有一种共同感受:大型机本身很稳定,但围绕它的工具链、脚本、构建流程和新人上手成本,往往比分布式系统要…

2026/8/29 7:57:03

Halcon 3D匹配实战:从find_shape_model_3d参数调优到复杂夹具识别

1. 项目概述:深入Halcon 3D匹配的实战核心 如果你正在用Halcon处理工业视觉中的3D匹配问题,尤其是面对像夹具、治具这类结构复杂、姿态多变的工件,那么 p_do_3d_matching_clamps 这个函数模块绝对值得你花时间深挖。它不是一个简单的API调用…

2026/8/29 7:57:03

构建企业级数据神经中枢:流批一体架构与智能监控实践

简介:在数据驱动的业务决策中,实时计算与历史数据分析是两大核心技术支柱。实时计算通过流式处理引擎(如Apache Flink)实现低延迟的数据处理,满足即时监控与告警需求;而历史回溯则依赖批处理框架&#xff0…

2026/8/29 7:52:03

iFixAi开源审计器:让AI Agent任务完成度可量化、可验证

在 AI agent 从原型走向生产的过程中,最容易被低估的问题不是模型能力,而是“这个 agent 到底有没有把自己的活干完”。iFixAi 正是围绕这个问题出现的开源审计器:它不替 agent 做任务,而是检查 agent 的任务执行过程、工具调用结…

2026/8/28 16:16:17

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/28 16:16:21

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/28 16:16:22

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/29 0:01:10

etc目录下的profile.d文件目录设置环境变量和全局脚本shell

一、设置环境变量etc目录下的profile.d文件目录 /etc/profile.d1、编写 vi test.sh文件内容# jdk变量 export ZHK_HOME/root export PATH$PATH:$ZHK_HOME/test # 可以取出来ZHK_HOME变量给ZZZ_HOME赋值 export ZZZ_HOME${ZHK_HOME}/test2、刷新 执行source /etc/profile 命令使…

2026/8/29 0:01:10

【JavaScript】内存管理-垃圾回收机制-内存泄露

内存管理 C 语言这样的底层语言一般都有底层的内存管理接口,比如 malloc()和free()。 而 JavaScript 是在创建变量(对象,字符串等)时自动进行了分配内存,并且在不使用它们时“自动”释放。释放的过程称为垃圾回收。 整…

2026/8/29 0:01:10

Labgrid-MCP:为嵌入式硬件实验室接入AI Agent操控能力

Labgrid-MCP 的目标是把 MCP(Model Context Protocol)能力延伸到真实嵌入式硬件实验室:AI Agent 通过一个标准化的 MCP Server,就能查看目标板状态、控制上电断电、复位开发板、读取串口日志,甚至执行镜像刷写。对于经…

2026/8/28 16:16:48

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/28 16:16:50

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/28 11:06:45

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…