面试题目

一、iOS 高级开发面试题

1. Objective-C / Runtime

这是高级 iOS 基本必问。

基础

  1. NSObject 的 isa 是什么?
  2. Objective-C 中 isa 的作用是什么?
  3. Class、Meta Class、NSObject 三者是什么关系?
  4. Objective-C 的消息发送机制是什么?
  5. [obj doSomething] 底层发生了什么?
  6. objc_msgSend 做了什么?
  7. 方法查找流程是什么?
  8. 什么是方法缓存?
  9. 方法缓存为什么能够提高性能?
  10. 如果对象找不到方法,会发生什么?
  11. methodSignatureForSelector 和 forwardInvocation 是干什么的?
  12. resolveInstanceMethod 是什么?
  13. Objective-C 消息转发机制分几步?
  14. 什么是动态方法解析?
  15. 什么是消息转发?
  16. performSelector: 有什么缺点?
  17. Category 是怎么实现的?
  18. Category 能不能添加成员变量?为什么?
  19. Category 和 Extension 有什么区别?
  20. Category 方法和原类方法重名会发生什么?
  21. Associated Object 是怎么实现的?
  22. Associated Object 的使用场景有哪些?
  23. Method Swizzling 原理是什么?
  24. Method Swizzling 有什么风险?
  25. 如何安全地使用 Method Swizzling?
  26. +load 和 +initialize 有什么区别?
  27. +load 什么时候调用?
  28. +initialize 什么时候调用?
  29. 为什么不建议大量使用 +load?

 

 

二、内存管理

高级 iOS 非常重要

ARC

  1. ARC 是什么?
  2. ARC 是不是垃圾回收?
  3. ARC 是如何工作的?
  4. strong、weak、copy、assign 区别?
  5. weak 为什么能够自动置 nil?
  6. weak 底层是怎么实现的?
  7. weak 和 unsafe_unretained 有什么区别?
  8. strong 和 retain 有什么区别?
  9. copy 修饰 NSMutableString 会发生什么?
  10. 为什么 NSString 经常使用 copy?
  11. block 为什么经常使用 copy?
  12. __weak 和 __strong 有什么区别?
  13. __block 和 __weak 有什么区别?
  14. __block 在 ARC 下会不会造成循环引用?
  15. Block 的内存结构是什么?
  16. Block 有哪几种类型?
  17. NSStackBlock、NSMallocBlock、NSGlobalBlock 区别?
  18. Block 为什么从栈复制到堆?
  19. Block 捕获变量的原理?
  20. Block 循环引用怎么产生?
  21. 如何解决 Block 循环引用?
  22. weak-strong dance 是什么?
  23. 什么情况下不能简单使用 weak?
  24. dealloc 中需要做什么?
  25. ARC 下为什么不能手动调用 retain/release?

 

 

三、Runtime + 内存综合题

这部分很容易拉开高级开发和普通开发的差距。

场景题

一个 UIViewController 页面进入后内存一直上涨,你怎么排查?

你需要能够回答:

Instruments → Allocations → Leaks → Memory Graph → 找到对象持有关系 → 分析循环引用 → 分析 Block / Timer / Delegate / Notification / KVO / GCD 等。

面试官可能继续问:

  • Timer 为什么容易导致循环引用?
  • NSTimer 怎么解决?
  • CADisplayLink 怎么解决?
  • NotificationCenter 会不会造成循环引用?
  • Block 为什么会导致 VC 无法释放?
  • GCD Timer 为什么可能造成 VC 不释放?

 

 

四、RunLoop

高级 iOS 很常见。

  1. 什么是 RunLoop?
  2. RunLoop 和线程是什么关系?
  3. 一个线程可以有几个 RunLoop?
  4. RunLoop 为什么能够让线程不退出?
  5. RunLoop 的 Mode 是什么?
  6. NSDefaultRunLoopMode
  7. UITrackingRunLoopMode
  8. NSRunLoopCommonModes
  9. 滑动 ScrollView 时为什么 NSTimer 可能停止?
  10. 如何让 Timer 在滑动 ScrollView 时继续执行?
  11. RunLoop Observer 是什么?
  12. RunLoop Source 是什么?
  13. Source、Timer、Observer 分别是什么?
  14. RunLoop 如何处理事件?
  15. 主线程卡顿和 RunLoop 有什么关系?

高频场景

为什么 UITableView 滑动的时候,Timer 不执行?

这个问题建议你准备成一套完整答案。

 

 

五、多线程 / GCD

这个是高级 iOS 重点

