阿里巴巴 iOS 面试真题总结(含一二三面详解)
本文总结了阿里巴巴 2024 年 iOS 面试中的经典真题,涵盖三轮面试,内容包括底层原理(KVO、Block、Runtime)、性能优化、线程安全等问题。适合正在准备 iOS 面试的同学参考。
阿里一面真题回顾
这轮面试以基础原理为主,涉及 Objective-C Runtime、KVO、Block、字典原理和方法替换技术等。
1. KVO 是如何知道对象发生变化的?
考察 Objective-C 的动态特性,涉及 isa-swizzling、NSKeyValueObserving
的底层实现。
2. NSDictionary 是如何实现快速查找的?
哈希表结构,查找操作的时间复杂度趋近 O(1),考察哈希函数设计与冲突处理策略。
3. 不破坏原方法,如何修复潜在 bug?
推荐使用 Method Swizzling 技术或 AOP 思维,保持原接口不变的前提下增强逻辑。
4. Block 和函数指针的区别?
Block 是带上下文的对象,支持捕获外部变量;函数指针是纯函数地址,效率高但灵活性差。
5. 性能优化的手段有哪些?
内存管理、懒加载、线程调度优化、避免主线程卡顿、图片缓存处理等。
6. YYModel 和 AFNetworking 源码分析
要求你对第三方库内部结构有基本认知,至少理解 AF 的请求封装流程和 YYModel 的动态绑定过程。
7. 如何自己设计 JSON -> Model 转换?
如可用 KVC、Runtime + 属性枚举等方式封装通用转换逻辑。
阿里二面真题详解
侧重于内存管理、线程机制与设计思想,问题较为深入。
1. 浅拷贝和深拷贝的区别?
浅拷贝仅复制指针引用;深拷贝会开辟新空间并复制内容,通常实现 copyWithZone:
方法。
2. Block 循环引用与解决方案?
Block 捕获强引用对象如 self,造成循环引用,常用 __weak
或 __block
打破循环。
3. Block 与 delegate 比较?
Block 更轻便、适合短期回调;delegate 适合长期、结构化通信。
4. KVO 的实现原理?
本质是 isa 指向中间类,实现 set
方法的重写并通知观察者。
5. AutoreleasePool 的实现原理?
调用栈会创建多个 autorelease pool,底层基于双向链表结构管理对象释放。
6. 消息转发机制?
三重转发机制:resolveInstanceMethod:
→ forwardingTargetForSelector:
→ forwardInvocation:
,是 iOS 动态特性的核心。
7. 死锁的四个必要条件?
互斥、占有且等待、不可抢占、循环等待,任意破坏一个即可避免死锁。
8. 进程与线程的区别?
进程是资源分配的基本单位,线程是执行调度的基本单位,线程共享进程内存。
9. 数据持久化方案?
NSUserDefaults、归档、SQLite、CoreData、Keychain 等。
10. Masonry 的约束应该写在哪里?
面试中讨论应放在 updateConstraints
或 layoutSubviews
,需权衡复用次数与性能。
阿里三面:场景题 & 架构思维
三面偏向项目实战经验和系统设计思维。
1. 项目难点与解决方案介绍
自我介绍和项目挑战重点是沟通能力和技术深度的双重考察。
2. 主线程是相对于什么而言?
相对于操作系统调度中的主执行队列(main dispatch queue),即 UI 操作需在主线程执行。
3. 图片内存占用由什么决定?
内存大小 = 宽度 × 高度 × 每像素字节数(RGBA 为 4),与图片压缩格式无关。
4. 索引的作用及优缺点?
加快数据检索速度;但增加写入负担、占用存储、需要维护。
5. 如何在数组中找最小的 K 个数?
常用方法包括快排变种、最小堆、Partition 算法等。
6. 淘宝下拉加载更多如何优化?
预加载、懒加载、分页请求、防抖节流、接口合并、骨架屏设计等。
7. 淘宝页面发起 HTTP 请求流程?
从点击触发 → Controller → ViewModel/Service → 网络库(如 AF)→ 请求封装 → 数据返回 → 数据绑定。
8. 介绍 MVVM 架构及应用?
Model-View-ViewModel 解耦视图和逻辑,ViewModel 负责业务逻辑转换和绑定数据源。
9. 你了解哪些设计模式?
单例、观察者、工厂、策略、责任链、适配器、代理等;可结合项目阐述其使用场景。
面试总结 & 建议
通过这次阿里 iOS 面试可以看出重点包括:
- 语言底层机制:KVO、Runtime、AutoreleasePool、Block 原理等;
- 性能与架构能力:如网络优化、内存管理、线程调度;
- 实战与沟通能力:项目介绍、逻辑思维、代码能力;
- 系统设计思维:索引、并发、缓存、架构模式等。
📝 准备建议:
- 回顾 iOS 面试八股文知识点;
- 多刷高频题,多做 Mock Interview;
- 建立知识图谱,串联底层原理与应用场景;
- 敢于表达自己的观点,结合项目经历讲解思路。
希望本文能帮助到正在准备 iOS 面试的你,祝你顺利拿到心仪的 Offer!🚀
阿里巴巴 iOS 面试真题总结(含一二三面详解)