
2017年秋天的携程校招笔试很多人是捏着汗做完的。印象最深的是题目量大、覆盖广客观题部分几乎把大学四年能考的知识点都塞进了一张卷子里。作为当年杀过独木桥的过来人我一直想把这套客观题好好复盘一遍——它不只是你能做对几道题的测验更像一张浓缩的能力体检表测的是数据结构、数据库、网络、语言基础、逻辑思维甚至还有对旅游电商业务的理解。这篇文章就是围绕当年开发工程师岗位的客观题方向做的系统汇总把我记忆里的考点、题型和出题思路拆开讲清楚。无论你正在准备携程的笔试还是想通过一套经典题目检验自己的计算机基础这篇内容都值得花二十分钟认真看。1. 一场90分钟的笔试携程到底在筛什么1.1 笔试在整条校招链路里的位置先放下具体题目想明白笔试这关为什么存在。校招流程通常是网申投递、在线笔试、技术面试、HR面。笔试是网申之后的第一道硬过滤它的目标不是招到完美候选人而是用最低成本滤掉基础不过关的人。所以客观题普遍有两个特点题量大、时间紧。携程的这套题也不例外90分钟左右的客观题动辄四五十道平均每题只有一两分钟。这个时间设计本身就传递了一个信号大部分题不是让你现场深思熟虑的而是考你在压力下的本能反应。一道排序算法的时间复杂度、一段SQL语句的结果、一个HTTP状态码的含义这些内容如果基础扎实看到题就能出答案如果含糊给十分钟也未必能推对。所以备战笔试光靠临时抱佛脚背答案效果很差真正要练的是把基础知识点内化成条件反射。1.2 携程出题风格的三个底色业务、数据、工程很多人以为互联网公司校招笔试都差不多其实细看各有侧重。携程做的是在线旅游核心场景是机票、酒店、度假产品的搜索、预订、支付、售后。这些业务背后有大量典型技术问题高并发下的库存扣减、分布式系统的数据一致性、海量日志的分析处理、推荐系统的排序逻辑。因此它的客观题里业务情境题的比例明显高于纯做工具类产品的公司。我复盘下来携程的题目有三个明显底色。第一是业务感强题目经常把算法题包装成预订场景来出比如高并发下防止机票超卖、多条件筛选酒店排序第二是数据意识重SQL、索引、事务这类题目占比不低毕竟旅游平台每天处理的是千万级订单数据第三是工程基础扎实Java集合、并发、JVM、网络协议这些后端基本功反复出现。这三个底色不是巧合而是对应着开发工程师入职后马上要面临的实际工作——不是写算法题是写能扛住流量的系统。1.3 看汇总的正确姿势题型背后是能力模型网上流传的携程2017校招开发工程师客观题汇总往往是一堆题目和答案的罗列。如果只是对着答案背收获非常有限。我的建议是反过来看把每道题还原成它背后的能力模型。比如一道以下哪个集合类线程安全的题表面考Java集合实际考的是并发编程意识一道TCP三次握手为什么不是两次的题表面考网络协议实际考的是对可靠传输本质的理解一道SQL查询要走哪个索引的题表面考索引语法实际考的是对数据存储结构的理解。当你把题目按能力维度重新归类时才会发现携程在试卷里藏了一套完整的工程能力评估模型基础扎实度、逻辑严密性、数据分析能力、业务理解力和临场心态。后面所有的复盘我都会按这个思路来讲。2. 客观题六大门类全景知识点覆盖面与分值权重把当年流传出来的各类汇总放在一起比较客观题的知识点分布大体稳定。我按出现频率和印象中的分值权重整理成了一张表大家可以先有个整体概念考察板块大致权重典型题型准备难度数据结构与算法25%~30%时间复杂度、栈队列、二叉树遍历、动态规划高数据库15%~20%SQL语句结果、索引选择、事务隔离级别中操作系统与网络15%进程线程、内存管理、TCP/IP、HTTP协议中编程语言基础15%~20%Java集合/PHP语法/前端三件套中逻辑推理与智力题10%~15%排列组合、概率计算、寻找规律中低业务情境题10%抢票并发、库存扣减、推荐排序中高2.1 数据结构与算法占分最稳的一块数据结构与算法是绝对的C位原因很简单它是计算机专业能力的通用语言不管后续做后端、前端还是算法岗都绕不开。当年题目里出现频率最高的知识点包括各种排序算法的时间复杂度和稳定性、链表和数组的插入删除对比、栈和队列的应用场景、二叉树的先序中序后序遍历规则、HashMap的实现原理、图的遍历方式、基本的动态规划问题。值得注意的一个细节是客观题里的算法题基本不要求写完整代码而是考结论和边界。例如给你一段代码问时间复杂度和空间复杂度分别是多少给定一个递归函数判断会栈溢出吗哈希冲突的几种解决方法里哪种是链表法。这种考法比写代码更考验精确记忆——你不仅要懂大概思路还要知道每一个结论的边界条件。我在复习时最大的体会是每个算法不能只看思想要能随口说出它的最佳、平均、最差时间复杂度并且知道为什么。2.2 数据库从索引到事务都有题数据库这块的分值在携程笔试里一直不低。作为一个订单交易平台数据就是生命线所以题目会直接从实战出发。最常考的几类索引的基本原理和适用场景、BTree和哈希索引的区别、一条SQL的查询执行顺序、事务的ACID特性、四种隔离级别各自解决了什么问题、乐观锁和悲观锁的概念、常见的SQL优化手段。这里面有个容易忽略但又特别爱考的点索引失效的条件。比如在索引列上使用函数、隐式类型转换、LIKE模糊匹配前置通配符这些情况都会导致索引无法使用。2017年那会儿MySQL还是5.6、5.7的时代不少题目会直接给你一个表结构加一条SQL问这条SQL是否能用上索引。复习数据库时我不建议只刷题最好把InnoDB索引的底层结构过一遍知道BTree长什么样为什么用BTree而不是红黑树或哈希表很多选择题的答案就自然出来了。2.3 操作系统与网络必考但容易被忽略操作系统和网络在整个笔试里占比不是最高但属于不准备肯定吃亏的板块。原因在于这些知识点在学校课程里学过但如果不复习很容易混淆。操作系统常考进程与线程的区别、进程间通信方式、死锁产生的四个必要条件、虚拟内存的作用、页面置换算法。网络部分常考TCP与UDP的区别、TCP三次握手与四次挥手、HTTP状态码、HTTPS的加密过程、Cookie与Session的区别。这里想单独聊聊HTTP状态码。携程的线上系统每天都在和大量前端、客户端交互开发工程师必须能读懂状态码语义。考题通常不会直接问你404什么意思而是给一个互动场景。比如用户访问一个不存在的页面返回什么服务器出错返回什么重定向是301还是302认证失败是401还是403。看似简单但每年都有不少人挂在302和307的区别上。提前把1xx到5xx每个常见的状态码都理一遍属于性价比极高的投入。2.4 语言基础方向不同考察深浅不同携程开发工程师的岗位分为Java方向、C方向、PHP方向、前端方向等不同方向的客观题里语言部分差异很大。比如Java方向考察集合框架、异常处理、多线程、JVM内存模型这些PHP方向会考察弱类型比较、数组函数、Session机制前端方向则是HTML、CSS、JavaScript原型链和闭包。以Java方向举例当年的高频点包括ArrayList和LinkedList的区别、HashMap和Hashtable的区别、ConcurrentHashMap的实现机制、synchronized和ReentrantLock的区别、JVM堆和栈的存储内容、垃圾回收的基本算法。这些题其实不太需要死记硬背理解了底层原理无论怎么换马甲都能认出来。但反过来如果只背面试题答案而不看源码题目稍微变个角度就会露馅。比如HashMap在JDK1.8前后插入元素的逻辑变化这就是常考而很多人说不清的细节。2.5 逻辑推理与智力题拼的是熟练度和心态逻辑推理和智力题几乎每套题里都有虽然分值占比不算高但它的作用往往是拉差距。这类题常见形式是给出一串数字找规律、几个人排队说真话假话、分油分水问题、概率与期望计算。参加过笔试就会有这种感觉算法题大家还能蒙一蒙逻辑题如果思路没打开几道题卡住就会消耗大量时间。我的经验是逻辑题是可以通过短期训练快速提分的。比如找规律题优先看差、看比、看奇偶位置拆分真假话问题先找互为矛盾的两个条件概率题先确定事件全集再用排列组合公式不要凭感觉写。2017年的题目里有一道三只骰子掷出特定点数和的概率看着复杂拆成经典分布其实两分钟能算完。这类题很考验临场心态一旦慌了本来会做的也会写错。2.6 业务情境题携程特色千万别空着业务情境题是这套卷子里最有辨识度的部分。它往往不会直接问请你设计一个秒杀系统而是以客观题的形式问一些具体细节。例如一个用户同时发起两个订票请求数据库层面如何防止重复下单机票搜索页面要按价格排序但价格经常变动缓存策略应该怎么设计用户浏览了酒店详情页但最终没有下单推荐系统应该怎么做这种题没有标准答案但考察的是工程思维。携程明显不是在期待你给出最优架构而是看你能不能把问题拆成业务流程分几步、每一步有什么数据、数据存在哪里、并发怎么处理。我记得有一道关于库存预扣与释放的题目选项里涉及数据库事务、Redis分布式锁、消息队列补偿如果对业务没有基本概念很容易选得云里雾里。应对这类题最好的方法是提前了解电商系统的常见方案比如库存超卖的防止、下单流程的状态机、缓存与数据库的一致性。3. 从审题到落笔高频题型的推演过程与失分点3.1 一道字符串处理题复杂度不是唯一的评分标准先看一类典型的算法选择题给一段字符串处理的代码问时间复杂度。很多人一看是双重循环就写O(n^2)但如果外层循环是每次n减半内层循环做字符串拼接呢这里最容易踩的坑是忽略了字符串拼接本身的开销。举个例子伪代码如下String s ; for (int i 0; i n; i * 2) { for (int j 0; j i; j) { s a; } }第一眼看上去外层循环次数是log n内层循环总次数是124...n约等于2n所以时间复杂度是O(n)。但如果把s a的底层实现考虑进来Java的String是不可变对象每次拼接都会创建新字符串并复制之前的内容那真实的时间复杂度就变成O(n^2)。这就是典型的看起来会做实际处处是坑的题。当年很多人在这种题上失分不是因为不懂时间复杂度而是没有建立起语言底层实现的意识。做这类题我建议先确认数据结构、再确认循环次数、最后确认每一步操作的开销三步都走完再写答案。3.2 一条SQL查询先写条件还是先选表数据库题里最常见的套路是给你一张表和一条SQL然后问你返回什么结果或者查询计划会怎么走。比如SELECT department_id, COUNT(*) FROM employees WHERE salary 5000 GROUP BY department_id HAVING COUNT(*) 3 ORDER BY department_id;很多同学对SELECT各关键字的执行顺序记忆混乱考试时会犹豫要不要算HAVING之前的COUNT。正确的执行顺序是FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY。也就是说WHERE先过滤掉薪资不达标的人然后按部门分组再用HAVING过滤组数量大于3的部门最后排序。如果没搞清楚这个顺序很容易把COUNT的结果算错。这类题的失分点还有两个一是忘记NULL值的处理方式COUNT(列名)不会计入NULLCOUNT(*)会二是GROUP BY之后SELECT里能出现的列有限制除了聚合函数外的列必须出现在GROUP BY中。这些语法细节在写代码时可能不会每次注意但在笔试题里就是送命题。3.3 Java内存这道题背下来和真理解是两回事JVM内存模型也是携程笔试的常客。经典题目是以下哪些区域是线程私有的哪些是共享的。答案模型是程序计数器、虚拟机栈、本地方法栈是线程私有堆、方法区元空间是线程共享。但这道题真正的坑在后面的延伸比如问一个局部变量存到哪里一个静态变量存在哪里new出来的数组存在哪里。不少人背了区域名称但对具体对象存储的理解是模糊的。我的建议是用一段代码把每个变量对应到内存区域想一遍public class Order { private static int count 0; // 类变量 - 方法区/元空间 private int price; // 实例变量 - 堆 public void calc(int discount) { // 局部变量 - 虚拟机栈 int result price * discount; Order o new Order(); // 引用在栈对象在堆 } }理解了栈管运行堆管存储这个核心加上哪个线程能访问什么由作用域决定这条逻辑JVM内存相关的题基本就能推理出来不需要硬背。我当年踩过的坑是混淆了对象在堆上分配和局部变量在栈上分配这两件事实际上局部变量如果指向一个对象引用在栈、对象依然在堆。这种细节一定要在复习时自己画一遍。3.4 一道概率题表格化拆解避免漏情况逻辑智力题里概率计算是重灾区。看一道常见题一个袋子里有红球3个蓝球2个连续取两次且不放回求两次都是红球的概率。这道题简单直接用组合数算C(3,2)/C(5,2)3/10但如果题目改成第一次取到红球且第二次取到蓝球或至少一次取到红球很多人就乱了。我的建议是遇到条件概率先把所有可能的分支情况列成表格把概率相乘后汇总而不是在脑子里空转。这种结构化拆解法不仅适用于概率题也适用于真假话推理和排列组合。很多逻辑题失分并不是因为不会算而是漏了一种条件或者把或和且搞混。另一个常见问题是计算时忘记不放回导致的样本空间变化。笔试题时间紧越是这种基础题越要冷静宁可多花30秒把表格列出来也不要凭直觉选答案。3.5 抢票系统超卖问题事务与锁的经典组合业务情境题里最有代表性的应该是超卖问题。题目会这样出某航班只剩最后1张票两个用户同时下单系统判断余票大于0后执行扣减结果两人都下单成功问该方案的问题是什么如何解决。这是一个典型的检查-再更新竞态条件问题。正确答案通常涉及对库存行加锁SELECT ... FOR UPDATE、使用乐观锁版本号或CAS、或者把扣减操作写成原子SQL更新例如UPDATE stock SET count count - 1 WHERE flight_id ? AND count 0。不正确的方案包括不加任何锁、只在应用层用synchronized多实例部署时不生效、先查后改而不加限制条件。这道题之所以高频是因为它正好把数据库事务、并发控制、业务理解三个维度串在了一起。做这种题时先判断业务的关键资源是什么再说并发时会发生什么异常最后给出对应的技术手段。这个思考路径也是面试官在后续技术面里想看到的。4. 2017年的题放到AI应用开发工程师流行的今天还够用吗4.1 基础为王那批题目里的常青树时间过去这么多年再看2017年的客观题有一个直观感受大部分基础考点没有过时。数据结构与算法、操作系统、网络、数据库这些计算机核心知识依然是今天所有开发岗位的底座。不管是做传统Web开发还是转向AI应用开发工程师你依然需要知道HashMap的底层结构、TCP的三次握手、SQL的索引机制。为什么这些基础不会过时因为技术框架每年都在变但底层的计算机原理几十年没有根本性变化。2017年的笔试题考二叉树遍历现在的笔试题也考2017年考HTTP与HTTPS现在的新题只不过是把HTTP/2、HTTP/3加进来。所以如果现在还有人拿着2017年的携程客观题来复习我不会觉得可笑反而会觉得这人抓住了校招笔试的本质考察的是恒定的基础能力而不是浮在表面上的最新框架。4.2 题型演化的三个方向场景复杂化、工程化、AI化当然如果完全照搬2017年的题来准备现在的笔试肯定不够。从我看到的近年题目趋势客观题有三个明显演化方向。第一个是业务场景变得更复杂。2017年问的是库存超卖怎么做现在可能把上下文拉长到用户在下单前有10秒犹豫期过期释放库存同时又发生了支付回调请判断状态流转是否合理。考点还是并发和状态机但信息量更大也更贴近真实系统的复杂度。第二个是工程化内容占比上升。分布式缓存、消息队列、微服务治理这些词开始出现在客观题里虽然不一定考得很深但要求候选人知道它们解决什么问题、适用什么场景。这背后是行业对校招生的期望提高了不再是会写代码就行而是对分布式系统有基本概念。第三个是AI化这直接对应了最近热起来的AI应用开发工程师、大模型全栈工程师这类新兴岗位。现在的笔试会考察机器学习的基本概念、Prompt的关键策略、RAG检索增强生成的流程甚至是大模型API调用的成本估算。2017年大家还在聊大数据和机器学习平台现在的问题已经从算法原理转向如何利用大模型解决实际业务问题。这种变化反映的是整个行业技术栈从造轮子走向调模型、接应用。4.3 新岗位出现后客观题会怎么变那到底会不会有一天客观题全变成大模型题我认为不会。一个很现实的原因是AI应用开发工程师的核心竞争力依然在于工程能力而不只是会调用API。你调大模型的时候依然要处理并发、优化响应时间、设计数据持久化方案、保证系统安全这些全都是传统计算机基础的延伸。客观题的变化更可能是一个叠加过程在原有数据结构、数据库、网络基础上新增AI相关考点。比如给一个业务场景问你适合用大模型解决还是传统规则引擎或者给你一段RAG代码问检索过程中哪一步造成了高延迟。这类题不会淘汰基础而是让基础好的同学更容易胜出。框架会变题型会变但能用扎实的计算机功底解决复杂业务问题这个考察内核从2017年到今天一直没变。5. 针对这套笔试题的备战节奏三轮复习与临场分配5.1 三轮复习法按板块推进还是按难度推进如果以携程这套客观题为蓝本准备校招我建议按三轮来推进而不是拿到题库就开始无脑刷。第一轮是查漏时间大概一周。把六个板块的知识点清单拉出来每个板块用一天做20道自测题标记出哪些内容是完全不会、哪些是模糊、哪些是已经熟练的。这一轮的目标不是学会而是建立知道哪些地方有待补强的认知地图。第二轮是攻坚时间两周到一个月。针对弱项集中复习每复习完一个知识点就做对应的题目巩固。比如数据结构里二叉树遍历不熟就先看前中后序的推导规律再做十道相关题目直到形成条件反射。这一轮要从看懂答案升级到能自己讲清楚为什么。第三轮是模考时间在笔试前一周。严格按考试时长做整套真题或模拟题重点测试时间分配和心态。每次模考后做错题复盘把错误归成三类知识点不会、审题不清、计算粗心分别制定对策。我当年第三轮就发现自己的问题在逻辑题上容易卡壳于是专门给自己定了规则逻辑题每道最多3分钟超时先标记跳过把会做的分数拿到手再说。5.2 资源选择题库、书籍、面经怎么搭配很多同学问刷题资源怎么选我的经验是一本书打底、一个题库强化、若干面经补盲区。书的话算法用《剑指Offer》或LeetCode经典题解数据库用《高性能MySQL》的相关章节网络用《图解TCP/IP》或《计算机网络》基础篇Java方向看《Java编程思想》或更轻量的《Java核心技术》。不需要全部啃完按知识点章节查漏即可。题库方面LeetCode的Top100和历年校招真题都可以刷但要注意客观题和LeetCode模式题不完全一样客观题更偏概念和结论所以也要配套刷牛客网的专项选择判断题。面经的价值在于了解具体公司的出题风格比如携程喜欢在业务场景里包装技术考点那你在看面经时就要多关注这种包装方式而不是只看答案。5.3 临场策略做完试卷还是保住正确率笔试现场的时间分配是决定客观题成绩的关键因素之一。我的策略是四象限法先花5分钟扫一遍全部题目按会不会、计算量大小把题目分成四类。第一类简单会做的立刻做掉拿稳基础分第二类会做但计算量大标记后稍后做第三类完全没思路但有猜的可能最后统一蒙第四类实在陌生的直接跳过。客观题最大的敌人是纠结。一道题卡了五分钟既浪费时间又影响心态。我的底线是选择题平均每题不超过2分钟超过就先凭直觉选一个并在草稿纸上标记等全部做完再回头检查。考试不是每题都要全对而是要拿到尽可能多的分数。记住一个比例如果能保证80%的正确率哪怕有20%空着或猜错总分依然很好看。5.4 笔试之外的加分项内推与复盘最后说两个容易被忽略但实际拉分很大的事内推和复盘。内推不是笔试作弊而是让你在同等条件下更容易被看到。很多公司内推简历可以直接进入笔试甚至面试环节省去一轮简历筛选。如果有学长学姐在携程工作一定要提前打招呼这比在网上盲投海投效率高得多。复盘更是关键中的关键。笔试不是交完卷就结束了每次考完趁记忆还清晰立刻把题目回忆出来按知识点归类查一遍正确答案和原理。我当时建了一个在线表格列了题号、知识点、我的答案、正确答案、错误原因、需要复习的章节这几列每次笔试后更新一次。坚持到秋招结束这个表格就成了最宝贵的个人题库。很多面试中遇到的问题都和笔试复盘时补过的知识点重合。客观题汇总的价值本来就不在于背会一份题而在于通过这份题把整个知识体系重新串联一遍——这件事到现在都值得做。