1、block、通知、kvo 区别优缺点
KVO:监听对象,对象属性变化时,接收信息,可以看到属性的变化过程。
通知:在通知中心注册通知,通知中心根据注册的通知名称,发出消息到所有注册对应通知的对象上,一对多,不保证所有注册者都可以收到通知。
代理:雇主不做事,由代理去处理响应方法。代理属性使用weak属性,不增加内存,但如果方法多的话,会有大量的方法实现代码,代理实现协议,判断是否实现协议方法实现协议方法。
block:类似于方法函数,使用copy来定义,会引起内存增加,需要注意循环引用问题。
2、简述数据存储几种方式
文件:沙盒、Plist、NSKeyedArchiver归档 / NSKeyedUnarchiver解档
NSUserDefaults
数据库:SQLite3、FMDB、Core Data
3、队列组合情况介绍
多线程中的队列有:串行队列,并发队列,全局队列,主队列。
执行的方法有:同步执行和异步执行。
组合情况有:
- 串行队列,同步执行
- 串行队列,异步执行
- 并发队列,异步执行
- 并发队列,同步执行
- 主队列,异步执行
- 主队列,同步执行
4、HashSet原理
HashSet实际上是一个HashMap实例,都是一个存放链表的数组。它不保证存储元素的迭代顺序;此类允许使用null元素。
HashSet中不允许有重复元素,这是因为HashSet是基于HashMap实现的,HashSet中的元素都存放在HashMap的key上面,而value中的值都是统一的一个固定对象private static final Object PRESENT = new Object();HashSet中add方法调用的是底层HashMap中的put()方法,而如果是在HashMap中调用put,首先会判断key是否存在,如果key存在则修改value值,如果key不存在这插入这个key-value。
而在set中,因为value值没有用,也就不存在修改value值的说法,因此往HashSet中添加元素,首先判断元素(也就是key)是否存在,如果不存在这插入,如果存在着不插入,这样HashSet中就不存在重复值。
所以判断key是否存在就要重写元素的类的equals()和hashCode()方法,当向Set中添加对象时,首先调用此对象所在类的hashCode()方法,计算次对象的哈希值,此哈希值决定了此对象在Set中存放的位置;若此位置没有被存储对象则直接存储,若已有对象则通过对象所在类的equals()比较两个对象是否相同,相同则不能被添加。
5、升序打印二叉搜索树
一个节点的左子节点的值都比它的值小,右子节点的值都比它的值大所有升序的节点值,因此采用中序遍历的方法(左,根,右)当前根节点存在左子树,递归处理左子树,将满足条件的值存入result数组,再递归处理右子树。
6、APP启动时间
启动时间的监测在 Edit scheme -> Run -> Arguments 中将环境变量 DYLD_PRINT_STATISTICS 设为 1,就可以看到 main 之前各个阶段的时间消耗。还有一个方法获取更详细的时间,只需将环境变量 DYLD_PRINT_STATISTICS_DETAILS 设为 1 就可以。
7、webview加载内容防劫持处理
采用https,或者通过NSURLProtocol进行处理。
8、混合开发有哪些,是否了解?
React Native、weex,flutter,H5
9、git rebase push区别
marge 特点:自动创建一个新的commit 如果合并的时候遇到冲突,仅需要修改后重新
commit 优点:记录了真实的commit情况,包括每个分支的详情。缺点:因为每次merge会自动产生一个merge commit,所以在使用一些git 的GUI tools,特别是commit比较频繁时,看到分支很杂乱。
rebase 特点:会合并之前的commit历史 优点:得到更简洁的项目历史,去掉了merge commit 缺点:如果合并出现代码问题不容易定位,因为re-write了history。
10、界面卡顿原因 监测
http://www.cocoachina.com/articles/95481
11、转场动画原理实现
https://www.jianshu.com/p/4e753f01947e
12、app瘦身了解吗?
无用图片资源、图片压缩、无用类和方法、多Target、Bitcode、合并类库、framework移除x86架构
13、介绍下你目前app的架构
14、http网络优化,数据压缩方面了解吗?
- NSCache缓存、Last-Modified、ETag
- 失败重发、缓存请求有网发送
- DNS解析
- 数据压缩:protobuf,WebP
- 弱网:2G、3G、4G、wifi下设置不同的超时时间
- TCP对头阻塞:GOOGLE提出QUIC协议,相当于在UDP协议之上再定义一套可靠传输协议
15、https 证书