针对原作者版本,补充部分答案和涉及点
- 内存管理方面(ARC、MRC、autorelease、autoreleasepool)
- 前几份面试题均有涉及题目和参考答案
- Runtime方面(消息发送,NSHipster 对象关联,NSHipster 方法交换等等)
- KVO内部实现原理(多家公司有问到)
- Runloop方面(深入理解RunLoop)
- HTTPS通信过程:见下文参考答案
- UITableView的优化手段方法(iOS 保持界面流畅的技巧)
- 多线程方面(GCD、NSOperation居多)(关于iOS多线程,你看我就够了)
- SDWebImage源码分析
- 事件传递以及响应链(史上最详细的iOS之事件的传递和响应机制)
- 图片的解压缩
在主线程的下一个 run loop 到来时,Core Animation 提交了这个隐式的 transaction ,这个过程可能会对图片进行 copy 操作,而受图片是否字节对齐等因素的影响,这个 copy 操作可能会涉及以下部分或全部步骤:
在将磁盘中的图片渲染到屏幕之前,必须先要得到图片的原始像素数据,才能执行后续的绘制操作,这就是为什么需要对图片解压缩的原因
- 分配内存缓冲区用于管理文件 IO 和解压缩操作;
- 将文件数据从磁盘读到内存中;
- 将压缩的图片数据解码成未压缩的位图形式,这是一个非常耗时的 CPU 操作;
- 解压缩后的图片大小与原始文件大小之间没有任何关系,而只与图片的像素有关
- 最后 Core Animation 使用未压缩的位图数据渲染 UIImageView 的图层。
- APM方面(内存泄漏检测、crash监控,卡顿监控以及底层的实现原理等等)
- 组件化方(蘑菇街 App 的组件化之路、iOS应用架构谈 组件化方案、在现有工程中实施基于CTMediator的组件化方案、iOS 组件化方案探索、iOS 组件化–路由设计思路分析)
- 持续化集成(我们公司使用的是:Jenkins+fastlane)
- 客户端发起SSL通信,报文中包含客户端支持的SSL的指定版本,加密组件列表(加密算法及密码长度)
- 服务端通过SSL通信,将SSL版本及加密算法版本中的一组发送至客户端.
- 服务端发送客户端Certificate报文,报文中包含公开密钥证书.
- 客户端验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示;如果证书受信任,或者用户接受了不受信的证书,客户端会生成一个Pre-master secret的随机密码串,并且通过接受到公钥加密.
- 服务端会通过私钥解密出Pre-master sercret随机密码串,通过Pre-master sercret解密密发来的握手信息,并验证Hash是否与浏览器发来的一致.之后通过密码加密一段握手信息,发给客户端.
- 客户端解密并计算握手信息的Hash,如果与Server发来的Hash一致,此时握手过程结束,利用对称加密算法进行加密.
- 面试题系列目录
- 上一份: 深圳iOS面试分享2018年4月
- 下一份: 头条网易微信阿里美团硕士春招面试题2018年3月