携程春招技术笔试复盘:算法与计算机基础考点全解析

发布时间:2026/9/1 15:25:14
携程春招技术笔试复盘:算法与计算机基础考点全解析 考完携程春招技术通用岗第二批笔试我坐在电脑前缓了好一会儿。倒不是说题目难得离谱而是那种“明明复习过、但考场上就是差点没写完”的紧迫感确实让人记忆深刻。这篇文章把整场笔试从考前准备、题型分布、编程题复盘到踩坑教训全部梳理一遍给后面要参加携程或类似大厂技术笔试的朋友一个完整参照。1. 笔试前夜岗位定位与备考重点的核对1.1 技术通用岗到底是什么先聊清楚“技术通用岗”这个岗位性质。很多人一看“通用”两个字以为就是技术含量低、随便什么人都能投的岗位其实完全不是这样。携程春招里的技术通用岗一般面向的是计算机基础扎实、但还没有明确细分到后端/前端/算法方向的应届生或者说是需要在入职后再根据项目情况分配到具体业务线的储备技术人员。笔试环节并不会因为岗位“通用”就降低难度恰恰相反考察范围往往更广数据结构、算法、计算机网络、操作系统、数据库、Java基础都可能涉及。所以第二批笔试的题目结构给我的第一感觉就是它不要求你在某个方向钻得很深但要求你在计算机核心基础课上没有明显的短板。我身边有同学只刷算法题计算机网络和操作系统基本裸考结果选择题失分严重直接影响了整体排名。1.2 我跟进过的信息源与复习路径第二批笔试的报名通知和考试安排一般会通过携程招聘官网、官方公众号以及学校就业信息网同步推送。笔试时间通常安排在报名截止后的周末采用线上双机位监考模式需要用电脑作答手机作为监考设备放置在斜后方。这里提醒一句一定要提前一天把环境测试跑完包括摄像头权限、浏览器兼容性、网络稳定性。我所在考场就有人因为摄像头无法调用被要求重新测试白白浪费了十几分钟的正式作答时间。我自己的复习路径是倒推的先把计算机网络、操作系统、数据库、Java基础这四门课的重点章节过了一遍然后每天保持两道算法题的训练量。笔试前三天重点刷了携程历年的笔试回忆题和同级别互联网公司的春招真题尤其是字符串处理、链表、二叉树遍历、动态规划这几类高频题型。2. 试卷结构与题型分布三个模块的实测感受2.1 选择题模块基础知识的广度与细节陷阱第二批笔试的试卷结构是选择题、算法编程题和附加的开放式问题。选择题大约20道左右覆盖的知识面非常宽单道题分值不高但架不住总量大。我印象比较深的是计算机网络里的“TCP断开连接过程中TIME_WAIT状态的作用”、操作系统里的“页面置换算法在局部性原理下的表现差异”、数据库里的“索引失效的常见场景”这类题。这些题表面看是送分题实际上陷阱极多。比如TCP那题如果只记住“TIME_WAIT是主动关闭方进入的状态”却说不清它为什么需要2MSL最大报文段生存时间在选项稍作变形后就容易选错。还有操作系统里的LRU和LFU对比题目不会直接问你“ LRU是什么”而是给一段页面访问序列让你算缺页次数这就非常考验对算法过程的熟练度。2.2 算法编程题从Easy到Medium的梯度设计编程题一共4道难度呈阶梯式上升。前两道基本是LeetCode Easy偏Medium的水平第三道是Medium偏上第四道直接到了Hard的敲门砖级别。说实话4道题全部AC通过全部测试用例的难度不小我的目标是保前三道、争取第四道拿部分分。第一道是字符串处理类的题核心思路是模拟加哈希表统计第二道是数组/排序相关考察双指针的灵活应用第三道是状态搜索类BFS加状态压缩第四道是带约束的动态规划状态转移方程写出来不算难但优化到通过所有数据范围就非常考验功力。这个梯度设计其实很合理给基础扎实的人保底机会又给算法能力强的人留出区分度。2.3 附加提问与逻辑题考察的不只是代码除了选择题和编程题还有一道附加的开放式问题内容大致是让你结合自己的项目经历谈谈在技术选型或系统设计上的一个决策过程。这道题不设标准答案更多是看你的思路是否清晰、表达是否有逻辑。我当时写的是一个课程项目中数据库分表策略的思考过程从数据量预估到分表键选择再到读写路由方案一步一步讲清楚。这类题目虽然不计入算法分但在后续面试筛选时会被面试官看到。我个人建议即使时间紧张也要认真写而且一定要体现“权衡取舍”的过程不要只罗列做了什么。3. 四道编程题的思路复盘从抽象题意到边界条件3.1 第一题字符串处理类题目的读题陷阱第一题的大意是给定一个字符串找出满足某种条件的子串数量。这类题的典型陷阱在于“子串”和“子序列”的定义差异。子串要求连续子序列不要求连续一旦读题不仔细整个解题方向就会跑偏。我确认了三遍才动笔。解题思路我采用的是“前缀和加哈希表”的组合用一个哈希表记录前面出现过的前缀状态遍历字符串时实时计算当前状态看看之前有没有出现过相同状态。这样时间复杂度是O(n)空间复杂度也是O(n)对字符串长度10^5以内都没问题。如果你对前缀和哈希表不熟也可以用两层循环暴力枚举所有子串但那样O(n^2)的复杂度大概率过不了大数据量的测试点。边界条件上要特别注意空字符串、单字符字符串、全部字符都相同的情况。我在写完后专门用这几类输入做了一遍自测这是很多考生容易忽略的一步。3.2 第二题排序/双指针的常见变形第二题考的是双指针。题目给定两个有序数组要求合并后找出满足某种条件的数对数量。这类题我在刷LeetCode时练过很多次通常是“一个指针从头走一个指针从尾走根据条件决定移动哪一边”。这里有个很关键的点题目输入的两个数组可能一个有序、一个无序。我一开始默认两个数组都有序差点用一个错误思路闷头写下去。后来重新读了一遍题才发现无序的那个数组需要先排序或者换成哈希表计数来解。这提醒我们大厂笔试的题目很少会原封不动地出LeetCode原题一定会在条件上做改动为了适应这种变化读题时必须逐个条件确认不能凭经验脑补。对于双指针题写法上建议先构造一个直观的暴力解再优化成双指针。因为笔试环境里没有即时调试反馈暴力解能帮你验证对题意的理解然后再用双指针替换掉内层循环就能稳扎稳打地拿到满分。3.3 第三题状态枚举与暴力优化的平衡第三题是一道状态搜索类的题题面给了一个迷宫式的图要求找出从起点到终点的最短路径但路上有若干种钥匙每种钥匙对应一扇门没有钥匙就不能通过对应的门。这类“钥匙和门”的迷宫题标准解法是BFS加状态压缩用整数的二进制位表示当前已经拿到了哪几把钥匙。BFS的队列里每个元素需要带三个信息当前位置的x坐标、y坐标、当前钥匙状态。访问数组也要做成三维的visited[x][y][keyState]否则同一个格子在不同钥匙状态下会被错误地当作已经访问过。这里就是很多人的失分点只用了二维visited导致绕路回到同一个格子时无法再次探索答案自然不对。状态压缩后钥匙的种类一般不超过10种用一个int就能表示所有状态。每次走到钥匙所在地时更新状态走到门前时检查状态里有没有对应位。整个算法的复杂度是O(n * m * 2^k)k是钥匙种数n和m是迷宫尺寸。这套思路在LeetCode是Hard题的标准题解平时练过一次之后考场上再遇到就不至于慌。3.4 第四题图论/动态规划类题目的取舍策略第四题是带约束的动态规划题面非常长大概有五六行描述了一个资源分配的问题。我快速读完一遍意识到这题的完整优化版本我没把握在剩余时间里写对于是做了一个主动取舍先用最朴素的动态规划写出一个正确但可能超时的解法争取拿部分测试用例的分数。具体思路是设一个二维DP数组dp[i][j]表示前i个项目分配j个单位资源能获得的最大收益转移时枚举第i个项目分配k个单位资源取dp[i-1][j-k] 收益[i][k]的最大值。这样写时间复杂度是O(n * m^2)在数据范围小的情况下能通过数据范围大就会超时但至少比交白卷强。这里我要认真说一句笔试不是竞赛目标是拿分。如果一道题按最优解法做需要30分钟但你只剩15分钟果断降级成暴力解法或部分解法。AC全题是满分但把一个用例都跑不出来的解法写到一半才是真正的零分。4. 选择题里的高频考点这些知识点不刷不行4.1 计算机网络与操作系统从这次笔试的实用角度出发计算机网络和操作系统是选择题里占分最高、也最容易拉开差距的两块。计算机网络的重点集中在TCP三次握手四次挥手、TCP与UDP区别、HTTP常见状态码含义、DNS解析过程、HTTP与HTTPS的差异。携程作为在线旅游平台对网络请求的可靠性和安全性要求很高笔试考察这些题属于顺理成章。操作系统那边重点围绕进程与线程的区别、死锁的四个必要条件、生产者消费者问题、虚拟内存与页面置换算法、进程调度算法。尤其注意死锁的“互斥、占有且等待、不可剥夺、循环等待”四个条件选择题很喜欢让你判断某个场景是否可能发生死锁。4.2 数据库与Java基础携程技术栈相关携程的技术栈里Java占比很大所以Java基础在选择题里分量不小。我遇到的题包括HashMap底层实现原理数组加链表加红黑树、ConcurrentHashMap的分段锁机制、String的不可变性、ArrayList与LinkedList的适用场景、JVM内存区域的划分、垃圾回收算法里的可达性分析。这些题说起来都是Java八股文里的基础题但考察方式比较活需要理解原理而不是背结论。数据库部分考了索引的底层数据结构B树、聚簇索引与非聚簇索引的区别、事务的ACID特性、隔离级别与幻读的关系。有一条印象很深的题给了几个SQL查询语句问哪一个无法使用索引。这就是典型的“索引失效”考法选项里涉及了在索引列上进行函数运算、隐式类型转换、LIKE通配符开头等情况。4.3 Linux命令与场景题Linux命令的选择题不多但每一道都切中日常工作。比如查找某个进程的PID、查看端口占用、查看日志文件尾部内容、批量杀进程对应的命令分别是ps、netstat/lsof、tail和pkill。这些命令看着简单但在选项里混入top、vim、grep之后就需要你对每个命令的真实用途有准确判断。场景题我遇到的是一道关于线上服务CPU飙升的排查思路先top看哪个进程占用高再top -Hp看进程内哪个线程高然后jstack导出线程栈搜索对应线程号转换成十六进制后的栈信息。答案选项很接近但如果没在真实环境中操作过很难把顺序记对。5. 我从这次笔试里总结的实战教训5.1 时间分配远比想象中重要总分120分钟的笔试时间我原计划是30分钟搞定选择题剩下90分钟写4道编程题。实际执行下来选择题用了差不多40分钟因为有几道网络和数据库的题需要较长时间排除干扰项。等开始写编程题时时间已经不宽裕了。吸取的教训是选择题遇到卡壳的不要恋战先标记后跳过。一道选择题的分值通常只有几分一道编程题的通过率可能决定你能不能进面试。大厂笔试本身就是有策略的“时间分配游戏”在低分值题目上过度纠结是对高分值题目机会的浪费。5.2 环境准备与本地调试的细节笔试平台基本都是在网页里写代码支持Java、C、Python等主流语言但不同考场的平台版本略有差异。我这次用的是同步笔试环境的在线编辑器没有自动补全也没有本地编译环境提交后是平台跑测试用例。所以你平时刷题如果依赖IDE的自动补全功能考前一定要专门在无自动补全的环境下练几次否则考场上会因为拼写错误和API记不准确浪费不少时间。另外C选手要注意标准库头文件的导入Python选手要注意缩进问题Java选手要注意类名和主方法签名必须完整。这些细节平时自己写代码时几乎不会犯错但一到线上笔试的紧张环境下全都容易出问题。5.3 心态管理写不完很正常我做完三道题时剩余时间大概只有10分钟第四道题只把暴力解法的大体框架写完还没跑测试用例就被系统自动交卷了。事后和同批考试的同学聊天发现大多数人都是类似情况——4道题全部AC的是极少数大部分人能保证前两题全过、第三题过部分测试点就算不错了。想说的是如果你的做题节奏也卡在第三四题之间完全不用恐慌。笔试的分数线是按排名划的不是按卷面分划的。只要前两题稳稳当当第三题拿部分分你依然有很大机会进入下一轮。6. 笔试后的下一步等待结果期间还能做什么6.1 复盘与错题整理交卷后的两天内我凭记忆把选择题里拿不准的题目和四道编程题的题干整理成了一个文档。这样做的好处是双重的一方面面试环节很可能会被问到“笔试里的某道题你是怎么思考的”如果能拿出当时写过的解法会显得非常诚恳另一方面整理的过程本身就是一次知识巩固尤其是那些犹豫过的知识点在复盘之后基本就不会再忘了。我的做法是建一个表格分为“题目回忆”“我的答案”“正确思路”“关键知识点”四列。能回忆起来的尽量回忆回忆不完整的至少写下涉及的知识点。后续如果收到面试通知这份文档就是最好的复习材料。6.2 面试准备的提前量笔试和面试之间的间隔通常不长一般在一周到两周左右。千万不要等收到面试通知再开始准备那样会很仓促。我从笔试结束后第二天开始就在系统性地过Java面经、项目复盘和算法手撕题。携程的面试通常包含一轮技术面加一轮HR面技术面里手撕算法、问项目、问计算机基础的概率都很高。项目复盘是重中之重。面试官很喜欢针对项目里的一个细节连续追问比如你提到用了缓存他就会问缓存和数据库的一致性怎么保证你提到用了消息队列他可能问消息丢失和重复消费怎么处理。这要求你对自己写在简历上的每个技术点都能说出“为什么”和“怎么办”。6.3 其他投递与时间管理春招是场拉锯战不必把所有筹码押在一家公司上。我考完携程笔试后同步投了另外几家互联网公司的技术岗时间上错开安排保证每家笔试前都有两三天集中准备。不同公司的笔试题目风格差异其实挺大有些侧重算法竞赛题有些侧重业务场景和工程项目有些则把计算机基础的比例拉得很高。你面得多了就会发现这些差异也会慢慢找到自己最能发挥的节奏。个人的体会是携程这套第二批笔试的难度在春招技术岗里属于中等偏上但题型很典型认真准备过计算机基础加算法刷题的人不会觉得无从下手。