.yz一面

184 阅读3分钟

面经

  • 介绍一下OC的内存管理方式
  • arc下有什么需要手动管理内存管理的场景.(有可能是C函数, CF框架)
  • 既然都是自动管理内存了, 那么strong, weak修饰符有什么用?
  • 我们如何去声明一个只读的变量?
  • @proto修饰符做了什么
  • weak最常用的场景是什么?
  • 为什么代理和block需要用weak.
  • 所有self都应该用weak是吗?
  • block能够修改作用域外的变量?
  • __block修饰符有什么作用?
  • 全局变量需要用__block修饰吗
  • autoreleasePool的使用场景
  • main函数的有一个appdelegate, 为什么要在这里使用?
  • 一个类代码里非常大, 有什么分的方式可以做优化?
  • 分类里面可以添加自己的属性吗?
  • 如果我有需求, 必须要在分类里添加属性要怎么办?
  • 添加属性的全局表, 生命周期是怎么样的?
  • 随便说一句SQL
  • OC里面持久化数据的方式?
  • 除了数据库, 有轻量化的一点的吗?
  • 网络请求返回一个json, 如何转成dictionary
  • 他对我们的数据结构有什么要求吗?
  • 在OC里面如何对一个dictonary进行归档
  • NSCoding协议有什么用?
    • 归档和解档的协议
  • OC里面有一个类叫NSCache, 它和NSDictonary有什么区别?
  • 假设说现在有一个需求, 商品有很多图片, 新建一个商品的有20张图, 控制并发量为5.上传成功之后来一个全局通知.
  • NSOperation可以实现吗?怎么实现?
  • OC里面的锁有哪几种?
  • 各种锁之间的区别是什么?
  • app运行在runloop是什么关系, 线程和runloop有什么关系?
  • 你们那边做依赖包管理, 是pod吗?
  • installupdate的区别是什么?
    • 已经列在podfile.lock文件中的库,它会下载podfile.lock文件中标明的精确的版本,而不去检查是否有新的可用版本。对于没有列在podfile.lock文件中的库,它会去看Podfile文件中标明的版本,例如 pod 'MyPod', '~>1.2',如果没标明默认下载最新的
    • 执行pod update命令,会在所有Podfile中的库试着更新到最新的
  • pod更新的版本是怎么判断?
  • pod如何依赖本地的一些工程?
    • 我自己懵逼了, 其实就是本地path, 但是库我理解错了. 所以我说的是pod spec的一些东西.
  • git常用的指令?
  • 提交回滚的指令是什么?
    • git reset
  • 设计模式哪些比较熟悉? 工厂, 观察者, 中介者?
  • 单例比较熟悉吧? 单例的实现方式?
  • 系统类有哪些是通过单例的设计模式去实现的?
  • 类簇是什么?
    • 类簇实际上是Foundation framework框架下的一种设计模式,它管理了一组隐藏在公共接口下的私有类。
    • NSNumber下面.
    • NSMutableArrayNSArray进行allocWithZone:或者构造方法的时候, 调用的都是___immutablePlaceholderArray和___mutablePlaceholderArray类型的, 外部打印的形式为__NSPlaceholderArray. 最终是在init的时候, 进行了__NSArrayI__NSArrayM的对象.
    • 也就是上面的工厂模式
  • 最近有在看什么新的知识吗?
  • 网络请求常用的postget的区别是什么?
    • GET一个数据包, POST一个header包, 一个body包。
    • GETPOST都有自己的语义,不能随便混用。
    • 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
    • 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
    • 原文

总结

总体来说答的正常, 标注答案的, 都是聊的不是很好的, 要么就会没听懂, 要么就是转不过来.