iOS/Flutter 面试准备全流程(主线 + 高频题 + 7天计划)
这份文档的目标不是“堆知识点”,而是把面试准备变成可执行的工程任务:
- 先抓主线,确保覆盖面
- 再打磨项目表达,确保深度
- 最后通过题单和计划,把输出稳定下来
一、准备顺序:先过 6 条主线
按这 6 条主线复习,基本覆盖大厂/中厂对高级客户端候选人的核心考察。
- iOS + Flutter 混合架构
- 性能优化:启动、内存、OOM、大图渲染
- Objective-C 底层:Runtime / RunLoop / Block / Mach-O
- AI 项目:SSE、流式消息、Agent、PRD2Code
- 大型业务架构:组件化、模块化、B 端复杂表单
- 项目表达:问题-方案-权衡-结果
二、每条主线要讲到什么深度
1) 混合架构
- 为什么是混合,而不是纯原生/纯 Flutter
- 防腐层职责:路由、生命周期、通信、错误处理
- 页面栈统一与状态一致性
- 性能损耗点与排查方法
2) 启动优化
- 启动链路:
dyld -> runtime -> +load -> main -> 首屏 - Pre-main 常见瓶颈:动态库装载、类注册、
+load - 二进制重排、静态库治理、组件瘦身
- 优化前后指标与验证方法
3) 内存与 OOM
- OOM 与泄漏的区别
- 图片/列表/WebView/Flutter 引擎的内存特征
- 闭环案例:发现 -> 定位 -> 收敛 -> 防回归
- 前后台内存水位与监控策略
4) Objective-C / Flutter 底层
- Runtime:消息发送、方法缓存、消息转发、关联对象
- RunLoop:Source/Timer/Observer、Mode 与业务场景
- Block:捕获、循环引用、
__weak/__block - Flutter:三棵树、帧调度、渲染链路、平台通道
5) AI 项目落地
- SSE 与 WebSocket 选型依据
- 协议解析:Parser Registry + 策略模式
- 流式状态管理与长列表性能
- PRD2Code 与 AI Review 的质量屏障与收益口径
6) 架构与工程治理
- MVC/MVVM/组件化/模块化的边界
- 服务发现、依赖治理、路由治理
- 避免过度封装,明确可沉淀能力边界
三、最该重点打磨的 5 个项目
- 被窝独立 App + 主 App 组件化集成
- 小师傅 AI 助手
- 4K 大图渲染优化
- 贝壳启动优化
- Gate.IO 的 PRD2Code + AI Review
建议每个项目都准备两个版本:
3 分钟版:面试首轮快速回答8 分钟版:技术深挖完整回答
四、项目表达模板(直接套用)
每个项目按同一结构讲,稳定且有说服力:
- 背景:业务目标和复杂度
- 问题:核心技术挑战
- 方案:架构与关键机制
- 权衡:为什么不用其他方案,代价是什么
- 结果:指标提升与验证方式
- 反思:可优化点与下一步
五、40 个高频面试题清单
- 为什么做 iOS + Flutter 混合架构,而不是纯原生或纯 Flutter?
- 你说的防腐层具体长什么样?解决了哪些问题?
- Native 和 Flutter 通信你怎么设计?如何避免通道失控和协议膨胀?
- Flutter 页面栈和原生页面栈如何统一管理?
- 混合栈里最常见的性能问题是什么?你怎么排查?
- 你做启动优化时,完整启动链路是什么?
- Pre-main 为什么会慢?一般慢在哪些地方?
- 二进制重排的原理是什么?为什么能优化启动?
+load和+initialize有什么区别?- 静态库数量为什么会影响启动时间?
- OOM 和内存泄漏的区别是什么?
- 你怎么定位一次真实 OOM?
- 图片导致内存暴涨的根本原因是什么?
- 循环引用你一般从哪些场景排查?
- 你做过哪些内存治理手段,哪些最有效?
- Runtime 消息发送流程是什么?
- 方法缓存、消息转发、关联对象分别怎么用?
- RunLoop 的本质是什么?Source/Timer/Observer 有什么区别?
- Block 为什么会循环引用?
__weak/__block区别是什么? - Mach-O 结构你了解哪些?和启动优化有什么关系?
- 你为什么自研 SSE,而不是直接用第三方库?
- SSE 和 WebSocket 的区别是什么?
- 断线重连策略怎么设计?如何避免重复消息和状态错乱?
- Parser Registry 为什么比 if-else 更合适?
- 长列表流式对话为什么容易卡?你怎么保证体验?
- 4K 大图渲染为什么会内存高?
- CVPixelBuffer + 纹理共享的链路是什么?
- 为什么 Flutter 默认图片方案不够好?
- 你的优化是怎么验证收益的?
- 有没有副作用,比如兼容性、维护成本、渲染时序问题?
- 千级表单为什么会卡?
- 虚拟化渲染的核心思路是什么?
- 你说搜索复杂度从 O(n) 到 O(1),索引结构怎么设计的?
- 跳转、展开、定位三个状态怎么保持一致?
- 这个方案为什么适合 B 端复杂业务?
- PRD2Code 的整体链路是什么?
- RAG 在这个场景下到底解决了什么问题?
- 模型生成的代码如何约束到团队规范?
- AI 代码采纳率 65% 是怎么算的?
- AI 审查 CI 怎么做?误报漏报怎么控制?
六、7 天复习计划
- 第 1 天:3 个核心项目(被窝组件化、小师傅 AI、启动优化),每个准备 3 分钟版与 8 分钟版。
- 第 2 天:Objective-C 底层(Runtime/RunLoop/Block/内存管理)。
- 第 3 天:启动优化 + Mach-O(从原理落到案例)。
- 第 4 天:Flutter 渲染原理 + 混合栈管理。
- 第 5 天:性能专项(OOM、大图、千级表单)。
- 第 6 天:AI 项目专项(SSE、流式协议、RAG、PRD2Code、AI Review)。
- 第 7 天:完整模拟(自我介绍 + 项目深挖 + 快问快答 + 反问)。
七、今晚就能执行的 4 件事
- 写好
1 分钟自我介绍 - 写好
3 个核心项目的 3 分钟答案 - 写好
20 个高频原理题的短答 - 整理
所有量化数据的口径说明
八、自我介绍模板(可直接改名使用)
我叫 XXX,做 iOS 开发约 11 年,近几年主要聚焦在 iOS 原生 + Flutter 混合架构、性能治理和 AI 业务落地。
最近在 Gate.IO 负责移动端 AI 研发效能建设,核心是 PRD2Code 与 AI Code Review。我们通过 RAG 接入团队私有组件库、既有实现模式和编码规范,先产出技术规格,再生成可落地代码;同时将 AI 审查接入 CI,拦截私有 API、多语言溢出、循环引用等问题,把质量问题前移。
在贝壳期间,我主导过复杂 B 端业务从原生到 Flutter 的重构,设计过 Native/Flutter 防腐层与通信中间件,重点治理边界、页面栈、手势冲突与稳定性。同时做过冷启动优化、4K 大图渲染、千级表单交互和 OOM 治理,例如在大图场景基于 CVPixelBuffer + 外接纹理将内存占用降低约 50%。
再往前在百度文学,主要做传统 iOS 工程治理,包括 MRC 到 ARC 迁移、阅读器性能优化以及通用网络库/数据库/UI 组件库建设。
总结来说,我的优势是复杂客户端架构落地、性能与稳定性专项治理,以及把 AI 能力真正接入研发流程并量化收益。
九、准备时最容易被追问的 3 个风险点
- 数据口径不清:所有指标必须能回答统计平台、时间范围、样本量、计算公式。
- 只讲技术不讲业务:每个项目都要补一句“对团队/业务带来的结果”。
- AI 讲空:RAG、Agent、生成约束、评估方法、采纳率必须可量化。
结语
高质量面试准备不是“背答案”,而是把你的真实项目经验抽象成可重复表达的结构。
当你能稳定讲出“问题-方案-权衡-结果”,并给出可核验的数据口径,技术深度就能被准确看见。