百度面试题

百度面试题

百度面试题

百度一面

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 优化
2.列表快速滑动不需要加载的图片怎么处理

目前有些第三方微博客户端(比如 VVebo、墨客等),使用了一种方式来避免高速滑动时 Cell 的绘制过程,相关实现见这个项目:VVeboTableViewDemo。它的原理是,当滑动时,松开手指后,立刻计算出滑动停止时 Cell 的位置,并预先绘制那个位置附近的几个 Cell,而忽略当前滑动中的 Cell。这个方法比较有技巧性,并且对于滑动性能来说提升也很大,唯一的缺点就是快速滑动中会出现大量空白内容。如果你不想实现比较麻烦的异步绘制但又想保证滑动的流畅性,这个技巧是个不错的选择。

3.cell 加载大图
  • 分片比例裁剪方式。参考苹果给出的 demo,利用 CGImageCreateWithImageInRect 截取原图对应位置的内容,再通过 CGContextDrawImage 渲染到指定位置;
  • 利用 CATiledLayer 层级的API,自动进行绘制;

参考链接:iOS 大图显示解决办法

4.异步绘制

UIView的绘制原理

系统绘制流程

异步绘制时序图

5.交换方法
6.圆角的处理

优化方式1 :使用贝塞尔曲线 UIBezierPath 和 Core Graphics 框架画出一个圆角

1
2
3
4
5
6
7
8
9
10
11
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100,100,100,100)];
imageView.image = [UIImage imageNamed:@"myImg"];
//开始对imageView进行画图
UIGraphicsBeginImageContextWithOptions(imageView.bounds.size,NO,1.0);
//使用贝塞尔曲线画出一个圆形图
[[UIBezierPath bezierPathWithRoundedRect:imageView.boundscornerRadius:imageView.frame.size.width]addClip];
[imageView drawRect:imageView.bounds];
imageView.image=UIGraphicsGetImageFromCurrentImageContext();
//结束画图
UIGraphicsEndImageContext();
[self.view addSubview:imageView];

参考链接: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 证书验证流程)

数字证书认证机构的业务流程

  1. 服务器的运营人员向第三方机构 CA 提交公钥、组织信息、个人信息(域名)等信息并申请认证;
  2. CA 通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;
  3. 如信息审核通过,CA 会向申请者签发认证文件-证书。证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA的信息、有效时间、证书序列号等信息的明文,同时包含一个签名。 其中签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA 的私钥对信息摘要进行加密,密文即签名; 【数字签名生成的过程】
  4. 客户端 Client 向服务器 Server 发出请求时,Server 返回证书文件;
  5. 客户端 Client 读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA 的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即服务器的公开密钥是值得信赖的。【校验数字签名的过程】
  6. 客户端还会验证证书相关的域名信息、有效时间等信息; 客户端会内置信任 CA 的证书信息(包含公钥),如果 CA 不被信任,则找不到对应 CA 的证书,证书也会被判定非法。

参考链接:经得住拷问的HTTPS原理解析

5.Category 原理
6.异步发送通知 (NSNotificationQueue)

参考链接:iOS中的NSNotification

7.算法
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×