一、网络架构设计(★★★★★ 高频)
✅ Q81:如何设计一个 iOS 网络层?
先说分层:
API Layer
↓
Request Builder
↓
Network Client
↓
Interceptor
↓
Response Parser
↓
Cache Layer
各层职责(必须能解释):
- API Layer
定义接口
endpoint 管理 - Request Builder
构建 URLRequest - Network Client
URLSession / Alamofire - Interceptor
token
retry
log - Parser
JSON → Model - Cache
本地缓存策略
网络层核心目标是解耦请求构建、执行和数据处理
✅Q82:为什么不能直接 everywhere 用 Alamofire?
- 高级回答:
业务侵入
难替换
难测试 - 正确:
Alamofire 应被封装在 NetworkClient 内。
二、Token & 登录体系
✅ Q83:Token 过期如何处理?
请求失败(401)
↓
进入刷新队列
↓
refresh token
↓
成功 → 重试请求
↓
失败 → 登录页
✅ 只刷新一次
✅ 队列等待机制
✅ Q84:如何避免多个请求同时刷新 token?
高级答案:
- 使用:
semaphore
或 actor
或 refresh lock - 保证:
同一时间只有一个 refresh 请求。
三、缓存设计(高级)
✅ Q85:缓存策略有哪些?
| 类型 | 场景 |
|---|---|
| Memory Cache | 高频访问 |
| Disk Cache | 离线 |
| HTTP Cache | ETag |
缓存需要失效策略(TTL)。
✅ Q86:什么时候不用缓存?
- 高分回答:
强实时数据
金融类数据
权限相关接口
四、HTTPS(面试常问)
✅ Q87:HTTPS 比 HTTP 多了什么?
- 答:
TLS 握手
对称加密
非对称加密
证书验证
✅ Q88:什么是证书绑定(SSL Pinning)?
客户端内置服务器证书或公钥进行校验。
- 防止:
中间人攻击。
五、项目经验
✅ Q89:如何介绍项目?(万能模板)
① 项目背景
② 技术挑战
③ 我的职责
④ 技术方案
⑤ 结果指标
该项目是一个日活 XX 万的社区 App,我负责客户端架构与性能优化。
最大挑战是列表卡顿与启动慢,我通过模块化改造与异步渲染,将启动时间从 2.3s 降至 1.4s,Crash 率下降 35%。
✅ Q90:如何描述你的技术贡献?
✅ 我主导了 XXX 设计并解决了 XXX 问题。
六、线上事故(必问)
✅ Q91:讲一次线上事故?
背景
↓
问题现象
↓
定位过程
↓
根因
↓
解决方案
↓
防止再次发生
发布后 Crash 激增,通过 Crash 堆栈发现多线程访问数组导致越界,最终通过 Actor 隔离状态解决,并增加线程安全检测。
七、技术决策能力
✅ Q92:如何做技术选型?
性能
维护成本
团队熟悉度
扩展性
技术选型是工程问题,不是技术偏好
✅ Q93:如何推动技术改造?
- 答:
数据证明问题
小范围试点
渐进迁移
八、团队 & 高级工程师思维
✅ Q94:如何 Code Review?
- 关注:
架构
可读性
边界条件
性能风险
不是代码风格
✅ Q95:如何带新人?
- 高分回答:
提供模板工程
code review 指导
技术文档沉淀
九、终极问题
✅ Q96:你未来的技术规划?
深入客户端架构与稳定性建设,同时提升跨端与工程效率能力。
✅ Q97:你最大的技术成长是什么?
从功能实现转向系统设计与稳定性思维。
✅ Q98:你为什么离职?
希望进入更有技术挑战和成长空间的团队。
✅ Q99:你的优势?
架构经验 + 性能优化 + 稳定性建设
✅ Q100:为什么要招你?
我不仅能完成需求,还能通过架构与工程优化持续降低团队成本。