携程春招第三批笔试攻略:题型、考点与编程题复盘

携程春招第三批笔试攻略:题型、考点与编程题复盘 1. 写在最前第三批笔试到底意味着什么如果你是第一次参加携程的春招笔试或者已经投了简历正在等通知我想先跟你聊聊“第三批”这个概念。携程的春招笔试通常分批次进行第一批往往是简历投递高峰期之后马上开考后面几批则会根据岗位空缺、候选人简历补充和各地面试进度来安排。第三批的定位很明确补位与加场考的不是“有没有人”而是“谁更适合补上最后一批坑位”。我为什么专门把第三批拿出来说因为第三批笔试往往有两个非常典型的特点一是题型覆盖面稳定和前两批保持同源不会突然改风格二是竞争面更集中到了这个阶段不少人已经拿了其他公司的意向书真正走到考场里的人反而都是认真准备过的。所以第三批的分数线往往没有想象中那么离谱但做题的细致程度要求更高稍微大意就会丢分。这篇笔记适合三类人看第一类是刚收到第三批笔试通知、想在考前做一次系统梳理的同学第二类是投了携程技术岗但还没进笔试环节想提前摸清套路的同学第三类是打算把携程作为保底、但不想因为笔试翻车的同学。下面所有内容基于我实际参加的2023年携程春招技术通用岗笔试结合我自己备考时踩过的坑和复盘后的反思来写尽量把能说的细节都讲透。2. 题型结构与时间分配先把战场摸清楚2.1 一套卷子大概长什么样携程技术通用岗的笔试无论第几批整体结构相对固定我整理下来大致是这样第一部分是技术选择题包含单选和多选第二部分是编程题一般两到三道。部分批次可能穿插少量行测或英语阅读理解但占比不高主要还是看技术基础和代码能力。具体到题量我记得当时是选择题30道左右编程题2道考试总时长120分钟。这个配置放在互联网大厂里属于中等偏上的压力水平——时间不算特别充裕但也不至于完全做不完。30道选择题涵盖的范围很广数据结构、算法、计算机网络、操作系统、数据库、Java或C语言特性甚至Linux命令和场景题都会出现。多选比单选麻烦在少选错选都不得分所以碰到拿不准的选项宁可少选也不要抱着“多蒙一个说不定对”的心态。编程题一般是两到三道其中一道常常是简单偏中等的模拟题剩下的是中等偏上的算法题偶尔会有一道压轴的动态规划或图论。第三批的编程题不会故意难为人但也不会白送分边界条件和输入输出格式往往才是真正的失分点。2.2 时间分配策略先算一笔时间账120分钟看起来挺久但真正上了考场你会发现时间过得飞快。我自己的分配策略是选择题控制在45到50分钟内完成编程题留70分钟以上。为什么这么分因为选择题就算你纠结半天也不过是1分2分的差距而编程题一道就是20到30分一道完整AC的收益远高于五道拿不准的选择题。具体操作上前10道选择题如果遇到卡壳超过2分钟的先标记跳过不要恋战。笔试系统一般支持题号跳转先把会做的快速拿下再回头处理犹豫题。编程题部分第一道简单题争取15分钟内AC第二道中等题留40分钟最后10分钟检查输出格式和边界。还有一个小细节笔试系统里很多编程题要求自行处理输入输出不像是力扣那样已经帮你封装好了函数。很多人平时刷题刷习惯了到了笔试现场连Scanner和缓冲流都手生结果在输入解析上浪费大量时间。这个问题我在后面专门讲。3. 核心考点拆解选择题背后的知识地图3.1 数据结构与算法稳定送分题也是稳定丢分题选择题里数据结构与算法的占比大概在30%左右可以说这是整张卷子的基本盘。常见的考点包括栈和队列的特性对比、剑指Offer风格的链表操作、二叉树的前中后序遍历还原、哈希表的冲突处理方式、堆的插入删除复杂度、图的最短路径算法适用条件等。这里我想多说一句“复杂度计算”这个点。很多题目不是直接问你“快排复杂度是多少”而是给你一段代码问最坏情况下的时间或空间复杂度。比如递归实现斐波那契数列朴素递归的时间复杂度是O(2^n)不是O(n)这个很多人第一眼会看走眼。还有递归栈的空间复杂度也是容易忽略的点。数据结构题的建议是考前把常用结构的时间复杂度表背熟数组、链表、栈、队列、哈希表、二叉搜索树、堆、跳表增删改查分别是多少必须张口就来。这不仅是选择题的拿分保障后面的编程题选数据结构时也会用得上。3.2 计算机网络与操作系统场景化问答是主流计网和操作系统在选择题里大概各占15%。计网的常客是TCP和UDP的区别、三次握手四次挥手的过程、HTTP状态码的含义、HTTP与HTTPS的区别、DNS解析流程。这些属于白给分的基础题但携程喜欢在题干里套场景比如“一个视频通话应用应该选TCP还是UDP为什么”或者“网页加载慢可能由哪些层导致”。操作系统的考点更偏基础进程和线程的区别、进程间通信方式、死锁的四个必要条件、虚拟内存和页面置换算法、局部性原理、用户态与内核态的切换。这些题基本是408考研的老朋友有基础的话不用花太多时间复习。我记忆比较深的一道题是问“多线程并发访问共享变量时哪些手段能保证可见性”选项里混杂了synchronized、volatile、ThreadLocal、AtomicInteger。正确答案是synchronized、volatile和AtomicInteger都能保证可见性ThreadLocal不行——它只是让每个线程拥有独立副本并不能解决多线程共享变量的可见性问题。这种题就是典型的“看着都会一选就错”。3.3 数据库与Linux性价比最高的复习区域数据库和Linux在选择题里大概占15%到20%这块是性价比很高的复习区域因为考点非常集中。数据库的高频考点包括索引的原理B树为什么适合做索引、聚簇索引和非聚簇索引的区别、事务的ACID特性、隔离级别与脏读不可重复读幻读的对应关系、SQL语法基础尤其是GROUP BY和HAVING的组合用法。有一道题让我印象很深问“在哪个隔离级别下不会发生幻读”。答案是Serializable但很多人选了Repeatable Read——因为在MySQL的默认隔离级别下InnoDB通过间隙锁已经能在很大程度避免幻读了但理论上的标准答案仍然是Serializable。这种题考的是理论功底不能光靠MySQL的实践经验去答。Linux部分基本围绕常用命令展开查看进程用ps、查看端口用netstat或ss、修改文件权限用chmod、查找文件用find或grep。偶尔会有一道“管道符组合输出”的题比如统计排序后再取前10行熟练的话很快就能选出来。3.4 语言特性Java和C的侧重点不一样携程后台开发以Java为主但技术通用岗也会覆盖C简历的候选人。所以选择题里会出现语言相关的考点方向随岗位偏向略有不同。Java方向的常客是JVM内存区域划分、垃圾回收算法与收集器、HashMap在JDK7和JDK8的区别、ArrayList和LinkedList的适用场景、线程池的七个参数、synchronized和ReentrantLock的对比。C方向则更爱考虚函数与多态的实现原理、智能指针unique_ptr、shared_ptr、weak_ptr的底层机制、内存泄漏的场景、深浅拷贝的区别、sizeof和strlen的差异等。我个人建议简历上写了Java就重点复习JVM和集合源码写了C就重点复习内存模型和智能指针。别想着两边都看得滚瓜烂熟时间不够而且选择题不会考到那种深度。4. 编程题复盘五种高频题型的解法套路4.1 模拟题读懂规则比写代码更重要携程笔试的第一道编程题绝大多数是模拟题。给定一个业务规则让你按步骤模拟出结果。这类题算法难度不高真正的考验是“能不能一次性读懂题目描述”。我遇到的那道题是关于订单状态流转的模拟大概意思是每个订单有多个状态节点输入一组操作序列按规则判断最终状态。看着不难但题目描述特别长状态转移的条件里还有很多优先级判断。做这种题我总结了一个套路先把题目里的状态节点画成一张表把每个状态的初始值、转移条件、输出格式列清楚再动手写代码。不要一边读题一边写代码很容易漏条件。其次就是注意输出格式模拟题的输出格式往往写得很细多一个空格、少一个换行都会导致判题失败。4.2 动态规划不是每一道都要求最优解每年春招的编程题动态规划几乎必考。但我发现很多人对动态规划有一个误区以为必须一步到位写出最优解。实际上笔试题的评分是按通过用例比例来的部分用例AC也能拿到大部分分数。所以我的建议是先想清楚暴力解法能写出来就先写出来至少把简单用例的分数拿到手再考虑优化。常见动规类型无非是一维DP斐波那契、爬楼梯、最大子数组和、二维DP最长公共子序列、编辑距离、背包问题0-1背包、完全背包、区间DP回文串分割、石子合并。备考时把前两类吃透就能覆盖笔试里大部分动规题。我记得第三批编程题里有一道是“给定一个数组切分成若干段每段的和不能超过K求最少切几段”。这题看起来像贪心但其实是DP——需要先预处理前缀和再用二分找每段最远能延伸到哪最后一维DP求最小段数。如果你只想到贪心可能样例过得了但大数据用例会挂。这就是笔试动规题的特点看着像简单题实际上埋了坑。4.3 双指针与滑动窗口性价比最高的模板如果说哪种题型复习性价比最高我一定投双指针和滑动窗口一票。这类题型代码短、模板固定、边界条件虽然多但很容易背下来而且出题频率极高。常用的场景包括有序数组的两数之和、三数之和、最长无重复字符子串、最小覆盖子串、长度最小的子数组等。滑动窗口的模板我背得很熟核心就是四个步骤右指针扩张更新窗口状态判断是否需要收缩左指针记录结果。笔试时如果看到“连续子串”“连续子数组”这些关键词第一反应就应该是滑动窗口。如果能快速套上模板基本20分钟内可以AC一道中等题。4.4 二叉树与DFS/BFS递归和队列要双修二叉树相关的题在笔试编程题里出现的频率不算最高但一旦出现就是很多人的送命题。原因很简单递归写法大家都会但迭代写法很多人不熟练。笔试时如果考到二叉树层序遍历、之字形遍历或者二叉树最近公共祖先最好能用两个方案都写出来。DFS除了用在二叉树也经常出现在“矩阵路径”“岛屿数量”这类二维网格题里。BFS则适合解决“最短步数”“最少步数到达目标”这类问题。我建议考前把BFS的模板队列visited数组练到肌肉记忆因为遇到图论题时BFS往往是保底方案至少能拿到部分用例的分数。4.5 贪心与排序变形别被“巧妙解”带偏节奏贪心算法在笔试中出现频率不低比如最少会议室的安排、跳跃游戏、射气球等。这些题的核心是“局部最优能否推出全局最优”理论证明有时候很绕但笔试里你不需要写证明只要样例能过、盲猜贪心策略并提交就能拿到对应分数。排序变形的题也值得注意比如按频率排序、按字典序组合成最大数、区间重叠合并等。这些题本身不难但容易在比较器的写法上出错。如果你用的是Java建议用lambda简化Comparator如果是C注意sort的comp函数定义。这种细节在平时练习时就不起眼但考试时极容易翻车。4.6 上机环境的输入输出平时不练考场两行泪这是我最想强调的一块。力扣、牛客的核心代码模式刷习惯了往往不知道笔试系统里要自己处理完整输入输出。携程的编程题是ACM风格有些题的输入是单行多个整数有些是多组测试用例有些是字符串带空格。比如输入一行字符串你需要按空格拆分后转成int数组Java里就是Scanner sc new Scanner(System.in); while (sc.hasNextLine()) { String[] parts sc.nextLine().split( ); int[] nums new int[parts.length]; for (int i 0; i parts.length; i) { nums[i] Integer.parseInt(parts[i]); } }这个代码我写了很多遍但还是想提醒大家笔试前一定要在本地环境里用ACM模式跑一遍真题或模拟题确保Scanner、BufferedReader、StringTokenizer这些都熟。很多同学不是不会做题是把时间浪费在调试输入解析上最后没时间写核心逻辑非常可惜。5. 备考路线与实战安排第三批如何救急5.1 收到笔试通知后的三件事如果你离笔试还有三到四天先别慌按优先级做三件事第一刷近两年的携程笔试回忆题重点看题型结构和编程题的难度区间不用追求每一道都完全AC但要确保自己知道每道题考什么、用什么套路做第二把计算机网络、操作系统、数据库的基础题过一遍每天两小时足够主要靠刷题APP里的“校招笔试高频题”分类第三至少做两次完整的模拟笔试严格按照120分钟来计时感受一下时间压力。我见过太多人收到通知后还在拼命刷力扣难题结果选择题基础题反而丢分。第三批的时间点决定了你不应该再花大把时间在偏题怪题上基础巩固题型熟悉手感保持才是最高效的组合。5.2 刷题优先级别跟难题较劲编程题备考的优先级我建议是模拟题能秒杀双指针和滑动窗口能背模板二叉树层序和递归遍历能写熟一维动规能独立推导贪心会判断场景。这五类覆盖了笔试里八成的题目类型。剩下两成可能涉及线段树、字典树、并查集这些属于进阶内容时间不够可以先放一放。笔试不是竞赛不要求你每道题都拿满分。拿到80%的分数选择题正确率保持在70%以上通过笔试进面试是完全够用的。这个策略在第三批尤其适用因为第三批的名额少笔试通过线一般不会定得特别高。5.3 模拟笔试的姿势要像真实考试一样逼自己模拟笔试这件事做一次和做两次效果完全不一样。第一次模拟时你会发现时间分配完全是乱的选择题纠结太久编程题第一道就卡住最后一道直接放弃。这些问题只有在模拟时才会暴露出来。我的建议是模拟时关闭所有通讯软件手机放到另一个房间全程只能在编辑器里操作。模拟完以后不要只看分数要把每道错题记录下来整理成一份“考前错题本”。尤其是选择题里的知识盲区比如“offset”和“limit”在SQL里谁先执行这种细节只有考完后才会真正记住。5.4 笔试结束后立刻做什么笔试交卷之后千万不要干等结果。携程的笔试到面试邀约往往有几天的间隔这段时间最适合做两件事一是把笔试中没做出来的编程题重新在本地写一遍确保完全AC二是开始准备业务一面可能会问的八股文和项目问题。很多人笔试结束后觉得万事大吉结果面试通知来的时候已经忘光了笔试内容面试官问“你笔试那道题考的是什么”都答不上来这就很尴尬。6. 常见问题与避坑清单我踩过的坑你别再踩6.1 最容易失分的五个细节我把这次笔试前后遇到的高频失分点整理成一个清单每个都是我或身边同学真实踩过的失分点具体表现解决办法输入输出格式错误多打印了提示信息、末尾多一个空格提交前逐字符核对输出样例多选漏选当单选做以为多选是全对才得分看清题目说明多选宁少勿多递归栈溢出深度很深时还写递归优先考虑迭代或显式栈时间复杂度预估错误暴力解法被大数据用例卡超时写代码前先按数据范围估算复杂度题目阅读不完整忽略了输出排序要求或取模要求读题时用笔圈出关键限制词6.2 笔试环境与设备自检如果你是在家里进行在线笔试这个环节特别重要。笔试前至少提前半天检查好摄像头、麦克风和浏览器做好设备自检。正式开考前关闭所有无关软件尤其是会弹窗的通讯工具。有些笔试系统会监测切屏次数切屏超过一定次数可能会被判作弊所以保险起见开考后别切出考试页面去查资料就算你查到了也得不偿失。网络方面建议提前测试一下带宽和稳定性。我在笔试时出现过一次网络波动页面刷新后代码被清了虽说能重新写一遍但浪费了将近十分钟。后来我学乖了在本地IDE里写完代码再复制到答题框这样就算页面出问题也不会全盘崩掉。6.3 心态与时间管理该放弃时就放弃笔试过程中最忌讳的就是“死磕”。我自己在第一道选择题上纠结了五分钟后来发现后面的编程题时间完全不够只能草草交卷。那一次给我的教训很深笔试是拿分制不是解谜游戏你花五分钟磨一道不确定的选择题可能只换回0.5分但如果把这五分钟留给编程题检查边界条件也许就能多过两个用例。如果你在编程题上卡了二十分钟还完全没有思路先跳过去做另一道题。尤其是压轴题看一眼题目如果感觉难度远超预期直接放弃核心解法写出暴力解法骗部分分数把时间留给前面那些能稳的题。6.4 笔试之后的流程衔接笔试只是第一关携程技术岗后续通常是技术一面、技术二面和HR面。笔试成绩会直接影响后面几轮面试的询问重点所以如果你的编程题做得顺利面试官可能会追问你笔试时的解题思路如果笔试表现一般面试官可能会更多考察项目细节来查漏补缺。我的建议是笔试结束后保留好题目回忆笔记尤其是自己做错的题、没AC的题以及当时输出的代码。面试前把这份笔记重新过一遍大概率会在面试中被问到类似场景。这不是什么玄学而是面试官就拿着你的笔试记录去问的。最后再分享一个小经验笔试前千万不要熬夜刷题。第三批笔试时间通常在晚上很多人白天还在实习或上课晚上直接上考场状态很差。我第二次参加笔试时调整了作息考前一天晚上十点就睡第二天白天轻量复习一些基础题晚上笔试时脑子清楚了很多。笔试拼的是稳定的输出不是临门一脚的爆发保持好精神状态比多做两道题重要得多。