拓冰建站拓冰建站
首页 / 资讯中心 / 正文

饿了么秋招终端岗笔试复盘:题型拆解与备考指南

先说结论饿了么2024年秋招终端岗的笔试整体难度在互联网大厂里属于中上没有特别偏门的题目但考察面很广对基本功要求不低。如果你正在准备25届或者26届的秋招这篇复盘应该能帮你少走不少弯路。我投的是终端方向笔试用的是牛客网在线测评全程摄像头监控加屏幕录制时长大概120分钟题型分布是单选题、多选题、填空题加两道编程题。单看题型好像挺常规但真正坐下来做题的时候你会发现它考的不只是“会不会”而是“熟不熟”。终端岗的考察重点和后台、算法岗有明显区别它更看重你对运行机制的理解、对资源的敏感度以及在实际工程里踩过多少坑。这篇文章我按自己的备考经历和复盘记录来写从笔试题目类型、核心知识点拆解、编程题解题思路、备考方案到踩坑记录完整走一遍给后面要参加类似笔试的同学做个参考。1. 整体设计与备考思路1.1 笔试基本信息与考察范围先说流程。饿了么的秋招笔试通知一般提前2到3天发到邮箱和短信你需要提前在牛客网上把环境测试好。我当时遇到的一个小插曲是摄像头驱动一直识别不了后来换了Chrome浏览器、关闭所有后台占用摄像头的软件才解决。这里提醒一句笔试当天不要开任何屏幕共享类工具、弹窗拦截软件否则很容易被判作弊。从题目范围来看终端岗笔试大致覆盖了五个方向计算机基础操作系统、网络、数据结构与算法前端方向JavaScript、浏览器原理、CSS/HTML、框架React/Vue客户端方向Android/iOS基础、跨端方案、内存管理、多线程工程化与监控构建工具、CI/CD、埋点、稳定性治理场景题与开放题定位线上问题、性能优化、架构设计选择题里面前端的比重会比客户端略高一些这可能和饿了么终端团队的技术栈有关Web端和移动端都有大量业务依赖。但即便是客户端方向的题目也逃不开JavaScript和浏览器相关的考察所以别指望只抱着一本《Android开发艺术探索》就去考试。1.2 为什么考这些从企业视角看考察逻辑我刷完题之后复盘发现这些题目背后其实有一套很明确的筛选逻辑。终端岗最核心的诉求是在复杂的业务场景下保证用户体验流畅、稳定、可监控。所以笔试不会只问你“这段代码输出什么”而是会反复从“内存、性能、并发、稳定性”几个角度出题。比如操作系统里考死锁、进程调度不是单纯背概念而是希望你理解App卡顿、ANR、资源竞争背后到底发生了什么。网络里考TCP握手、HTTP缓存是因为终端的每一个请求都直接影响页面加载速度和省流量策略。框架里考虚拟DOM、diff算法、响应式原理是因为实际业务里列表渲染、状态管理真的会遇到性能瓶颈。所以我的建议是备考时不要孤立地记知识点而是每学一个东西都问自己一句“这个知识点在终端开发里解决了什么问题”。带着这个问题去复习你会发现选择题的命中率会高很多。2. 核心笔试模块拆解2.1 JavaScript与前端基础从语言特性到浏览器原理JavaScript在终端岗笔试里的分量大概能占到选择题的三分之一。考察的点比较集中首先是语言本身的特性原型链、闭包、事件循环、作用域、this指向、类型转换。这些题目看起来简单但很容易在细节上翻车。举个例子题目给了这样一段代码for (var i 0; i 5; i) { setTimeout(() { console.log(i) }, 100) }问输出结果。如果你只答“5个5”那只能算基础过关。它还会接着问改成let会输出什么如果不用let怎么用闭包解决用Promise怎么实现顺序输出这几个追问才是真正的区分度所在。浏览器原理方面考得比较多的是渲染流程、回流和重绘、事件委托、浏览器缓存机制、跨域方案。其中缓存机制几乎每年必考强缓存和协商缓存的区别、Cache-Control和Expires的优先级、ETag和Last-Modified的对比这些都是终端性能优化的基石。我在复习时把这些整理成了一张对比表非常管用。缓存类型主要字段触发条件优点缺点强缓存Cache-Control、Expires未过期直接使用本地缓存不发起请求速度最快服务端更新后客户端无法感知协商缓存ETag、Last-Modified强缓存失效后携带条件请求能感知服务端变更每次都要发请求多一次往返框架方面React和Vue都会涉及但深度不算特别深。React重点在虚拟DOM、diff算法、生命周期现在更多考Hooks的依赖收集、受控组件和非受控组件。Vue重点在响应式原理、依赖收集、nextTick、computed和watch的区别。我建议把两个框架的核心原理路线图自己在纸上画一遍画得出来才算真懂了。2.2 客户端基础与跨端能力内存、线程与原生交互客户端方向的选择题考得比较密集的是内存管理、多线程、消息机制和跨端方案。Android方向常考的有Activity的启动模式和生命周期、Handler的机制Looper、MessageQueue、Message、内存泄漏的常见场景、垃圾回收机制、进程间通信Binder、AIDL。iOS方向常考的有Runloop、ARC和MRC、循环引用、GCD和NSOperation的区别、KVO和KVC的实现原理。如果你只准备了其中一个平台也千万不要放弃另一个平台的基础题。因为饿了么是本地生活超级App业务形态非常复杂终端团队里既有Android也有iOS还有做跨端框架的。笔试里出现“Flutter和React Native的渲染机制有什么区别”“小程序双线程模型了解吗”这类题目一点都不意外。跨端方案这块最近两届秋招的热度明显在上升。Flutter的Skia自绘引擎、RN的JSBridge通信、小程序的双线程模型逻辑层和渲染层分离这些概念最好能用自己的话讲清楚甚至能画出它的架构图。选择题里它往往会结合性能问题来考比如“为什么Flutter的滚动性能比RN更稳定”本质是渲染通道不同Flutter直接走Skia绕过了原生控件的布局系统。2.3 网络、操作系统与工程化终端开发者的底层内功网络部分重点在TCP/UDP、HTTP/HTTPS、DNS解析、WebSocket。TCP三次握手和四次挥手属于必背内容但近几年笔试更喜欢结合题目场景来考比如“在弱网环境下为什么TCP的拥塞控制算法会导致请求变慢”“如何优化HTTPS的握手耗时”这类问题没有标准背诵答案需要你真正理解协议的设计意图。操作系统方面进程和线程的区别、死锁的四个必要条件、虚拟内存和物理内存的映射、常见的调度算法先来先服务、短作业优先、时间片轮转这些都属于基础送分题。真正容易丢分的是它和终端场景结合在一起的时候比如“App进程被杀掉后为什么有些数据能恢复这背后涉及Linux的什么机制”这时候你要联想到进程的创建、Binder通信、以及AMS对进程的管理。工程化方向一般会考Git操作、Webpack/Vite的打包原理、CI/CD的基本流程、代码质量与埋点监控。比如“Webpack的Loader和Plugin有什么区别”“sourcemap在线上定位问题时的作用是什么”“前端埋点一般有哪几种方案各自的优缺点”这些题不深但你得真的在项目里用过、配过、踩过坑才能答得准。我当时在简历里写了“通过埋点系统定位线上白屏问题”笔试就真的考了“如何设计一个前端埋点SDK需要考虑哪些因素”。这提醒了我一个很重要的点简历上写的每一个项目经历都可能变成笔试里的场景题。所以项目一定要自己做、自己总结不能背别人的项目经验。3. 笔试编程题与解题思路3.1 经典题目复盘依赖解析与拓扑排序第一道编程题是一个依赖解析问题大致题意是有一组任务每个任务依赖若干个其他任务给定依赖关系输出一种合法的执行顺序。如果存在循环依赖输出异常提示。看到“依赖”“执行顺序”这两个关键词就要立刻反应过来这是典型的拓扑排序。我当时的思路是根据依赖关系构建邻接表和入度数组将所有入度为0的任务先入队列依次出队把该任务指向的后继节点入度减1入度变为0的任务继续入队最后如果已执行的任务数量不等于总任务数说明存在环这道题的时间复杂度是O(VE)空间复杂度是O(VE)。在终端场景里它对应的是“多模块打包时的依赖关系处理”和“启动任务初始化顺序”这两个真实问题。所以输入描述里就用“启动任务”“模块初始化”来包装很多人没发现这层对应关系硬生生当成纯算法题做反而容易在边界条件上出错。需要注意的边界点有三个任务编号可能不是连续的比如从0到n之间跳过某些编号同一个任务可能被多个任务依赖输入里可能出现重复的依赖关系需要去重。我当时用了一个Set来存邻接表避免了重复边的干扰。3.2 经典题目复盘字符串压缩与解压第二道编程题是字符串压缩与解压规则是3[a]表示aaa2[bc]表示bcbc支持嵌套比如2[a3[b]]表示abbbabbb。要求实现一个解压函数并处理非法输入。这道题考察的是栈的运用和字符串处理能力。我当时的做法是维护两个栈一个存数字一个存字符串。遍历原字符串时遇到数字累加解析出完整的数字注意可能是多位数比如10[ab]遇到[把当前已经拼接的字符串和数字分别入栈然后重置遇到]从栈里弹出数字和之前的字符串把当前字符串重复n次后拼回去遇到普通字符直接拼到当前字符串嵌套的情况自然就被栈的后进先出特性处理了。我还加了一个辅助函数判断括号是否匹配避免出现3[a这种非法输入导致死循环。这道题在终端场景里对应的其实是“大包体积优化中的字符串资源压缩”和“协议传输中的字段压缩”虽然包装得很轻量但说白了就是想看你能不能熟练使用栈解决嵌套结构问题。类似的题还有“实现一个简单的计算器”强烈建议多练几道同类型的。3.3 代码书写与调试技巧笔试的代码编辑器不像本地IDE那么智能没有自动补全报错信息也比较有限。所以我总结了几个很实用的技巧第一先在纸上或者草稿区把思路整理好再动手写。笔试时间紧张但也不要上来就敲代码。先在注释里把步骤写清楚后面写代码的时候思路会顺很多。第二所有函数入口都要做边界检查。空字符串、极端重复次数、嵌套层数特别深的情况都要考虑到。竞赛选手经常栽在“90%的用例都过了但就是不知道哪一两个边界用例挂了”。第三用稳定的时间复杂度换取正确性。笔试不是面试不考虑你的代码是否最优雅最终评判标准就是用例过没过。如果你能想出O(n^2)的暴力解法但想不出O(n)的优化解那就先把暴力解法写出来拿部分分不要在一道题上卡太久。第四小心全局变量的污染。笔试平台一般会用多个测试用例连续调用你的函数如果你在函数外面定义了全局变量且函数内部直接修改它第二个用例就会受影响。我当时就因为这个原因挂了一个用例排查了好久才发现是全局变量没重置。我建议平时刷题就用牛客网的在线编程环境练习因为它和笔试题的输入输出格式几乎一模一样甚至更难一些。熟悉的输入解析、输出格式、异常捕获方式都能减少考试时的紧张感。4. 实操备考方案与时间规划4.1 高效刷题路线三阶段递进法我是从8月初正式开始准备秋招笔试的整个备考周期大概5周。这里分享一条我梳理出来的刷题路线适合有一定基础、但还没达到竞赛水平的同学。阶段一第1周基础巩固。把所有笔试涉及的知识点列成清单逐个过一遍。我用的资料是《JavaScript高级程序设计》前几章、图解HTTP、图解TCP/IP配合一些免费的面试题仓库。这个阶段不追求刷题量而是把所有概念性的东西先扫一遍保证选择题不丢分。阶段二第2-3周刷题强化。每天固定刷3到5道LeetCode中等难度的题目重点关注数组、字符串、链表、二叉树、动态规划这几类。这里不要贪多每道题要尽量把思路写清楚并且尝试用两种解法解答。终端岗的笔试算法题一般不会超过LeetCode中等难度所以不需要花太多时间在难题、偏题上。阶段三第4-5周模拟实战。使用牛客网的历年真题和模拟题严格按照考试时间来做。我大概做了6套完整的模拟题每次做完都认真复盘选择题里错的知识点整理成文档编程题里没写出来的解法重新写一遍。这个阶段的提升是最快的因为你会发现自己的薄弱点非常集中补起来效率很高。4.2 简历与项目准备的联动笔试的备战不只是在题海里刷题更是对简历项目的重新梳理。我花了整整一个周末把简历上写的每一个项目都按照以下模板重新整理了一遍业务背景这个项目解决什么问题服务多少用户技术方案用到了哪些核心技术栈为什么选这个方案个人贡献我具体负责哪些模块做了哪些优化量化结果性能提升了多少崩溃率降低了多少页面加载时间从多少降到多少这个过程帮了我很大的忙。因为选择题和编程题是机器判分但场景题和开放题更看重你的工程思维而工程思维往往就来自你对项目的理解深度。比如“如何设计一个通用的安装包体积优化方案”这种题如果简历里有“对App进行包体积优化将首包体积降低30%”的经历你就有了说不完的素材。还有一点很多公司的笔试系统会允许你调试代码但不会允许你切出页面去查资料。所以不要把希望寄托在百度上所有内容都要装进脑子里。这个过程虽然痛苦但确实是提升最快的阶段。4.3 工具使用与环境准备笔试环境这一块很多人会忽略但恰恰是最容易出问题的。我建议在正式笔试前找一段完整的时间做一次全流程模拟确认网络稳定最好有线网络加手机热点双保险这里不涉及任何特定软件只是多一层保障提前安装好牛客网指定的浏览器版本关闭所有无关插件测试摄像头和麦克风确保能被测评系统正常识别准备一个安静的独立空间提前告知家人不要在笔试期间打扰把身份证或学生证放在手边有些笔试需要二次身份核验如果你是使用学校实验室或图书馆的电脑一定要提前一天测试权限。实验室电脑有时候有还原卡重启之后所有软件都没了这种坑一旦踩上笔试基本就废了。5. 常见问题与踩坑记录5.1 笔试环境与流程问题我身边有同学在笔试时遇到过“摄像头黑屏但系统不提示”的问题。这里总结一下常见问题方便你们提前排查。常见问题可能原因解决方案摄像头无法开启浏览器权限未开启在地址栏右侧点击摄像头图标选择允许页面一直加载不出来浏览器版本过低换用Chrome/Edge最新稳定版代码提交后没有反馈等太久直接刷新页面先记录当前代码到本地再刷新重试屏幕录制失败隐私设置禁止录制在系统隐私设置里允许浏览器录制屏幕考到一半被强制交卷超出规定时间未操作每道题做完后尽快点击保存/提交这些问题看起来都很基础但考试时高度紧张再碰上技术故障心态很容易崩。我建议把常见的环境问题提前查好甚至可以把解决方法抄在纸上放在电脑旁边作为应急预案。5.2 答题策略与心态问题这里单独说一下答题策略。选择题和填空题建议控制在60分钟内剩下的时间全部留给编程题。如果选择题遇到拿不准的不要纠结太久先标记出来等编程题写完再回头思考。我自己的经验是一道选择题超过2分钟还没思路直接猜一个因为时间成本太高。编程题一定要先把第一道简单题做出来再做第二道。我当时第一题写了大约20分钟第二题写了35分钟剩余时间用来检查和补充边界用例。如果你在第二题上卡了超过20分钟建议先回到第一题把一些可能出问题的用例再测一遍先把基础分稳到手。心态方面我想说一个很多人的误区秋招笔试是允许失败的甚至是可以多次投递的。我认识的一些同学第一次笔试发挥不好就心态炸裂后面几场也发挥失常其实非常可惜。笔试更像是一个“熟练度测试”你练得越多临场发挥越稳定这是可以复利的。5.3 一些独家的笔试小技巧最后分享几个可能只有实际参加过多场笔试才会发现的细节技巧。第一巧用自定义测试用例。牛客网上传代码后可以自己输入测试用例来验证。很多人只跑了题目自带的示例就直接提交但实际上题目给的例子往往是最常规的情况你完全可以用它验证一下边界空输入、单字符、超长字符串、重复字符等等。这一个习惯能帮你多挽救很多用例。第二尽量别在代码里写System.out.println调试输出。有些笔试平台会把你的标准输出作为答案的一部分如果你忘了删调试代码明明逻辑是对的结果却因为输出格式不对被判错。要调试的话用平台的打印功能提交前仔细检查一遍删干净。第三注意输入描述里的数据范围。数据范围决定了你该用哪种算法。假如n最大是10^5O(n^2)大概率超时你就得想O(n)或O(nlogn)的解法如果n最大是100暴力解就没问题。这个判断在笔试中能帮你快速选择算法方向。第四开放题不要留白。终端岗的笔试最后往往会有一两道开放性问答题比如“如何设计一个App的启动优化方案”。这类题目没有标准答案但哪怕你只写了三五行也比空着强。它考察的是你的思考框架不是标准答案。按照“问题定义→目标分析→方案拆解→落地验证→指标监控”的框架来答一般都能拿到一个不错的分数。写在最后回想这届秋招的笔试备战过程我最想说的一个体会是终端岗笔试的核心不是“押题”而是“底层思维”。你背过的每一个知识点、刷过的每一道题最后都会在某个场景题里以另一种形式出现。把基础打牢把项目吃透保持稳定的心态比什么都重要。如果你也在准备终端方向的秋招希望这篇复盘能帮你建立一个清晰的备考框架。别焦虑按照自己的节奏一步步走每一场笔试都是在把你推向更适合的位置。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门