裁员寒冬的iOS面试经验
贫道刚入职斗鱼深圳4个月,本以为能安然过个好年,突然来的裁员消息重重给了一锤。进城外来务工人员的悲哀,无奈只好硬着头皮找工作,总结一些面试题供广大道友借鉴。也祝愿大家都能进到喜欢的位置。
1、报unrecognized selector sent to instance的Crash之前系统会怎么处理(消息转发机制)?
2、OC的NSError和Swift的Error对象有什么区别?
3、哈希表是什么,OC中哪里有用到?
哈希算法详解(腾讯面试官的问题,应用我回答字典,不知道为啥不对)
4、分类的底层实现?
5、数据库使用事务的优缺点?
优点:1、LZ遇到的场景是上百条数据插入数据库时,不使用事务会导致每次操作都要连接数据库,完成操作时间大概在8s。使用事务后操作时间在ms级别。2、当你需要对多个表进行相关性操作时,使用BeginTrans()开启事务,然后操作,如果中间哪个表更新出错了,或者数据有问题,你可以用RollBack()方法在取消之前的相关性操作,如果没有错,那就使用Commit()方法提交你的修改。另外,在这个过程中,所有你改动的内容只对你自己有效,别人不能知道你改了什么,也不能对你正在改的表做修改,直到你提交之后,别人才能修改这些表,检索出你修改过的内容。
缺点:并发问题 解决方案
6、FMDB的原理?
7、如何保证线程安全?
最简单的方式肯定就是加锁。(面试官还问其他方式,只好找了下资料有系统CAS的方式)
无锁保证线程安全
8、APNS?
流程图
根据图片我们可以概括一下:
1、应用程序注册APNS消息推送。
2、iOS从APNS Server获取devicetoken,应用程序接收device token。
3、应用程序将device token发送给程序的PUSH服务端程序。
4、服务端程序向APNS服务发送消息。
5、APNS服务将消息发送给iPhone应用程序。
9、沙盒目录?
10、Xcode进行编译时会发生什么?
11、单例几种创建方式?
12、UIWebview和WKWebview对比?
13、MD5算法可逆吗?
MD5不可逆的原因是由于它是一种散列函数(也叫哈希函数,哈希函数又称散列函数,杂凑函数,他是一个单向密码体制,即从明文到密文的不可逆映射,只有加密过程没有解密过程,哈希函数可以将任意长度的输入经过变化后得到固定长度的输出,这个固定长度的输出称为原消息的散列或消息映射。 理想的哈希函数可以针对不同的输入得到不同的输出,如果存在两个不同的消息得到了相同的哈希值,那我们称这是一个碰撞),使用的是hash算法,在计算过程中原文的部分信息是丢失了的。一个MD5理论上是可以对应多个原文的,因为MD5是有限多个而原文是无限多个的。MD5码128位2进制数,最多有2^128种可能但是字符串的数量显然是有无数种可能的。
14、ADS和RSA加密?
建议自行搜索资料弄懂对称加密和非对称加密算法,看下原理。
15、Websocket?
16、排序算法?
百度百科重点了解时间复杂度、空间复杂度和原理。
17、autorelease底层原理?
18、SDWebimage缓存图片导致内存一直增加用什么机制处理?
淘汰策略:根据图片使用的次数进行加权,权重高的放在队列前面,将权重低的图片优先剔除出内存。(此策略思路可用在礼物队列方案)