GCD

  1. GCD 是什么?
  2. Serial Queue 和 Concurrent Queue 区别?
  3. Sync 和 Async 区别?
  4. dispatch_sync 会不会创建线程?
  5. dispatch_async 一定创建线程吗?
  6. 什么是线程死锁?
  7. 为什么下面代码会死锁?

 

dispatch_sync(dispatch_get_main_queue(), ^{

    NSLog(@"test");

});

  1. Serial Queue + sync 会不会死锁?
  2. Concurrent Queue + sync 呢?
  3. 什么是线程安全?
  4. 如何保证线程安全?
  5. GCD 如何实现锁?
  6. dispatch_barrier 是干什么的?
  7. Barrier 在什么情况下有效?
  8. dispatch_group 有什么作用?
  9. dispatch_semaphore 有什么作用?
  10. GCD Semaphore 可以实现什么?
  11. dispatch_once 原理?
  12. dispatch_once 为什么可以实现单例?
  13. GCD Timer 怎么实现?
  14. GCD Timer 和 NSTimer 区别?

 

 

六、锁

高级面试经常深入问。

  1. 什么是锁?
  2. NSLock?
  3. NSRecursiveLock?
  4. NSConditionLock?
  5. pthread_mutex?
  6. os_unfair_lock?
  7. 自旋锁是什么?
  8. 互斥锁是什么?
  9. 自旋锁和互斥锁区别?
  10. 为什么 OSSpinLock 后来被废弃?
  11. os_unfair_lock 为什么替代 OSSpinLock?
  12. @synchronized 原理?
  13. 哪种锁性能最好?
  14. 什么情况下应该使用锁?
  15. 如何设计一个线程安全的缓存?

 

 

七、网络

你有 11 年 iOS 开发经验,这部分建议重点准备。

HTTP

  1. HTTP 和 HTTPS 区别?
  2. HTTPS 建立连接过程?
  3. TCP 三次握手?
  4. TCP 四次挥手?
  5. TCP 为什么需要三次握手?
  6. TCP 如何保证可靠传输?
  7. HTTP/1.1、HTTP/2、HTTP/3 区别?
  8. HTTP/2 为什么更快?
  9. HTTP/3 为什么使用 QUIC?
  10. GET 和 POST 区别?
  11. PUT、PATCH、DELETE?
  12. HTTP 状态码有哪些?
  13. 301、302、307、308 区别?
  14. 401 和 403 区别?
  15. 502、503、504 分别是什么?
  16. 什么是 DNS?
  17. DNS 查询过程?
  18. CDN 原理?
  19. HTTPS 中证书验证过程?
  20. 什么是中间人攻击?
  21. iOS 如何实现 HTTPS 证书校验?
  22. 什么是 SSL Pinning?

 

 

八、网络框架

如果面试官知道你做过百度这种大型 App,可能会问得比较深入。

  1. AFNetworking 原理?
  2. NSURLSession 原理?
  3. NSURLSession 和 NSURLConnection 区别?
  4. NSURLSessionTask 有哪些类型?
  5. UploadTask 和 DownloadTask?
  6. 网络请求如何取消?
  7. 网络请求超时怎么处理?
  8. 如何设计网络重试?
  9. 什么情况下应该重试?
  10. 如何避免网络请求重复?
  11. 如何实现请求缓存?
  12. 如何实现 Token 刷新?
  13. Token 过期时多个请求同时刷新怎么办?
  14. 如何保证只刷新一次 Token?
  15. 如何实现请求队列?
  16. 如何实现网络请求优先级?
  17. 如何设计网络层?

 

 

九、架构

MVC / MVVM

  1. MVC 的缺点?
  2. 为什么 ViewController 容易变成 Massive ViewController?
  3. MVVM 怎么解决?
  4. MVVM 的缺点?
  5. ViewModel 是否应该依赖 UIKit?
  6. MVVM 和 MVC 怎么选择?
  7. VIPER 是什么?
  8. Clean Architecture 是什么?
  9. Coordinator 是什么?
  10. 为什么需要 Router / Coordinator?
  11. 如何解决页面之间强耦合?
  12. 如何设计一个大型 App 架构?

 

 

十、模块化

百度这种大型公司经历,这部分很容易被问。

  1. 为什么需要模块化?
  2. CocoaPods 模块化怎么做?
  3. Framework 和 Static Library 区别?
  4. Dynamic Framework 和 Static Framework?
  5. .framework 和 .xcframework?
  6. XCFramework 解决什么问题?
  7. 如何拆分大型 iOS 项目?
  8. 模块之间如何通信?
  9. 如何避免循环依赖?
  10. 如何设计组件化架构?
  11. URL Router 是什么?
  12. Protocol + Dependency Injection 怎么做组件解耦?
  13. Swift Package Manager 怎么做模块化?
  14. CocoaPods 和 SPM 的优缺点?

 

 

