2020年iOS高级工程师面试技术点精华汇总

需积分: 18 9 下载量 49 浏览量 更新于2024-08-31 收藏 14KB DOCX 举报
在2020年的iOS高级工程师面试中,面试官们关注的技术点涵盖了多个关键领域,旨在评估候选人的全面技术能力以及在实际工作中的实践应用。以下是一些重要的知识点总结: **网络技术:** 1. **HTTP和HTTPS的区别** - HTTP是无状态的、明文传输协议,而HTTPS在其基础上加入了SSL/TLS加密,提供数据安全。 2. **HTTPS加密方式** - 包括TLS/SSL握手、公钥/私钥对加密通信和数据完整性校验等,如数字证书和预共享密钥。 3. **HTTP缺点** - 明文传输不安全,缺乏状态跟踪,数据易受中间人攻击。 4. **TCP和UDP的区别** - TCP是面向连接、可靠的数据传输协议,UDP则是无连接、不可靠的,但速度快。 5. **TCP优化** - 缓存重用、 Nagle算法调整、TCP窗口大小优化等。 6. **网络响应慢优化** - 分析网络请求、减少重定向、压缩数据、优化图片加载策略等。 7. **Socket** - 属于传输层,实现进程间通信,基于TCP或UDP协议。 **APP优化与性能管理:** 1. **编译速度优化** - 使用构建缓存、模块化开发、代码重构等方法。 2. **冷启动速度** - 减少启动时的资源加载、使用预加载、代码分割等。 3. **后台保活** - 通过持续运行服务、使用推送通知等方式实现。 4. **性能检测与优化** - 使用Instruments、Xcode性能分析工具进行监控,根据发现的问题针对性优化。 5. **埋点实现** - 设计合理的数据上报逻辑,利用Apple的Analytics框架或者第三方工具。 **视频和IM技术:** 1. **webRTC的PLI** - packet loss indication,用于检测丢包并采取措施,如回传重传请求。 2. **WebSocket连接建立** - 基于TCP,长连接、双向通信,全程由客户端发起并维护。 3. **IM协议选择** - 可能涉及XMPP、MQTT等,具体取决于应用需求。 4. **H264编码** - 优点是压缩率高、编码效率好,缺点可能包括编码复杂度和兼容性问题。 5. **音频采样优化** - 调整采样率、位深度、编码格式以适应设备性能。 6. **解码硬件与软件** - 硬解高效且占用CPU少,软解则更灵活但消耗更多CPU资源。 7. **RTMP与RTSP** - RTMP常用于直播,实时传输;RTSP用于控制和流媒体传输,通常较慢但支持多路复用。 **多线程管理:** 1. **GCD/NSThread/NSOperation** - GCD轻量级、高效,适合任务分发;NSThread用于创建线程;NSOperation适用于复杂的异步操作。 2. **GCD底层原理** - 基于dispatch queue实现任务调度和同步。 3. **网络请求依赖场景解决方案** - 可能涉及依赖队列、协程或回调等策略。 4. **常用锁类型** - NSLock、GCD锁等,用于保护共享资源。 5. **atomic与线程安全** - atomic提供了原子操作,但并非所有对象都自动线程安全。 6. **NSArray线程安全** - 通过遵守NSFastEnumeration协议实现,避免并发修改。 **架构设计:** 1. **APP架构理解** - MVC、MVVM、VIPER等模式的应用,模块化、层次化设计原则。 2. **重构页面策略** - 性能优化、用户体验提升、代码清晰度等方面考虑。 3. **MVVM与MVC比较** - MVVM更注重数据绑定和可测试性,MVC则更直观但可扩展性差。 4. **APP动态化方案** - 如自定义模块、插件化开发,需要考虑热更新技术。 **安全相关:** 1. **本地数据加密** - 使用加密算法(如AES)对敏感数据进行保护。 2. **对称与非对称加密** - 对称加密速度快但密钥管理复杂,非对称加密安全性高但效率低。 3. **哈希算法** - 提供数据完整性检查,如MD5、SHA-1等。 4. **非对称加密算法** - RSA、ECC等,用于密钥交换和数字签名。 5. **HTTPS安全问题** - 防止中间人攻击、证书验证等,破解手段包括SSLstrip等。 6. **手机越狱检测** - 检查root权限、签名验证等。 7. **防止反编译** - 加密代码、混淆技术、动态加载代码等。 **Runtime与内存管理:** 1. **方法交换原理** - 在运行时改变类的方法实现,常见于插件化或动态代理。 2. **消息转发流程** - 当未找到直接处理者时,消息会经过一系列转发机制寻找合适的方法。 3. **分类加载顺序** - 类的初始化遵循自下而上的顺序,依赖于category、类、模块等。 4. **KVO原理** - 观察者模式,通过KVC实现属性变化的通知。 5. **weak指针自动置nil** - 解决循环引用问题,当强引用消失时,weak指针将自动变为nil。 6. **RunLoop用途** - 处理定时器、事件循环、I/O操作的管理。 7. **内存管理优化** - 避免内存泄漏、减少不必要的Retain-Copy操作,合理使用ARC。 **UI与图形渲染:** 1. **触摸事件传递** - 从屏幕触发表达式,经过事件处理器到目标View响应。 2. **视图层次结构** - UIView层次结构,从父视图到子视图的嵌套关系。 3. **阴影与圆角绘制** - 可能使用layer样式或自定义视图来实现。 4. **tableView性能优化** - 只渲染可视区域的cell,复用机制和数据源/代理方法的优化。 5. **GPU渲染与离屏渲染** - 利用GPU加速图形渲染,解决视图更新和内存占用问题。 这些知识点展示了面试者对iOS高级工程师所需技能的全面掌握,涵盖了网络通信、性能优化、架构设计、安全防护、内存管理等多个方面,是评估候选人技术实力的重要参考。