Skip to content

Latest commit

 

History

History
57 lines (38 loc) · 3.62 KB

08字节跳动面试题:2018年4月.md

File metadata and controls

57 lines (38 loc) · 3.62 KB

字节跳动面试题:2018年4月

原链接:https://xcqromance.top/2018/04/01/2018-04-01/

针对原作者版本,补充部分答案和涉及点

主要问题

  • 内存管理方面(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)

HTTPS通信过程:见下文参考答案

  • 客户端发起SSL通信,报文中包含客户端支持的SSL的指定版本,加密组件列表(加密算法及密码长度)
  • 服务端通过SSL通信,将SSL版本及加密算法版本中的一组发送至客户端.
  • 服务端发送客户端Certificate报文,报文中包含公开密钥证书.
  • 客户端验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示;如果证书受信任,或者用户接受了不受信的证书,客户端会生成一个Pre-master secret的随机密码串,并且通过接受到公钥加密.
  • 服务端会通过私钥解密出Pre-master sercret随机密码串,通过Pre-master sercret解密密发来的握手信息,并验证Hash是否与浏览器发来的一致.之后通过密码加密一段握手信息,发给客户端.
  • 客户端解密并计算握手信息的Hash,如果与Server发来的Hash一致,此时握手过程结束,利用对称加密算法进行加密.

链接