十一、iOS 性能优化

高级岗位非常重要。

CPU

  1. iOS 卡顿是什么原因?
  2. 主线程为什么会卡顿?
  3. 如何检测主线程卡顿?
  4. FPS 是什么?
  5. CPU 使用率过高怎么排查?
  6. 如何优化复杂页面?
  7. UITableView 卡顿原因?
  8. UICollectionView 卡顿原因?

GPU

  1. 离屏渲染是什么?
  2. 哪些操作会产生离屏渲染?
  3. 圆角为什么可能导致离屏渲染?
  4. cornerRadius 和 masksToBounds?
  5. Shadow 为什么可能产生性能问题?
  6. 如何优化圆角?
  7. 什么是 GPU Overdraw?

内存

  1. 内存暴涨怎么排查?
  2. Memory Leak 怎么排查?
  3. Memory Graph 怎么使用?
  4. Instruments 怎么使用?
  5. 图片为什么容易造成内存问题?
  6. 图片加载如何优化?
  7. 大图如何避免 OOM?
  8. ImageIO 和 UIImage 的区别?
  9. 如何实现图片降采样?

 

 

十二、启动优化

高级岗位很容易问。

问题

如果让你负责一个大型 App 的启动优化,你怎么做?

建议你按照:

启动阶段数据采集定位耗时优化验证

来回答。

可能继续问:

  1. App 启动分几个阶段?
  2. 冷启动和热启动区别?
  3. Pre-main 是什么?
  4. Main 之后发生什么?
  5. +load 为什么影响启动?
  6. 动态库为什么影响启动?
  7. 如何减少动态库?
  8. 如何优化 +load?
  9. 如何延迟初始化?
  10. 如何异步初始化?
  11. 如何统计启动时间?
  12. 如何建立启动性能监控?

 

 

十三、Crash / 稳定性

  1. Crash 怎么排查?
  2. EXC_BAD_ACCESS 是什么?
  3. 野指针怎么产生?
  4. SIGABRT 是什么?
  5. SIGSEGV?
  6. KVO Crash 怎么产生?
  7. 数组越界怎么处理?
  8. 多线程 Crash 怎么排查?
  9. Crash Symbolication 是什么?
  10. dSYM 是什么?
  11. 如何收集线上 Crash?
  12. 如何设计 Crash 监控系统?
  13. 如何处理线上紧急 Crash?
  14. 什么是 PLCrashReporter?

十四、Swift

如果你面试高级 iOS,Swift 也建议准备。

  1. struct 和 class 区别?
  2. Value Type 和 Reference Type?
  3. 为什么 Swift 推荐 struct?
  4. copy-on-write 是什么?
  5. Swift 的 ARC?
  6. weak / unowned 区别?
  7. protocol 是什么?
  8. protocol extension?
  9. associatedtype?
  10. opaque type?
  11. generic?
  12. associated value?
  13. enum 为什么强大?
  14. Optional 底层是什么?
  15. some 和 any 区别?
  16. Swift 的闭包?
  17. escaping closure?
  18. autoclosure?
  19. async/await?
  20. Swift Concurrency?
  21. Task?
  22. Actor?
  23. MainActor?
  24. Sendable?
  25. async/await 和 GCD 区别?

 

 

十五、Swift Concurrency

现在高级岗位很值得准备。

重点:

Task {

    let result = await request()

}

面试官可能问:

 

  • Task 创建后在哪执行?
  • Task 和线程是什么关系?
  • Task 会创建线程吗?
  • Task cancellation 怎么实现?
  • TaskGroup?
  • Actor?
  • MainActor?
  • Actor 如何保证线程安全?
  • async/await 如何避免回调地狱?
  • Swift Concurrency 和 GCD 如何选择?

十六、Flutter iOS 混合开发

因为你有 Flutter 经历,这部分非常适合当你的加分项

可能问:

  1. Flutter 和 Native 如何通信?
  2. MethodChannel 原理?
  3. EventChannel?
  4. BasicMessageChannel?
  5. Pigeon 是什么?
  6. Flutter Engine 是什么?
  7. Flutter 页面如何嵌入 iOS?
  8. FlutterBoost 原理?
  9. Flutter 页面生命周期?
  10. Flutter 和 Native 如何共享数据?
  11. Flutter 页面为什么第一次打开慢?
  12. Flutter Engine 如何复用?
  13. Flutter 多 Engine 有什么问题?
  14. Flutter 内存占用如何优化?
  15. Flutter 卡顿怎么排查?
  16. Flutter 和 Native 如何进行路由管理?
  17. Flutter 模块如何集成到已有 iOS 工程?
  18. flutter build ios-framework 做了什么?
  19. Flutter.xcframework 是什么?
  20. Flutter 升级后 iOS 工程为什么容易出现问题?

 

 

