美菜网面试题

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 证书

https://www.runoob.com/w3cnote/https-ssl-intro.html

打赏

尊重原创内容,转载请注明出处
本文链接地址: https://www.awnlab.com/archives/547

为您推荐

发表评论

邮箱地址不会被公开。 必填项已用*标注