恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
携程春招笔试复盘:算法、数据库与Java技术栈全解析
首页
资讯中心
/
携程春招笔试复盘:算法、数据库与Java技术栈全解析
携程春招笔试复盘:算法、数据库与Java技术栈全解析
发布时间:2026/9/1 8:55:37
1. 笔试前的整体认知为什么携程的春招笔试值得认真对待每年三月是各大互联网公司春招的高峰期携程作为在线旅游行业的头部玩家技术岗的笔试向来有一定区分度。2023年春招技术通用岗第四批笔试整体风格延续了携程一贯的“基础扎实、场景贴近业务”的特点题目难度中等偏上但每道题背后几乎都能看到真实业务的影子。先说结论这套笔试如果你只是刷题没做过业务思考可能能做对一部分但想拿高分必须在算法之外额外补足基本功。我身边不少同学栽在选择题的基础细节上反而编程题没丢太多分。这个现象挺有意思也是我写这篇复盘的原因之一想帮后面参加笔面试的人把复习重心摆正。这套笔试适合谁参考主要是两类人一类是即将参加携程或其他OTA在线旅游公司技术岗春招、秋招的应届生另一类是准备跳槽但想摸底自己计算机基础水平的在职工程师。笔试内容不偏门覆盖的知识点都在大学课程和常见面试题范围内但考察方式比较灵活会结合携程的业务场景出题比如机票搜索、酒店库存、订单状态流转这类背景。从我自己的感受来说这套笔试最大的价值不是“押题”而是帮你建立一套“基础 算法 工程思维”的复习框架。下面我把整场笔试的内容按模块拆开结合我做题时的思路和考后复盘尽量还原每一类题型的考察重点和应对策略。如果你正准备类似的技术岗笔试这份复盘可以直接当复习地图用。2. 题型结构与时间分配先摸清战场再动手2.1 四批笔试的题型共性携程的春招笔试通常采用牛客网或赛码网平台技术通用岗第四批的题型大概分三块单选题、多选题、编程题。总分值分布大致是选择判断类占40%到50%编程题占50%到60%。考试时间一般在90分钟到120分钟之间具体看批次安排。第四批这批我印象里是90分钟选择题20道左右编程题2道。这个时间配置意味着什么呢平均每道选择题只有两分多钟编程题每道大约有30到40分钟。表面上时间够用但实际做题时会发现选择题里有不少是“看着会、一选错”的细节题编程题第二题往往需要较长时间调试边界条件。所以时间分配是我考完后的最大教训选择题不能恋战不确定的题目先标记跳过把整卷过一遍后如果有剩余时间再回头细想。我当时的策略是先花3分钟扫一遍所有题目大致判断编程题的难度梯度。然后先做选择题控制在40分钟内完成留下50分钟攻编程题。实测这个节奏比较舒服既不会因为选择题耗时太久导致编程题仓促也不会因为编程题卡壳而没时间做后面的选择题。2.2 技术通用岗的通用性体现在哪里“技术通用岗”这个说法容易让人误会觉得是不是不太要求技术深度。实际上它指的是Java、C、Python等各技术栈的同学都可以投递笔试题目统一不区分语言方向。这意味着题目会偏重计算机通用基础比如数据结构、算法、操作系统、网络、数据库而不是某种语言特有的框架细节。但也别高兴太早。所谓“不区分语言方向”不代表不考语言基础。携程的题目里Java相关的题目占比明显偏高这跟携程后端技术栈以Java为主有关系。即使你是Python或C选手也建议在笔试前把Java的基本语法、集合类、并发工具、JVM内存模型这些过一遍否则选择题可能会吃暗亏。从岗位匹配角度看技术通用岗通常对应后端开发、前端开发、测试开发、算法工程等方向的校招池笔试统一筛人后续再根据面试表现定岗。所以笔试阶段不会深挖某个业务方向的技术细节但会通过场景题考察你的逻辑分析和方案设计能力。这提醒我们复习要以“广度优先深度为辅”先把所有基础科目铺开再在薄弱环节集中强化。3. 算法题解析两道编程题的思路与解法复盘3.1 第一道题数组操作与滑动窗口的经典变形第四批笔试的第一道编程题题型是给一个整数数组和一个目标值要求找出满足某种连续子数组条件的最大长度或最小长度。这题本质上考察的是滑动窗口或者前缀和的应用属于LeetCode中档偏下的难度级别。但是题目加了业务包装外层套了个“酒店连续入住天数最优匹配”的背景。这类题的关键是识别出题人的“脱壳”意图。不管题目背景讲得多花哨核心还是在问连续子数组的某种统计性质。我当时是先提取出题目的数学模型再选择对应的算法框架。对连续子数组求和、求最值这类问题如果数组元素都是正数滑动窗口是首选如果存在负数且要求精确和就得用前缀和加哈希表。以“找最长连续子数组使其和恰好等于k”为例代码思路是public int maxSubArrayLen(int[] nums, int k) { MapInteger, Integer map new HashMap(); map.put(0, -1); int prefixSum 0, maxLen 0; for (int i 0; i nums.length; i) { prefixSum nums[i]; if (map.containsKey(prefixSum - k)) { maxLen Math.max(maxLen, i - map.get(prefixSum - k)); } map.putIfAbsent(prefixSum, i); } return maxLen; }这段代码的核心决策点是为什么用前缀和而不是暴力遍历因为暴力遍历的时间复杂度是O(n^2)在笔试数据量下大概率超时。前缀和加哈希表能降到O(n)而且代码量不大。map.putIfAbsent针对的是前缀和可能为0的情况避免覆盖最早出现的索引从而保证“最长”的条件。这个细节比较容易漏我第一次写的时候就没加结果有一组测试数据算错了。如果你用的是Python可以用字典实现类似逻辑。关键是理解思路而不是背代码。这题在LeetCode上有原题变体建议刷题时把“和为k的子数组”“滑动窗口最大值”“最短无序连续子数组”这类题型放在一起做对比能更快建立识别题型的敏感度。3.2 第二道题拓扑排序或动态规划二选一的概率第四批编程题第二题考察的是拓扑排序与动态规划中的一种。我印象里这批考的是带权有向图的最长路径问题要求在有向无环图DAG中找出从起点到终点的最大权值路径。业务背景被包装成“旅行路线规划经过景点可获得积分求最大积分路径”。这题的经典解法有两种一是DFS加记忆化搜索二是拓扑排序配合动态规划。对DAG上的最长路径不能直接用Dijkstra那是求最短路径的但可以用拓扑序保证状态转移的无后效性。我当时选了拓扑排序加DP思路是建立邻接表保存图结构同时记录每个节点的入度。用队列做拓扑排序初始把所有入度为0的节点入队。出队一个节点u遍历所有邻接节点v尝试更新dp[v] max(dp[v], dp[u] weight(u, v))同时v的入度减一如果减到0就入队。最后取所有节点dp值的最大值就是最长路径权值。为什么用拓扑序因为在DAG中拓扑序保证了处理某个节点时所有指向它的前驱节点都已处理完毕dp值已经是最优。这样就不需要递归也不会出现重复计算时间复杂度是O(VE)非常适合笔试场景。这道题常见的坑有三个一是题目里可能有多个起点和多个终点需要遍历所有起点的dp值而不是只盯着一个点二是权值可能是负数dp数组初始值不能设为0要设成负无穷三是图可能是稀疏的用邻接矩阵会浪费空间要养成用邻接表的习惯。我提交后有一组数据超时后来发现是用了邻接矩阵遍历导致的换成邻接表就过了。如果你备考时间有限拓扑排序和动态规划这两大类建议至少各刷20道题特别是课程表、课程表II拓扑排序、最长递增子序列、零钱兑换、打家劫舍动态规划。携程笔试的编程题风格偏向实用场景不会出特别偏门的竞赛题但基础变体和边界条件的考察相当细致。4. 数据库与SQL题目业务场景下的查询优化重点4.1 索引选择与执行计划分析携程笔试的数据库题目不会只考简单的SQL语法更多是让你分析一条查询语句为什么慢给出优化方案。比如给一张订单表有订单号、用户ID、酒店ID、下单时间、支付状态等字段问以下查询应该建什么索引。SELECT * FROM orders WHERE hotel_id 123 AND status 1 AND create_time 2023-03-01 AND create_time 2023-03-31;这种题的关键是理解复合索引的最左前缀原则。最合理的做法是建立 (hotel_id, status, create_time) 的复合索引。查询条件里hotel_id是等值条件status也是等值条件create_time是范围条件把等值条件的字段放在前面范围条件的字段放在最后这样可以最大程度利用索引过滤数据。为什么要这么设计因为MySQL的InnoDB引擎使用B树索引复合索引的排序规则是先按第一个字段排再按第二个字段排以此类推。查询执行时索引能够利用的条件是连续的如果中途出现范围查询后面的字段就无法再用于索引定位了。把范围查询的字段放在最后前面的等值条件可以精确定位到B树中的某个范围减少回表次数。另一类常考的数据库题是执行计划解读。题目会给你一段EXPLAIN的输出让你判断type列的取值是const还是range还是ALL进而判断这条SQL是否走了索引。做这类题的时候我自己的经验是先看possible_keys和key是否一致如果possible_keys有值但key为NULL说明优化器认为索引代价太高可能因为数据量太小或者查询条件区分度不够。知道这一点你就能在笔试时快速判断答案不至于被选项绕晕。4.2 事务隔离级别与乐观锁悲观锁的应用携程的业务场景中订单状态流转、库存扣减、优惠券核销这些操作非常依赖事务的正确性。第四批笔试有一道题是关于事务隔离级别的问在RR可重复读隔离级别下一个事务内两次查询同一条件的结果一定一致吗这道题有一定迷惑性因为InnoDB的RR级别通过MVCC保证了快照读的一致性但如果第二次查询变成了当前读比如加了FOR UPDATE看到的结果可能会被其他已提交事务影响。这个知识点很容易考也很容易错。MVCC解决的是“快照读”的一致性问题而锁机制解决的是“当前读”的并发控制问题。两者在RR级别下配合使用才不会出现幻读。笔试中如果遇到类似的辨析题建议抓住一个核心有没有加锁、是不是当前读这两个判断点能帮你排除掉大部分错误选项。乐观锁和悲观锁的应用场景题也出现过。比如秒杀场景下库存扣减问应该用哪种锁。悲观锁用SELECT ... FOR UPDATE做行锁代码简单但并发性能较差乐观锁用版本号字段并在UPDATE语句中带上版本条件适合读多写少的场景。携程这类OTA公司搜索和预订都是高并发场景笔试出这种题很合理。答题时要注意区分场景特点写冲突激烈选悲观锁读多写少选乐观锁。5. 操作系统与计算机网络考点原理与实战的地基5.1 进程线程与并发问题从题目到实际业务操作系统题目在第四批笔试中占比不大但每道题都是经典中的经典。进程和线程的区别、死锁产生的四个必要条件、进程间通信方式、线程池参数设置这些属于必考范围。就我的观察携程的笔试卷子里操作系统题更喜欢从“线上问题排查”的角度切入。比如题目描述一个服务出现CPU使用率过高的情况问应该用哪个命令定位问题线程。这类题对没接触过线上的同学来说可能有点慌其实答案很固定先用top -Hp查看进程内线程的CPU占用再用jstack导出线程快照找RUNNABLE状态的线程堆栈定位到具体代码行。如果题目里出现了“在Java服务中”基本就是在考jstack如果出现“在Linux系统中”基本是在考top、ps、vmstat这些命令的用法。把这两套命令背熟配合理解线程状态的含义选择题基本不会翻车。死锁的四个必要条件互斥、持有并等待、不可剥夺、循环等待也几乎是送分题。但要注意题目可能会反过来问“破坏哪个条件可以预防死锁”比如通过一次性申请所有资源破坏“持有并等待”通过设置锁超时破坏“不可剥夺”通过锁顺序约定破坏“循环等待”。如果对四个条件很熟逆向题目反而比正向题目好做。线程池参数的设定是操作系统题与Java并发工具的交叉考点。笔试里给出一个CPU密集型任务问线程池核心线程数设为多少合适。常规经验值是CPU核心数1如果是IO密集型任务可以设到2倍CPU核心数或更高。我当时复习时直接记结论但后来觉得这种题还是理解一下好CPU密集型任务线程多了反而因为上下文切换而变慢IO密集型任务的线程大部分时间在等待IO可以多创建一些线程提高吞吐。5.2 TCP三次握手四次挥手与HTTP的连接管理网络部分的考点集中在TCP协议。三次握手为什么需要三次、第三次握手失败了怎么办、TIME_WAIT状态为什么存在、出现在哪一端这四连问几乎是携程笔试网络题的标配。我记得第四批有一道题是问大量TIME_WAIT连接出现在服务端还是客户端答案是主动关闭连接的一方也就是客户端。如果服务端大量出现TIME_WAIT通常是因为服务端主动断开了连接比如设置了过短的keep-alive时间。HTTP方面的题会和携程业务结合得更紧密。携程App和服务端的通信走HTTPS笔试题可能会考察HTTPS的握手过程以及对称加密、非对称加密在其中的角色。核心思路要清楚非对称加密用来协商对称密钥对称加密用来加密实际传输内容。这跟“先解决密钥分发问题再高效传输数据”的思路是一致的。如果选择题遇到TLS握手步骤排序记住ClientHello、ServerHello、证书交换、密钥交换、Finished这个顺序就够了。还有一个容易考的点是HTTP状态码。携程的业务网关可能返回各种状态码比如301重定向、401未认证、403禁止访问、429请求过多、500服务器内部错误、502网关错误、503服务不可用。笔试题可能会给你一个客户端的报错反馈让你判断是服务端问题还是客户端问题。比如用户反馈页面打不开请求返回503原因可能是服务端过载或正在维护升级而不是用户网络不好或客户端代码写错了。HTTP/1.1的keep-alive、HTTP/2的多路复用、HTTP/3的QUIC协议这几个概念在近两年笔试中出现频率逐年上升。答题要点就是记住各自的优势keep-alive减少连接建立开销多路复用解决队头阻塞允许一个连接内并发多个请求QUIC基于UDP实现解决TCP层面的队头阻塞同时减少握手延迟。能把这几点说清楚网络部分基本够用。6. Java基础与框架考点通用岗绕不开的语言关6.1 集合类、HashMap原理与并发安全作为Java技术栈的大本营携程笔试的Java题目不会太少。HashMap的实现原理几乎年年考底层数据结构是数组加链表加红黑树put流程是计算hash、定位桶、冲突时链表尾插、链表长度超过阈值8时转红黑树、负载因子默认0.75、扩容时容量翻倍。这一串逻辑要能顺畅说出来并且知道“为什么链表转红黑树选择长度8”——这是泊松分布的统计学结论链表长度达到8的概率已经极低。与HashMap紧密相关的另一个考点是ConcurrentHashMap的并发控制。JDK 7的实现是分段锁JDK 8改为CAS加synchronized锁住桶头节点。笔试题如果考到“为什么JDK 8比JDK 7并发性好”答案就在于锁粒度从多个分段细化到了单个桶。如果你用Java面试的话这个点需要主动展开说能体现你读过源码。ArrayList和LinkedList的区别也属于基础中的基础但携程的笔试很少直接考“ArrayList底层是数组”这种送分题而是会考“在指定位置插入元素的时间复杂度”以及“为什么for循环遍历LinkedList很慢”。后者是因为LinkedList的get(index)是O(n)操作循环中反复调用自然慢。知道这个如果笔试代码题里涉及频繁随机访问应该选ArrayList而不是LinkedList。6.2 JVM内存模型与垃圾回收机制考察你是否懂线上调优JVM相关的题目主要考察内存区域划分和垃圾回收算法。堆内存被划分为新生代和老年代新生代里又分为Eden区和两个Survivor区占比一般是8:1:1。新对象优先分配在Eden区Minor GC后存活对象移到Survivor区年龄达到阈值默认15升入老年代。这些数据要记清楚选择题很可能会直接考默认比例和年龄阈值。垃圾回收算法包括复制算法、标记清除和标记整理。复制算法适合新生代因为大部分对象都会死去复制成本低标记清除会产生内存碎片标记整理适合老年代没有碎片但移动对象有成本。如果选择题出了一个“CMS收集器使用哪种算法”答案是在老年代标记清除所以CMS会产生碎片最后可能会退化为Serial Old做Full GC。这个话题可以延伸到G1和ZGC的适用场景但通用岗笔试一般不会考太深。携程的业务系统很多是长连接、高并发的分布式服务JVM调优经验是加分项。笔试题目可能会问“一个服务频繁Full GC可能是什么原因”选项里有内存泄漏、大对象直接进入老年代、MetaSpace不足、堆大小设置不合理。这时候要能想到从GC日志入手分析而不是死背答案。你在复习的时候建议实际动手触发一次内存溢出用jstat和jmap看看GC频率和堆占用有了实操经验选择题里的选项就变得很直观不再是抽象概念。6.3 Spring框架的核心机制IoC、AOP与事务传播行为携程的后端服务大量使用Spring框架笔试中Spring相关题目主要集中在IoC、AOP和事务管理三个方向上。IoC的考点是Bean的生命周期和依赖注入方式AOP的考点是切点表达式和通知类型事务管理的考点是事务传播行为。比较常见的一种题是把三者结合起来考比如“一个用Transactional标注的方法内部使用了this调用另一个方法事务还会生效吗”。答案是事务失效因为Spring的声明式事务基于AOP代理this调用的是当前对象的方法不会经过代理对象。这是Spring框架的经典坑笔试考它很能看出候选人是否真正理解代理机制。解决方法是注入自身代理或者把方法拆到另一个Bean中去。这种题说实话有点“偏门”但确实被很多公司反复拿来当考题建议重点掌握。Spring Boot自动配置的原理也是常考内容。核心是EnableAutoConfiguration注解配合spring.factories或自动配置文件加载META-INF下的自动配置类然后根据条件注解ConditionalOnClass、ConditionalOnProperty决定是否装配。笔试如果考到关键词就是“条件装配”。把这三个注解的理解说清楚就能判断出大多数选项的正误。关于Spring的复习我给一个建议不用死记每个注解的源码但要能画出Bean从扫描、实例化、属性填充、初始化到销毁的完整流程知道AOP代理是在BeanPostProcessor阶段织入的事务管理器是基于AOP拦截器实现的。把这个流程在心里走一遍笔试选择题会变得非常轻松。7. 真题复盘几个让我印象深刻的题目与解题思路7.1 场景题订单重复支付如何保证幂等这类题目没有标准答案但考察的是工程师最基本的系统设计素养。笔试中出现的场景可能是用户在前端点击了两次支付按钮后端收到了两个支付请求如何保证只扣一次款并给出代码层面的设计思路。我的答案是两层防护。前端层按钮点击后立刻置灰防止用户重复点击。后端层在接口入口做幂等校验根据订单号生成幂等键使用Redis的SETNX命令实现分布式锁只有第一次请求能拿到锁并继续执行后续的逻辑后续请求直接返回“已处理”状态。同时在数据库层面给订单状态做一个唯一约束或者状态机校验比如只有当前状态是“待支付”才能更新为“已支付”否则拒绝更新。笔试题目后还可能附带一个追问如果分布式锁超时了怎么办要回答给锁设置足够长的过期时间并在业务代码中使用Redis客户端提供的看门狗机制自动续期。Redis分布式锁的这些细节是我在项目里实际写过后才真正理解的。如果只在书上看过概念这种追问往往答不到点子上。7.2 设计题如何设计一个高可用的优惠券发放系统优惠券发放是携程这类电商平台的核心场景笔试如果出系统设计题大概率会是优惠券、库存、订单这类贴近业务的主题。设计题不会让你写完整代码而是让你画架构图、说明关键流程、分析瓶颈和优化方案。我的答题思路是业务链路拆解商家创建活动、用户领取、使用核销、过期回退。每一步都有自己的存储和接口。高并发读的优化券模板信息是热点数据用Redis缓存用户领券前的校验是否已领过、活动是否开始也走缓存。高并发写的优化领券扣减库存用Redis的DECR命令保证原子性库存扣成功后再异步写库。如果直接用数据库UPDATE做扣减在高并发下会产生行锁竞争性能会很差。数据最终一致性Redis扣减成功但异步写库失败的场景需要通过消息队列重试或者对账程序定期扫描补偿。这个方案设计完基本能覆盖笔试中大部分设计题的问题点。如果把核心思路讲透面试官反而会想跟你深入聊一聊你的取舍思路而不会停留在表面问题上。7.3 快排与归并排序的选择策略携程的笔试里还有一个常见风格是给一个具体场景让你选择合适的排序算法。比如“有一份10亿条日志记录需要按时间戳排序输出内存只能容纳其中的百分之一选择哪种排序算法更合适”。答案是外部排序或基于归并排序的变种。10亿条数据超出内存容量不能直接用快排。正确做法是外部排序把大规模数据切分成多个能放入内存的块分别快排后写入磁盘再把每个有序块做多路归并。这题给了我一个很重要的启发技术选型要结合数据规模、内存容量等现实约束不要只在小规模数据上思考问题。这让我联想到实际工作中处理日志时往往需要用MapReduce或分片的方式而不是一个进程硬扛全部数据。笔试虽然不问分布式框架但能从排序这个点引申出分治思路就已经能考察出候选人的工程素养了。8. 备考策略与核心资源清单时间有限的情况下怎么高效复习8.1 算法题复习优先级不是刷得越多越好如果你的笔试时间只剩两周我建议把算法复习集中在高频考点上。携程这类公司笔试编程题大概率会覆盖以下三类数组、字符串相关的双指针和滑动窗口链表和二叉树的基础操作动态规划和贪心尤其是背包类、路径类、区间类问题。推荐按下面顺序刷题数组与字符串两数之和、三数之和、无重复字符的最长子串、最长回文子串、合并区间。链表与二叉树反转链表、环形链表、二叉树前中后序遍历、层序遍历、最近公共祖先。动态规划爬楼梯、打家劫舍、零钱兑换、最长递增子序列、编辑距离。排序与搜索快排、归并排序、二分查找及其变体。每道题建议手动写一遍代码不要只看题解。笔试现场没有代码提示也没有自动补全你平时敲代码的速度和准确度直接决定你能不能在小Bug上用最少的时间完成调试。为了节省时间可以输入输出部分提前准备一个模板笔试开始时先快速敲好然后用它来做后面的题。8.2 理论知识复习方法论以“能解释通”为目标理论部分的复习我的建议是不要只背结论要能“解释通”。HashMap为什么用红黑树而不用二叉搜索树TCP握手为什么三次而不是两次Redis为什么快Spring事务为什么有时候失效。这些问题如果能用自己的话讲清楚比做100道选择题有用得多。备考期间可以做一个“伪面试官”练习每天随机抽一个知识点用三分钟时间讲给朋友或自己听假想对方是面试官。这个练习一开始会磕磕绊绊但坚持一周后你会发现对知识点的理解深度明显提升很多原来模棱两可的地方需要你讲出来才会发现漏洞。知识框架建议按三大板块推进Java基础集合、并发、JVM、Spring是主场计算机网络和操作系统是基础场数据库索引、事务、SQL优化和Redis是加分场。每天至少完整吃透两个小专题配上10道选择题练习两周时间完全来得及。8.3 时间安排与模拟笔试的节奏把控笔试前的模拟练习非常关键。建议至少做两次完整模拟用牛客网的历年真题或者自己找一组难度相似的题目严格卡90分钟。模拟的目的是练节奏不是练正确率。我第一次模拟的时候因为在一道选择题上纠结太久导致编程题写得非常仓促模拟成绩惨不忍睹。第二次调整策略先快速过所有选择题把难题标记出来编程题优先写第一题第二题如果思路不顺先写暴力解拿部分分。这个策略在真实笔试中帮助很大。真实笔试时还要注意平台环境。比如牛客的输入输出是标准输入输出如果你平时练习的是LeetCode的函数填空方式笔试时会很不习惯。程序员招聘笔试通常不提供代码自动补全和编译错误提示所以要提前熟悉练习时尽量用本地IDE写完再复制或者直接在牛客网、赛码网上练题。8.4 避坑清单过来人眼中的高频失分点基于我在模拟和真实笔试中的表现整理几个容易失分的地方希望你提前避开选择题不看完整题干就选答案。有些题会故意加“不正确的是”“错误的是”这类词看第一眼容易当成正向选择。做题时把关键词圈出来再选。编程题只过了示例测试就提交。边界条件空数组、单元素数组、数值溢出、负数很可能直接导致超时或错误。多花两分钟设计几组边界用例比反复提交试错更划算。字符串操作在Java里要知道StringBuilder比加号拼接高效。笔试时虽然不会因为性能扣分但循环拼接会显得代码质量不高场景题也许会被面试官追问如何优化。数据库优化题忘了分析回表的代价。建索引不能只看查询字段还要考虑覆盖索引减少回表有时候答案里“用覆盖索引”就是那个最优解。系统设计题只写了方案没写为什么。笔试的系统设计题有字数要求的话每个关键决策都要附上理由这往往是评分点。9. 常见问题与答疑笔试前后大家最关心的几件事9.1 笔试成绩多久能出怎么看自己过没过携程的流程一般是笔试结束后一到两周内HR会通过邮件或短信通知进入面试的候选人。没有明确公布分数线也没有公开的成绩排名。如果你在两周后没有收到任何消息大概率是挂了但有时候备选池也会在后续批次继续捞人。建议笔试结束后把心思放在后续准备上不要天天盯着邮箱焦虑。9.2 笔试做对多少题才能进面试有没有标准线这个问题没有标准答案因为招聘是滚动进行的每一批的通过比例会动态调整。但以我对这几年校招笔试的观察如果编程题AC一道、选择题正确率在70%以上进入面试的概率较高。如果两道编程题都只过了一半测试用例选择题也不是很稳那可能就比较危险。不过携程有时候会优先看简历匹配度和学校背景笔试分数不是唯一指标。9.3 编程题只能通过一部分测试用例还有机会吗有机会但不稳定。部分测试用例通过说明你的思路方向大概率是对的只是有些边界或性能问题没处理好。笔试评分通常会考虑部分得分所以千万不要因为一道题没AC就直接放弃后面的题。而且携程笔试结束后有面试面试中还有一个手写代码环节如果你能在那时展现出清晰的思路和扎实的代码功底之前笔试的失利是可以扳回来的。9.4 笔试过了面试前需要针对性准备什么通过了笔试说明你的基础能力过关了接下来面试考察的会更偏向项目经验和综合能力。建议把简历上写的每个项目都梳理成“背景、难点、方案、效果”四段式描述尤其是线上问题排查和性能优化相关的内容能解决“为什么做这个方案、有没有更好的方案”这类追问。携程的面试风格比较务实喜欢聊业务场景如果能提前了解携程App的机票、酒店、度假等业务模块并能说出一些自己的思考这会成为明显的加分项。10. 写在最后这套笔试带给我的三个真实体会笔试结束后复盘时我最大的感受是这套题并不是想为难你而是在筛除“基础不牢靠的人”。它的难度分布其实很均匀选择题部分如果复习充分完全可以做到快速作答编程题部分如果刷题数量足够看到题干就能联想到对应的题型。很多失分不是因为题难而是因为对某些基础概念的理解只停留在表面遇到新场景就判断不了。第二个体会是笔试的心态和节奏太重要了。我模拟考时经常在一道选择题上较劲导致后面时间不够真实笔试时改成了“先抢分、后攻坚”的策略整个人从容了许多。这个策略虽然听起来很简单但真正执行起来需要提前在模拟中适应不然现场还是会慌。最后一点我觉得是最核心的“做对题”只是第一步“想明白为什么做对”才是笔试真正要考察的东西。如果一道编程题你是靠背模板写出来的面试官朝深处问两句就会露馅。反过来如果你能讲清楚每一种解法背后的时间和空间复杂度、为什么选这个数据结构和算法、在真实业务场景里会遇到什么问题这比多刷一百道题更有说服力。如果你正在准备携程或同类公司的春招笔试希望这份复盘能帮你省掉一些弯路。基础部分踏踏实实过一轮算法部分保持手感心态放平稳这套笔试并没有想象中那么可怕。