
前两天一个学妹突然给我发消息说自己收到了携程春招技术通用岗第五批笔试的邮件问我该不该背一遍八股、该不该刷行测、编程题要准备到什么程度。这三个问题放在一起说明她已经开始意识到这场笔试不是单纯刷算法题就能应付的。携程的技术通用岗前几批笔试我已经帮人复盘过不少自己也研究过它的题型演变。它跟纯开发岗笔试的差异在于开发岗会花大篇幅考深度通用岗则更在意广度——既要你有计算机基本功又要你有基本的产品思维和逻辑素养同时还不能写不出代码。第五批虽然是滚动批次里比较靠后的但考察框架和前几批基本一致换的主要是题面和具体考点。这篇文章就按我实际观察到的题目结构、准备方法和考场经验来写给马上要参加这场笔试的同学一个完整的参照系。1. 第五批笔试的定位为什么技术通用岗的笔试不能只刷算法题1.1 技术通用岗的画像笔试在筛选什么样的候选人技术通用岗不是典型的Java 开发岗或算法工程师岗它更像是一批潜力候选人的统一入口后续再分流到具体团队。因为分流方向不确定笔试就必须把好几个方向的基础都扫一遍。这也是为什么通用岗笔试题里计算机网络、操作系统、数据库这些八股都要露脸的原因。另外一个容易被忽略的点是通用岗很在意候选人的表达逻辑。笔试里的主观题和行测类题目表面看是考理解力和推理实际上是在预筛你能不能把技术问题讲清楚。我见过不少技术不错的同学算法题全 AC客观题也拿了七八成最后却挂在几道文字理解题上——不是不会是没读懂题。所以准备这场笔试之前先调整好心态它考的不是你能不能当一个顶尖算法选手而是你作为一个技术候选人基本功是否配得上通用这两个字。1.2 第五批在春招时间线上的现实含义常有人问批次越靠后是不是等于难度越低从我看到的真实情况来说并不是。携程春招是滚动筛选批次的先后反映的是投递时间不是难度梯度。第五批的题库和前四批不会是同一套题但出题人和考察框架是同一个团队定的所以你看到的题型结构大概率会很接近只是具体考点会错开。这里有一个非常实用的推论如果你在笔试开始前能找到前几批的题型分布或者考后复盘重点看的是考点模块有哪些、编程题平台长什么样、时间怎么分配而不是死记别人的原题。题库是换的框架是不换的。历年笔试里同一个考点换个马甲再出的情况太常见了。还有一点要提醒第五批在时间上通常意味着笔试结束后很快会安排面试有时候甚至出现笔试刚结束一两天就发面试邀请的情况。所以别抱着考完先休息一周的心态这场笔试不只是一个终点更是后面面试环节的起点。你的薄弱点会非常真实地反映在面试官的评价表上。2. 题型结构复盘选择题、编程题、通用能力题各自怎么考2.1 客观题知识点覆盖面比想象中广先给出一个比较有代表性的结构参考不是某一批的原题而是多次批次里出现的稳定框架考点模块大致题量常见考查方向数据结构与算法基础5-6 题链表、栈、队列、哈希表、排序、二叉树操作系统3-4 题进程与线程、死锁、内存管理、常用 Linux 命令计算机网络3-4 题TCP/UDP、HTTP 状态码、DNS、三次握手与四次挥手数据库2-3 题SQL 基本操作、索引失效、事务特性编程语言基础3-4 题Java/Python 语法、引用传递、垃圾回收概念注意这里的出题风格。通用岗的客观题很少考到源码级的深度比如不会问你某个并发容器在特定版本里的扩容细节但会问你哪个集合类适合做 LRU 缓存这种实用判断。换句话说它考的不是你有没有看过源码而是你有没有真正理解常用工具的设计思想。多选题是最容易丢分的地方。很多同学拿到多选题习惯性把每个选项都当成判断题反复琢磨结果时间全耗在上面。我的建议是控制在每题 1-2 分钟内先锁定有明显把握的选项再用排除法处理不确定项。如果实在拿不准宁可少选也不要错选这个策略在后面还会讲到。2.2 编程题数量不多但梯度设计很讲究从多轮反馈来看编程题一般稳定在 3 道左右时间通常给 60-90 分钟。这个题量并不大难点在于第二道和第三道之间会有一个明显的难度跳跃。题型类别出现频率典型难度字符串/模拟高简单到中等哈希表 / 双指针高中等动态规划中中等偏难链表/二叉树操作中中等贪心/排序中中等图论 BFS/DFS低中等偏难编程题的第一道通常是签到题考察基本的逻辑和编码速度第二道开始进入真正的筛选区间常见的是滑动窗口、双指针、简单 DP 这类在 LeetCode 上属于 medium 的题目第三道会出现一道有一定思维量的题可能是带约束条件的贪心或者需要状态压缩的 DP这一道并不要求所有人都做出来。这里要明确一个目标笔试想通过至少保证第一道 AC、第二道通过大部分用例、第三道有思路并有部分得分。很多人一上来死磕第三道前面两道反而没时间优化这种策略在通用岗笔试里非常不划算。2.3 通用能力题你可能最忽视的隐性分差技术通用岗的笔试里偶尔会混入一小部分类似行测的选择题比如文字排序、图形推理、数字推理。这类题分值占比不大但它的存在意义很明确考察快速阅读和逻辑判断能力。我见过最可惜的一种丢分就是一个候选人把这类题当技术题来做非要在图形推理上找到完整规律才愿意选下一个结果在前面耗掉 15 分钟后面编程题的时间被严重挤压最后只 A 了一道题。策略上我的建议是这类题放到最后做如果时间不够用排除法快速蒙完不要在想不出来的题上耗超过 3 分钟。这部分的性价比远低于前面一道编程题。3. 编程题实例推演一道滑动窗口题从审题到 AC 的完整路径3.1 先看数据范围再决定算法我拿一道非常符合这批笔试风格的题来说明给定一个字符串 s找出其中不含重复字符的最长子串的长度。约束是 1 ≤ s.length ≤ 10^5s 只包含可打印 ASCII 字符。拿到题目先别急着写。先看数据范围长度到 10^5如果写两层循环暴力枚举所有子串复杂度就是 O(n^2)最坏情况要执行 10^10 次在任何在线判题系统里都会超时。所以这道题的指向非常明确用双指针维护一个滑动窗口配合哈希表记录窗口内字符的最新位置。我在实际看别人笔试代码的时候发现很多同学第一道题顺利 AC第二道题却拿不到满分原因不是思路不对而是没先去想复杂度是不是够。在线笔试环境里没有代码审查你必须自己在动手前完成这层判断。关于 ASCII 的约束也要注意它意味着字符串里可能出现空格、标点等可见字符但不会出现中文或 emoji。这会影响存储方式不过用 Python 的字典或 Java 的 HashMap 都能覆盖不需要额外处理。3.2 写代码滑动窗口的标准实现下面是 Python 的参考实现注意这里的变量命名尽量直观因为在笔试现场你大概率没有时间重构。def length_of_longest_substring(s: str) - int: last_pos {} left 0 max_len 0 for right, ch in enumerate(s): if ch in last_pos and last_pos[ch] left: left last_pos[ch] 1 last_pos[ch] right max_len max(max_len, right - left 1) return max_len这个实现里最关键的一行是 left 的更新条件。只有当重复字符上次出现的位置在窗口内时才需要收缩窗口如果重复位置在窗口外说明这个字符虽然出现过但已经不影响当前子串的合法性。这是滑动窗口题最容易写错的地方或者说是很多 AC 代码里隐藏 bug 的来源。复杂度上每个字符最多被访问两次左右指针各一次整体 O(n)空间是 O(字符集大小)。这个复杂度必须能脱口而出因为部分笔试平台会要求你在提交后简要说明思路和复杂度。哪怕平台不要求面试官也几乎一定会问。3.3 边界用例和自查清单这部分非常重要。写完代码不是结束必须先在心里跑一遍这些用例输入期望输出说明0空串aaaa1所有字符相同abcabcbb3典型重复序列abcde5所有字符唯一abba3注意 left 不能回退abba 这个用例特别能暴露 bug如果用简单的前向指针去维护窗口可能会在遇到第二个 a 时错误地把 left 收缩到错误的位置。正确实现里 last_pos[a] 更新为第二次出现的位置left 只在必要时前进所以不会回退到前面。自查清单我在考场上基本是固定三条返回类型对不对、有没有考虑空输入、多组测试数据时变量有没有重新初始化。最后一条在牛客这种平台上尤其容易中招因为它的判题模式经常是连续跑多组用例中间不启动新进程static 或全局变量残留会导致第二组数据结果错误这种 bug 最难查。如果你要写辅助函数尽量把状态都放在函数内部不要依赖全局变量。4. 常见翻车点在这些细节上丢分最不值4.1 牛客网在线编辑器和你本地 IDE 的差距携程笔试基本用牛客网平台虽然每年可能换供应商但主流形式差不多。本地 IDE 用多了之后很多人会不自觉依赖自动补全和智能提示在线编辑器里这些功能要么没有、要么非常弱。如果你平时写代码全靠 IDE 提示方法名强烈建议提前两三天把刷题环境切到牛客网的在线编辑器。另一个被低估的是调试手段。本地 IDE 可以打断点、看变量面板在线编辑器里如果你习惯用 print 调试每 print 一次就得重新提交运行。这导致很多同学在考场上的真实效率比平时低 30% 以上。我的建议是在纸上画图、在注释里写伪代码稳住逻辑后再一次性写完整。写注释不是为了给考官看而是为了给自己理思路。还有一个小细节牛客的输入框不支持某些快捷键比如多行注释的快捷键可能冲突。如果你平时重度依赖快捷键一定要提前熟悉平台的交互方式免得上考场第一分钟就心态崩了。4.2 多组输入输出读不对就全盘皆输牛客风格的编程题里很多题目不是只跑一组数据而是会连续给多组。处理模式一般长这样import sys data sys.stdin.buffer.read().split() # 按题意解析 data通常第一个元素是用例数 idx 0 t int(data[idx]) idx 1 for _ in range(t): n int(data[idx]) idx 1 arr list(map(int, data[idx:idx n])) idx n # 计算并输出结果 print(solve(arr))关键点有两个一用 sys.stdin.readline 时注意把末尾的换行去掉二如果有的用例数还得从输入里读出来按顺序解析数据时一定要控制好游标 idx。本地测试用 input() 一次只能读一行数据量一大就读不全多组样例输出之间忘了换行也是常见错误。这类错误在数据规模小的时候根本发现不了但线上判题就是判 WA。考试前拿几道牛客的输入输出练习题热热手花不了半小时却能避免最冤的一种丢分。4.3 多选题的倒扣分规则和应考策略还有一类规则陷阱在客观题里。部分笔试平台对多选题设置了漏选得部分分、错选得零分甚至倒扣分的机制。如果你没提前确认规则遇到不确定的多选题就可能凭感觉全选结果反而比少选更亏。我的策略是拿到试卷先花 30 秒看考试说明重点关注多选题给分方式遇到拿不准的多选题只选自己完全确定的选项不确定的宁可不选。别小看这几个不确定项多错两题可能就抹掉你一道编程题拿到的分数。另外考试说明里一般会写明是否可以切换浏览器、是否可以本地 IDE。有些平台允许本地写代码那你就把常用代码模板提前准备好比如快读输入、链表节点定义、二叉树层序遍历模板省得现场临时敲。5. 时间分配与冲刺方案不同基础的人怎么准备最划算5.1 按剩余天数拆分冲刺任务根据你接到邮件到正式笔试之间的时间准备思路应该完全不同。距离笔试还有 3 天内不建议再碰新知识点重点是把高频套路过一遍滑动窗口、双指针、栈、哈希表、基础 DP每题控制在 20 分钟内。再抽 1-2 小时做一次完整模拟把题感和时间分配找回来。有 1 周时间目标是建立题型→解法的映射刷 LeetCode Hot 100 里的高频题搭配计算机网络、操作系统、数据库的八股清单各过一遍。每天留 1 小时专门练客观题不要只抱着算法题。2 周以上是系统备考模式先把计算机基础里最常考的三块网络、OS、数据库过一轮再按专题刷算法题每个专题至少 10 道做完要做错题总结而不是追求数量。5.2 刷题和复习的优先级排序通用岗笔试时间有限精力分配要有取舍。我按性价比从高到低排高频算法哈希表、双指针、滑动窗口、二叉树遍历、简单 DP。每道题不求秒杀但要求能在 20 分钟内写出可运行代码。计算机网络TCP 三次握手、HTTP 状态码、DNS 过程、TCP 和 UDP 的区别。这些都是客观题里的稳定考点。操作系统进程与线程区别、死锁四个必要条件、虚拟内存、常用 Linux 命令像 grep、awk、top 这类命令的常见用法。数据库SQL 的增删改查、索引使用场景、事务四大特性最好能把一条慢 SQL 的优化思路说清楚。常规语言特性Java 的 HashMap 原理、Python 的 GIL、深浅拷贝这类题目经常出现在客观题里。这里特别说一句不要以为自己是 Python 选手就不用看 Java 题。技术通用岗的客观题经常交叉出题题目里的代码可能是 Java 也可能是 C你至少得能读懂主流语言的基本语法。5.3 笔试之后别急着放松衔接面试的复盘方法笔试结束的 24 小时内趁记忆还清楚马上把考场上没做出来的题和犹豫过的概念记下来。不需要完整还原题目只要记下考点和卡住的环节。这一步对接下来的面试特别重要——你笔试里暴露的薄弱点很可能就是面试官接下来追问的方向。具体来说复盘可以按三个维度记录知识点漏洞、编码效率问题、时间分配失误。知识点漏洞对应后续八股复习编码效率问题对应刷题习惯时间分配失误则直接影响你下一场笔试的策略。如果你把每次笔试都当成一次数据采样几场下来你对自己能力的认知会比任何人都准确。如果能找到同一批次其他同学的反馈也可以对一下题。不是让你去核对答案而是对比考点分布看看自己是不是在哪一类题上存在系统性盲区。这种全局视角只看自己一个人的错题是建立不起来的。最后再分享一个我自己的小习惯每次笔试结束不管过没过我都会把整套题的考点分布整理成一张表标注题型、难度和我的得分情况。看起来是举手之劳但积累下来你对一个厂子出题风格的理解会比只刷题的人深很多。这次第五批笔试不管结果如何也把它当成一次很值的数据采集机会。