阿里巴巴 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 的约束应该写在哪里?

面试中讨论应放在 updateConstraintslayoutSubviews,需权衡复用次数与性能。


阿里三面:场景题 & 架构思维

三面偏向项目实战经验和系统设计思维。

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 面试真题总结(含一二三面详解)

https://despacito2.github.io/posts/eabb475c/

作者

人间正道

发布于

2024-03-02

更新于

2025-07-04

许可协议

评论