
移动客户端方向的校招笔试说实话是很多人容易低估的一道门槛。尤其是春招第二批时间紧、名额有限笔试环节刷人比例相当高。我参加的是2023年腾讯音乐春招移动客户端岗的第二批笔试从收到邮件到正式开考只有几天准备时间。那场笔试给我留下的印象很深不是因为题目有多偏而是它很典型——几乎把移动客户端岗位笔试会遇到的题型、难度、坑点都集中到了一张卷子里。如果你也在准备类似的大厂移动客户端岗位笔试这篇复盘值得认真看看。1. 笔试基本信息与心态准备先搞清楚规则再谈刷题1.1 这个岗位的笔试到底在筛选什么移动客户端岗的笔试和后台开发、前端开发有本质区别。后台笔试可以纯考算法和数据库前端笔试会重点铺HTML/CSS/JS三件套而移动客户端岗位的笔试通常混合了计算机基础 客户端特性 算法题三个部分。腾讯音乐的这次笔试也不例外题型分布大致是单选题、多选题和两道编程题整体时长充裕但题量不小几乎没有空下来检查的时间。岗位方向虽然统称“移动客户端”但笔试内容不会严格区分Android或iOS。招聘方默认你至少熟悉其中一端笔试中出现的客户端相关题目多是通用概念比如生命周期、事件分发、线程模型、内存管理机制这类两端共通的底层知识。少数题目可能偏Android多一些毕竟国内移动开发生态里Android岗位数量更大但iOS方向的同学也不用慌基础扎实就不会被难住。1.2 在线笔试环境与设备自检清单这类笔试一般通过牛客网或赛码网进行全称是“在线监控笔试”。考前邮件里会写明网址、考试时间、登录账号和密码同时强调摄像头监控和切屏检测。很多人在这一步就吃亏了——设备不兼容、浏览器不认摄像头、切屏超过阈值被判作弊白白浪费一次机会。下面是我整理的自检清单笔试前一晚务必过一遍使用Chrome或Edge最新版提前装好牛客网要求的浏览器插件不然后续的输入输出自动评测功能会失效。电脑摄像头和麦克风打开用笔试平台提供的“设备检测”功能自测确认拍照功能可用光线充足、人脸完整可见。网络冗余准备手机热点作为备用遇到断网能第一时间切换别因为网卡导致自动交卷。关闭所有无关软件包括微信、钉钉、企业IM避免突然弹出的消息触发切屏告警。手机调静音并放远一点避免来电干扰笔试期间未经允许使用手机属于作弊行为。我那次笔试就碰到一个插曲房间里的路由器在考试中途闪断了一下桌面端考试系统弹出了断网提示虽然恢复后一切正常但那几秒钟心跳确实加速了。后来我在机房考试的室友告诉我他的考场还发生过有人电脑蓝屏直接交卷的情况。设备问题看起来和题目无关却可能直接决定你能否正常完成考试一定提前把环境调试到最稳状态。1.3 时间分配90分钟里的草稿纸战术整体时间分配上我的建议是选择题部分控制在35到40分钟左右剩余50到55分钟全力主攻编程题。如果选择题卡壳超过两分钟没思路就先标记跳过不要在一道概念题上空耗。笔试考的是综合得分率不是单题正确率这和面试里跟面试官来回切磋的思路完全不同。草稿纸和笔是标配但很多人只拿来做算法演算其实选择题里的数据结构推演、选项对比、时间轴梳理同样需要在草稿纸上进行。比如Activity或UIViewController的生命周期顺序单凭脑子想很容易记错画一条时间轴反而一目了然。我考试时在草稿纸上画了三四张生命周期图虽然题目本身不难但这种物理化的梳理能显著降低低级失误率。2. 选择题与多选题移动客户端基础知识的高频考点与易错辨析2.1 操作系统与网络不是背定义而是理解机制移动客户端笔试的选择题范围比较固定操作系统、计算机网络、数据结构、数据库、客户端特性是五大常客。操作系统部分进程与线程的区别、死锁产生的四个必要条件、虚拟内存与页面置换算法是出现频率最高的几个知识点。网络部分则集中在TCP三次握手与四次挥手、TCP与UDP的区别、HTTP与HTTPS的差异、DNS解析过程上。这类题目有一个共同特征表面考概念实际考机制。比如“TCP为什么需要三次握手”这种题单纯背出“确认双方收发能力”的结论是不太够的题目经常会给几个容易混淆的选项比如“避免拥塞”“减少延迟”“保证数据加密”等你要能把三次握手每一步的报文状态和目的对应上才不容易被干扰项带偏。复习时应该按“为什么这样设计”“少了这一步会怎样”的思路来理解而不是死记硬背定义。2.2 客户端组件与线程模型生命周期和主线程的经典陷阱客户端相关题目的经典考点有三块组件生命周期、线程模型与消息机制、内存管理。生命周期题常考Activity在异常情况下的重建流程比如旋转屏幕时onSaveInstanceState和onRestoreInstanceState的调用时机或者Fragment在ViewPager中的生命周期变化。iOS端对应的是App进入后台、从后台恢复时viewWillAppear、viewDidAppear等回调的顺序。如果你只记了一张被动的生命周期表格面对“收到电话时页面处于哪个阶段”这种场景题还是容易出错。最好的方法是自己写个小Demo打日志把每个回调的实际输出顺序跑一遍亲手验证过的记忆远比背表格深刻。线程模型是移动端笔试的重灾区。Handler消息机制的原理几乎是Android岗位必考涉及Looper、MessageQueue、Handler三者如何配合以及主线程为什么不能做耗时操作。iOS的RunLoop本质上是同一类问题的另一种表述。笔试中常见的踩坑点在于new一个Handler时如果Looper还没有prepare运行时会直接抛异常子线程更新UI会崩溃或者不生效。这些现象如果只是听过而没有实际触发过做选择题时很容易在“能不能更新”这种判断题上犹豫。内存管理方面iOS的ARC与MRC、循环引用、weak和strong的区别是高频题Android则是内存泄漏的常见场景。题目喜欢考察的是识别类题目——给出几个代码片段判断哪个会造成内存泄漏。比较典型的是非静态内部类持有外部Activity引用、Handler延迟消息持有Activity上下文、单例对象持有Activity实例。这些场景你在平时开发中其实都遇得到只是没意识到它们背后都是同一种问题生命周期较长的对象持有了生命周期较短对象的引用导致后者无法被回收。2.3 设计模式与架构选型掌握对比型题目的答题结构架构和设计模式部分的题目经常以对比形式出现比如MVC、MVP、MVVM三者的区别或者观察者模式、单例模式、工厂模式的适用场景。这类题在单选里难度一般在多选里就需要注意选项之间的细微差别了。以MVVM为例常见的错误选项会写“MVVM中ViewModel可以直接持有View的引用”这句话是错的正确答案应该是通过数据绑定或LiveData/Combine实现单向依赖。再比如Robust和热修复框架的对比很多同学只是听过名字不知道它们分别基于什么原理做题时全靠猜。备考阶段可以把常见的架构模式整理成一张对比表逐项写出数据流向、通信方式、优缺点和典型应用场景考前过一遍比临时翻书高效得多。3. 编程题实战从读题到AC的完整思路链3.1 第一道题双指针类问题的破题套路编程题是移动客户端笔试中区分度最高的一部分。两道题通常一道偏简单、一道中等偏难第一道题优先用暴力解法拿部分分数不是最优策略更稳的节奏是快速判断题型、套相应算法模板。我在腾讯音乐这场笔试遇到的题目中有一道是类似于“查找有序数组中和为目标值的两个数”的变形题只需要返回下标组合并且题目明确指出数组已排序。很多人看到“两数之和”就会下意识写HashSet但实际上面对已排序数组双指针做法才是最优解空间复杂度能压到O(1)。这类题的核心破题思路可以总结为三步判断数据特征。看题目有没有“有序”“连续子数组”“不重复子串”这类字眼一旦出现优先考虑二分、双指针、滑动窗口。确定指针移动逻辑。左指针和右指针分别代表什么区间移动条件是大于、小于还是等于目标值先想清楚再写代码。处理边界。循环条件是left right还是left right两个指针相遇时等于目标值的情况要不要额外判断这直接决定能不能一次通过隐藏用例。3.2 第二道题动态规划与状态定义的核心方法第二道编程题往往开始上强度常见题型是动态规划或DFS/BFS搜索。动态规划题的难点不在转移方程本身而在状态定义。状态定义一旦歪了后面所有推导都是白费功夫。拿到一道动态规划题我习惯先在草稿纸上写三句话这个问题的目标是什么最后一个动作有几种选择每种选择对应之前哪个状态。以最长递增子序列为例目标是求整个数组的最长递增子序列长度最后一个数字nums[i]如果被选入子序列那它前面必须是某个以nums[j]j i且nums[j] nums[i]结尾的子序列所以状态dp[i]代表以nums[i]结尾的最长递增子序列长度转移方程就是dp[i] max(dp[j] 1)其中j i且nums[j] nums[i]。这三句话理顺了代码只是翻译问题。笔试时如果实在想不到最优解也务必把暴力递归的版本写出来。在牛客赛码这种OJ系统上部分用例能通过就比交白卷强很多。很多同学会犯一个毛病觉得暴力解法不好意思写宁愿空着也不提交这其实是在浪费分数。笔试评分是按通过用例数量来的能拿一分是一分。3.3 边界与复杂度AC之外的隐形评分标准笔试编程题有两个容易被忽略的评分维度时间复杂度和边界处理。题目通常会在描述中给出数据范围比如n 10^5这种。当n到10^5量级时O(n²)的普通双层循环基本会在超时边缘必须想到O(n log n)或O(n)的算法。这是出题人藏在题目描述里的提示阅读时第一件事就是把数据范围圈出来。边界条件上最常见的坑是空数组、单元素数组、全相同元素数组、最小值/最大值溢出。比如求中位数或平均数的题目虽然不会故意卡int溢出但从长远看建议养成用long或long long的习惯。提交前的最后两分钟不要急着交卷顺手把代码翻一遍循环边界用的是还是、数组下标有没有从0开始、返回类型是int还是long。我那次笔试有同学第一题明明思路正确却因为数组下标越界在运行时爆红这种事情在实际考试中屡见不鲜千万不要因为粗心丢分。4. 笔试中的隐形失分点我自己踩过的坑4.1 读题不审题题目给了多少数据范围我在笔试里踩过最大的一个坑就是审题不仔细。有一道选择题题干里明明写着“以下关于xxx的描述正确的是”四个选项里有两个看起来都对但其中一个是“在某些特定条件下成立并不是普遍正确”。那个选项设置在常规理解下是没问题的但在题目的严格语境里就是错的。这种题真正考察的不是知识面而是审题能力。后来复盘时我发现很多选择题的翻车不是因为不会而是因为只记住了知识点的通常叙述没有注意题目限定的场景和前提条件。编程题更是如此。题目给了数据范围说明意味着你的算法必须在该约束下通过同时它也暗示了期望的复杂度。如果数据范围设计成1e9而不是1e5就说明不能遍历全部状态。这些信息全部写在题干里不读就等于主动放弃了提示。4.2 多选的倒扣分机制不确定就少选腾讯音乐这次笔试的多选题有一个特别需要注意的规则漏选得分错选不得分。这个规则对保守型选手非常友好也意味着答题策略是“少选、不赌”。如果一道多选题你只能确定两个选项是正确项另外两个选项完全没有把握这时最稳妥的做法就是只选这两个确定的选项拿一个稳定分数而不是把所有看着像的都勾上赌那个不确定的选项。我们日常开发中习惯性认为“多知道一点总是好的”但笔试里这是一种危险心态。多选题的干扰项设计者比你想象的更狡猾他们经常从你认为对但实际有反例的表述里挑选选项。比如“所有iOS对象都在主线程中创建”这种绝对化表述你看第一眼觉得不对再看第二眼觉得好像也有道理犹豫之间就勾上了。应对方法也很简单凡是出现“一定”“必须”“全部”“任何”这类绝对化词语的选项都要多留个心眼。4.3 忘记验收编译通过不等于用例通过编程题做完之后很多人的习惯是看到“编译通过”就长舒一口气觉得自己稳了。实际上编译通过只代表语法正确你的逻辑能不能跑出正确结果完全是另一回事。我习惯在提交前把代码里的核心逻辑自己在草稿纸上跑一个简单用例比如输入一个小数组沿着循环手算一遍输出看是否与预期一致。这个过程不需要浏览器不需要Debugger几十秒就能完成却能拦住大量低级逻辑错误。更稳妥的做法是自己在代码里构造几个边界用例手动单测。比如数组长度为1、两个指针相等、目标值不存在等场景。OJ系统一般不会限制你在代码里写测试函数只要最终提交的入口函数符合签名要求即可。写几个测试用例跑一遍再提交对提高一次通过率非常有帮助。5. 笔试后的48小时复盘、补漏与复试衔接5.1 真题回忆与错题整理把一次笔试变成三次学习笔试结束后48小时是记忆的黄金窗口一定要趁题目还没从脑子里消退时做一次完整复盘。我通常会把所有能回忆起的题目按题型、考点、错因分成三类知识盲区、思路偏差、低级失误。知识盲区是指这个知识点完全不熟悉需要系统补课思路偏差是题目看懂了但方向不对需要重新梳理解题路径低级失误则是明明会做却因为审题、计算、代码细节丢了分。这种方法的核心价值在于它把一次笔试变成了一次精准的学习起点。你不需要面面俱到地从头复习只需要针对错题分布集中突破。比如如果错题集中在网络部分花两个晚上把TCP、HTTP、DNS过一遍比漫无目的地看一个月八股文高效得多。笔试的复盘还是很好的面试准备材料。面试官经常围绕你笔试题目的答题情况追问特别是编程题。如果你能把自己的解题思路、优化方案、踩过的坑完整讲一遍面试官会觉得你是真正理解了题目而不是背了模板。建议把编程题的思路整理成文字版包括状态定义、边界条件、时间复杂度和可能的优化方向在面试前过一遍。5.2 复试前的高频追问准备笔试题目是最佳的模拟题移动客户端岗的复试通常会有技术一面面试官会从笔试透露的信息出发继续深挖。基于笔试题目本身有几种追问方向非常常见如果编程题用了双指针面试官会问为什么HashSet在这种情况下不是最优解、两者的时间空间复杂度分别是多少。如果选择题涉及Handler消息机制面试官会让手写一个简单的Handler模型或者询问主线程Looper启动时整个系统做了什么。如果提到内存泄漏面试官大概会让你举两个实际开发中遇到过的泄漏场景并给出排查思路。所以复试准备的关键一步就是拿笔试题目做主线向外扩展。不要只停留在把题目做出来再多往前走一步如果我写完这道题面试官会追问什么我怎么回答才能体现真实项目的经验把这一步走完面试时的回答质量会明显高于临时抱佛脚背诵八股文。5.3 心态管理与时间线规划别让一次笔试定义全局最后聊一点和具体题目无关但同样重要的事校招是长线过程一次笔试的成败不能定义全局。腾讯音乐的春招笔试只是校招流程中的一个节点即使某一部分没有达到预期后续还有面试环节可以弥补。笔试没有通过后续也有其他公司、其他批次的机会。我见过不少能力不错的同学因为笔试发挥失常心态崩掉直接放弃了后续投递这非常可惜。笔试之前的心态调整同样重要。考前不要突击刷题到深夜保证充足睡眠。考试当天提前一小时进入状态把电脑环境、摄像头、网络确认一遍然后闭上眼睛深呼吸几分钟。这些看似和考试内容无关的准备工作往往比多刷一题更能影响最终分数。我自己的体会是笔试是“下限保底、上限看发挥”的比赛状态平稳比水平超常更重要。如果你正在准备移动客户端的春招或秋招笔试建议按时间倒推规划优先过高频知识点再集中刷一定量的编程题考前留两天专门复盘错题。这套流程看起来不复杂但能坚持执行完的人其实不多。把基本功打扎实把心定下来你会发现自己离通过笔试并没有想象中的那么远。