携程春招技术岗笔试复盘:题型分布与编程题策略 参加完2023年携程春招技术通用岗第三批笔试之后我一直想写一篇复盘。倒不是说题目有多难而是这类大厂技术岗的线上笔试套路感很强信息差也很明显第三批和第一批之间到底有什么差异技术通用岗和专项岗的笔试侧重点一样吗编程题到底偏向 LeetCode 哪种难度这些问题在没有真实经历之前光靠刷帖子是拼不完整的。这篇内容我尽量写细从题型分布、答题策略到编程题的完整复盘思路希望能帮后面准备携程笔试、尤其是准备走技术通用岗的同学少走点弯路。先交代一下背景。我投的是技术通用岗这个岗位在携程春招里属于后端、前端、客户端、测试开发等方向统一笔试的大类和单独招算法工程师这种专项岗位的笔试是分开的。第三批笔试的时间大概在四月中下旬线上双机位监考全程在牛客网平台上完成。整场考试给我的直观感受是题量不大但时间紧选择题更看重积累和反应速度编程题则很考验读题和边界情况处理整体难度介于常规大厂笔试的中间档不算劝退但裸考基本是送。1. 这批笔试到底考了什么整体复盘1.1 先看结论题型分布与第三批的批次特征先上一张我当时考完复盘统计的题型结构表后面再逐项拆模块题量分值占比建议用时难度感受逻辑与行测类选择题约10题约20%15-20分钟中等图形推理略绕计算机基础选择题约15题约30%25-30分钟中等偏基础数据库和网络考得多编程题2题约50%60-70分钟第一题简单第二题接近中等偏上总计约27题100%约120分钟整体可控但需果断取舍重点说下“第三批”这个标签。我对比了往年第一批、第二批的回忆帖整体感觉是第三批的题库复用率不低部分题眼和第一批有交集但会在输入数据和问法上做变形。这意味着什么如果你能在考前把前面批次出现的考点系统性过一遍到了第三批你会发现很多选择题的底层考点是眼熟的。但千万不要因为看到面熟的题就兴奋过头携程的题变形能力很强尤其是编程题改了样例和边界条件之后无脑背板子反而是大忌。另外第三批有个比较明显的现象时间上接近春招尾声有些已经拿到其他 offer 的候选人可能会放弃或随便答导致整体通过率看起来比第一批高一些。但这只是幸存者偏差的感觉实际上每一批的筛选标准是相对稳定的别抱着“第三批更简单”的心态去备考。1.2 这份复盘适合谁看如果你是以下几种情况这篇内容对你应该挺有价值打算冲刺携程或同类大厂技术通用岗、但还没摸清笔试套路的人已经收到后续批次笔试通知想在考前快速确认复习优先级的人对在线笔试的选题策略、时间分配、编程题现场应对还没有系统性概念的人只想快速看一眼“考什么”来决定值不值得投递的人。需要说清楚的是我不会也不可能完整还原每一道原题大厂的笔试题目通常有保密要求而且批次不同题目本身也会变化。这篇复盘的价值在于把这一类笔试的考察逻辑、出题偏好和应考策略讲透让你在考场上面对任何变种题都能有自己的应对框架。2. 笔试整体设计与答题策略拆解2.1 时间分配为什么“做完”比“做对”更重要第三批笔试的总时长我印象中是120分钟但真正决定你能不能答完的不是你每分钟写多少字而是你会不会做取舍。我见过不少同学在行测的图形推理题上死磕十分钟结果后面计算机基础题连蒙带猜编程题最后只剩二十分钟连题目都没读完。这种本末倒置是笔试最大的坑。我当时定的策略很简单行测和选择题严格卡时间单题超过2分钟直接标记跳过先把所有能拿的分拿到手。计算一下就知道27道题120分钟平均每道题只有4.4分钟编程题按两题60分钟算留给选择题的时间也就60分钟左右折合每道选择题2.4分钟。这2.4分钟包括读题和判断一旦在某道题上耗到5分钟以上后面必然吃紧。所以我的实操排期是这样的发卷后先花30秒快速浏览全卷看清选择题总数和编程题数量心理有个底选择题按顺序往下做遇到卡壳超过90秒的在草稿纸上记下题号果断跳过选择题全部过完第一遍后如果时间有富余再回头啃跳过的题编程题至少预留60分钟宁可放弃两道选择题也不要压缩编程题的编码和调试时间。这个策略的核心逻辑在于单位时间的得分效率。编程题单题分值动辄占25%以上一道题顶七八道选择题把时间堆在选择题上而丢掉编程题的完整实现怎么看都是亏的。2.2 分值权重看懂这道题到底在考你什么从我的经验看携程技术通用岗笔试的选择题大致分两个来源一个偏向行测逻辑另一个是计算机专业课基础。这两个部分虽然都在“选择题”这个框里但复习路径完全不同。行测类题目考的是临场反应和思维习惯临时抱佛脚的效果非常有限。比如数字推理、图形推理、逻辑判断这些更依赖你平时有没有做过类似的题感训练。计算机基础选择题则相对“良心”考点非常集中数据结构栈、队列、二叉树、图、操作系统进程线程、死锁、内存管理、计算机网络TCP/IP、HTTP、DNS、数据库SQL语法、索引、事务。这些内容只要大学专业课不是完全荒废考前把核心概念过一遍至少能拿下一半以上。比较有意思的是我这次遇到的计算机基础选择题里有不少是“场景题”而非纯概念题。比如它不会直接问“TCP三次握手是哪三步”而是给你一个具体的连接建立失败场景问你最可能的原因是什么。这种出题方式对死记硬背的选手相当不友好但对理解底层原理的人反而是送分题。2.3 几个直接影响结果的前置准备除了知识储备线上笔试还有一些和考试无关、但会影响你发挥的细节我这次踩过坑特意列一下环境检测牛客网的双机位监控需要用手机扫码进入小程序手机要架在侧后方45度左右的位置保证能看到你的电脑屏幕和手部动作。建议提前一小时就开始布置别等到开考前十分钟才发现手机角度不对、照片上传失败。网络和备用设备笔试过程中断网是灾难但更灾难的是断网后才发现自己没有备用方案。建议提前准备好手机热点并确保电脑的网线口或无线网卡都正常。我认识的一个同学笔试时正好赶上宿舍区网络波动断了两次网虽然最后平台方面给了补时但心态已经崩了。草稿纸和笔线上笔试同样需要大量演算尤其是数字推理和编程题设计测试用例。提前准备好两三张A4纸和顺畅的笔比你想象中更重要。3. 选择题实战行测与专业基础的交叉点3.1 行测类题目的常见考点与破题方式行测类题目在技术岗笔试里出现很多人会觉得奇怪我又不是考公务员为什么要做这些实际上大厂笔试加行测考察的是你在有限信息下快速建立逻辑链路的能力这在日常开发中极其重要一个需求过来你需要在信息不完整的情况下快速判断优先级、排查边界条件这就是行测题在现实中对应的能力模型。我这次遇到的行测题大致覆盖三类。第一类是数字推理给一串数列找规律。这类题的核心是“差分优先”拿到数列先算相邻两项的差差有规律就直接上差没有规律再考虑隔项、分组、递推。比如基本等差变式2、5、10、17、26差的序列是3、5、7、9下次差是11答案就是37。再复杂一点会把差分后的数列再做一次差分或者把差与项编号关联起来但本质上都是先看差分。第二类是图形推理。这类题我的经验是不要凭感觉硬猜先看图形元素的数量变化点、线、面、角、对称轴数量再看位置变化平移、旋转、翻转最后看属性变化颜色、大小、虚实。把这几个维度在草稿纸上列出来一套之后大概率能找到规律。最怕的是没有章法地盯着图形发呆时间全部耗掉。第三类是逻辑推理。给一段描述然后判断哪个选项“最能支持/削弱”某个结论。技术岗的这类题一般不会太变态关键在于分清“论点”和“论据”然后看选项到底是在加强逻辑链还是转移话题。很多错误选项设置的套路是诉诸权威或者诉诸大众比如“大多数人都认为某方案可行”这在逻辑题里通常不是有效支持。3.2 计算机基础题高频考点和真题场景还原计算机基础选择题是我这次觉得赚到分的部分因为考点非常集中而且和实际业务结合得比较紧。下面按我实际遇到的题目方向把高频考点和答题要点拆开讲数据结构二叉树相关是重中之重。中序遍历和后序遍历恢复二叉树、层序遍历的队列实现、二叉搜索树的插入删除这几个点反复出现。我当时考了一道“已知某完全二叉树有n个节点求叶子节点数”的题这种题看似复杂其实记住公式就行完全二叉树中若总节点数为n叶子节点个数为 n/2 向上取整n为偶数时为 n/2奇数时为 (n1)/2。但要注意题目是不是在“满二叉树”和“完全二叉树”之间玩文字游戏这两个概念差一个字答案完全不同。操作系统进程与线程的区别、死锁产生的四个必要条件、虚拟内存和页面置换算法基本是固定套餐。前几年爱考银行家算法笔试里如果出现通常不会让你完整推演而是给出一个中间状态问“当前是否安全”只要按“找进程→检查剩余资源→回收资源”的顺序一步步推就行。计算机网络TCP的三次握手和四次挥手属于必考题而且经常和具体场景混在一起。比如给你一个客户端连接服务器的异常场景问最可能是什么环节出了问题。这里需要你真正理解状态迁移而不是只背“三次握手是SYN、SYNACK、ACK”这个口诀。我建议把 TCP 状态机完整画一遍尤其是 TIME_WAIT 和 CLOSE_WAIT 的含义和区别笔试和面试都很喜欢从这里出题。数据库SQL查询语法和索引机制基本上是送分题。重点看JOIN的区别INNER JOIN、LEFT JOIN、RIGHT JOIN以及WHERE和HAVING的执行顺序。还有一个高频考点是“事务的ACID特性”如果出场景题通常会给你一个不小心把某一步操作回滚了的场景问破坏了哪个特性。只要记住原子性对应“要么全做、要么全不做”一致性对应“数据状态合法”隔离性对应“事务之间互不干扰”持久性对应“提交了就永久生效”。3.3 选择题的蒙题技巧就算准备得再充分考场上也一定会遇到完全没头绪的题。这时候不要瞎蒙而是用排除法把明显错误的选项先干掉。计算机类选择题有个特点是干扰项经常在“参数顺序”和“数值大小”上做文章比如排序算法的时间复杂度干扰项会把O(n log n)写成O(n^2)或者把平均复杂度和最坏复杂度调换位置。这类错误只要你对概念有一点印象就能排掉一大半。另外如果两个选项表述非常接近答案大概率在其中之一并且通常不是表述最绝对的那个。比如出现“必定”“一定”“绝对”这种词的选项往往是因为表述过于绝对而成为错误项这在行测逻辑题里特别常见。当然这只是概率问题不能当作铁律用。4. 编程题核心环节实现复盘4.1 编程题的方向与难度定位编程题是整场笔试的压轴部分两道题的分值占比直接决定你能不能进入下一步。第三批的编程题给我的整体感觉是第一题属于“语法熟练就能过”的入门难度第二题则明显在考察算法设计和边界处理能力。这个梯度设置很有代表性大厂笔试通常都会用第一题保底给基础扎实但算法深度一般的人一个机会再用第二题拉开区分度。我遇到的第一道题核心是个数组处理问题给定一个数组要求把数组中的0全部移动到末尾同时保持非零元素的相对顺序。题目本身说难不难做过LeetCode 283的人应该秒懂但笔试平台上的输入输出格式和LeetCode不一样需要自己处理多行输入。这就引出一个非常关键的备考建议刷LeetCode的同时一定要去牛客网或赛码网上练几道需要自己写输入输出解析的题否则很容易出现“思路全会、代码写上却因为读入问题拿不到分”的惨剧。第二道题偏向字符串处理具体是在给定字符串集合中找到能拼接成目标串的最小串数还允许重复使用。这题本质上是个动态规划问题但难点在于题目描述披了一层业务外衣。我当时读完题的第一反应是“这题我是不是在哪见过”但细看发现状态转移和经典题并不完全一样因为允许重复使用字符串且要求最小数量而非方案数。所以考场上千万别急着套模板先把题目里的业务名词翻译成抽象算法问题再说。4.2 第一题思路与代码实现第一题保持非零元素相对顺序移动所有零到末尾最直接的思路是双指针。一个指针用于遍历数组另一个指针记录“下一个非零元素应该放置的位置”。遍历时遇到非零元素就把它放到前面的位置然后把该位置指针后移遍历结束后数组剩余位置全部填零。这个思路的时间复杂度是O(n)空间复杂度O(1)是完全满足笔试要求的。实测在牛客网平台上用一个for循环加一个插入位置下标变量就能搞定。我当时在代码里加了一个小优化在遍历过程中如果有元素交换记录下来交换次数如果为0就直接返回原数组避免不必要的后续操作。这在数据量小的时候看不出差距但能体现你有没有考虑过边界情况。def move_zeroes(nums): # 下一个非零元素的插入位置 insert_pos 0 for i in range(len(nums)): if nums[i] ! 0: nums[insert_pos], nums[i] nums[i], nums[insert_pos] insert_pos 1 return nums这里有个细节需要注意上面这段代码其实是原地交换即使nums[i]已经等于nums[insert_pos]比如数组开头就没有零交换操作也不会报错只是无意义地自己和自己交换。为了效率可以加一个判断 if i ! insert_pos 再交换但在笔试里不加也没关系。笔试平台上的输入格式通常是一行读入数组用空格或逗号分隔。我建议在本地练习时就把输入解析写熟练比如import sys line sys.stdin.readline().strip() # 按逗号分割并转换为整数列表 nums list(map(int, line.split(,))) result move_zeroes(nums) print( .join(map(str, result)))4.3 第二题思路与代码实现第二题允许重复使用字符串拼接目标串并求最小个数这是一个典型的完全背包场景。但要小心字符串拼接和普通背包的容量维度不太一样不是简单的“字符串长度”背包还要考虑前缀匹配关系。我得先承认这道题我在考场上第一版用的是贪心每次选一个最长的、能和当前目标串前缀匹配的字符串拼上去。写完之后自己构造了个反例目标串是abcabc候选字符串有abc和abcabc贪心会选择abcabc直接一步到位没问题但如果候选是ab、abc、bcabc贪心从前往后选会把abc选上然后目标串剩余abc还能选abc总计2块也没问题。当时我侥幸没找到反例但如果题目的字符串集合稍微一改贪心就会翻车。所以考场上如果你还有时间优先写动态规划def min_pieces(target, words): n len(target) # dp[i] 表示拼出 target 前 i 个字符需要的最少字符串数量 # 初始化为无穷大 dp [float(inf)] * (n 1) dp[0] 0 for i in range(1, n 1): for w in words: m len(w) if i m and target[i - m:i] w: dp[i] min(dp[i], dp[i - m] 1) return dp[n] if dp[n] ! float(inf) else -1这个写法的思路是把目标串的每个位置 i 当成背包容量遍历每个单词如果单词能匹配目标串以 i 结尾的后缀就尝试从 dp[i-m] 转移过来。时间复杂度是O(n × len(words) × 平均词长)虽然不算最优但笔试场景下完全够用。我在面试后的复盘里又想到了更高效的写法用前缀匹配的字典树做剪枝但那属于锦上添花。笔试的评判标准是答案对、边界处理好、能过测试用例不是追求复杂度达到教科书最优。4.4 在线笔试编程题的工具链注意点这里分享几个我实际踩过的坑每一个都可能让你在代码正确的情况下白丢分提交前检查是否有多余的输出。笔试平台判题是输出全量比对多一个空格、多一个换行、多一行调试日志都会判错。我习惯在写完代码后把 print 语句统一过一遍确认只有最终输出的那一行有输出。注意 Python 版本差异。牛客网平台同时支持 Python2 和 Python3但如果题目限定版本而你用了另一个版本的语法会直接编译出错。print 函数、input 函数的用法差异是重灾区。输入可能有多组。有些题目的样例输入是一行一组但真实测试数据可能有多组情况需要用 while True 循环读入读到 EOF 再退出。这个我在牛客网练习时就吃过亏。双重检查题目是否要求取模。如果题目说结果需要对 1000000007 取模但你忘了取模那么大数据量下结果很可能溢出或超长导致答案错误。这个点特别容易被忽略因为人脑算小样例时根本意识不到会溢出。5. 常见问题与排查技巧实录笔试过程中和笔试之后我整理了不少问题有些是关于平台操作的有些是关于备考策略的这里一并分享出来。5.1 平台环境和账号问题牛客网考试链接打不开怎么办先检查是不是浏览器兼容问题。牛客网的线上笔试一般推荐使用最新版Chrome或Edge禁用任何广告拦截插件。我建议在笔试前半小时就打开链接按照提示完成环境检测而不是等开考了再临场设置。考试中途摄像头画面缺失这种情况通常是因为浏览器没有授权摄像头权限。笔试前一定要在设置里确认摄像头和麦克风的权限已经放开并且提前用网页自带的测试工具验证一遍。如果笔试中途遇到不要慌张先刷新页面重新进入系统一般会保留你之前的答题记录。代码编辑器不顺手牛客网自带的在线编辑器功能偏基础没有本地IDE那么好用的补全和调试工具。我在备考阶段就专门在牛客网上练过手熟悉了它的缩进处理方式和代码折叠逻辑。如果你习惯用本地IDE也可以先在本地写好代码再复制上去但要注意缩进和编码格式不要因为复制粘贴而错乱。5.2 答题策略类问题要不要先看编程题再回来做选择题我个人的建议是不要。编程题需要高度集中的注意力和完整的思路链路如果你先看编程题脑子里会一直带着这道题的草稿状态做选择题时容易分心。反过来先做选择题可以把简单分快速拿到手再切换到编程题时大脑也经过了热身。遇到不会的选择题如何处理先蒙一个答案然后在草稿纸上记下题号最后如果有时间再回头思考。记住线上笔试没有倒扣分机制蒙一个空着强。千万不要在一道题上死磕。编程题做不出来要不要弃疗很多平台对编程题是按测试用例给分的不是要么满分要么零分。所以哪怕你只能暴力求解也能通过一部分用例。我第二题一开始想的贪心方案虽然不保证全对但也能覆盖部分测试用例。先把暴力解写上拿到部分分再考虑优化这是笔试编程题最稳妥的策略。5.3 细节与心态管理可以说笔试不仅是考知识储备也是在考你在压力环境下的决策能力。我在第三批笔试前一周把历年的真题考点做了个表格每天晚上花二十分钟过一遍高频概念而不是临考前还去刷难题。这种“稳住基本盘”的策略比考前突击冷门考点有效得多。如果你也在备战类似笔试我建议你考试前一天不要再做新题了把做过的题、错过的题、以及各个高频考点浏览一遍就够了。睡眠和状态的重要性远远超过考前最后一个晚上多刷的十道题。6. 给后续批次候选人的几条实操建议6.1 以“考点表”为核心做考前冲刺如果你离笔试还有三到五天比起漫无目的地刷题我强烈建议你画一张考点自测表。我就按自己当时整理的表格把核心知识点和掌握程度填进去一目了然。这里提供一个参考模板科目核心考点掌握程度考前动作数据结构二叉树遍历、栈与队列、哈希表熟悉手写两种遍历操作系统死锁、进程线程、页面置换一般复习四个必要条件计算机网络TCP状态机、HTTP状态码熟悉画一遍状态迁移图数据库JOIN、索引、事务ACID一般练5条SQL行测逻辑数字推理、图形推理较弱每天20道找手感编程题数组处理、动态规划、字符串中等刷10道高频套路题这张表的价值不在于它本身有多精确而在于逼迫你在考前把所有可能的考点全部过一遍把“我觉得我应该会”变成“我会动手写”。6.2 编程题刷题侧重不要只盯LeetCode很多同学准备大厂笔试时只刷LeetCode这个习惯本身没有错但容易忽略一个关键差异LeetCode是函数式提交输入输出都已经帮你封装好了而牛客网和赛码网需要自己处理输入输出。这两者之间的差距就像会用计算器和会口算的区别。到了笔试现场如果因为input()读入不熟练而浪费二十分钟刷再多LeetCode也救不了你。我建议在考前至少去牛客网的在线编程专区挑10道“题目描述里有‘第一行输入n第二行输入n个整数’”这种格式的题用本地IDE写好完整代码再粘贴提交确保自己对输入解析、多组数据处理、格式化输出这些环节烂熟于心。6.3 时间线从投递到笔试的节奏控制如果你是还没投递、刚开始了解春招流程的同学务必关注官方通知里的时间节点。大厂春招的批次有时接近一周一场第三批并不意味着离投递截止还早实际上很多人的投递时间已经在第二批了。我当时的好几个同学都是因为错过了前两批的投递才被动进入第三批心态上会多一份焦虑。这里分享一个我认为比较健康的节奏接到笔试通知后前三天做考点自测和薄弱项补强第四天做一套完整的模拟题掐时间、开摄像头第五天复盘错题、整理模板第六天参加正式笔试。这样五天多的准备周期足够覆盖大部分考点也不至于把自己拖入疲惫状态。6.4 考后动作别急着对答案笔试结束后很多论坛和牛客讨论区会立刻出现回忆版答案和讨论帖。我的建议是看看别人的思路可以但不要因为对答案影响自己的判断和情绪。一方面网上流传的答案未必准确另一方面笔试只是整个招聘流程的一环后面还有可能有面试环节需要你保持稳定的心态。我当时考完就果断关掉了所有讨论帖直到收到面试通知才重新打开。7. 我踩过的坑与最后想说的话有几个坑我特别想单独拎出来再说一遍因为这些不是知识问题是纯粹的临场细节问题任何一个都可以让准备充分的人翻车。第一在线笔试的代码编辑器没有自动保存草稿的功能。我当时就亲眼见过旁边的同学考到一半浏览器崩了一次恢复之后他前四十分钟写的一大段代码全没了。后来我学乖了每次写完一段逻辑就把代码复制到本地记事本里哪怕最终不用也留个备份。多花两秒钟换一个心安。第二对于编程题while True多组输入要比单行输入稳妥得多。特别是那些没有明确说明“只有一组输入”的题用单行读入很可能因为底层测试数据有多组用例而直接判错。哪怕题目样例看起来只有一行如果要求里没有写死“保证只有一组输入”我都建议用循环读入。第三别把笔试流程想得太紧张。很多时候我们觉得线上笔试可怕是因为对流程不熟悉。当你提前把环境、设备、时间安排、做题节奏都理顺之后这就是一次有定时的小型练习而已。从容的心态能让你在遇到变形题时不慌反而能发挥出正常甚至超常的水平。这次第三批笔试的复盘写到这里基本把能拆解的都拆解完了。从题型分布、选择题考点到两编程题的整体思路再到考前的准备策略和考场上的避坑细节每一个点都是从真实的应试体验里来的。如果你正在准备下一场笔试希望这份经验能帮你省下一些摸索的时间把精力花在真正能提分的地方。如果后续有任何环节需要交流欢迎在评论区聊聊你的备考经历说不定你的疑问正是另一个人的经验盲区。