iOS/Flutter 面试准备全流程(主线 + 高频题 + 7天计划)

这份文档的目标不是“堆知识点”,而是把面试准备变成可执行的工程任务:

  • 先抓主线,确保覆盖面
  • 再打磨项目表达,确保深度
  • 最后通过题单和计划,把输出稳定下来

一、准备顺序:先过 6 条主线

按这 6 条主线复习,基本覆盖大厂/中厂对高级客户端候选人的核心考察。

  1. iOS + Flutter 混合架构
  2. 性能优化:启动、内存、OOM、大图渲染
  3. Objective-C 底层:Runtime / RunLoop / Block / Mach-O
  4. AI 项目:SSE、流式消息、Agent、PRD2Code
  5. 大型业务架构:组件化、模块化、B 端复杂表单
  6. 项目表达:问题-方案-权衡-结果

二、每条主线要讲到什么深度

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 个项目

  1. 被窝独立 App + 主 App 组件化集成
  2. 小师傅 AI 助手
  3. 4K 大图渲染优化
  4. 贝壳启动优化
  5. Gate.IO 的 PRD2Code + AI Review

建议每个项目都准备两个版本:

  • 3 分钟版:面试首轮快速回答
  • 8 分钟版:技术深挖完整回答

四、项目表达模板(直接套用)

每个项目按同一结构讲,稳定且有说服力:

  1. 背景:业务目标和复杂度
  2. 问题:核心技术挑战
  3. 方案:架构与关键机制
  4. 权衡:为什么不用其他方案,代价是什么
  5. 结果:指标提升与验证方式
  6. 反思:可优化点与下一步

五、40 个高频面试题清单

  1. 为什么做 iOS + Flutter 混合架构,而不是纯原生或纯 Flutter?
  2. 你说的防腐层具体长什么样?解决了哪些问题?
  3. Native 和 Flutter 通信你怎么设计?如何避免通道失控和协议膨胀?
  4. Flutter 页面栈和原生页面栈如何统一管理?
  5. 混合栈里最常见的性能问题是什么?你怎么排查?
  6. 你做启动优化时,完整启动链路是什么?
  7. Pre-main 为什么会慢?一般慢在哪些地方?
  8. 二进制重排的原理是什么?为什么能优化启动?
  9. +load+initialize 有什么区别?
  10. 静态库数量为什么会影响启动时间?
  11. OOM 和内存泄漏的区别是什么?
  12. 你怎么定位一次真实 OOM?
  13. 图片导致内存暴涨的根本原因是什么?
  14. 循环引用你一般从哪些场景排查?
  15. 你做过哪些内存治理手段,哪些最有效?
  16. Runtime 消息发送流程是什么?
  17. 方法缓存、消息转发、关联对象分别怎么用?
  18. RunLoop 的本质是什么?Source/Timer/Observer 有什么区别?
  19. Block 为什么会循环引用?__weak / __block 区别是什么?
  20. Mach-O 结构你了解哪些?和启动优化有什么关系?
  21. 你为什么自研 SSE,而不是直接用第三方库?
  22. SSE 和 WebSocket 的区别是什么?
  23. 断线重连策略怎么设计?如何避免重复消息和状态错乱?
  24. Parser Registry 为什么比 if-else 更合适?
  25. 长列表流式对话为什么容易卡?你怎么保证体验?
  26. 4K 大图渲染为什么会内存高?
  27. CVPixelBuffer + 纹理共享的链路是什么?
  28. 为什么 Flutter 默认图片方案不够好?
  29. 你的优化是怎么验证收益的?
  30. 有没有副作用,比如兼容性、维护成本、渲染时序问题?
  31. 千级表单为什么会卡?
  32. 虚拟化渲染的核心思路是什么?
  33. 你说搜索复杂度从 O(n) 到 O(1),索引结构怎么设计的?
  34. 跳转、展开、定位三个状态怎么保持一致?
  35. 这个方案为什么适合 B 端复杂业务?
  36. PRD2Code 的整体链路是什么?
  37. RAG 在这个场景下到底解决了什么问题?
  38. 模型生成的代码如何约束到团队规范?
  39. AI 代码采纳率 65% 是怎么算的?
  40. AI 审查 CI 怎么做?误报漏报怎么控制?

六、7 天复习计划

  1. 第 1 天:3 个核心项目(被窝组件化、小师傅 AI、启动优化),每个准备 3 分钟版与 8 分钟版。
  2. 第 2 天:Objective-C 底层(Runtime/RunLoop/Block/内存管理)。
  3. 第 3 天:启动优化 + Mach-O(从原理落到案例)。
  4. 第 4 天:Flutter 渲染原理 + 混合栈管理。
  5. 第 5 天:性能专项(OOM、大图、千级表单)。
  6. 第 6 天:AI 项目专项(SSE、流式协议、RAG、PRD2Code、AI Review)。
  7. 第 7 天:完整模拟(自我介绍 + 项目深挖 + 快问快答 + 反问)。

七、今晚就能执行的 4 件事

  1. 写好 1 分钟自我介绍
  2. 写好 3 个核心项目 的 3 分钟答案
  3. 写好 20 个高频原理题 的短答
  4. 整理 所有量化数据的口径说明

八、自我介绍模板(可直接改名使用)

我叫 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 个风险点

  1. 数据口径不清:所有指标必须能回答统计平台、时间范围、样本量、计算公式。
  2. 只讲技术不讲业务:每个项目都要补一句“对团队/业务带来的结果”。
  3. AI 讲空:RAG、Agent、生成约束、评估方法、采纳率必须可量化。

结语

高质量面试准备不是“背答案”,而是把你的真实项目经验抽象成可重复表达的结构。
当你能稳定讲出“问题-方案-权衡-结果”,并给出可核验的数据口径,技术深度就能被准确看见。