计网

  1. 七层协议栈
  2. HTTP是哪一层的协议?TCP呢?
  3. HTTP常见返回码
  4. HTTP的请求方法(GET、POST、UPDATE、DELETE、HEAD…)
  5. HTTP1.0 1.1 2.0的区别
  6. HTTP头(请求头,响应头)有哪些
  7. HTTPS介绍一下
  8. 抓包的原理
  9. HTTPS能防止中间人攻击吗?
  10. HTTPS使用的是对称加密还是非对称加密?(前期非对称,计算完秘钥后,使用对称加密)
  11. TCP和UDP的区别
  12. TCP的拥塞控制介绍下(慢启动,快重传,快恢复)
  13. 客户端发送网络请求,到拿到响应的整个过程(类似一个网页打开的过程)
  14. DNS解析时,某个ISP服务器宕机了,这时候会怎样?
  15. Cookie和Session的区别

计组

  1. 进程和线程的区别
  2. 进程之间通信的方式
  3. 线程之间通信的方式
  4. 死锁产生的原因
  5. 死锁的处理方法(鸵鸟、预防、解除)

算法

  1. 最近公共父节点(两个节点可能为null,可能不在树上)
  2. 反转链表
  3. 合并两个有序链表
  4. 不用递归,打印UIView的所有subviews(包括孙子view)
  5. 设计图片缓存系统(LRU)
  6. 满二叉树,插入一个新节点
  7. 字符串求全排列
  8. 1G内存,一个1T的文件内每一行都是URL,去重
  9. 自己实现memcopy

OC

  1. Block截获变量
  2. C++ struct和Class的区别
  3. 内存管理怎么做的?(ARC是编译器插入xxx,再配合autoreleasepool)
  4. AutoreleasePool是怎么管理内存的
  5. 属性修饰符有哪些?(原子性、读写、内存)

业务

  1. iOS9-13,每个版本讲一个特性
  2. iOS有哪些多线程方式?(NSThread、GCD、NSOperation)
  3. 同步异步的区别
  4. 串行队列、并行队列的区别
  5. 队列和线程的关系
  6. 怎么实现多个任务执行完后,统一处理(同步阻塞、栅栏函数,dispatch_group)
  7. 线程安全错误是如何出现的?(i++:load i,值+1,写回)
  8. 如何保证线程安全
  9. iOS中有哪些锁
  10. 数据存储方式
  11. TableView滑动时,gif不动,为什么?(Runloop的Mode决定的)
  12. TableView性能优化
  13. 内存泄漏的原因(循环引用、还有?)
  14. Runloop的理解
  15. UIViewController的生命周期
  16. 应用的生命周期

其他

  1. GCD相关
  2. SDWebImage设计(自己设计,如果没缓存,多个cell同时请求图片,都请求的话不实际,如何处理)
  3. AFNetworking设计
  4. 夜间模式(改进:设置picker->使用配置文件;除了通知,有什么更优雅的方式吗?)
  5. Json转Model(与YYModel区别在哪)

常问问题

  1. 你有什么要问我的?
  2. 你未来的职业规划
  3. 为什么选择iOS开发岗位?
  4. 遇到的挑战:夜间模式通知的移除
    iOS9之前通知中心是用指针指向的观察者,当观察者释放后,如果没有移除观察,那么通知中心发通知的时候,就对野指针进行了通知的发送,导致崩溃;
    iOS9之后,通知中心对观察者做了弱引用,即使不释放也不崩溃
    但我所遇到的问题不是由这个原因引起的,而是在分类的dealloc中移除通知时,移除的时候对象已经被销毁了,于是在通知中心对其做处理时,直接崩溃。注释掉分类的dealloc就可以了,这个问题只存在于iOS8的某个版本中,iOS7、9、其他iOS8版本都没有问题,所以就排查了很久。
    解决方案就是,在分类中不重写dealloc,而是用method swizzling,写一个方法代替dealloc,在调用dealloc之前,移除通知。这样就能确保在通知是在dealloc前移除的。