资深的“八股文”与核心能力复习全景图
对于你这个级别,面试官考察的重点通常是:深度(原理)、广度(知识面)和 高度(架构与工程化)。
我将大纲分为五大模块,按优先级排序:
模块一:iOS 核心底层 (你的强项与必考项)
这也是你建立技术壁垒的地方,必须能够信手拈来。
1. Objective-C Runtime (运行时)
-
对象模型:
isa指针结构(Non-pointer isa)、objc_object、objc_class、Meta-Class(元类)及其继承链。 -
消息发送机制:
objc_msgSend流程(快速查找 Cache -> 慢速查找方法列表 -> 动态方法解析 -> 消息转发三部曲)。 -
Method Swizzling: 原理、坑点(如多次 Hook、类簇 Hook)、应用场景(无埋点统计、APM)。
-
Associated Objects: 关联对象的底层实现(HashMap),为什么分类(Category)不能加实例变量但能加属性?
-
Weak 实现原理: SideTable、Weak表、对象释放时的清除流程。
2. RunLoop
-
结构与模式: Mode, Source0/Source1, Timer, Observer。
-
线程保活: 如何实现常驻线程?
-
自动释放池 (AutoreleasePool): 创建与销毁时机,与 RunLoop 的关系(Entry, BeforeWaiting, Exit)。
-
应用: 界面卡顿监测(通过 Observer)、大图加载优化。
3. 内存管理 (Memory Management)
-
引用计数: Retain/Release/Dealloc 实现原理。
-
循环引用检测: Block、Delegate、NSTimer 的循环引用及解法(
__weak/__strongdance)。 -
Taged Pointer: 针对小对象的内存优化技术。
4. 多线程与并发 (GCD & Locks)
-
GCD: 串行/并发队列、同步/异步任务、Group、Barrier、Semaphore。
-
锁的原理与性能:
@synchronized,NSLock,pthread_mutex,OSSpinLock(vsos_unfair_lock)。 -
死锁与优先级反转: 产生原因及解决方案。
模块二:计算机网络 (架构师必备)
作为架构师,你需要懂协议层面的优化。
1. HTTP/HTTPS
-
HTTPS 握手流程: SSL/TLS 四次握手详细过程(RSA vs ECDHE),对称加密与非对称加密的配合。
-
HTTP 版本演进: 1.0 vs 1.1 (Keep-Alive) vs 2.0 (多路复用, 头部压缩) vs 3.0 (QUIC, 基于 UDP)。
-
缓存机制:
Expires,Cache-Control,Last-Modified/Etag。
2. TCP/UDP
-
TCP 核心: 三次握手(为什么不是两次?)、四次挥手、流量控制(滑动窗口)、拥塞控制(慢启动、快重传)。
-
Socket 编程: 长连接心跳机制、断线重连策略。
3. 网络优化与安全
-
DNS 劫持: HTTPDNS 的原理与实现。
-
安全: 中间人攻击防范(Certificate Pinning 证书锁定)、数据加密签名。
模块三:数据结构与算法 (逻辑思维考察)
对于资深岗位,通常不会考太偏门的,但经典题目必须秒解,且要能分析时间/空间复杂度。
1. 数据结构
-
链表: 反转链表(递归/迭代)、环形链表检测、合并有序链表。
-
树: 二叉树遍历(前中后层序)、最大深度、翻转二叉树、二叉搜索树(BST)。
-
哈希表 (Hash Map): 碰撞解决策略(拉链法 vs 开放寻址法)、扩容机制。
-
栈与队列: 两个栈实现队列、滑动窗口最大值。
2. 经典算法
-
排序: 快速排序 (Quick Sort) - 手写必须熟练、归并排序、堆排序。
-
查找: 二分查找及其变种。
-
动态规划 (DP) / 递归: 爬楼梯、斐波那契、最大子序和、背包问题(理解思路即可)。
-
双指针/滑动窗口: 解决字符串/数组子串问题。
模块四:UI 渲染与性能优化 (实战经验)
这是你简历中 Highlight 的部分,面试中会被深挖。
1. 渲染原理
-
流程: CPU (Layout, Display, Prepare) -> GPU (Render, Framebuffer) -> 屏幕显示。
-
离屏渲染 (Off-Screen Rendering): 产生原因(圆角、阴影、Mask)、检测工具、危害与规避。
-
事件传递与响应链:
hitTest:withEvent:与pointInside:withEvent:。
2. 性能优化体系 (APM)
-
启动优化: pre-main 阶段(Dyld, Rebase/Bind, Objc setup)与 post-main 阶段优化策略。
-
包体积瘦身: LinkMap 分析、无用类/资源检测、编译选项优化 (LTO)。
-
OOM 与内存治理: 内存警告处理、大图采样(Downsampling)、野指针定位(Zombie Objects)。
-
卡顿检测: 主线程 RunLoop 监控 vs 子线程 Ping。
模块五:Swift 与 现代架构 (加分项)
现在的 iOS 面试,Swift 占比越来越高。
1. Swift 语言特性
-
基础: Struct vs Class (值类型 vs 引用类型)、Optional 原理。
-
进阶: 派发机制(Static vs Dynamic Dispatch vs Message)、泛型、协议面向编程 (POP)、Copy-on-Write (COW)。
2. 架构模式
-
MVC / MVVM / MVP / VIPER: 区别、优缺点、你如何做选型?
-
组件化/模块化: 路由方案对比(URL Router vs Target-Action/CTMediator vs Protocol-Class)。
-
响应式编程: RxSwift / Combine 的核心思想(观察者模式 + 迭代器模式)。
3. 跨平台 (你的 Flutter 优势)
-
Flutter 原理: Widget/Element/RenderObject 三棵树、渲染管线、Platform Channel 通信机制。
-
混合栈管理: FlutterBoost 原理或自研方案。