十七、鸿蒙

你的鸿蒙建议作为第三梯队

先准备这些:

  1. HarmonyOS 和 iOS 架构区别?
  2. ArkTS 是什么?
  3. ArkUI 是什么?
  4. Stage 模型是什么?
  5. Ability 是什么?
  6. UIAbility?
  7. WindowStage?
  8. 页面生命周期?
  9. 状态管理?
  10. @State
  11. @Prop
  12. @Link
  13. @Provide
  14. @Consume
  15. @Observed
  16. @ObjectLink
  17. 鸿蒙线程模型?
  18. TaskPool?
  19. Worker?
  20. 鸿蒙网络请求怎么做?
  21. 鸿蒙模块化怎么做?
  22. iOS 和鸿蒙跨端方案怎么设计?
  23. Flutter + 鸿蒙怎么集成?
  24. Flutter 鸿蒙适配过程中遇到什么问题?
  25. DevEco Studio 和 Xcode 的区别?

 

 

十八、最重要:项目实战题

这一部分我建议你重点准备。

因为你是高级开发,面试官很可能不会一直问八股,而是:

“讲一个你负责的比较复杂的项目。”

你可以重点准备你在百度翻译的项目。

例如:

百度翻译项目

可能被问:

  1. 你负责百度翻译哪些模块?
  2. 你负责的模块技术难点是什么?
  3. AI 作文怎么实现?
  4. AI 问答怎么实现?
  5. AI 教学怎么实现?
  6. 流式输出怎么实现?
  7. Markdown 如何渲染?
  8. SSE 怎么处理?
  9. 长连接怎么处理?
  10. 网络异常怎么处理?
  11. AI 输出过程中用户退出页面怎么办?
  12. 如何保证流式数据不丢失?
  13. 如何处理大量文本渲染?
  14. 如何优化 AI 页面卡顿?
  15. 如何做数据埋点?
  16. 如何做线上问题排查?
  17. Flutter 和 Native 怎么协作?
  18. 为什么这个模块使用 Flutter?
  19. 为什么这个模块使用 Native?
  20. 如果让你重新设计,你会怎么设计?

 

 

十九、高级开发压轴题

这些题你一定要准备。

设计一个网络层

从 0 开始设计一个 iOS 网络层,你怎么设计?

设计图片缓存

从 0 设计一个图片加载和缓存框架。

设计线程安全缓存

多线程环境下设计一个内存缓存。

App 启动优化

一个 App 冷启动 2 秒,怎么优化到 1 秒?

页面卡顿

首页滑动 FPS 从 60 掉到 30,你怎么排查?

内存泄漏

页面退出后 ViewController 没有释放,你怎么排查?

Crash

线上 Crash 率突然上升,你怎么定位?

大型 App 架构

1000 万用户的 App,你如何设计 iOS 客户端架构?

跨端架构

iOS + Android + 鸿蒙 + Flutter,你如何设计技术架构?

AI App

如果让你设计一个 AI 对话 App 的 iOS 客户端,你怎么设计?

 

 

我建议你接下来这样准备

不要单纯刷题,我们可以直接按照高级 iOS 面试实战来准备:

第一阶段:iOS 八股

Runtime → 内存 → RunLoop → GCD → 锁 → 网络 → Swift

第二阶段:高级能力

性能 → 启动 → Crash → 网络架构 → 模块化 → 组件化

第三阶段:项目

百度翻译 → AI 作文 → AI 教学 → AI 问答 → Flutter 混合开发 → 鸿蒙

第四阶段:系统设计

网络层 → 图片缓存 → 架构设计 → AI App → 跨端架构

第五阶段:模拟面试

我可以直接扮演面试官,按照**“百度高级 iOS 开发 / 资深 iOS 开发”**的难度,一道一道问你。你回答后,我给你判断:

  • ⭐ 普通
  • ⭐⭐ 中级
  • ⭐⭐⭐ 高级
  • ⭐⭐⭐⭐ 高级优秀
  • ⭐⭐⭐⭐⭐ 大厂高级/资深

并且告诉你面试官真正想听什么,以及你的答案怎么改才能更像高级开发。

如果按照你的经历,我建议下一步先从 **「iOS 高级面试 100 道 + 标准答案」**开始,重点把 Runtime、内存、GCD、RunLoop、网络、性能、架构和你百度翻译项目串起来。

 

posted on 2026-08-17 20:12  风zk  阅读(9)  评论(0)    收藏  举报

导航