ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

携程秋招技术岗笔试复盘:算法基础与全题型应对策略

携程秋招技术岗笔试复盘:算法基础与全题型应对策略 1. 写在前面这笔试到底在筛什么每年九十月都是互联网秋招笔试最密集的时段我那位学弟参加完2023年携程秋招技术通用岗第五批笔试之后第一时间把整套题复盘丢给我看。我扫完全部内容最大的感受是这套卷子没有偏题怪题它考的不是你会不会背八股而是你在有限时间内能不能稳定输出基础能力。说白了它要刷掉的是三类人——算法基本功不扎实的、时间分配混乱的、以及连题目意图都没读懂就盲目动手的。整套笔试大致分成四块第一部分是行测风格的选择题包含言语理解、数学推理、图形推理和资料分析这部分很多人会轻视但它恰恰是刷人最狠的地方第二部分是计算机专业基础选择涵盖数据结构、操作系统、计算机网络、数据库难度中规中矩但覆盖面很广第三部分是技术问答题会丢出几个场景题让你写思路、写方案第四部分是三道编程题难度从简单到中等压轴题需要一定的优化嗅觉。整场笔试大概140分钟时间卡得不算紧但如果你在某一块陷进去后面就会非常难受。这篇复盘文我打算把每个板块的考察重点、刷题思路、以及我自己总结的答题策略全部拆开讲文末再聊聊那些最容易翻车的细节。无论你明年要不要冲携程这套卷子反映出的考点倾向其实也代表了大多数互联网大厂技术岗笔试的方向值得花时间研究。2. 行测部分真正的“隐形淘汰区”2.1 言语理解与表达别按语文题做按逻辑题做这部分在技术岗笔试里出现很多人第一反应是莫名其妙实际上它考察的是你对长文本信息的提取速度和准确度。携程有一套非常明显的出题偏好题干通常是一段四到五行的业务描述或行业分析文字然后问你“这段文字的主旨是什么”“作者最有可能同意以下哪项”或者“接下来最可能讨论的是”。我的建议是不要通读全文再做题而是先看选项带着问题回原文找对应。言语题最常见的干扰项设置套路是“偷换概念”和“范围扩大”。比如原文说“部分酒店在旺季会动态调价”干扰项可能写成“所有酒店都采用动态调价机制”这就是典型的一词之差。做题时把选项中的绝对化词汇凡是、全部、一定、必然圈出来跟原文比对大概率能排除一到两个错误项。另外这类题每道建议控制在60到90秒内。如果一道题读了半天还纠结果断标记跳过。言语题的正确率跟心态高度相关越纠结越容易错因为你在反复推敲中反而会被出题人设置的模糊选项带偏。2.2 数学推理与数列基本功的照妖镜数学推理题在整个行测板块里是区分度最高的。携程这批发卷的数列题大致有三种形态第一种是标准等差数列和等比数列的变体比如差值递增1, 4, 9, 16差值分别是3、5、7这在业内叫二阶等差基础中的基础第二种是交叉数列即奇数项和偶数项各自成规律这是典型的“隔项看”题型第三种是递推型也就是前两项通过某种运算得到第三项比如“前两项之和乘以常数等于下一项”。我最想提醒的是第二种和第三种。很多同学一看到数列就开始死算忽略了先观察结构。拿到一组数先用10秒钟做三件事看项数是不是8项以上大概率是交叉数列看相邻两项差值是否成规律决定是否走差分路线看数列整体是增长还是震荡判断是否涉及递推。2.3 图形推理找规律的思维套路图形推理是行测里最让人头大的一块因为它的规律组合非常多。但万变不离其宗常见的规律逃不出这五类位置变化平移、旋转、翻转、样式遍历图形去同存异、去异存同、属性规律对称性、曲直性、开闭性、数量规律点线面素个数、以及特殊规律一笔画、图形拼接。以携程技术岗笔试的量级来看图形题一般不会出到国考省考那种变态难度它更偏向“基础规律组合”。比如一道题可能同时包含旋转和黑白叠加图形每次顺时针旋转90度之后再将黑块与白块的重叠区域做颜色翻转。这种题看着复杂但拆解成两步就很清晰第一步观察单个图形的运动轨迹锁定旋转角度第二步观察重叠区域的变化规则。我的经验是每道图形题最多给90秒。如果连续两个规律尝试都推不出来正确做法是先凭直觉选一个然后在网页上标记等全部题目做完再回头复盘。图形推理这玩意儿有个特点某道题你死磕半小时也未必有思路但隔一会儿再看说不定一眼就能看出规律。因为你的大脑其实在后台已经默默做了模式匹配这叫“酝酿效应”在笔试时非常实用。2.4 资料分析时间性价比之王资料分析是行测板块里唯一“不需要聪明、只需要仔细”的部分。它通常是给出一个表格或一段统计文字然后围绕它出四到五道小题涉及增长率、比重、平均数、倍数关系等计算。很多人觉得计算量大直接放弃这真的亏大了因为资料分析的分其实是最好拿的。关键在于技巧先读问题再回材料里定位数据的位置不要从头到尾把材料读一遍。这一点跟言语题的策略类似但资料分析更极端——数据的分布是有规律的而且一道题问你“2019到2022年的年均增长率”你就只需要找到四个时间点的原始数据其他内容一概不关心。计算方面强烈建议掌握“选项差距估算法”。比如四个选项是12.3%、14.7%、16.1%、18.9%差距都在1.5个点以上你完全可以把复杂除法简化成近似计算算到小数点前两位就能锁定答案。不要一上来就精确到个位那是浪费生命。另外注意单位陷阱比如材料给的是“万人”选项问“亿人”或者材料是“同比增长”选项偷换成“增长量”这类细节错一次就够你肉疼的。3. 专业基础选择题地动山摇的“八股”基本功3.1 数据结构栈、树、图是绝对主角专业基础选择题里数据结构的分值占比是最重的。携程这批笔试卷我印象比较深的有三道题括号匹配是否是合法出栈序列、二叉树的层序遍历结果、以及图的最小生成树算法比较。第一类是出栈序列合法性判断考察的是对栈的LIFO后进先出特性的理解。问题通常会给你一个入栈顺序1、2、3、4、5再给几个出栈序列问哪些是可能的。这种题如果硬模拟非常浪费时间而且容易出错。正确思路是记住一个口诀入栈可以随时开始出栈但出栈的顺序永远遵循“后入先出”。实际操作方式是直接按目标出栈序列去推演先把出栈序列的第一个元素对应的入栈阶段的所有元素压入栈中然后弹出再继续推进。反复这样操作如果最后栈里剩的元素也能按顺序弹出那这个序列就是合法的。第二类层序遍历考察的是二叉树基础。需要注意的是面试题里层序遍历往往不会直接问结果而是给一个树的图形问你它的层序遍历数组是什么。这种题几乎没有难度唯一要小心的是空节点的处理方式。有些题目用“null”标注空缺位置有些则不标注两种方式得到的数组形态完全不同看题时先确认约定。第三类图的最小生成树通常考Kruskal算法和Prim算法的区别。这种题的高频考点是问你“在什么情况下两种算法得出的结果必然相同”——答案往往是最小生成树唯一的情况再进阶一点就会问并查集在Kruskal中的作用。这类基础概念性的题没有别的捷径老老实实把常见的树结构操作和图算法过一遍。3.2 计算机网络协议细节决定成败计算机网络考得不深但很杂。携程技术岗笔试试卷里出现了HTTP状态码语义、TCP三次握手过程、DNS解析流程以及TCP与UDP的区别。其中HTTP状态码几乎是必考项建议大家把2xx成功、3xx重定向、4xx客户端错误、5xx服务端错误这个框架性的分类记牢然后额外关注几个重点302临时重定向和301永久重定向的区别404文件未找到和403禁止访问的区别以及503服务不可用和500内部服务器错误的区别。三次握手的题目有两种出法。一种是概念题问你为什么需要三次握手而不是两次标准答案是防止旧的重复连接初始化造成混乱本质上是让双方确认彼此的收发能力正常。另一种是协议细节题给你一个报文序列问你每个报文携带的标志位是什么——SYN、SYNACK、ACK。这种题只要画个时间轴线就不会错。DNS解析这块我建议大家理解“递归查询和迭代查询”的区别再掌握从浏览器缓存、本机hosts文件、本地DNS服务器、根域名服务器到顶级域名服务器这条链路的顺序。经常出现的考点是浏览器输入一个URL之后第一个发出DNS请求的是浏览器本身还是操作系统答案是操作系统因为浏览器会先查本机缓存和hosts文件而这实际上是操作系统的解析流程浏览器本身只是发起调用。3.3 操作系统进程线程是高频考点操作系统这块携程出题风格偏向基础概念。进程与线程的区别、死锁产生的四个必要条件、进程调度算法FCFS、SJF、RR等都是反复出现的内容。其中“死锁四条件”也就是互斥、持有并等待、不可剥夺、循环等待这四个条件需要同时满足才会死锁所以打破任何一个条件就能解除死锁——这个考点几乎每批笔试都会出现变体是让你判断哪些策略对应破坏哪个条件。进程与线程的区别题最经典的考察方式是给你一组表述让你选出正确的一项。常见干扰项包括“线程拥有独立的地址空间”错误线程共享进程的地址空间进程才有独立地址空间“创建线程的开销比创建进程大”错误恰好相反。“同一进程内的线程切换不会引起进程切换”这需要结合上下文理解如果线程切换发生在同一进程内确实不会引起进程切换但如果两个线程属于不同进程就会发生进程切换。3.4 数据库SQL能力是基本盘数据库这块对技术通用岗来说难度不会太深但SQL是绕不开的。携程笔试卷子中出现了经典的聚合函数查询、GROUP BY与HAVING的区别、以及多表JOIN的语义判断。我强烈提醒大家在复习SQL时把下面这段话刻在脑子里WHERE是在分组前对记录进行过滤HAVING是在分组后对组进行过滤两者执行的先后顺序不同能用的条件也不一样WHERE中不能使用聚合函数HAVING中可以使用。多表JOIN题通常会给两个表的样例数据问你某个SQL语句的结果是什么。这种题最容易踩的坑就是NULL值处理。比如INNER JOIN只会返回两表中匹配的行而LEFT JOIN会保留左表全部行右表不匹配的字段补NULL但如果题目问“结果集有几行”你要严谨地考虑哪些行因为NULL被过滤掉了。还有一个容易被忽略的考点是数据库的索引结构。为什么要用B树而不是平衡二叉树因为B树的数据都在叶子节点且通过链表串联非常适合范围查询同时树的高度更低、磁盘IO更少。这个考点在笔试选择题和面试中都很常见建议理解原理而不是单纯背结论。4. 技术问答题考察方案设计思维走到技术问答题环节考的就不仅仅是记忆了。携程这批试卷的问答题有两道一道偏向服务端设计一道偏向业务场景优化。服务端设计题的原型大概是“设计一个短链接服务需要考虑哪些核心模块”。这种题没有标准答案但面试官脑子里有一条模糊的评分线。我的建议是答题时不论题目有没有要求都按下面这个框架搭能让你的思路看起来完整且有条理先讲清楚核心功能需求生成短链接、跳转、过期时间等再说数据存储方案用自增ID还是随机字符串、用什么字段存原始URL与短码的映射然后聊如何解决高并发下的读多写少问题引入缓存层最后聊防攻击和容灾策略比如同一个URL是否生成同一个短码短码撞车了怎么处理。业务场景优化题往往会结合携程的业务背景比如“用户在查询酒店时数据量大接口响应慢你怎么优化”。这种题考的就是全栈调优能力答题时尽量分层次从数据库层加索引、读写分离、分库分表、缓存层Redis缓存热点数据、设置合理过期时间、代码层并发优化、异步处理、批量查询到架构层CDN、消息队列削峰。每提一个方案都要带上理由说明它解决的是哪一类瓶颈。能拉开差距的往往不是方案数量而是你对方案适用边界的理解是否清晰。这种问答题答题时间是20到30分钟在文本框中写入就行。务必注意排版但也不要过度。用分号、换行、小标题把答案组织成几个模块让阅卷人一眼扫过去就能看到你的框架。最怕的就是写一大段没分割的长文观点再好也容易糊成一片。5. 编程题底层算法是分水岭5.1 三道题的难度分布与出题偏好携程2023年秋招技术通用岗的编程题是三道题整体难度曲线是简单、中等、中等偏上。第一题通常是纯模拟题几乎不涉及数据结构主要考察代码基本功和边界处理第二题开始上升到算法层面可能是贪心或双指针第三题则偏重状态搜索或动态规划对时间复杂度的要求明显提高。从我看到的反馈来看第一题的典型形态是字符串处理或数组操作比如做字符串压缩、统计满足条件的子串数量、模拟一个循环队列的出队入队等。这类题的目的就是送分但送分题也会有细节陷阱边界条件处理是否正确空输入是否会导致越界循环终止条件是不是写成了开区间导致漏掉最后一个元素。第二题和第三题则值得重点展开讲。我把它们的题型分布和应对策略整理成一目了然的表格你们可以参考题号常见题型核心算法时间要求答题建议第一题模拟、字符串处理基础遍历条件判断O(n)或O(nlogn)细心处理边界快速AC第二题贪心、双指针、前缀和排序贪心选择 / 滑动窗口O(nlogn)或O(n)先想清楚贪心策略的证明第三题动态规划、DFS/BFS、二分答案状态转移 / 搜索剪枝 / 二分边界一般O(n^2)可过需优化到O(nlogn)先写暴力确定正确性再优化5.2 贪心题先证明再动手第二题里贪心的出场率极高。典型的贪心题长这样有若干任务每个任务有截止时间和收益问你如何安排顺序使得总收益最大。这类问题的标准策略是按照截止时间排序然后用一个小顶堆维护当前选中的任务当新任务的截止时间晚于当前已选任务数量时直接入堆否则替换堆中收益最小的任务。这个过程很多人会背但笔试现场如果只是凭记忆默写很容易在“什么时候替换、替换堆顶还是堆中最小的”这个细节上犯糊涂。我的建议是在草稿纸上先画一个时间轴把任务按照截止时间从左到右排列然后逐个尝试放入时间轴上的空位。每次试图把一个任务放进时间轴如果发现时间冲突就需要“挤掉”一个收益更小的任务。这样推导出来的逻辑自然就是正确的而且你写代码时能解释清楚每一步在干什么。5.3 动态规划从暴力递归到状态转移第三题如果是动态规划典型场景可以抽象为“给定一个数组要求你选出若干个数使得总和不超过某个上限的情况下某个目标最大化”就是经典背包问题的变体。应对这类题我建议采用“三步走”策略第一步先写暴力搜索或者朴素递归确认状态定义是否合理这一步主要是为了验证问题的可解性不用纠结效率。第二步把递归改写成递推确定状态转移方程这一步是DP的核心。第三步分析时间复杂度和空间复杂度看是否需要优化比如把二维数组压缩成一维滚动数组。举例来说如果题目是“计算有多少种方式能凑成目标金额”状态转移方程就是dp[i] dp[i-coin]这是一维DP如果题目变成“选一些物品放入背包使得价值最大”就要用二维状态然后利用滚动数组优化到一维。笔试时最忌讳的是拿到题目直接开始优化结果状态定义错了优化得再漂亮也是白搭。5.4 答题时的代码规范与测试习惯编程题在线上笔试系统里做题通常是白板编程没有自动补全也没有编译器帮你查错全靠干写。这时候代码规范就非常关键了。我的建议是变量命名尽量语义化不要全是a、b、c关键步骤写中文注释帮你理清思路也方便回头检查一段逻辑写完立刻检查一遍括号匹配和循环边界别憋到最后统一调试。另外强烈建议提交前在脑子里多跑几组测试用例包括正常情况、极端情况和边界情况。特别是空数组、单元素数组、全相同元素、最大输入量这类用例能暴露出大多数隐藏bug。很多人笔试挂掉不是因为不会做而是因为代码在边界输入上直接越界或者死循环。5.5 压轴题的优化思路暴力不是终点第三题往往需要优化才能通过全部用例。我的经验是先写一个确定正确的暴力解法哪怕复杂度是O(n^2)甚至O(2^n)先把基本分拿到手然后再针对瓶颈做优化。大多数笔试系统的判题机制是部分用例设在低数据范围暴力解法能拿一半分左右然后再加数据范围逼你优化。优化的方向无外乎三种。第一种空间换时间比如用哈希表把O(n)的查找降到O(1)或者用前缀和把连续子数组求和降到O(1)第二种二分查找通过单调性把线性扫描变成对数级别第三种单调栈/单调队列处理滑动窗口类问题或者“下一个更大元素”类问题。这三种优化方向覆盖面极广把它们的模板练熟绝大多数压轴题都能找到突破口。6. 常见失分点与避坑指南6.1 常见问题速查以下几类问题是我根据学弟复盘以及我自己的笔试经验总结出来的高频翻车现场整理成表方便你们对照自查踩坑类型具体表现正确做法时间分配失误在行测一道图形题上死磕5分钟90秒做不出就先标记跳过回头再做专业题概念混淆把302和301重定向的作用搞反复习时按“动作语义”分类记忆SQL结果数错JOIN中忽略NULL导致的空记录养成画韦恩图的习惯分析左右表记录贪心策略不证明凭直觉选策略例子碰巧通过先尝试构造反例反例不存在再写代码DP状态定义模糊直接上手写转移方程越写越乱先用暴力递归理清状态再改递推边界条件遗漏循环结束条件写错导致漏掉最后一项所有循环都检查左闭右开还是闭区间不检查用例满足样例就提交被隐藏case卡死提交前在脑中跑常规、边界、极端三组用例6.2 在线笔试平台的细节坑除了知识点本身在线笔试平台的细节也会影响成绩。首先看题时注意代码语言的选择有的平台默认是C如果你习惯用Java或Python务必在倒计时开始前把语言切换好。其次编程题的输入输出要精确匹配尤其是多组输入的处理有些题说输入包含多组测试用例直到EOF才结束有些题则固定只有一组两种写法的循环结构完全不同。再有一点在线编辑器没有自动保存如果网络不稳定刷新页面可能导致代码丢失所以我建议每题作答时先把核心思路和关键代码结构写在草稿纸上万一平台出现问题至少不会让脑子里一片空白。6.3 如何高效刷题备考针对这套笔试的备考路径我的建议是分三个阶段走。第一阶段过基础。把数据结构教材里的算法和复杂度背到滚瓜烂熟重点复习栈、队列、二叉树、哈希表和图的最短路算法把计算机网络、操作系统、数据库这三大件的基础题刷三遍直到正确率稳定在85%以上。第二阶段刷编程题。每天保持两道题的量先刷模拟题和字符串处理题再刷贪心和双指针最后突破动态规划和搜索题每周日做一套完整的模拟卷控制时间。第三阶段是错题复盘。整理一个错题本把每次做错的题按“知识点错误原因正确思路”分类记录考前反复翻阅。这三个阶段加起来大概需要四到六周时间上完全来得及。7. 我个人的一些体会聊到这儿我想多说一句笔试只是秋招路上的第一道关卡它跟面试一样考察的是你的综合能力而不仅仅是知识量。我在实际带人过程中发现凡是能在笔试里稳定发挥的同学都有一个共同点他们不是靠临场突击而是把基础知识内化成了条件反射。以携程这套卷子为例专业题部分几乎没有超出常规考纲的内容编程题也没有那种让人无从下手的冷门算法它考的核心就是“你这些基本功到底练熟了没有”。所以如果你这次没发挥好不用气馁复盘完错题查漏补缺再战下一批就好。每次笔试都是一次控温测试你踩过的坑、错过的题都会成为你下一次发挥更好的筹码。
返回列表