飞猪秋招工程岗笔试复盘:题型拆解与备考策略 2023年飞猪秋招工程岗笔试是我整个秋招季里做得最“有意思”的一场在线笔试。说它有意思不是因为题有多难而是它把算法、计算机基础和旅行业务场景揉在了一起。如果你正打算投飞猪或者其他阿里系公司的工程岗又不太清楚这类笔试到底考什么这篇复盘应该能帮上忙。我会从试卷结构、题型案例、复习策略、考场节奏几个角度把自己实际踩过的坑和总结的方法全部交代清楚尽量不让你再走一遍弯路。先说明一下我投的是后端工程方向前端、测试开发、算法方向在题型配比上可能略有差异但基础知识和编程题部分通常是共通的。整场笔试给我最大的感受是刷题不够会慌只会刷题也不够还得会读业务背景题。下面展开聊。1. 为什么飞猪工程岗笔试值得单独写一篇复盘1.1 笔试前我对飞猪的预期投简历的时候我对飞猪的认知基本停留在“阿里旗下做旅行预订的平台”这个层面潜意识里觉得它的笔试可能会比纯互联网公司更偏产品和业务。比如考“如何设计一个促销页面”“如何做酒店排序”这类问题。但实际情况和我想的并不完全一样。2023年秋招的工程岗笔试飞猪并没有把业务题当作主体核心仍然是计算机基础加算法题只是部分选择题和编程题会套上旅行场景的背景。比如同样是考图论它会描述成“从A城市到B城市的中转航班最少有几程”同样是考动态规划它会包装成“在预算内选酒店组合使总评分最高”。这个设计思路其实很“阿里系”题目能落地但底子还是那些经典的数据结构和算法。所以我给后来人的第一句话就是不要因为它是旅行平台就疯狂准备业务方案也不要因为它是阿里系就觉得算法会难到离谱。飞猪的笔试更平衡真正拉开差距的是你能不能快速从长题干里抽取出数学模型并且把手里的题稳稳做对。1.2 笔试整体流程与平台我当时是在第三方在线笔试平台完成的开考前有一系列环境检测步骤包括摄像头、麦克风、屏幕录制权限。这里要特别提醒如果你用的是公司电脑或者装了奇怪的杀毒软件一定要提前一天把这些权限都打开否则开考后手忙脚乱。正式笔试时间我记得是90分钟题型分为单选、多选、编程题另外还有一道简答题。整体题量不算特别大但节奏一旦乱了就会觉得时间不够。平台支持多种编程语言Java、C、Python、Go 这些主流语言都可用我选了 Java。页面左侧是题目描述右侧是代码编辑器支持本地调试但不确定是否有自定义测试用例。我习惯先把样例复制到本地跑一遍再去提交。这种流程和很多互联网公司的在线笔试类似但又有一点不同飞猪的题目描述通常更长尤其是编程题前面会先铺垫一段业务场景再提出输入输出要求。读题能力不好的同学很容易把时间浪费在理解题面上。1.3 和其他公司笔试的差异我秋招还做过字节、美团、携程、京东的笔试对比下来飞猪有几个比较明显的特征。第一选择题覆盖面比较广不光是数据结构还有网络、数据库、操作系统、Linux、Java/C基础。字节的笔试更偏纯算法选择题少美团的笔试和飞猪有点像也会考一些行测或者逻辑题但飞猪的技术味更浓。第二编程题难度梯度比较明显。第一道通常是热身题简单到中等第二道是中等偏上第三道如果有往往是需要仔细建模的模拟题或搜索题。这种梯度设置区分度很好基础扎实的人能提前交卷基础一般的人会被第二道卡住。第三业务场景题不是考你“产品思维”而是考“工程思维”。它问你“库存超卖怎么办”“排队时间怎么预测”本质上想看你有没有系统设计的基本功而不是听你扯一堆运营策略。正是这些差异让我觉得有必要把这场笔试单独拿出来复盘。接下来我把题型和具体的答题思路拆开讲。2. 题型结构拆解选择题、编程题、场景题分别考什么2.1 计算机基础选择题的范围选择题是飞猪笔试里最容易被低估的部分。很多人把精力全压在编程题上结果选择题失分惨重。从我遇到的题目来看范围大致覆盖了下面这些内容。科目高频考点举例重要程度数据结构栈和队列、二叉树遍历、哈希冲突处理、堆排序复杂度高操作系统进程与线程、死锁条件、虚拟内存、页面置换算法高计算机网络TCP三次握手、HTTP状态码、DNS解析过程、HTTPS握手高数据库索引失效场景、事务隔离级别、乐观锁与悲观锁、SQL优化中高编程语言Java内存模型、C智能指针、Python全局解释器锁中Linux常用命令、文件权限、进程查看、软链与硬链中比如有一道题问“TCP建立连接过程中客户端收到服务端的SYNACK后如果此时客户端状态是SYN_SENT那么它应该进入哪个状态”这种题只要背过状态机就能答。还有一道问“MySQL中RR隔离级别下是否有幻读问题”答案是InnoDB在RR下通过间隙锁解决了大部分幻读但要注意区分快照读和当前读。这些都是经典中的经典却特别能检验基础扎不扎实。多选比单选更需要谨慎。我遇到的多选主要集中在网络协议和数据库索引上少选可能得部分分错选或多选不得分。所以拿不准的选项宁可空着也不要乱选。这一点很多人不知道容易在考场上吃亏。2.2 算法编程题的分值分布与难度编程题的分值一般占大头通常在40到60分之间。题量通常两到三道我那次遇到的是三道。第一道是链表题难度大概在LeetCode简单到中等之间主要考察指针操作第二道是动态规划考的是背包问题的变形第三道是比较复杂的模拟题背景和航线中转有关。从分值分配来看第一道题虽然简单但分值不低必须有十足把握一次通过。第二道题是区分度题很多人能想到动态规划但状态定义不准确或者初始化不对导致连样例都过不了。第三道题我反而建议最后做因为它的读题成本高、编码量大性价比不一定高。我当时的策略是先快速浏览三道编程题判断难度然后直接从第一道开始。第一道大概用了15分钟做完并测试通过第二道花了30分钟中间还因为数组越界改了一次第三道只剩10分钟只写了一个暴力搜索的部分逻辑最后没有通过所有测试用例。这个结果让我意识到考试时“放弃难题、保稳简单题”绝对是最优解。2.3 旅行业务场景题的隐藏考点除了编程题笔试里还会出现简答题或场景设计题。这类题不是让你写代码而是让你用文字描述方案。我记得当时遇到的一道题是“如何设计一个热门景点的排队时间预测系统”后来听其他同学说也有人遇到“酒店库存超卖怎么处理”“如何给用户推荐低价机票”。这类题目的隐藏考点有三个。第一个是框架感。你不需要写出完整的系统设计文档但至少要给出数据采集、数据存储、预测模型、对外接口、异常兜底这五个层次。每个层次哪怕只写一两句话也能显得思路完整。第二个是业务理解。比如做排队时间预测需要考虑淡旺季、天气、节假日、实时人流量这些因素。如果能把这些变量点出来说明你真的理解旅行场景而不是只会背八股。第三个是落地意识。方案里必须有缓存、降级、监控之类的关键词。比如预测服务依赖第三方数据接口接口挂了怎么办你需要给出降级方案比如返回历史平均值。这比吹一堆高大上的算法更让面试官信服。我把这类题当作“小型系统设计”来准备答题时先画核心流程再补充关键细节。虽然笔试里没有交互画图但也可以在文本框里用箭头符号画出流程阅卷时很加分。3. 几个我印象最深的题目类型和答题思路3.1 链表和二叉树常规题怎么拿满分第一道链表题让我印象很深因为它太经典了经典到很多人反而会大意。题目要求删除链表中重复出现的节点注意不是“删除重复值只保留一个”而是“只要有重复就全部删除”。比如链表 1 - 2 - 3 - 3 - 4 - 4 - 5处理完应该变成 1 - 2 - 5。这种题很容易在指针操作上出问题。我当时写了两种思路第一种是递归第二种是迭代。迭代写法需要设置一个 dummy 头节点然后用 prev 指向当前确定不重复的节点cur 向后遍历。核心判断是 cur.val 是否等于 cur.next.val如果相等就一直向后走最后让 prev.next 指向第一个不重复的节点。写代码的时候必须注意空指针。尤其是 cur.next 可能为 null 的情况一定要先判空再访问。我的习惯是先把链表的边界条件写在纸上空链表、只有一个节点、全部节点重复、重复节点在头部或尾部、重复节点在中间。把这些边界一个一个在本地跑过再提交基本就能一次过。二叉树题也是同理。飞猪笔试里考到了二叉树的层序遍历看起来简单但要求返回“每一层最右边的节点”其实就是二叉树的右视图。用 BFS 的话很简单只要在每一层遍历结束后取最后一个节点。但如果你忽略叶子节点为空的情况或者没有用队列长度来控制层边界就容易出错。这类常规题拿满分的诀窍其实只有一句话平时练习时不要只满足于“过样例”要主动想边界条件。我见过太多人 LeetCode 刷了几百题一到笔试看到熟悉题反而写错就是因为平时全靠“背答案”没有真正理解指针和递归的每一步变化。3.2 动态规划与状态压缩一道酒店价格组合题第二道编程题是“预算内选择酒店组合使总评分最高”本质上是一个典型的0-1背包问题每个酒店有价格和评分预算相当于背包容量要在不超过预算的情况下让评分总和最大。如果只是这样难度并不高但它增加了一个限制酒店数量很多预算金额也很大直接用二维数组存 dp[i][j] 会内存溢出。我当时用了一维滚动数组优化。状态转移方程是dp[j] max(dp[j], dp[j - price[i]] score[i])。这里要注意滚动数组必须从后往前遍历否则同一个酒店会被重复选择就成了完全背包。这种细节是笔试的高频失分点。下面是一段简化的 Java 代码骨架展示了滚动数组的核心逻辑int[] dp new int[budget 1]; Arrays.fill(dp, 0); for (int i 0; i n; i) { for (int j budget; j price[i]; j--) { dp[j] Math.max(dp[j], dp[j - price[i]] score[i]); } } return dp[budget];很多人会问为什么内层循环要从后往前我的理解是0-1背包要求每件物品最多选一次从后往前更新时dp[j - price[i]] 还是上一轮的状态没有包含当前酒店如果从前往后更新dp[j - price[i]] 已经被当前酒店更新过就会产生“重复选同一件物品”的效果。这个解释我在面试时也用过面试官比较认可。除了背包飞猪这类公司还喜欢考最短路和拓扑排序。比如“城市航线最少中转次数”就是 BFS不是 Dijkstra因为无权图求最短路径直接用 BFS 就够了。如果题干里出现了“每段航程耗时相同”这种条件优先考虑 BFS。不要一看到图就上 Dijkstra反而把简单题做复杂。3.3 在线笔试的输入输出陷阱在线笔试和本地刷题最大的区别就是输入输出。飞猪笔试用的是牛客网那套风格输入格式需要自己处理。以下是我踩过的坑。第一个坑题目说“第一行一个整数T表示测试数据组数”但很多人只处理了一组数据没有用 while (T-- 0) 包起来。只要输入样例里不出现多组数据本地怎么跑都能过但线上测试用例只要有多组数据直接就错。我当时写完链表题后专门检查了这一段才避免翻车。第二个坑输入中含有字符串而不是纯数字。比如城市名“Beijing”“Shanghai”很多人习惯用 char 数组存储结果比较时因为长度不对而出错。其实直接用 String 就好Java 比较字符串要用 equals不要用 。第三个坑输出格式要求精确。有的题要求每个结果占一行有的要求用空格分隔末尾不能有额外空格。如果题目说“每个结果后面跟一个空格”也必须认真读。我见过有朋友因为多打了一个空格被判格式错误虽然分值不多但很影响心态。处理输入输出时我的一般步骤是先看输入描述确定第一行是什么、后面几行是什么然后写一个本地测试文件把样例复制进去跑通后再故意制造一个边界输入比如空数组、最大值看看程序会不会崩溃。这套流程很笨但确实能避免大量非算法错误。3.4 简答题系统设计面试的小型版简答题是我最开始最害怕的部分因为大学里很少教系统设计。但经过几次笔试后我总结出一套答题框架飞猪的场景题也能套用。框架分四步先说目标再说流程再说存储最后说异常处理。以“热门景点排队时间预测系统”为例我的回答结构是这样的目标根据历史数据和实时人流预测未来15分钟到2小时的排队时长减少游客等待焦虑。数据采集从门票系统、景区闸机、App定位获取实时客流再接入天气和节假日数据。预测方式短期用时间序列或回归模型长期用历史同期的分位数曲线进行修正。存储与接口原始数据进时序数据库预测结果放 Redis 缓存接口设置 1 分钟有效期。异常处理第三方数据源故障时降级为历史均值系统压力大时直接返回上一次的缓存结果同时记录监控指标。这套回答不一定是最优解但至少完整地展示了工程思维。笔试阅卷时间很紧张如果你的答案逻辑清晰、关键词到位很容易拿高分。反之只写“用机器学习预测”这种空洞话基本不得分。4. 备战这类笔试的时间安排与刷题策略4.1 知识清单从数据结构到计算机网络如果你距离笔试还有一个月我建议把时间分成三块数据结构与算法占五成计算机基础占三成业务场景和行测占两成。很多人只刷题不复习基础结果选择题靠猜最后总分被拉低也有很多人只背书不刷题笔试看到编程题毫无手感。两者都不可取。数据结构方面数组、链表、栈、队列、哈希表、二叉树、堆、图是重点。不需要死磕红黑树和 B 树的实现细节但要能说出它们的应用场景和基本性质。算法方面排序、二分查找、双指针、DFS/BFS、动态规划、贪心是重点。其中贪心和动态规划要重点区分很多场景题会包装成“最优解”但其实贪心不够必须动态规划。计算机网络方面重点看 TCP/UDP、HTTP/HTTPS、DNS、Socket。数据库方面重点看索引、事务、锁、SQL优化。操作系统方面重点看进程线程、死锁、内存管理。Java 方向的同学还要把 JVM 内存区域、垃圾回收、类加载机制过一遍C 方向的同学重点看智能指针、内存泄漏、虚函数。这些知识点不需要背到一字不差但要能应付选择题里的概念辨析。4.2 刷题节奏和重点题型我自己的刷题节奏是“专题模拟”两阶段。第一阶段是前两周按专题刷 LeetCode每天保证两道新题和一道复习。每个专题至少刷15道尤其是链表、二叉树、动态规划、图论这四个专题。第二阶段是后两周每天做一场模拟笔试优先选择阿里系或者牛客网上的在线编程题目的是适应平台操作和输入输出风格。模拟笔试时一定要严格计时。我见过很多人刷题很厉害但一到笔试就手忙脚乱因为平时没有模拟过时间压力。我会设置 90 分钟倒计时到点必须停然后复盘每道题的完成情况和失误点。几次模拟下来你会发现自己的时间分配问题然后主动调整。还有一个针对飞猪这类公司的技巧多练长题干模拟题。可以去牛客网搜“阿里笔试”“携程笔试”“京东笔试”这些关键词找那些题干长、背景杂的题目来做。重点是练读题速度和信息提取能力。我一开始读一道长题干要花10分钟练了一周后能压到5分钟。笔试时这道题节省下来的时间可以留给编程题检查。4.3 阿里系笔试的特征与针对性准备阿里系笔试的编程题有一个共同特征对代码规范和边界要求很高有时候甚至会因为变量名不够清晰被扣分虽然提交系统不会因为风格扣分但面试官看代码时会有印象分。所以平时刷题就要养成好习惯变量名要有语义注释写得简洁不要写一长串没有任何空格的代码。另一个特征是题目里的业务描述通常很长但大部分是干扰信息。比如一道关于“旅行套餐推荐”的题可能真正需要的只是“给一个数组、一个目标值找出符合条件的组合数量”和旅行没有任何关系。你要学会把背景剥离掉直接看输入输出定义。我备考时还特别注意了“数据范围”。因为数据范围直接决定算法复杂度。比如 n 10^5那 O(n^2) 大概率超时必须想 O(n log n) 或 O(n)如果 n 20多半是状态压缩或者暴力搜索。飞猪的题一般会在输入描述里明确写出范围读题时用笔圈出来选算法就有方向了。5. 真实考试中的时间分配与实战经验5.1 我的时间分配方案如果你也是90分钟笔试我推荐这样分配前10分钟快速浏览全部题目把选择题里没把握的标记出来然后花50分钟做编程题先做最有把握的那道再用20分钟回头检查选择题和简答题最后留10分钟检查输入输出和提交。这套方案不是固定的但核心原则是先保编程题再抢选择题。我自己第一次模拟笔试时顺序反了先做选择题结果在几道多选上纠结太久编程题只剩25分钟第一道简单题都没写完。后来我调整策略一上来先看编程题心里有底后再做选择题如果选择题遇到犹豫不决的直接标记绝不停留超过两分钟。这个调整让我的笔试成绩提升了至少10分。还有一点不要因为前面选择题做得顺手就忘了编程题的存在。飞猪笔试的题目顺序通常是选择题、编程题、简答题但你可以自由切换。我建议把电脑屏幕分两块一块放答题页面一块放本地IDE这样写编程题时能快速测试。很多在线平台本身就支持切到自测用例但可能有延迟不如本地 IDE 顺手。5.2 现场容易忽略的硬件和网络准备在线笔试最怕的不是题难而是环境出问题。我当时就栽在了一个乌龙上开考前忘记关闭 Windows 的系统更新弹窗。结果正写第二道动态规划时屏幕右下角弹出一个硕大的“重启以完成更新”提示虽然没强制重启但我的状态和思路全被打断了。所以考试前请务必做好这几件事关闭所有即时通讯软件包括手机上的尽量用电脑静音。关掉浏览器插件尤其是广告拦截、翻译插件有些平台会因为这些插件导致页面异常。关闭系统自动更新Windows 可以在服务里暂停更新一周macOS 也可以关闭 App Store 自动更新。确保网络稳定。建议使用有线网络同时打开手机热点作为备用。笔试时一旦断网重新登录可能要花好几分钟非常亏。准备一个带摄像头和麦克风的电脑。现在很多笔试都要求摄像头监控如果没有摄像头可能连考试都进不去。我后来还听说有同学因为浏览器版本太旧导致代码编辑器无法正常显示。建议提前一天登录笔试平台进入模拟环境测试一下不要等到开考前一小时才想起这回事。5.3 笔试结束后的复盘方法笔试结束不是终点而是新的起点。我每次笔试结束后都会做两件事第一趁记忆新鲜把题目大概内容记录在备忘录里第二当天晚上重新把编程题做一遍尤其是没做出来的那道。拿飞猪这场来说我第二道酒店组合题当时用滚动数组跑过了样例但不确定是否全对。晚上复现时我发现自己的 dp 数组初始化长度是 budget 1但酒店价格为 0 时会出现死循环。虽然题目里价格应该是正整数但万一有边界测试可能就会挂。这个发现让我出了一身冷汗。我把这个错误记进了错题本还加上一句提醒“遇到背包问题先确认 weight 是否可能为 0如果为 0需要单独处理否则内层循环会死循环。”这种具体的复盘比单纯刷题有用得多。如果你也能把每次笔试的失误点积累下来下一场笔试前翻一下能避免很多重复错误。尤其是一些“粗心型”问题比如没有 T 组数据循环、数组越界、忘记 long 类型等这些都是可以在复盘中提前规避的。最后再分享一个小技巧飞猪这类旅行背景的笔试对“读题速度”的要求比一般公司高。我建议备考时多拿长题干模拟题训练先在草稿纸上写出数据流再动手敲代码。如果遇到完全没思路的题也先把暴力解法写上去能过一部分测试用例是一部分。笔试评分不是非黑即白暴力解也能拿到分段分数。希望这些经验能帮你在下一场笔试里少踩几个坑多拿几分。