这份文档是针对2020年iOS高级工程师面试所整理的题目集合,涵盖了网络、APP优化、视频和IM、多线程、架构、安全、RunTime、RunLoop以及内存和UI等多个核心领域。以下是对这些知识点的详细解释:
**网络:**
1. **HTTP和HTTPS的区别**:HTTP是超文本传输协议,不加密,安全性较低;HTTPS基于SSL/TLS协议,能提供加密通信和身份验证,确保数据安全。
2. **HTTPS加密方式**:主要通过TLS/SSL协议,采用公钥/私钥加密和数字证书进行数据传输的安全保障。
3. **HTTP的缺点**:无状态,不安全,易被窃听或篡改。
4. **TCP和UDP区别**:TCP是面向连接、可靠的协议,保证数据顺序;UDP是无连接、快速但不可靠的协议,不保证数据顺序和完整性。
5. **TCP优化**:减少TCP慢启动,使用TCP快恢复,优化拥塞窗口策略等。
6. **网络响应优化**:缓存策略、压缩传输数据、减少DNS查找时间、使用预加载和预读取技术等。
7. **Socket**:属于应用层与传输层之间的接口,用于进程间网络通信,基于TCP/IP协议族。
**APP优化:**
1. **编译速度优化**:升级Xcode版本,合理组织代码结构,减少编译时依赖。
2. **冷启动优化**:延迟非必要组件加载,减少启动时的内存占用。
3. **后台保活**:利用后台模式,如音频播放、定位服务等。
4. **性能检测和优化**:使用Instruments工具,分析CPU、内存、网络等指标。
5. **APP埋点**:记录用户行为,用于数据分析和用户体验优化。
**视频和IM:**
1. **PLI**:Picture Loss Indication,webRTC中的机制,用于提示丢包。
2. **WebSocket**:建立持久连接,双向通信,基于HTTP协议握手。
3. **IM协议**:常见如XMPP、MQTT,选择要考虑实时性、可靠性和效率。
4. **H264**:高效视频编码标准,优点是压缩率高,缺点是解码复杂度较高。
5. **音频采样优化**:降低采样率、位深度,使用高效的编码格式。
6. **硬解和软解**:硬解由硬件加速,效率高但不通用;软解由CPU处理,兼容性好。
7. **RTMP和RTSP**:RTMP用于实时流媒体传输,RTSP是控制协议,用于播放和录制。
**多线程:**
1. **GCD、NSThread和NSOperation**:GCD是Apple推荐的并发机制,轻量高效;NSThread是线程对象,操作简单;NSOperation队列支持取消、依赖关系等。
2. **GCD底层原理**:基于C语言的线程池和调度队列。
3. **网络请求依赖场景解决方案**:使用GCD的group和barrier或NSOperation的依赖设置。
4. **锁**:互斥锁、读写锁、自旋锁等,用于保护共享资源。
5. **atomic**:保证基本的原子性,但不保证线程安全。
6. **NSArray线程安全**:默认不是线程安全的,需手动加锁或使用线程安全容器。
**架构:**
1. **APP架构**:MVC、MVVM、VIPER等,负责分离业务逻辑、视图和数据管理。
2. **重构页面**:分析现有结构,设计新架构,逐步迁移代码。
3. **MVVM与MVC对比**:MVVM强调数据绑定,MVC侧重控制器职责。
4. **APP动态化方案**:热更新、JavaScriptCore、插件化等。
**安全:**
1. **本地数据加密**:AES、RSA等,保护敏感信息。
2. **加密类型**:对称加密效率高,非对称安全但慢。
3. **哈希算法**:不可逆,常用于密码存储,防止泄露原始信息。
4. **非对称加密算法**:RSA、ECC等,用于密钥交换和数字签名。
5. **HTTPS破解**:中间人攻击、证书欺诈等。
6. **越狱检测**:检查私有API、系统文件等异常。
7. **反编译防护**:混淆代码、使用代码签名、静态代码加密等。
**RunTime:**
1. **方法交换**:利用`method_exchangeImplementations`实现,用于AOP编程。
2. **消息转发**:当消息无法发送到接收者时,通过`forwardingTargetForSelector`和`forwardInvocation:`进行处理。
3. **分类加载**:在类初始化时加载,用于动态扩展。
4. **KVO原理**:基于Runtime的添加观察者和通知机制。
5. **weak指针原理**:弱引用对象在引用计数为0时自动设为nil,避免循环引用。
**RunLoop:**
1. **RunLoop应用场景**:定时器、网络请求、事件响应等。
2. **RunLoop原理**:处理事件、保持程序运行,减少资源消耗。
3. **NSTimer问题**:在RunLoop非主模式下可能不准确,需考虑RunLoop模式。
**内存:**
1. **堆栈区别**:栈内存自动分配释放,速度快但大小有限;堆内存手动管理,大小可变。
2. **循环引用**:避免强引用循环,使用弱引用、NSManagedObjects等。
3. **内存优化**:减少内存分配,及时释放不再使用的对象,使用懒加载。
4. **线上监测内存**:使用Instruments工具,监控泄漏和内存增长。
**UI:**
1. **事件响应链**:从触摸事件到响应者对象的传递过程。
2. **视图树结构**:UIView及其子视图组成的层次结构。
3. **阴影和圆角**:通过CAShapeLayer结合贝塞尔曲线实现。
4. **tableView帧数优化**:复用cell,减少计算,优化动画。
5. **GPU渲染**:离屏渲染可能导致性能下降,应尽量避免不必要的离屏渲染。
以上知识点涵盖了iOS开发中的关键领域,对于面试和日常开发具有重要指导价值。
评论0
最新资源