携程技术岗春招笔试实战复盘:题型、考点与避坑指南

发布时间:2026/9/1 14:11:29
携程技术岗春招笔试实战复盘:题型、考点与避坑指南 2023年春招我参加了携程技术通用岗的第四批笔试。说实话这个时间点已经很靠后了前面几批的笔试帖子都刷了个遍但真到自己上场还是有不少地方跟预期不太一样。携程的技术笔试在行业内属于中规中矩偏实用的类型不会像某些大厂那样上来就甩一个复杂的系统设计也不会全程考脑筋急转弯但如果你以为它简单那就容易翻车。这里我结合自己这次第四批笔试的完整经历把题型构成、考点分布、做题节奏以及一些容易踩的坑都梳理一遍给后续准备携程以及类似风格互联网公司技术岗笔试的同学一个可参考的实战样本。第四批笔试整体安排双机位监考网页端做题限时120分钟总题量我记得是28题左右其中选择题约25道剩下的3道是编程题也可能不同批次有差异但普遍反馈是3道。选择题覆盖较广编程题难度递进整体风格偏向工程实用而不是竞赛选拔。下面我分几个部分详细拆解。1. 笔试整体设计与考察思路1.1 时间分配与题型构成携程的笔试平台做得还算顺手支持在线调试和本地IDE编写后粘贴最终提交只认代码运行结果。第四批笔试的120分钟里我实际做完选择加编程一共用了差不多90分钟剩下的时间主要在做检查尤其是编程题的数据边界和输入格式。大致的时间分配建议是这样的选择题控制在40分钟左右每道题最多2分钟碰到卡壳的先标记跳过。编程题三道分别预留20、25、30分钟难度从低到高第一道基本是签到级别第二道是常规数据结构的应用题第三道需要一点动态规划或贪心思维。如果你在选择题上恋战最后一道编程题大概率做不完这是很多人的教训。关于题型分布我的印象是计算机系统基础操作系统、网络占大概8~10道数据结构和算法占8道左右数据库3~4道剩下的散布在Java/C语言基础、设计模式、逻辑推理。注意这里没有单独的前端或者测试岗题目我这个批次是技术通用岗所以你如果是投递后端方向这个覆盖范围基本就是标准的考察面。1.2 携程技术笔试侧重什么跟纯刷题网站上的比赛题不同携程的笔试题有明显的“工程味道”。举个例子选择题里经常出现“以下哪种并发容器在弱一致性的场景下更合适”这种问法它不直接问你源码细节而是给你一个业务背景让你选合适的工具。这就意味着只背八股文是不够的你得真的理解每个技术的适用场景。编程题也体现了这个倾向。它不会出那种一眼就知道套模板的最短路径题而是把一个业务场景包装进去比如“根据酒店订单的入住和离店时间计算最大同时在线房间数”或者“多个优惠规则叠加求最优结算价”。你需要从描述里抽取出数学模型再把模型转化成代码。这种出题思路其实就是模拟了日常开发中“接需求——拆解逻辑——落代码”的过程。所以准备的时候不建议只刷LeetCode多看看有业务背景的题或者把经典题型自己往场景上套一下反而更有用。另外笔试的题目重复率不算低尤其是前三批已经考过的同学会在牛客和论坛上放出一部分回忆题。虽然我没有刻意去找原题但确实有几道选择题和“字符串压缩”“依赖任务执行顺序”这类常见编程题的变体。建议在第四批笔试前把前几批的讨论帖翻一遍哪怕只看看大家的吐槽和题型描述也能帮你校准复习范围。2. 核心考点拆解算法与数据结构2.1 高频题型与解题思路从我做下来的直观感受和旁边人的反馈来看第四批笔试的算法题主要集中在以下几个方向数组/字符串处理、前缀和或差分、贪心、简单动态规划、图的遍历DFS/BFS。树和复杂的图算法考得不多但如果选择题里出现大概率是“给定前中序遍历求后序遍历”或“判断有向图是否有环”这种基础题。先说字符串处理。这种题看似简单但极其考验边界处理能力。比如“统计一个字符串中出现次数最多的子串”这种题子串长度是否变化、是否区分大小写、是否有空串输入每个条件都可能改变答案。我记得有一道编程题是“将下划线命名的字符串转为驼峰命名但同时要求忽略连续的多个下划线”。很多人以为用split就完事了但split默认行为会把连续分隔符拆出空字符串结果就是多出一个空段。这种细节就是笔试分水岭。贪心和动态规划在笔试里的出现频率极高但难度通常控制在中低档。比如“给定一组区间选择尽可能多的不相交区间”就是典型的区间调度贪心而“物品的重量和价值背包容量有限求最大价值”是经典的0-1背包。这些题如果你熟练其实能在几分钟内写出来核心逻辑。但要注意的是携程喜欢把状态定义隐藏在日常用语里比如“安排会议的最多场次”“路线规划的最短耗时”你得能识别出背后的模型。图的遍历虽然少但一出现就会放在第三道编程题的位置比如“在有向图中求从入口到出口的所有路径中经过节点数最少的路径数”。我当时用BFS做最短路径但题目要求的是“路径数”所以还需要再加一个方案数累加的逻辑。如果没有提前梳理过这类题很容易在DFS超时和BFS只求长度之间犹豫。2.2 编程题常见坑点第一坑输入输出格式。笔试题的输入经常是数组形式比如第一行是数组长度n第二行是n个整数中间空格分隔。看似简单但如果你用nextInt()逐个数读然后想当然地以为换行没问题结果又用nextLine()读一个字符串时就会发现读到了空串。这种“nextInt后nextLine吞换行”的经典问题在笔试现场容易让人抓狂。建议统一用Scanner的nextInt直接读或者用BufferReader一次读一行再split不要混用。第二坑数据范围。第一道编程题一般n在1000以内暴力能过但第二道或第三道题n可能到10^5甚至10^6你还在用O(n^2)的解法哪怕逻辑再对也会因为超时拿不到满分。笔试平台通常有部分用例你会发现自己过了70%的用例剩下的全是超时这就是典型的复杂度过高。我在做区间相关那道题时第一版用两层循环做前缀和累加结果只过了60%改成差分数组后直接AC。所以提交前一定要先看n的范围用Big-O估算一下。第三坑越界和类型溢出。计数和累加类的题目结果可能需要long来装用int会溢出导致交卷时死活不对。建议所有涉及累加和、乘法、方案数统计的变量直接声明为long即使题目没明说也不亏。另外数组下标别直接从0蹦到n很多和“第几个”相关的题下标转换错了就会导致差一位的错误。第四坑频繁修改代码后忘了恢复。我当时有一道题写了两个版本一个递归一个迭代。本地调通迭代版本后想再试试递归复制了旧代码后忘了覆盖完全提交时跑了递归版本结果栈溢出。考试平台不会预编译检查所有异常你只有在提交后看到“运行时错误”才能反应过来。所以交卷前一定要把代码可视化地检查一遍确认提交的是你想要的版本。3. 非算法考点计算机基础与业务思维3.1 计算机网络与操作系统常考内容这一块是选择题的重头戏考得不算偏但覆盖面广。计算机网络主要围绕TCP/IP协议栈TCP三次握手为什么不是两次、四次挥手TIME_WAIT状态的意义、HTTP和HTTPS的差异、DNS解析过程、Cookie和Session的区别。我印象很深的一道题是“在浏览器输入一个网址后数据包依次经过的协议栈顺序”考察的是物理层到应用层的封装过程。如果你只看过八股文里的例子没自己在Wireshark里抓过包这道题可能会在链路层和网络层之间犹豫。操作系统这边进程与线程的区别、死锁的四个必要条件、虚拟内存与页面置换算法、进程间通信方式这些几乎是必考。有一个版本里还考了“信号量与互斥锁在实现计数器时的区别”答案其实是要区分“统计资源数量”和“保护临界区”这两个不同的目的。这种题就是典型的概念题但你需要理解为什么而不是只背定义。另外Linux基础也在笔试中出现过一两道比如grep、awk、find、chmod命令的用途和输出格式。虽然笔试环境不是Linux命令行但选择题会给你一段命令让你选结果。我建议对netstat -an、top等常用排查命令的字段含义稍微熟悉一下万一考到也不慌。3.2 数据库与场景设计逻辑数据库在笔试里的占比不算特别高但一旦出现往往伴随着业务场景。基础内容不外乎SQL语句的执行顺序、索引为什么用B树而不是B树、事务的ACID、隔离级别与脏读/幻读、数据库三范式。有个别批次还考了MyBatis中#{}和${}的区别以及预编译防SQL注入的原理这可能也和携程的技术栈有关。如果你投的是Java岗MyBatis相关题几乎是必刷。场景设计题在选择题里也偶有出现比如“设计一个秒杀系统库存100用户10000如何防止超卖”。给你几个选项乐观锁更新库存、Redis预减库存、加分布式锁、数据库悲观锁。它问的是哪种方案最合理或哪种方案会有风险。这种题没有固定答案但你需要理解不同方案的一致性和性能取舍。我的思路是先看数据一致性要求再看并发量级最后看可接受的复杂度。比如100个库存的秒杀用数据库乐观锁就够了上Redis反而增加了故障点。除了数据库业务逻辑题有时也会混在选择题里比如“某活动需要每用户限购两件如何设计接口保证并发下单不超量”。这种题其实也是在考并发控制只不过用业务语言包装了一下。所以准备时不要只看SQL语法多想想如何用锁、事务、版本号来保证数据正确性这才是携程想看到的工程思维。4. 实操过程从模拟到实战4.1 笔试前准备环境与装备第四批笔试是双机位需要一台主设备电脑和一台监考设备手机或平板监考设备要固定在侧后方能看到你手部和屏幕的位置。我提前一天照官方要求布置好了角度并且测试了麦克风和摄像头。这里有个注意事项提前把电脑上的弹窗软件都关掉尤其是会弹出新闻或更新的软件因为考试过程中如果弹出与考试无关的窗口可能会被记为切屏作弊。我就把微信、钉钉、企业邮全部退出了只留浏览器和IDE。除了软件还要准备好身份证原件考前会有工作人员线上核验。建议把充电线插好确保监考设备电量充足。另外就是网络最好用有线网络连接电脑无线信号偶尔波动很致命。我有个朋友考试中途WiFi断了一次平台自动交卷了成绩直接作废这种无妄之灾能避则避。模拟练习方面我不建议考前两天再刷新题反而应该做三件事第一把常见的输入输出模板手写一遍比如Java的BufferedReader模板、Python的sys.stdin.read()模板确保考试时不用临时想第二找一个在线笔试平台模拟一下限时做题熟悉那种“写完代码看不到全部用例结果”的反馈方式第三把前几批笔试的讨论帖翻一遍记下高频题型再有针对性地做两道。4.2 考试当天的做题节奏与策略开始答题后我首先把三道编程题都看了一遍确定他们的大致难度。第一道是字符串题第二道是区间问题第三道是图论相关。我给自己定的顺序是先做选择题遇到不会的快速蒙一个并标记再做第一道编程题热身然后解决第二道最后死磕第三道。选择题的节奏前面说了控制在40分钟以内。如果你在某个网络题上卡了很久比如“TCP断开连接时哪个状态会出现”别看它有四五个选项其实你只要画个状态迁移图就能秒选。记住一切对“为什么”的理解都能帮你加快速度。编程题第一道通常二十分钟内解决。我当时先用20分钟写完了字符串转驼峰的代码测试了几组样例后直接提交结果过了。这里有一个经验第一道题尽量不要追求最优解只要能过所有用例就行哪怕是暴力AC也很好因为后面还有更难的在等你。第二道区间题我看到“求最大重叠区间数”这个熟悉的模型后本想着用排序堆就能做但仔细一看它只要求输出最大重叠数不需要输出方案所以直接排序扫描线即可。我花了大约15分钟写完提交后80%用例通过超时了20%。这时我定了定神把扫描线法改成差分数组复杂度从O(nlogn)降到了O(n)当然排序还是nlogn再提交就到了100%。这种优化过程本身就值回票价——如果一开始就无脑堆遍历可能最后也AC不了。第三道图论题我做完第二道后还剩25分钟第三道只写了一半。是一个有向图求最短路径数量的题。我当时用BFS维护每个节点的最短距离和路线数思路是对的但太急了细节没处理好。最后交卷时只过了两个用例剩下要么超时要么结果不对。现在回想起来如果我先用10分钟把状态定义写清楚再动手结果可能会好很多。5. 常见问题与排查技巧实录5.1 平台异常与代码调试在线笔试平台偶尔会有bug比如代码粘贴后缩进乱了、输出格式提示“答案错误”但本地跑完全正确。我的经验是不要死磕“它是不是坏了”先检查自己的输出是否有额外的换行或空格尤其是行尾和末位。很多平台比较“死心眼”多一个空格也算错。所以代码里尽量用StringBuilder拼好所有输出最后统一print避免多次print在特殊数据下产生的多个换行。另一个常见问题编译报错但本地没报错。这往往是JDK版本差异比如用了var关键字或者Java 8不支持List.of。如果平台提示编译错误而你本地用的是高版本JDK赶紧把代码改成老式写法比如避免使用Collection.toArray()的新接口、避免Lambda的复杂类型推导尽量用最普通的循环和数组。另外如果考试过程中遇到平台卡死或无法提交第一时间截图保存证据然后举手联系在线监考或通过客服通道反馈。不要傻等着也不要刷新页面——刷新可能会被判定为离开页面直接交卷。这个规则在考前须知里写得很清楚但依然有人因为紧张手滑而犯错。5.2 排序、边界与状态管理的避坑心得排序问题在笔试里是“看似简单实则细节多”的重灾区。比如自定义排序时比较器返回值的正负号容易搞反Java里Arrays.sort对基本类型数组不能加自定义比较器必须转成包装类型或者用List否则编译直接失败。还有字符串按字典序排序时要确认是否区分大小写以及是否忽略前导空格。笔试里出过“按员工生日排序后输出姓名”的题其实底层就是按yyyy-MM-dd的字符串直接排但如果有人用Date解析再比较反而容易出错因为日期格式可能不统一。边界条件的处理也需要清单化数组为空、数组长度为1、所有元素相同、输入中有负数、结果溢出、图中有环。每写完一道题就按这个清单过一遍自己的代码可以抓出大部分隐藏bug。比如区间题里如果区间是左闭右开还是左闭右闭直接影响重叠判断这种细节只靠题目描述容易忽略。我的方法是写代码前在注释里明确“区间定义”然后基于定义写判断条件不要脑内默认。状态管理则针对BFS/DFS这类算法。如果你用了全局变量来记录访问状态要注意每次从新的起点开始时重置状态如果你在递归里修改了某个变量注意回溯后要恢复现场。我第三道图论题就是因为BFS的dist数组在初始化时全部设为Integer.MAX_VALUE但起点城市的编号不是从0开始导致我在下标处理上反复出错。这种情况下更好的做法是用HashMap或者把城市重映射成连续的0~n-1能省去很多麻烦。6. 复盘与个人准备建议笔试结束后我没有立刻对答案而是先把自己记得的题目和当时做题的思路写下来尤其是卡住的地方。这种复盘的价值比反复刷题更大因为它会让你看到自己的思维盲区——比如我这次就发现对“区间重叠”这种基础模型还不够敏感第二道题一开始竟然想用堆去模拟虽然也能做但绕了远路。如果我在笔试前专门把“扫描线类”题目集中刷过一遍应该会更快更稳。对于后面准备携程或类似公司春招笔试的朋友我个人有几个实际建议一是提前把所有常用数据结构的模板代码准备好比如树的遍历、并查集、前缀和、差分、Dijkstra、BFS方案数因为笔试时间紧临场想实现细节很容易出错。二是有意识地训练自己在有干扰环境下的专注力因为双机位旁边还会有人走动和说话心态不过硬的话很容易被影响。三是考试时一定先做会做的保住基本盘再去碰难题——每年都有前三道笔试全AC但选择题卡住没写的情况实际上选择题分值占比也不低放弃选择题等于丢了大头。还有一个小技巧在笔试平台的编辑区里可以先用注释把解题思路写出来再逐步填充代码。这不仅能防止思路中断而且哪怕最后没时间写完面试官看你面试时的代码也可能留意到你的思维过程。虽然笔试平台不直接给面试官看注释但在考试中注释真的是你的“草稿纸”。最后说一点和题目无关的体会春招笔试是场马拉松尤其是第四批这种靠后的批次看到别人已经拿到offer心态很容易受影响。但就我观察携程笔试的难度相对稳定批次的先后并不能决定通过率。你只需要把自己的细节做到位把能做对的题都拿下就已经比大部分人更有机会。笔试之后还有面试所以在等待结果的那几天不妨把重点放在项目经历整理和算法思维复盘上别把时间浪费在焦虑上。