iOS 面试题与高频考点入口
如果你正在准备 iOS 岗位面试,这里可以快速进入 iOS 面试题、高频题、真实面经和专题复习内容,覆盖 Swift、运行时、内存管理、系统能力与工程实践。
你可以在这里获得什么
更适合准备 iOS 岗位、希望把复习路径拉直的学生或初级工程师。
把题目练习、真实面试信号和专题复习串成一个完整复习流程。
更适合学生的起步方式
先看题库,再锁定高频题,最后结合面经和专题把薄弱点补齐。
先用真实题目感受题型、难度和回答深度,再决定重点方向。
从真实面试体验中补充公司偏好、提问方式和表达层面的判断。
把语言能力、并发、设计模式和工程实践这些长期弱项系统补起来。
春招 / 秋招高频自测清单
能在 3 到 5 分钟内独立讲清楚就勾选,系统会自动保存你的准备进度。
先把能脱稿讲清的题勾出来,再优先补最薄弱的部分。
更偏基础、页面生命周期、内存和网络,是第一次准备 iOS 面试时最常见的一组自测题。
先把基础概念和常见追问讲顺
把实现细节、原理和性能点补起来
按正式面试标准练工程化和系统表达
你能否说清 viewDidLoad 到 deinit 的时机,以及页面状态恢复的基本思路?
- viewDidLoad、viewWillAppear、viewDidDisappear 的典型场景
- 控制器销毁、内存警告和页面状态回填
- 页面展示链路和数据恢复的基本思路
你能否说明 struct/class 的取舍、copy-on-write 和 protocol oriented design?
- struct 与 class 的使用边界和取舍
- copy-on-write 的意义与典型表现
- protocol + extension 的抽象价值和限制
你能否独立举例说明常见循环引用场景,以及对应的解决方式?
- strong、weak、unowned 的语义差异
- 闭包、delegate、timer 常见循环引用场景
- 用 deinit 和 Instruments 辅助定位释放问题
你能否说明 RunLoop 作用、队列切换,以及 UI 为什么必须回到主线程?
- RunLoop mode、事件源和任务调度关系
- 主队列、全局队列和回主线程的切换
- 为什么 UI 更新必须在主线程完成
你能否说明 cell 复用、预加载、高度计算和滚动卡顿优化?
- cell 复用、预取和数据绑定的基本链路
- 动态高度、离屏渲染和图片加载优化
- 滚动卡顿优先排查主线程和绘制开销
你能否讲清请求生命周期、缓存策略、错误处理和常见的封装方式?
- URLSession task 生命周期和回调链路
- 缓存策略、证书处理和错误重试
- 网络层抽象、解耦和可测试性的做法
真实题目预览
先看真实题目预览,再进入完整题库做更系统的刷题安排。
请解释 let 与 var 的语义差异,并结合 iOS 日常开发场景说明为什么很多团队会要求“默认使用 let,必要时再改成 var”。
请分别从 struct 和 class 的角度解释:为什么 let 修饰结构体后属性通常不能改,而 let 修饰类实例后对象内部属性有时还能改?
请结合 UIKit 常见代码解释这个现象,并说明它与 Swift 中变量、常量和值/引用语义的关系。
请说明 Swift 的类型推断机制,以及在实际 iOS 项目中,什么场景适合直接推断,什么场景建议显式标注类型。
请解释 lazy var 的初始化时机、底层语义,以及为什么 Swift 不允许 lazy let。请结合 iOS 中懒加载 UI 控件的场景说明。
请说明常量在 Swift 中的初始化规则,并结合 iOS 开发中的属性初始化、构造器注入、全局常量等场景举例说明。
最新真实面经
结合真实公司面试体验和题目复盘,补充对实际面试场景的判断。
面试内容以 Android 基础、系统机制、Java 并发、网络安全和数据结构算法为主,覆盖面较广,偏重原理理解与实际开发能力。
面试主要围绕 Android 客户端基础、Flutter/RN 跨端原理、Java/C/JS/TS 运行时与线程模型、编译执行方式以及 Android Dex 设计展开,偏重底层原理与多语言对比。
包含两段面经:小米安卓客户端二面,偏操作系统、网络协议、Android基础与并发;OPPO客户端一面,重点考察反射、动态代理、注解、设计模式、Java基础,并结合AI相关话题和大数相加算法。OPPO面试中提到反射和动态代理问得较多且比较深入,候选人对分布式相加优化未答出,感到遗憾。