
最近很多读者在后台问我网易提前批笔试的事尤其是iOS方向问得最多的就是“到底考什么”“怎么准备”“有没有真实的题型参考”。我自己当年也经历过好几家头部大厂的校招笔试iOS岗的题目风格虽然各有差异但核心考察点其实高度重合。今天就拿网易2023校招提前批iOS开发工程师笔试这个具体场景把整场笔试从题型拆解、知识考点、编程题思路到做题策略完整梳理一遍。无论你投的是网易还是其他大厂这篇都能当一份通用的iOS校招笔试备战地图来用。1. 笔试整体形态与考察思路拆解1.1 网易校招iOS笔试的基本盘先说结论网易的校招笔试不管提前批还是正式批iOS方向的题目结构一般都分成三大块计算机基础知识、iOS专项技术题、在线编程题。前两块通常是选择题加简答题的形式部分场次会掺一些填空题和纠错题最后一块是1到2道代码题要求在编辑器里手写完整可运行的代码或伪代码。从考察目标的维度来看这个大题结构是有清晰逻辑的。计算机基础部分筛的是“底子厚不厚”iOS专项筛的是“对这个平台有没有形成体系化的认知”编程题则直接验证“能不能把思路落成代码”。很多同学只刷LeetCode结果挂在iOS专项上或者反过来iOS知识背得滚瓜烂熟基础题一塌糊涂这两种情况我在实际辅导里都见过不少。提前批和正式批还有一个明显差异——提前批的题量通常更少但单题分值更高而且iOS专项的占比会明显提升。原因不复杂提前批的定位是抢人考察更聚焦更想确认你有没有真正的iOS开发潜力而不是靠刷题刷出来的熟练度。所以你会发现提前批里会出现一些“偏实战”的题目比如给你一段有内存问题的代码让你找bug或者让你设计一个图片缓存组件这类题在正式批反而少一些。1.2 提前批与正式批的差异提前批和正式批笔试除了题目结构上的差异还有几个点是很多同学容易忽略的。第一个是简历筛选强度的差异。提前批因为岗位名额少简历筛选阶段就会刷掉很多人能拿到笔试机会的基础普遍不错所以笔试题目会更有区分度简单题送分题会少一些中等偏上的题目占比更高。这意味着你复习时不能只盯着基础那些“高频但稍微进阶”的点才是拉开差距的关键。第二个是时间安排的差异。网易提前批笔试一般安排在7月到8月这个时间段很多同学还在暑期实习或者刚结束实习复习时间碎片化严重。从我带过的学生反馈来看提前批挂掉的人里有三成左右不是不会做而是没做完——选择题纠结太久后面编程题没时间写。这个后面我会专门讲做题节奏这里先记住一个原则网易的笔试题量是按“会做的人能在规定时间内完成”来设计的做不完基本等于准备不充分。第三个是竞争背景的差异。投提前批iOS岗的同学很多手里已经有实习经历或者独立上架过App笔试时遇到实际场景题的概率更高。换句话说提前批不是“小正式批”它的题目风格更贴近一线工程师的实际工作内容复习时如果只看面经不看工程实践很容易在简答题和场景题上吃大亏。2. iOS基础核心语言与内存管理2.1 OC语言与Runtime必考点iOS专项的第一大块几乎必考Objective-C的语言特性和Runtime机制。很多同学会问现在Swift都这么流行了为什么笔试还考OC原因很简单现有的大型App和组件库大多还是OC写的面试官需要确认你能读懂老代码、能维护混合工程。而且Runtime这套动态机制OC的很多设计思想是理解iOS底层的钥匙考OC本质上是考你对iOS运行时的理解深度。先说OC语言本身的必考点。分类Category和扩展Extension的区别、关联对象的使用场景、KVC和KVO的实现原理、Block对变量的捕获机制这四个点基本是轮流出现的高频题。我建议每个点都要准备到“能讲清楚原理”的程度而不是停留在“知道有这个东西”。以Block捕获变量为例很多同学只背结论——局部变量要用__block修饰才能在Block里修改。但笔试如果出简答题或辨析题你得能解释清楚Block默认捕获的是变量的副本所以你直接修改变量本身是不行的__block的作用是把变量放到一个共享的堆容器里让Block和外部代码操作的其实是同一个对象而静态变量和全局变量本来就在全局区所以不需要__block也能直接修改。然后是Runtime这块一定要重点准备。Object-C对象模型、isa指针、方法查找流程消息发送机制、消息转发流程、Method Swizzling的原理与风险这几项构成了Runtime考察的核心骨架。我推荐的复习方法是用“一个对象调用一个方法”这条主线把整个流程串起来方法调用发生时会先走objc_msgSend通过isa找到类对象再在方法列表中查找SEL对应的IMP如果找不到就沿继承链往上找最终找不到就触发消息转发转发还处理不了就直接崩溃。整个链条搞清楚相关的衍生题基本都能答。这里有一个很多面经不会强调但笔试爱考的点分类为什么能“覆盖”主类方法但不能真正覆盖这个问题的本质在于分类的方法会被添加到类的方法列表中而分类的加载顺序在编译期就决定了排在后面的分类方法会排在最前面所以调用时命中更靠前的方法列表项。但如果你用Runtime的class_addMethod去添加同名方法结果又不一样。笔试选择题里经常用这类细节来区分“背过原理”和“真理解”的候选人。2.2 内存管理与引用计数内存管理是iOS笔试的另一个高频大块可以说十场笔试九场考。核心对象是引用计数、Autorelease、weak指针、循环引用、以及ARC下编译器帮你做了什么。先明确Autorelease的运行机制当一个对象调用autorelease时它会被加入当前autorelease pool当pool被销毁时池中所有对象都会收到一次release。在ARC环境下autorelease pool主要由系统自动管理比如RunLoop每次事件循环的末尾会自动释放但你也可以用autoreleasepool {}手动创建池来控制局部大量临时对象的峰值内存。笔试里常见的出题方式是给一段MRC时代的代码让你写出打印结果或分析有没有内存问题。比如- (void)test { NSObject *obj [[NSObject alloc] init]; [obj retain]; [obj release]; [obj release]; // 这里如果再release一次会怎样 }答案本质上考察的是“释放过度”导致的内存问题。最后一次release后对象的引用计数归零内存被回收如果再调用release就是野指针访问行为未定义通常会崩溃。循环引用的问题怎么考常见考法是给你一段两个对象互相持有对方的代码让你指出问题并修复。比如A持有BB的delegate或block又强引用A这时就需要把其中一方改成weak。笔试的坑点在于有些同学看到__weak就直接写却忽略了代理对象本身是否被别的对象强持有导致代理被提前释放。所以回答这类问题时我建议你画清楚“谁持有谁”的引用关系图再决定改哪一端。这里还要补充一个重点weak指针在对象释放后自动置nil这个机制在ARC里由SideTable维护的weak表来保证底层会涉及一个自旋锁。笔试如果深挖可能会问“为什么weak指针可以自动置nil”你得能答出“系统通过维护一个weak_entry列表在对象dealloc时遍历列表把所有weak指针置为nil同时从weak表中移除对应项”这个层面。3. 架构设计与系统框架3.1 主流iOS架构模式对比架构设计题在网易笔试里出镜率很高常见考法是给一个场景让你选型或者直接问你MVC、MVP、MVVM、VIPER的区别和适用场景。先说面试官最想听到的答题框架。不是上来就背定义而是先说清“架构解决的本质问题是什么”——把代码按职责分层控制依赖方向提高可测试性和可维护性。然后你再说MVC是Apple原生推荐的架构Model负责数据和业务逻辑View负责展示Controller负责协调问题在于Controller容易变得臃肿所以衍生出了各种变体。MVVM在iOS里用的越来越多核心变化是用ViewModel替代了Controller的大部分业务逻辑View和ViewModel通过双向绑定通信Controller退化为装配层。笔试如果让你评价MVVM建议提几个关键点ViewModel的可测试性显著提升因为不依赖View的生命周期绑定机制会增加调试成本需要定位数据流的时候会更困难。这种“有肯定也有批判”的回答比单纯唱赞歌要加分。还有一个容易被忽略的考点是VIPER。很多同学觉得VIPER小众不会考但网易这类大厂反而喜欢用这种“少数派”来识别知识面的宽度。VIPER分成View、Interactor、Presenter、Entity、Router五层每层职责非常单一依赖方向严格向内测试性极好代价是样板代码多。笔试如果考到你能答出它的分层结构和“单向依赖”这个设计核心基本就能拿分。3.2 多线程与GCD、OperationQueueiOS笔试在并发这块的高频考点概括起来就是GCD的队列和任务、线程同步方式、死锁的成因与避免、OperationQueue与GCD的关系。先分清GCD里的概念队列分串行和并发任务分同步和异步组合起来有四种情况。同步派发到串行队列会在当前线程执行不会开辟新线程异步派发到串行队列会开辟一个线程按顺序执行同步派发到并发队列还是在当前线程执行但不开新线程这看起来和串行差不多实际区别在于如果队列里已经有其他任务正在执行同步派发会阻塞当前线程直到其他任务完成异步派发到并发队列则会根据系统并发度创建多个线程同时执行。这四个组合笔试选择题几乎必考务必烂熟于心。死锁的经典考题长这样dispatch_queue_t queue dispatch_queue_create(com.test.queue, DISPATCH_QUEUE_SERIAL); dispatch_sync(queue, ^{ dispatch_sync(queue, ^{ NSLog(hello); }); });问会发生什么答案是死锁。外层同步派发一个任务到串行队列这个任务内部又同步派发一个任务到同一个串行队列而串行队列同一时间只能执行一个任务当前任务还没执行完内部任务永远轮不到互相等待就成了死锁。我在这个考点上见过太多翻车的同学尤其是一些基础不错的人原因被坑在“忘记了串行队列同一时刻只能执行一个任务”这个前提。线程同步的方式笔试问得最多的是信号量dispatch_semaphore和GCD栅栏dispatch_barrier。信号量的原理是维护一个计数值wait时计数减一为负则阻塞等待signal时计数加一唤醒等待线程。栅栏则是用来解决“并发队列里读多写少”的场景在barrier之前提交的任务全部执行完后barrier任务开始执行barrier任务完成后后面的任务才继续保证写入操作不会和读写操作并发。3.3 系统框架UIKit绘制与内存警告处理iOS系统框架的考察里UIKit的绘制机制和内存警告处理是两个容易被临时抱佛脚跳过的点但恰恰是网易笔试喜欢出简答题的地方。先说UIKit绘制。笔试如果问“setNeedsLayout和layoutIfNeeded的区别”你要能答出setNeedsLayout只是标记视图需要重新布局不会立刻执行会在下一个RunLoop周期统一处理layoutIfNeeded则会立即检查是否需要布局如果需要就马上执行布局流程。这个区别在做动画时非常关键你调用layoutIfNeeded之后再修改约束并放入动画Block约束变化才会立即生效否则动画会直接跳到最终状态没有过渡效果。内存警告处理这个考点核心考察你的“抢救意识”。系统内存紧张时会向App发送内存警告App收到后应该尽快释放可重建的资源缓存图片、在支持的地方调用removeFromSuperview、清理无用的ViewController等等。笔试喜欢问的是在didReceiveMemoryWarning里应该做什么、不能做什么。不能做的典型答案是“在回调里做大量计算”因为内存警告本身就是内存不够的信号你再开一堆计算逻辑只会加剧问题。4. 网络、存储与性能优化4.1 网络层与数据解析iOS的网络层考察一般集中在HTTP/HTTPS的基础机制、NSURLSession的使用、数据解析JSON、XML、以及网络请求的优化方案。先说HTTP的基础。笔试常见考法是让你分析一个网站的请求流程或者比较GET和POST的区别。这里建议不要只答表面区别可以往深了说GET的请求参数放在URL中会被浏览器和服务器记录在日志里所以不适合传敏感信息POST的参数在请求体中相对更安全。不过要补充一个容易忽略的点——URL的长度限制不是HTTP协议本身规定的而是浏览器和服务器的限制所以在实际开发中只要URL过长理论上GET就可能出问题。NSURLSession的考察重点有两个一是默认配置和自定义配置的区别二是它的代理方法和回调机制。回答这类题目时我建议抓住“会话”这个概念NSURLSession是基于会话的同一个会话内的请求共享底层连接可以设置公共的请求头、证书策略、缓存策略。如果每次请求都新建一个session就失去了这些优势也更容易产生连接建立的开销。数据解析这块JSON现在绝对主流。笔试如果深挖可能问你JSON解析的性能优化方案。常见方案有四个用懒加载避免一次性解析大量数据带来的卡顿、用子线程解析避免阻塞主线程、用二进制传输格式如Protocol Buffers替代JSON体积更大的文本格式、用增量解析处理超大文件。能答出这四点再加一个“解析前先做数据清洗减少异常分支”的思路基本就是高分答案。4.2 性能优化与耗电治理性能优化这块网易笔试特别偏爱围绕“首页启动”和“列表滑动流畅度”出题。我建议准备几个可以套用的优化清单。启动优化核心思路是减少主线程工作量。能想到的优化点包括冷启动阶段减少动态库加载、减少load方法的耗时操作、把不需要立即初始化的对象延迟到首次使用时创建、避免在AppDelegate里做大量业务初始化。笔试如果给一段启动耗时的分析逻辑你要能指出“时间都花在哪一阶段”——是main函数之前dyld加载、Framework链接还是main函数之后didFinishLaunching的初始化、首帧渲染。列表流畅度的优化思路则更细。常见手段有Cell复用但很多人只调整用却答不出复用的底层原理是对象池图片的解码和渲染放到子线程避免阻塞主线程使用CornerRadius加maskToBounds裁圆角时要注意触发离屏渲染的问题预排版把富文本、行高、布局计算提前完成。笔试选择题经常会考“离屏渲染是怎么引起的、怎么避免”你要记住maskToBounds、shadow、圆角、光栅化都可能导致离屏渲染优化方向是尽量减少这些操作用图片替代或者开启shouldRasterize。耗电治理是iOS开发中越来越受重视的一块笔试也出现过专门针对电池优化的简答题。核心原则概括成一句话就是“减少无效耗能”。具体手段包括定位功能优先用significant location change而不是持续定位、结束不用的网络请求和定时器、在后台时暂停所有不必要的CPU密集任务、推送使用APNs而不是自己维持长连接。回答这类题时要体现“系统级思维”让面试官觉得你用工程师的视角在做全局权衡而不是只是罗列API。4.3 抓包、调试与App上架流程调试和发布流程这个方向很多同学在笔试前完全没准备觉得是实战里才用的东西。但网易笔试里出现过给一张Charles抓包的截图让你分析请求的问题也出现过问“TestFlight和App Store审核的区别”这样的题目。Charles抓包的原理值得搞清楚它是一个中间人代理手机或模拟器的网络请求先经过Charles它再转发给服务器这样就能看到请求的所有细节。笔试如果考到通常关注的是HTTPS抓包要装证书、iOS 10以后要允许信任自定义证书以及部分App为了防止抓包会做证书固定SSL Pinning这时需要在代码里处理或者使用其他方式绕过。这些细节能答出几个说明你真的做过联调和问题排查而不是只看过文档。App上架流程这块重点准备这几个环节申请开发者账号、生成证书和配置文件Provisioning Profile、用Xcode打包上传、TestFlight内测、App Store审核。笔试选择题爱考的是“证书和描述文件的作用”你要能说清楚证书用来标识开发者和App的身份描述文件用来声明设备权限和签名规则两者配合才能让App在指定设备上运行。混合开发方案最近两年也从冷门变热门了主要是UniApp和Flutter这类跨端方案在市场上越来越常见。笔试如果问混合开发和原生开发的选型建议从包体积、性能、开发效率、动态化能力几个维度来对比不要只凭“性能好”和“开发快”这种粗粒度结论答题。我建议准备的时候可以自己列一个对比表把Flutter、React Native、UniApp的优缺点分别写下来比单纯背结论要牢靠得多。5. 实战编程题与笔试经验5.1 手写代码题的常见类型网易iOS笔试的编程题一部分是通用的数据结构和算法题一部分是iOS场景题两类都要准备。通用算法题的准备策略我建议按优先级排序数组、链表、二叉树、字符串、动态规划、栈和队列、贪心、图。不是说要刷透所有专题而是先确保每种基础题型都有一道能完成的代表作。笔试时如果遇到完全没思路的题可以采用暴力解法先拿部分分然后在复杂度优化时再想办法。iOS场景题的复习方向则完全不同。这里举几个真实的出题风格第一类是“实现图片异步加载”。给你一个UIImageView的扩展方法要求传入URL异步下载图片下载完成后回到主线程设置图片。考察点是异步编程、缓存、线程切换。写这类题时建议先检查是否有缓存再发起网络请求最后回到主线程更新UI同时处理图片重复设置的边界条件。第二类是“设计一个LRU缓存”。这个题现在几乎成了大厂笔试的网红题因为既能考数据结构哈希表双向链表又能考业务设计能力。实现时要求get和put的时间复杂度都是O(1)。核心思路是用哈希表定位节点用双向链表维护访问顺序每次访问一个节点就把它移到链表头部缓存满时淘汰链表尾部的节点。第三类是“崩溃防护工具类”。给定一个数组或字典要求实现一个分类方法避免因下标越界或插入nil导致的崩溃。这个题考察的是Category、方法交换Method Swizzling和对系统行为的理解。如果笔试遇到这种题即使时间不够不能完整写完也一定要把你的实现思路写清楚让面试官知道你有防护意识。5.2 做题节奏与时间分配做题节奏这块我见过太多人栽跟头必须认真说。网易iOS提前批笔试一般时长在90到120分钟之间题量大致是选择题20题左右、简答题2到3题、编程题1到2题。我推荐的时间分配是这样选择题控制在40分钟内遇到卡壳的题先标记跳过不要把时间耗在一道题上简答题每题10到15分钟答题时先写结论再写理由用短句分点列清楚编程题留至少35到40分钟优先保证第一道题完整通过因为很多人的第二个编程题只能拿到部分分。做题顺序上我强烈建议先做编程题再做选择题。原因很简单编程题的分值最高而且如果你先做选择题消耗了大量脑力编程题时注意力可能会下降导致简单的题也写错。每年都有同学因为先死磕难题结果后面程序题时间不够只写了一个空壳这种是最亏的。还有一个特别实际的建议网易的在线笔试系统一般支持切换题目所以你可以先把所有题都过一遍评估一下难度分布再决定在哪道题上投入更多时间。这个动作虽然花不了几分钟但能帮你建立全局观避免在某一道题上钻牛角尖。5.3 在线笔试平台的使用经验在线笔试平台的使用经验这类细节很少出现在面经里但实战中非常影响成绩。首先提前熟悉平台。网易用的在线笔试系统是牛客网的“赛码网”或者类似的平台建议你在笔试前先去平台上注册账号把样例题做一遍熟悉代码编辑器的操作方式能不能断点调试、如何查看用例通过率、输出格式有没有严格限制。很多同学第一次用这类平台时连“输入是多组测试数据”都搞不清楚导致代码本身没问题但解析输入的时候出错白白丢分。其次注意代码的输入输出。平台一般会给出明确的输入输出格式笔试时千万别自己加提示语句例如“请输入数组长度”这类printf否则判题系统会认为输出格式错误。这个小细节每年都让不少人丢分写代码时务必留意。第三善用注释和函数拆分。在编程题里就算你只能写出部分逻辑也应该把思路清晰地在注释里表达出来。有些平台支持部分用例通过代码结构清晰也可以通过逻辑给分能多拿一分是一分。6. 常见问题与排查技巧实录6.1 笔试过程中的典型致命失误我根据历年网易和其他大厂的笔试反馈整理了几个出现频率最高的致命失误。这些不是知识问题而是“考场”上的低级错误提前意识到就能避开。第一个是选择题审题不清。iOS笔试选择题经常出现“以下说法不正确的是”这种反向提问很多同学看题太快把“不正确”看成“正确”一题轻松丢分。建议在题干里圈出关键词尤其是这类否定词。第二个是代码题不测试边界条件。写LRU缓存的时候测试用例里必然包含空表、删除不存在的key、缓存容量为1这些边界情况。如果代码里没做判空处理很可能直接越界崩溃。写完后花两分钟在草稿纸上手动跑几个边界用例能显著提高通过率。第三个是简答题写太短。网易简答题的评分一般是按采分点给的只写一个笼统的结论最多拿一半分。答“Block里怎么修改局部变量”这种题至少要写出Block复制变量副本的原理、__block的作用是把变量放进堆容器、修改的实际是堆上的对象这三个层次才够完整。宁可多写几个角度也不要惜字如金。第四个是编译环境可能不同。在线笔试的代码编辑器和你本地的Xcode环境不一样有些你在本地能跑通的代码在平台上可能因为缺头文件或命名空间问题编译失败。平时练题时可以专门在赛码网上练习提前适应平台编译器的严格性。6.2 知识点盲区自查清单笔试前最后一天我没有推荐大家再去刷新的题目而是按下面的清单做一轮自查。这个清单基本覆盖了网易iOS笔试的高频考点如果哪一项你连“能说出一二三点”都做不到建议优先补那一块。模块自查问题优先级OC语言能否讲清Category和Extension的区别高OC语言能否手写Block访问外部变量的代码并解释结果高内存管理能否解释weak指针置nil的底层机制高内存管理能否说出ARC下循环引用的三种典型场景高Runtime能否完整画出消息发送到消息转发的流程高并发能否准确区分GCD的四种队列/任务组合高并发能否解释死锁的成因并写出一个死锁示例高架构能否对比MVC、MVVM、VIPER的优缺点中网络能否说明NSURLSession的会话复用机制中性能能否列出启动优化的5个具体措施中调试能否说清Charles抓包HTTPS的原理低上架能否说清证书和描述文件各自的作用低这轮自查的意义不在于把所有知识点补到满分而是帮你找到最薄弱、最容易被拉开差距的地方。如果时间实在不够优先保证“高”优先级的项目都能答出主干逻辑因为这两块占了iOS专项分值的绝大部分。6.3 避坑技巧与备考策略最后集中分享几个我自己带学生备考时反复叮嘱的避坑技巧。不要只看面经要构建体系。面经的作用是告诉你考点范围但如果你只是逐条背书一旦题目换个问法就容易卡壳。正确做法是把面经里的每个考点挂到你已有的知识树上比如你把“内存管理”这个知识树整理成引用计数、Autorelease、weak指针、循环引用、ARC编译器行为、内存警告、内存泄漏检测工具每个节点下面挂几道真题。这样题目怎么变你都逃不出这棵树的覆盖范围。动手写代码的时间要占七成以上。iOS笔试不是纯记忆考试光看答案和完整代码很容易产生“我都会”的错觉。真正的检验标准是你能不能在45分钟里从零开始手写一个带缓存、线程安全、边界处理的iOS模块。我在辅导时要求的底线是每个经典编程题至少完整手写过三遍第二遍开始不看答案第三遍要求在限定时间内完成。平时用“模拟笔试”的方式练题。很多同学练题时没有时间压力一道题磨一小时也觉得会了。但笔试现场的压迫感和时间限制是完全不同的体验。建议从考前两周开始每周固定两天按正式笔试的时长和题量做一套完整的模拟题全程不开IDE以外的工具累了也不能停。这种练习表面上是刷题实际上是在训练考场上的“应激反应”让你真正进入状态时不会慌。多总结每一次失败的原因。每做错一道题不要只订正答案写一下自己最初的错误思路是什么、为什么会被某些选项干扰。这个过程能帮你找到自己的思维习惯漏洞。比如有些人总是忽略“线程安全”这个前提条件有些人看到复杂场景题就不知道从哪里入手拆解这些都是可以通过复盘来修正的。写在最后网易2023校招提前批iOS笔试的准备说到底就是检验两件事你有没有形成iOS开发的知识体系以及你能不能把知识体系落成实际的代码输出。这恰恰是正式入职后最需要具备的两种能力。我个人的体会是提前批的名额虽然少但它的准备过程比正式批更有价值——因为考察更聚焦你会被迫把iOS的核心知识整理成体系这份整理好的“知识地图”对你后续无论是参加正式批还是其他公司面试都是最宝贵的资产。如果你现在离笔试还有一个月时间请按上面的知识点清单把高优先级的部分一个一个啃透再配合至少5套完整模拟题来练手感。如果你只剩下两三天那就不用贪多抱着“抓大头”的策略选择题保基础、简答题写多采分点、编程题拿稳第一题。很多同学就是在这个策略下即使没有完美发挥也顺利拿到了面试机会。最后再送大家一个我在笔试现场用过的小技巧遇到完全没思路的题先把题目里能写的条件和关键字全部圈出来在草稿纸上列出所有你学过的可能相关的方法再从最“傻”的解法开始推。很多时候写着写着思路就通了。希望大家都能顺利通过笔试拿到心仪的面试机会。