整理了一些早期的腾讯iOS面试题,发出来供大家参考。
1、自我介绍
进行自我介绍,介绍自己的工作经历和项目经历。
2、主要项目介绍
介绍项目的功能、难点、自己做出的贡献。
3、常用那些第三方库,是否了解,挑一个介绍原理?
AFNetworking、MJRefresh、MBProgressHUD、SDWebImage、SAMKeyChain、微信、FDFullscreenPopGesture、Masonry、IQKeyboardManager、FMDB、MLeakFinder等
4、简述AFNetworking的优势
- 原有基础urlsesson上封装了一层,在传参方面更灵活,
- 回调更友好,
- 支持返回数据序列化
- 支持文件上传,断点下载,
- 自带多线程,防死锁
- 处理了Https证书流程,节省移动端开发
- 支持网络状态判断
5、NSURLConnection与NSURLSession的区别
简述主要区别
6、主要介绍项目难点
项目遇到了什么难点,自己是如何解决的
7、tableview卡顿原因
- cell中需要加载图片及设置成圆角(layer.masksToBounds=YES)产生离屏渲染;
- cell的重新布局;
- cell的高度不确定;
- cell中的控件的数量;
- 全局更新TableView;
- 使用了clearcolor,无背景色,透明度为0;
- 使用addView给cell动态的添加View;
- 实现了无用的代理方法;
- 做了多余的绘制工作;
- 没有预渲染图像。
解决:
- 加载网络图片使用异步加载,并缓存;尽量不要设置圆角,采用带圆角的图片;
- cell的布局填充操作比较耗时,一般创建好久布局好;
- 提前计算cell的高度并缓存cell的属性;
- 尽量使cell的布局大致相同,不同风格的cell采用不同的重用标识符,初始化添加控件,不适用的先隐藏;
- 可以采用局部更新cell的内容;
- 因为渲染耗时较长,尽量使用颜色设置;
- 自定义cell,预先布局好cell的子视图;
- 实现一些必要用到的代理方法;
- 在实现drawRect:的时候,它的rect参数就是需要绘制的区域,这个区域之外的不需要进行绘制。例如可以用CGRectIntersectsRect、CGRectIntersection或CGRectContainsRect判断是否需要绘制image和text,然后再调用绘制方法。
- 在bitmap context里先将其画一遍,导出成UIImage对象,然后再绘制到屏幕。
8、数据存储
– 文件:沙盒、Plist、NSKeyedArchiver归档 / NSKeyedUnarchiver解档
– NSUserDefaults
– 数据库:SQLite3、FMDB、Core Data
9、归档时,如遇类型更改怎么办?
增加类型判断,或者runtime自动归解档
10、gcd用过哪些,应用场景,简述原理,gcd 同步异步组合?
https://www.jianshu.com/p/2d57c72016c6
https://juejin.im/post/6844903443379798030
11、drawrect layoutsubview分别何时触发?
https://www.jianshu.com/p/132b84d1ba80