网易iOS提前批笔试复盘:底层原理与算法并重的工程实战 网易这场提前批笔试我是抱着“练手”心态投的结果整套题做下来发现它比很多大厂的正式批笔试都更有区分度——不是单纯考刷题量而是真的在筛选“懂iOS的人”。如果你准备投2023届或者之后的iOS开发岗这篇复盘建议认真看完。我尽量把还记得的题目结构、考点分布、以及当时踩的坑都还原出来帮你在真正上考场前少走弯路。先说结论网易的iOS笔试编程题占大头但不算极难真正拉开差距的是专业基础题和最后的开放设计题。纯刷LeetCode的同学如果iOS底层知识不扎实很可能会在选择题和问答题上翻车。下面按我的回忆顺序把整场笔试拆开讲。1. 笔试前的信息差提前批和正式批到底差在哪里很多人搞不清楚提前批和正式批的关系以为提前批就是“提前考一次考不过还有正式批”。从网易的招聘节奏来看这个理解不完全对。提前批的本质是人才提前锁定。笔试通过后面试流程会前置如果表现好能在正式秋招大部队涌进来之前拿到offer意向书。即便没通过大多数情况下还有正式批的机会但部分岗位会存在“提前批面评挂掉正式批简历被锁”的情况。也就是说提前批不是完全无风险的试水。另外需要确认的是2023届的提前批笔试用的还是牛客网这类第三方平台。我当时是在牛客网上完成的全程监控摄像头不能切屏不能跳出浏览器手机也不能放在身边。这些规则不算特殊但要注意的是网易的笔试允许使用本地IDE但部分大厂只允许平台内置编辑器。我习惯用Xcode里写一点小demo来验证语法结果发现笔试系统根本识别不到本地最后只能在网页编辑器里硬写。所以提前适应网页代码编辑器的短板比如没有自动补全、没有实时编译是非常有必要的。再说时间安排。我这场笔试总时长是120分钟题量大概是10道不定项选择、3道编程题、2道简答/设计题。120分钟做这么多内容时间其实相当紧。我的建议是选择题控制在30分钟内编程题每道25分钟左右留20分钟给设计题。但实际执行起来会发现编程题一旦卡壳整个节奏就崩了。后面我详细说每类题的应对办法。2. 选择与判断题表面考iOS基础实际在考知识边界网易的选择题没有简单的“送分题”每道题都在一个看似基础的知识点上往深处挖了一层。我挑几道还记得的给大家复现一下考察思路。第一类是内存管理与ARC。这类题我印象很深因为四个选项里描述的都是ARC的行为但其中有一个是正确的、三个是表述不严谨的。比如“在ARC环境下retain、release、autorelease这些方法不能手动调用”这个说法严格来说是对的但选项里把它改成“在ARC环境下这些方法被编译器自动屏蔽运行时不再存在”这就是错的——因为ARC只是在编译期插入内存管理代码这些消息依然存在只是不再由开发者手动调用。这种抠细节的考法如果只是背概念很容易掉坑。第二类是iOS应用生命周期与启动流程。题目问的是“App启动过程中以下哪个时机最早执行”选项有application(_:didFinishLaunchingWithOptions:)、load方法、viewDidLoad、applicationWillEnterForeground。很多人会选didFinishLaunching但正确是类的load方法——它是在main函数之前、app加载可执行文件时就会调用的。这类题考察的是对Objective-C runtime机制的理解而不仅仅是开发经验。第三类是tableView与UICollectionView的复用机制。网易的考法不直接问“复用池怎么工作的”而是问“当调用dequeueReusableCell(withIdentifier:)时如果复用池中没有可复用的cell会发生什么”。答案是“走初始化流程注册的类创建新cell”但很多人想当然选了“返回nil”——这是老版本非注册方式的做法注册了class之后系统会自动创建。就是这种“半个字节”的细节最能筛人。第四类是并发编程与GCD。题目大意是dispatch_async和dispatch_sync混用时在什么情况下会造成死锁。标准的dispatch_sync到当前串行队列会死锁这个大多数人都知道。但网易加了一层如果当前在dispatch_get_main_queue()中再对主队列执行dispatch_sync同样会死锁。这道题考的是“队列和线程不是一一对应”这个核心认知。我印象中选择题里还考了多线程读写安全、nonatomic与atomic的实现区别、block的循环引用这些都属于iOS面试中的高频题但在笔试里出现说明网易不想只筛“会写页面的人”更想找到“理解底层机制的人”。2.1 选择题的提分策略针对这类题目我给的建议有三条刷题不要只背答案要把每个选项吃透。错的地方要去查清楚为什么错而不是记住“选C”就够了。网易的笔试选项设置就是专门针对死记硬背的人设计的。留意“绝对化”表述。比如“一定不会”“全部”“只有”这类词在iOS基础选择题中通常是错误选项设置点但不是说看到绝对化就选错还是要结合具体知识点判断。限时模拟训练。给自己30分钟做一套混合选择题训练快速判断的能力。笔试不是比谁懂得多而是比谁在规定时间内拿分多遇到不确定的题先标记跳过不要死磕。3. 三道编程题从易到难每一道都在考察算法和iOS的结合网易的编程题在我看来不是纯LeetCode式的问题而是会加一层“业务场景”的外壳。题目本身算法难度中等但读题和建模的时间成本很高。我把还记得的三道题还原成了近似描述并给出对应的解题思路。3.1 第一题字符串压缩LeetCode 443变体题目大意是给定一个字符串要求把连续重复的字符压缩成“字符出现次数”的形式如果压缩后的长度不小于原字符串长度则返回原字符串。要求原地修改或返回新字符串。这道题本质是热身题核心是双指针维护写入位置。我用的是Swift实现func compress(_ chars: inout [Character]) - Int { var writeIndex 0 var readIndex 0 while readIndex chars.count { let currentChar chars[readIndex] var count 0 while readIndex chars.count chars[readIndex] currentChar { readIndex 1 count 1 } chars[writeIndex] currentChar writeIndex 1 if count 1 { for digit in String(count) { chars[writeIndex] digit writeIndex 1 } } } return writeIndex }这里有个坑是Swift的Character类型不能直接用String的遍历方式String(count)转出来也是字符串要再转为Character数组。如果平时不写Swift而是用Objective-C或C思路一样但要注意字符和数字的转换边界。这道题难度不高但容易在边界条件上出错比如count 1时不需要追加数字、count 10时是追加“1”和“0”两个字符。把这几个边界测清楚基本就能AC。3.2 第二题旋转数组的查找LeetCode 33变体题目大意一个升序数组在某个未知点被旋转了比如[4, 5, 6, 7, 0, 1, 2]给定一个目标值找到它的下标如果不存在返回-1。要求时间复杂度O(log n)。这题的核心是二分查找但要额外判断当前中点位于左半有序区还是右半有序区。我写了两个版本Swift和C都试了int search(vectorint nums, int target) { int left 0, right nums.size() - 1; while (left right) { int mid left (right - left) / 2; if (nums[mid] target) return mid; if (nums[left] nums[mid]) { // 左半有序 if (target nums[left] target nums[mid]) { right mid - 1; } else { left mid 1; } } else { // 右半有序 if (target nums[mid] target nums[right]) { left mid 1; } else { right mid - 1; } } } return -1; }这道题考的核心不是“能不能写出二分”而是“能不能处理nums[left] nums[mid]的情况”。如果数组里有重复元素二分查找就退化成线性了。网易这道题我印象中没加重复元素但加了一个额外条件如果目标值不存在要返回它应被插入的位置也就是LeetCode 35的变体。这个变体让原本会做的人也可能因为返回值没写对而丢分。3.3 第三题任务调度器LeetCode 621变体这道题是三道编程题里最难的。题目大意一个字符数组表示任务相同任务之间必须间隔至少n个时间单位问完成所有任务所需的最短时间。核心思路是贪心找出出现次数最多的任务设其出现次数为maxCount那么总时间为(maxCount - 1) * (n 1) 并列最多的任务数最后再和数组长度取较大值。int leastInterval(vectorchar tasks, int n) { vectorint freq(26, 0); for (char c : tasks) freq[c - A]; sort(freq.rbegin(), freq.rend()); int maxCount freq[0]; int equalCount 0; for (int f : freq) { if (f maxCount) equalCount; } return max((int)tasks.size(), (maxCount - 1) * (n 1) equalCount); }关键点有两个一是“并列最多的任务数”要计入总时间比如[A, A, B, B]n2最短时间是(2-1)*325排列是A B _ A B二是最终时间不能小于任务总数。这道题考察排序、贪心、以及数学建模能力。如果把任务调度问题转换成“填桶”模型——把最多出现的任务当作桶的隔板其余任务去填空隙——理解起来会直观很多。3.4 编程题的实战经验网易的编译器是纯命令行工具不支持导入自定义头文件也不支持多文件编译。所以我建议平时就养成“单文件可编译”的做题习惯不要依赖工程模板。另外笔试时如果某道题完全没思路不要死磕。我当时在第三题上卡了20分钟最后是靠“先写一个能跑的大暴力回溯/模拟再优化成贪心”的策略才勉强AC。先暴力保底再优化拿满分这在90分钟的编程环节里是最高效的策略。4. iOS专项问答架构、UIStackView、BLE与电池优化网易的简答/问答部分绝不是随便问两句就完事每道题都需要用结构化的方式作答篇幅要求不低于150字。我把回忆中的题目按知识点整理成三类每一类给一个答题框架。4.1 架构类MVC、MVVM、MVP在iOS中的应用场景这道题问的是在iOS开发中MVC有哪些缺陷你是如何看待MVVM和MVP的如果在项目中要重构你会怎么选型我的答题思路先承认MVC在Apple官方文档中是标准架构然后指出它的核心缺陷ViewController承担了“视图 控制器 数据适配”的过多职责导致代码膨胀、复用性差、测试困难。再对比MVVM强调它的核心是把“数据到视图的映射”交给ViewModel通过双向绑定在iOS中常借助KVO、RxSwift或Combine实现。优点是可测试性强、逻辑可以复用缺点是引入额外依赖且过度使用会大幅增加调试成本。MVP在iOS中比较少见它的核心是Presenter持有View的抽象接口适合复杂页面和团队规范严格的场景。最后落到选型上如果你在维护一个老项目代码结构已经混乱不要贸然推翻重写建议先以模块为单位局部引入MVVM如果是从零开始的新项目且团队有函数响应式经验可以考虑MVVM Combine/RxSwift如果项目偏业务、交互逻辑复杂MVP的约束力反而更强。这类题的核心得分点是不要只背概念一定要给出选择理由和落地路径。网易想要的是一个能做技术决策的人而不是一个只会念概念的人。4.2 UI与交互类UIStackView布局原理与分屏适配热词里出现了“UIStackView”我刚好在笔试前一晚还在看苹果官方文档结果真的有一道相关题目。题目大概是这样UIStackView的布局原理是什么它和Auto Layout有什么关系答题要点UIStackView是一个“非绘制类”的容器视图它本身不负责内容的渲染而是把内部元素的管理编译成一套Auto Layout约束。它通过arrangedSubviews数组来维护子视图的顺序并依据axis、distribution、alignment、spacing等属性自主为新加入的子视图生成约束。UIStackView的优势在于简化了约束库的代码量并且在增删子视图时不需要手动去更新约束关系系统会生成或删除相关约束。它的短板是只适用于线性排列布局对“网格型”布局无能为力同时它生成的约束优先级是系统预设的想要自定义某些细节可能需要手动加约束并调整优先级。另外网易追问了一道“iOS分屏适配”的问题问的是在iPad分屏场景下如何保证UI布局不塌。核心就是Size Classes和Auto Layout的配合使用通过traitCollection.horizontalSizeClass区分Compact和Regular针对不同宽度使用不同的布局策略。当时我以首页列表为例说明在Regular宽度下可以显示两列卡片在Compact下显示一列用UICollectionViewFlowLayout配合preferredLayoutAttributesFitting动态计算宽度而不是写死frame。这个回答方式能让面试官看出你是真处理过适配问题而不是背了概念。4.3 系统能力类BLE连接参数规范和电池优化这两道题网易考得相当专业明显是想招“做过IoT或低功耗开发”的人。BLE连接参数规范那道题考的是连接间隔Connection Interval、从机延迟Slave Latency、超时时间Supervision Timeout这三个参数的取值范围和匹配原则。核心点连接间隔范围是7.5ms到4s必须为1.25ms的整数倍从机延迟范围为0到499超时时间需要大于等于(连接间隔 从机延迟 * 连接间隔) * 2且范围为100ms到32s。如果参数设置不合理会导致蓝牙连接不稳定、系统拒绝连接或功耗异常升高。这道题我只能说答了七成因为平时做蓝牙开发更多是直接用系统推荐参数没有深究过计算逻辑。建议准备笔试前在Apple的Core Bluetooth Programming Guide里把连接参数这一章反复看三遍。电池优化那道题相对友好问的是你会如何优化iOS App的耗电我当时的答题框架是定位耗电阶段用Instruments的Energy Log和Xcode的Energy Gauge分析是CPU高负载、网络频繁请求还是定位服务使用过多网络层面使用URLSession的WAIT_FOR_CONNECTIVITY模式减少非必要后台刷新开启NSURLSession的discretionary选项延迟后台传输定位层面用startMonitoringSignificantLocationChanges替代连续定位根据场景动态切换accuracy精度CPU层面避免主线程频繁计算把大计算放到后台队列降低屏幕刷新率CADisplayLink降到30或15帧——但要注意仅为省电牺牲动画流畅度是得不偿失的。这类系统能力题真正的加分项是写出你实际用过的优化工具和分析方法而不是泛泛而谈“使用Low Power Mode”这种官方建议。做过的项目里哪怕只有一次耗电优化实践都值得在答卷里详细展开说明你优化前后对比数据。5. 隐藏分考点调试工具、证书链路和混合开发方案除了正式的问答板块网易笔试中还有两道“隐藏分”题它们出现在选择题和问答题的衔接处题型是判断/选择/匹配。这类题目的特点是不直接出现在iOS八股文里而是靠平时项目经验积累。我记得有3个方向被考到了跨平台异常排查、证书与上架流程、调试工具链。5.1 跨平台与混合开发方案网易问了一道关于混合开发的题目大意是在iOS上集成H5页面时如何解决WKWebView和原生端交互时的内存泄漏问题我当时的思路是消息通道的注入与管理、脚本消息处理器的移除时机、以及JSContext与原生对象的循环引用。正确的答案是在deinit中必须调用removeScriptMessageHandler(forName:)否则WKWebView会持有WKScriptMessageHandler从而持有控制器导致内存无法释放。另外WKWebView需要在适当的时机停止加载并把webView(_:decidePolicyFor:)里的返回逻辑处理干净。我注意到热词中有“uniapp ios app打测试包全流程”和“ios混合开发方案”。这说明跨平台在网易笔试中也是重点。如果笔试题目明确提到混合开发你最好把下面几件事说清楚桥接层Bridge的设计是使用系统提供的WKScriptMessageHandler还是JSBridge框架如WebViewJavascriptBridge、DSBridge线程模型JS调用原生方法时可能不在主线程需要显式切换到主线程处理UI操作内存管理H5页面中注册的DOM事件可能引用原生对象需要在关闭页面时释放上线兼容iOS 14之后WKWebView开启了App Bound Domain限制要确保H5的域名在配置文件中合法。5.2 调试与抓包热词里出现了“charles ios抓包”这个也考了。题目不会直接写“请列出charles的配置步骤”而是以情景方式问“你在开发中遇到了线上用户无法登录的问题怀疑是接口数据异常需要抓包排查你会怎么做”核心要答出开启HTTPS抓包时需要在手机端安装并信任Charles的CA证书并对应设置NSAllowsArbitraryLoads或为特定域名配置NSExceptionDomains。同时要说明iOS 10之后ATS默认不允许HTTP明文请求抓包模拟器时要注意网络环境配置。这里的关键是你要清楚Charles抓不到系统级别的后台网络请求也抓不走ATS禁止的内容如果排查不到问题先检查自己的证书是否信任完整再检查是否开启了代理过滤规则。5.3 证书与上架流程网易还考到了证书问题。热词里“ios开发者app证书更新”和“ios上架”都被点到了。题目大意是如果你的开发者证书过期了App在真机上无法运行如何检查并更新答题要点在Apple Developer后台查看证书有效期过期证书需要revoke后重新创建在Xcode的Accounts面板中Add Account刷新签名信息更新Provisioning Profile并保证Bundle Identifier一致如果使用自动签名Automatically manage signingXcode会在证书失效时自动修复如果使用手动签名需要回到Certificates, Identifiers Profiles页面手动重新生成描述文件。这里有一个容易踩的坑很多人在企业证书分发时会使用In House证书它的年度有效期到了之后必须重新部署不能靠Xcode自动续签。如果笔试里考到企业证书分发要额外说明这个限制。6. 从笔试到面试复盘后的三条行动建议笔试结束后不建议立刻放松而是应该花时间做一次完整的复盘。网易的笔试结果和面试邀约通常隔几天到一周这段时间是查漏补缺的黄金期。我的复盘方法是把笔试里遇到的所有不会的题逐一落实到笔记里按知识点分类整理不要把错题放在零散截图里。针对“答得模糊但感觉能蒙对”的题进行第二轮针对性学习。这类题往往藏着你的知识盲区比如BLE连接参数第一次不会下次遇到会了分数就实打实拿到了。把编程题的AC代码重新优化一遍思考是否有更优解因为在面试时面试官很可能基于笔试代码追问优化思路。网易的面试环节笔试题目和面试手撕算法是可能重题的。有同学问我是不是真的会问我的亲身经历是当时面试官开门见山让我复述笔试第二题的思路虽然没让我重新写一遍但问了一个变种——“如果旋转后的数组有重复元素怎么处理”。所以笔试不是交完就结束的它是一张“面试简历”你在笔试里的每一个选择都可能被面试官拿来做文章。7. 最后关于这场笔试的几个真相在复盘完这场笔试的全部内容后有几句话想单独拎出来说。不要以为网易考的是“纯iOS开发”或者“纯算法”。它考的是两者的交集一个能独立思考、会选型、能落地、遇到问题能快速定位的工程师。笔试中的选择题和问答题很多不是能从网上直接搜到答案的它们要求你理解原理、知道边界、有实战经验。而编程题则是检验你抽象建模和编码能力的基本盘。我最大的感受是iOS开发的笔试越来越偏向“工程能力 底层机制 算法基础”的三位一体。只刷LeetCode你可以过编程题环节但会挂在基础题和设计题上只背iOS八股文你可以过基础题但编程题会让你原形毕露。两者缺一不可。另外笔试的时间分配真的很重要。我当时选择在选择题上多花了8分钟导致最后一道问答草草写了两行字就提交了出来一看那道题是“如何设计一个IM类App的消息推送模块”正常情况下我可以答得很好但时间不够了。所以考场上一定先做自己最擅长、分值最高的题把不确定的放到最后宁可放弃一道选择题也不要放弃一道大分值设计题。最后再分享一个小技巧进笔试系统之前把Xcode、终端、甚至一个纯文本编辑器都提前打开桌面只放和考试相关的窗口。虽然网易的系统对本地IDE不友好但你依然可以用本地文本编辑器来记录思路比网页编辑器自带的记事本好用得多。另外百度搜索框里想搜什么提前在脑子里想好关键词别在考试界面里来回切换页面。说实话监考系统能不能检测到我不敢保证但这种行为风险指数极高真没必要去赌。这场笔试的复盘到这里基本写完了。如果你正在准备网易或其他大厂的iOS校招笔试希望这些内容能帮你少踩一些我不小心踩过的坑。祝顺利。

相关新闻

最新新闻

音游自动降准背后:从rks到动态难度的人机匹配设计

音游自动降准背后:从rks到动态难度的人机匹配设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/1 11:51:51
Ubuntu源码编译安装MinkowskiEngine:稀疏卷积环境配置实战指南

Ubuntu源码编译安装MinkowskiEngine:稀疏卷积环境配置实战指南

简介:在Ubuntu 20.04环境下从源码安装MinkowskiEngine的实操型资源,适合深度学习开发者、三维点云处理及稀疏卷积相关项目使用者。内容围绕pytorch与CUDA版本一致性、openblas-devel依赖冲突、conda缓存清理以及CUDA路径与MAX_JOBS编译参数配置等关键环节…

2026/9/1 11:51:51
基于LangChain与LLM的智能体图表生成流水线实战指南

基于LangChain与LLM的智能体图表生成流水线实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/1 11:51:51
Zotero AI插件AI-Butler:大模型驱动的文献精读与笔记生成

Zotero AI插件AI-Butler:大模型驱动的文献精读与笔记生成

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/1 11:51:51
基于51单片机的智能台灯设计:PWM调光与超声波坐姿矫正实战

基于51单片机的智能台灯设计:PWM调光与超声波坐姿矫正实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/1 11:51:51
Windows 微信 QQ 防撤回补丁怎么打:一份完整上手指南

Windows 微信 QQ 防撤回补丁怎么打:一份完整上手指南

Windows 微信 QQ 防撤回补丁怎么打:一份完整上手指南 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode.com…

2026/9/1 11:46:51