百度一面
1.APP 优化
2.列表快速滑动不需要加载的图片怎么处理
3.cell 加载大图
4.异步绘制
5.交换方法
6.圆角的处理
7.监听子线程处理 UI 事件
百度二面
1.项目经验介绍(问 RTMP 协议,UDP 主动丢包策略)
2.项目中遇到什么难点
3.为什么要制作动态库 系统动态库会影响启动时间吗
4.HTTPS ( CA 证书验证流程)
5.Category 原理
6.异步发送通知 (NSNotificationQueue)
7.算法
参考答案
百度一面
1.APP 优化
- iOS 保持界面流畅的技巧
- 启动优化
- 安装包大小优化:正经分析iOS包大小优化
2.列表快速滑动不需要加载的图片怎么处理
目前有些第三方微博客户端(比如 VVebo、墨客等),使用了一种方式来避免高速滑动时 Cell 的绘制过程,相关实现见这个项目:VVeboTableViewDemo。它的原理是,当滑动时,松开手指后,立刻计算出滑动停止时 Cell 的位置,并预先绘制那个位置附近的几个 Cell,而忽略当前滑动中的 Cell。这个方法比较有技巧性,并且对于滑动性能来说提升也很大,唯一的缺点就是快速滑动中会出现大量空白内容。如果你不想实现比较麻烦的异步绘制但又想保证滑动的流畅性,这个技巧是个不错的选择。
3.cell 加载大图
- 分片比例裁剪方式。参考苹果给出的 demo,利用 CGImageCreateWithImageInRect 截取原图对应位置的内容,再通过 CGContextDrawImage 渲染到指定位置;
- 利用 CATiledLayer 层级的API,自动进行绘制;
参考链接:iOS 大图显示解决办法
4.异步绘制
5.交换方法
6.圆角的处理
优化方式1 :使用贝塞尔曲线 UIBezierPath 和 Core Graphics 框架画出一个圆角
1 | UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100,100,100,100)]; |
参考链接:iOS 圆角优化实现代码
7.监听子线程处理 UI 事件
[CALayer display]
百度二面
1.项目经验介绍(问 RTMP 协议,UDP 主动丢包策略)
2.项目中遇到什么难点
3.为什么要制作动态库 系统动态库会影响启动时间吗
库类型 | 优点 | 缺点 |
---|---|---|
静态库 | 1. 目标程序没有外部依赖,直接就可以运行。2. 效率教动态库高。 | 1. 会使用目标程序的体积增大。 |
动态库 | 1. 不需要拷贝到目标程序中,不会影响目标程序的体积。 2. 同一份库可以被多个程序使用(因为这个原因,动态库也被称作共享库)。 3. 编译时才载入的特性,也可以让我们随时对库进行替换,而不需要重新编译代码。实现动态更新 | 1. 动态载入会带来一部分性能损失(可以忽略不计) 2. 动态库也会使得程序依赖于外部环境。如果环境缺少动态库或者库的版本不正确,就会导致程序无法运行(Linux lib not found 错误)。 |
参考链接:iOS动态库、静态库及使用场景、方式
4.HTTPS (CA 证书验证流程)
数字证书认证机构的业务流程
- 服务器的运营人员向第三方机构 CA 提交公钥、组织信息、个人信息(域名)等信息并申请认证;
- CA 通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;
- 如信息审核通过,CA 会向申请者签发认证文件-证书。证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA的信息、有效时间、证书序列号等信息的明文,同时包含一个签名。 其中签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA 的私钥对信息摘要进行加密,密文即签名; 【数字签名生成的过程】
- 客户端 Client 向服务器 Server 发出请求时,Server 返回证书文件;
- 客户端 Client 读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA 的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即服务器的公开密钥是值得信赖的。【校验数字签名的过程】
- 客户端还会验证证书相关的域名信息、有效时间等信息; 客户端会内置信任 CA 的证书信息(包含公钥),如果 CA 不被信任,则找不到对应 CA 的证书,证书也会被判定非法。
参考链接:经得住拷问的HTTPS原理解析
5.Category 原理
6.异步发送通知 (NSNotificationQueue)
参考链接:iOS中的NSNotification