ARTICLE DETAIL

资讯详情

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

携程技术岗笔试复盘:考点拆解与编程题实战经验

携程技术岗笔试复盘:考点拆解与编程题实战经验 2023年春招季互联网大厂的笔试来得比往年更早一些。我当时投了携程的技术通用岗收到第二批笔试通知的时候其实心里没底——网申到通知之间的时间很紧凑算法题手感和基础知识的系统梳理都还没到最佳状态。但真正走进笔试环境以后我发现携程的笔试和想象中的“硬核八股考点收集器”不太一样。今天把第二批的完整经历、考点拆解、以及我复盘后的感觉一起整理出来给后面还要参加笔试的同学一个参考也记录一下自己的总结。1. 笔试整体框架与时间分配先说说这场笔试的总体观感。技术通用岗的笔试安排在一个在线OJ平台我收到的通知里写的是“建议使用Chrome浏览器”整场考试是行测型选择题加在线编程题组合。1.1 题型分布与计分逻辑整体分成四个部分分别是逻辑推理选择、专业基础知识单选、专业基础知识多选和两道编程题。这四部分的题量和时间分配大致如下逻辑推理选择大概10题左右每题在1分上下专业基础单选15题左右每题2分专业基础多选10题左右每题3分少选、错选都不得分两道编程题一般第一道20分第二道30分或各25分总分是100分制预计是70分以上才可能进入面试筛选池但每年的分数线不一样这个数据只能做一个大概的参考。让人比较在意的一点是携程和很多大厂一样用的是“倒计时总时长”的模式。也就是说不是说每个模块单独限时而是给你一个总时间比如90分钟或120分钟你自己在里面调配不同模块的时间。系统会记录每个模块的进入和离开时间但最终只看总时长。这意味着两件事第一如果你在逻辑题上卡住了就真的会吃掉后面编程题的时间第二合理的策略是先把确定能拿到的分攥住再啃硬骨头。1.2 时间分配策略与细节我自己的时间分配是逻辑推理题控制在15分钟以内专业单选15分钟专业多选20分钟剩下大约50到55分钟给两道编程题。实际执行下来逻辑题超时了几分钟后面编程题做的略微有点赶。我建议的策略是逻辑题如果超过1分钟还没头绪直接标记并跳过不要恋战专业基础的单选如果完全不会的知识点果断蒙一个不要空着多选是重灾区宁少选不多选错选直接0分编程题先看输入输出规模判断时间复杂度的允许范围再决定暴力解还是优化解这几条看起来简单但到考场上因为紧张而忘记执行的人很多。笔试不仅是考你会不会也考你在有限时间内的决策能力。2. 核心考点拆解与准备重点作为技术通用岗的笔试考点覆盖面其实很广但并非漫无边际。从考后复盘来看有非常明显的侧重点。2.1 计算机网络部分网络相关题目大概占了专业基础题的20%左右算是比较密集的章节。考察的点非常集中主要落在TCP/IP协议栈、HTTP状态码、TCP三次握手与四次挥手、DNS解析过程等经典考点。有一道题目让我印象很深它考察的是TCP建立连接和断开连接时状态变化的问题题目要求选择TIME_WAIT状态出现的时机和持续时间。这个考点其实很经典但在考试时间紧张时容易记混。复习时整理成状态机图把每个状态的触发条件、被动方主动方区别都记住会比较稳。HTTP状态码也考了考察的是502 Bad Gateway和504 Gateway Timeout的区别说实话这两个在真实开发中都遇到过但笔试时反而容易纠结。记住502是网关收到无效响应504是网关超时就不会混淆。2.2 数据结构与算法基础数据结构在笔试中占比最高尤其是选择题重复考查了栈、队列、二叉树、哈希表、图的基本概念。笔试中的算法题倒不是完全都在考复杂算法反而更看重对基础结构的变通使用。一个典型的例子是“用两个栈实现队列”这是非常经典的一道题目。笔试选择题中考察了它的变种问的是“如果入队操作频繁出队操作偶尔执行用两个栈实现队列的时间复杂度是多少”。答案是把元素倒入第二个栈的复杂度是O(n)但均摊下来是O(1)。这种题不难但需要透彻理解摊还分析的基本思想。哈希表也来了好几题考察点在“哈希冲突的处理方式”特别是链地址法和开放定址法的区别。笔试中直接考了什么是线性探测的问题问你当遇到冲突时是否继续探测下一位置。这类题只要看过一遍属于纯粹的送分题但如果复习时没注意到就可能卡壳。2.3 操作系统与数据库操作系统主要考察了进程与线程的区别、死锁产生的四个必要条件、虚拟内存的基本概念。这些内容偏向概念记忆没有考到太深的调度算法计算题可能这就是通用岗和技术专项岗的区别。数据库是笔试中的另一个重点尤其是索引、事务的ACID特性、以及SQL语句的编写。有一道多选题考察的是事务隔离级别和对应的问题要求在选项中选出“会产生不可重复读”的隔离级别。这个知识点需要记清楚读未提交、读已提交、可重复读、串行化四个级别分别解决了哪些问题。SQL编程题没有出现在笔试的编程题中而是放在了选择题里。它考察的是经典的“查找第二高的薪水”这类题目只要知道LIMIT和OFFSET的用法就应该能做对但如果忘了ORDER BY的排序方向就容易被迷惑选项干扰。2.4 Java基础按通用岗实际来考技术通用岗并不是严格限制语言的但携程的Java开发生态比较成熟笔试中也确实体现出了Java技术栈的倾向。选择题中围绕Java基础考了HashMap的底层实现、JVM内存区域划分、垃圾回收的基本算法等知识点。有一道关于HashMap的题目问的是“JDK 1.8中当链表长度超过阈值时会转换成什么结构”。这个算非常经典答案是红黑树但选项中有一个干扰项是“跳表”如果没有认真读题很容易被带偏。JVM的题考了堆内存的划分以及年轻代和老年代存放的对象类型这类题对于做过Java开发的人很简单但如果是临时准备笔试、主语言是Python或其他语言的同学就可能失分。3. 编程题的完整复盘编程题是拉开差距的关键板块一共两道。第二道题的难度明显高于第一道。由于笔试题目有保密要求具体原题不能完全复现但我可以还原题目的大致形态和解决思路。3.1 第一道编程题字符串处理类问题第一道题通常会在一个中等偏简单的难度核心目的应该是快速筛选出具备基本编码能力的候选人。考的类型基本是字符串处理比如“给定一个字符串找出最长不含重复字符的子串长度”这种级别。拿到这种题的第一反应是滑动窗口这是最直接且高效的解法。核心思路是维护一个左边界和一个右边界右指针不断向右扩展通过一个哈希集合记录当前窗口内的字符。当遇到重复字符时不断移动左指针直到窗口内不再包含该字符为止。整个过程只遍历一次字符串时间复杂度为O(n)。笔试时的输入读取用的是标准输入我尤其想提醒一句不要忽略输入字符串可能包含空行或尾部换行符的问题。很多笔试环境下的样例输入和格式说明并不完全一致如果读取时没有做trim处理可能会出现样例测试通过但提交后报格式错误的情况。当时这门题的通过率感觉不错但我也注意到一个细节题目要求输出不重复字符的个数而不是最长子串本身。这种小坑一定要看清楚再动手。3.2 第二道编程题动态规划类问题第二道题一道动态规划题目问题是背包问题的变种。大意是给定若干个任务每个任务有固定的完成时间和对应的收益在总时间有限的情况下选择一组任务使得收益最大化。实际上就是一个0-1背包问题只不过时间和收益直接对应了重量和价值。解决思路很标准定义dp[j]表示在总时间为j的情况下能获得的最大收益遍历每个任务时从j等于总时间开始倒序更新dp数组防止同一个任务被重复选择。状态转移方程是dp[j] max(dp[j], dp[j - time_i] value_i)。这个题的难点不在状态转移方程而在容量很大时的优化。如果题目给的总时间上限很大比如超过10^5直接开二维数组就会内存溢出需要优化成一维数组如果时间上限更大则要考虑贪心的近似解法但笔试中通常不会出现这种问题。我在笔试时犯了一个低级错误没有注意到总时间的上限直接按惯例开了二维数组结果报内存超限好在及时改成一维数组才通过。这个经历让我意识到看到题目先看数据规模这一点再怎么强调都不为过。3.3 编程环境与代码提交笔试平台是牛客网语言可以自由选择我选的是Java。牛客的在线编辑器没有自动补全模板代码比较简陋建议平时就在一个没有IDE辅助的环境里练习书写代码否则考试时会很不适应。另外笔试平台支持自定义测试用例但不会告诉你“测试不通过”的最小用例是什么。这种情况下我的做法是自己构造边界输入比如空字符串、超大输入、重复元素极多的情况跑一遍看结果是否正常。还有一点牛客平台的输入读取需要用标准的ScannerJava或input()Python。有些同学喜欢用readline()循环读取如果换行符处理不当会出现多读空行的情况。建议在代码开头统一读取所有输入按行解析。4. 备考路线与实用资源笔试结束之后我复盘了整个备考阶段的路线。如果时间充裕建议至少预留一个月的系统准备时间但如果时间紧张15天突击也不是完全不可能。4.1 系统复习节奏规划我自己实际走的是一条“基础 刷题 模拟考”的路径感觉对通用岗来说效率还可以。第一阶段基础概念过一遍。计算机网络、操作系统、数据库、Java基础这几个方向并不是面面俱到地看书而是直接找面经中的高频考点以考点为索引去复习。比如网络部分重点看TCP和HTTP数据库重点看索引和事务数据结构重点看哈希表和二叉树。第二阶段刷题。刷题以LeetCode的Hot 100为主尤其是动态规划、字符串、树的遍历的题型。笔试中的算法题很少超出这个范围把Hot 100刷完两遍常见题型基本都能覆盖到。第三阶段是模拟笔试。找1到2套IT公司的往年真题如牛客网上的笔试真题严格卡时间完整做一遍。这个过程主要是为了锻炼时间的分配能力和临场的取舍能力。4.2 选择题和编程题的侧重点笔试中的选择题和编程题考查的是两种不同的能力。选择题偏基础概念的准确记忆编程题偏算法设计和编码实现两条线需要同时推进不能只有一头。选择题方面我推荐集中在牛客网、赛码网刷专项练习。尤其是计算机网络和数据库这两个科目牛客上有大量按知识点分类的题目每天刷100道基础题坚持一周正确率提升会非常明显。编程题方面LeetCode在精不在多。每天不用狂刷保证做3到5道并且彻底理解即可。特别是做不出来的题不要直接看答案先自己思考10分钟再看题解然后把题解思路复现一遍隔天再独立重做一遍。4.3 有针对性的“携程风格”准备如果要针对携程的笔试做特殊准备我认为最重要的就是多刷历年真题和练英语单词量。历年真题的价值在于让你熟悉携程的出题偏好。比如通过这次笔试题来看携程对算法题的考察偏向基础应用而不是竞赛难度字符串和动态规划的出镜率很高。如果备考时间有限把这两个方向练熟性价比最高。另外笔试中出现了一些英文题目描述的技术选择题虽然不是英语题但表述是英文的因此必须快速准确地理解题干。如果英语阅读速度不够专业题会变得很难还容易丢失时间。建议提前背一些编程和计算机专业词汇比如“recursion”、“concurrency”、“consistency”等避免因为单词卡住导致理解偏差。5. 常见问题与实战避坑笔试过程中会遇到各种意想不到的问题我在这次笔试和之前的模拟考中也积累了一些真实经验这里一并整理。5.1 最容易踩的“知识盲区”HashMap的底层结构容易混淆尤其是红黑树转换的阈值TCP三次握手和四次挥手的“全称”容易记不清比如FIN、ACK、SYN数据库幻读和不可重复读的区别容易混淆多选题目选错一个就全错这四块其实是选择题中失分的高频区域。我个人经验是用表格做对比记忆把容易混淆的知识点放到同一张表里对比记忆的效果比单纯看概念好很多。5.2 在线笔试环境的“隐形坑”在线笔试平台在高峰期偶尔出现卡顿或提交延迟虽然不是经常性的但一旦赶上会很影响心态。我的建议是提前30分钟登录系统做好网络和设备检查避免在最后时刻才调试摄像头和浏览器环境。还有一个细节是浏览器兼容性问题。很多笔试平台建议使用Chrome但会用浏览器弹窗或跨域限制如果弹出的权限提示被忽略代码编辑器可能无法正常使用。建议考试前关闭所有无关插件和广告拦截工具避免这些插件干扰页面脚本运行。5.3 心态与体能管理90分钟或120分钟的笔试其实挺消耗精力的尤其是最后一道动态规划题比较难如果之前选择题耗时太多后面会出现时间不够导致的恐慌。笔试前一天的作息不要太反常避免熬夜抱佛脚。笔试当天提前吃一点东西不要空腹。听起来很小但我在模拟测试时因为空腹加上紧张逻辑题部分基本处于大脑停滞状态后来调整作息和饮食后状态明显好很多。一些真实体会与后续建议再分享一个针对面试的延伸笔试只是第一关但笔试中的表现会直接影响面试官对你的初步判断。携程作为在线旅游领域的头部企业面试中经常会结合业务场景提问比如如何处理高并发下的订单查询、如何保证库存和订单的数据一致性。这些内容笔试中不一定考但会在面试中成为讨论重点。如果你后续也想面试这个方向建议在准备笔试时就同步了解公司的技术栈和业务场景把这些理解和笔试知识串联起来后面面试时就能沉淀出针对性的表达。还有一个操作性很强的小技巧笔试结束后趁着记忆还没模糊尽快把考到的题目和当时的思路记录下来。我自己是在笔试结束当天晚上按照记忆把题型分布和当时没做出来的题重新推导了一遍。这个复盘过程不仅对查漏补缺有帮助也能在后续的面试中用更清晰的逻辑去描述自己是如何解决问题的。笔试只是漫长求职路的一个节点摆正心态从容应对就好。希望这份回顾能帮到后面要参加笔试的同学。
返回列表