一面
1、卡顿原因、解决办法。为什么透明视图不如不透明视图?
2、闪退原因、监测、过程。友盟是怎么捕获闪退的?从一个事件到闪退发生了什么?
3、图片的压缩,从600k到500k,不能设置固定压缩比,应该怎么做?压缩图片,压缩图片实际压缩的是哪些东西?加载超大图;图片在计算机中的存储形式;10M的图片加载到内存中是多大?大图是怎么加载的?
图像文件存储的都是每一个像素对应的颜色值。
4、字典的本质?哈希表原理?
哈希表。
5、链表和数组,哪个容易找到地址?
数组。
在内存中,数组是一块连续的区域。插入和删除数据效率低。随机读取效率很高,因为数组是连续的,知道每一个数据的内存地址,可以直接找到给地址的数据。
链表增加和删除数据很容易。查找数据时效率低,因为不具有随机访问性。
6、列表有好多页,某一页和后边加载的一页中有相同的数据,怎么处理?
7、动态库和静态库的区别。
8、设计模式。
二面(电话面试)
1、什么时候开始接触 iOS?怎么学的iOS?
2、公司多少人?什么项目?
3、你会选择什么样的公司?
4、数据库(SQLite/Realm)是怎么保证线程安全的?
5、UserDeafaults 系统做了哪些优化?为什么可以在主线程上去做存取?如果让你实现,方法已经是同步的方法了,你会怎么处理?
6、+load 和 +initialize 方法什么时候会调用,+load 和 +initialize 方法、main 方法这三个的调用顺序。
7、@class 和 #import 在编译的时候有哪些区别?
8、JSON 转 Model 你用的是什么?MJExtension 字典转模型的具体步骤?拿到字典了,第一步做什么,第二步做什么?
9、WebView 跟 JS 是怎么交互的?
10、WebView 怎么存 cookie?
11、A->B->C->D 从D返回到B。说几个不同的实现思路。
- 方案1:for 循环 self.navigationController.viewControllers 判断某个控制器是否是 B 如果是就 popToViewController:B。
- 方案2:self.navigationController.viewControllers 是一个不可变数组,可以赋值给一个可变的数组,然后把 C 移除,然后再赋值给 viewControllers。
- 其他方案:提示不一定要 push,present出来的怎么弄?
12、二分查找。
13、深拷贝与浅拷贝,某个值得改变可能会影响原始值,那是深拷贝还是浅拷贝?
14、性能优化?图片加载到 UIImageView 上经过了哪些过程?
15、Label 怎么多行显示。
16、Button有哪些状态?
17、dispatch_group_notify 是在哪个线程上?