面试总结

2019年底在北京面试两天 - 5家公司,无一例外的被面试官鄙视了。特此吸收教训,做此总结。

  1. 网络编程:http / https / tcp/ip / socket 网络编程这块是一块大石头。希望日后能捡起来吧。
    数据结构 + 算法 + 网络编程:对我而言的三座大山。

  2. runtime底层:在刚毕业的时候 准备的面试题是:什么是runtime。那时候只需要答一答定义就好。
    现在的问题是:你的项目中哪块用到了runtime。你的项目中哪里用到了kvc(调取私有属性) kvo(属性值监听)method swapping(方法交换) 关联对象 动态创建类、方法
    --- 其中一个面试官还问到了 objc_msgSend() 有哪三步?
    1。 消息发送 :查找方法缓存列表 - 查找方法列表 - 父类方法列表(查到后会塞进缓存,然后返回方法)
    2。动态解析 --- method resolved 消息决议,实现方法返回要决议的方法。
    3。消息转发 --- 实现方法返回 target/selector 。
    最后,如果都没实现 抛出unrecognized selector。

  3. 多线程:必问。thread / gcd / operation qeueu 区别联系。
    这里可能会出题来实际考察:自己总结了一个窍门吧,应该会有点用。
    多线程无非就是两点:1队列 2任务。
    首先考虑任务顺序,是不是必须一个执行完才能执行另一个。判断出是串行队列还是并行队列。
    再者是任务方式:线程执行a的时候,能不能同时执行b。判断是同步任务还是异步任务。

  4. 设计模式:mvc mvvm 单例 代理。
    会问你 mvvm 。还有单例在哪里用过。

  5. block是oc对象。什么是block值截获。 block为什么要用copy。

  6. load initialize

  7. 线程安全:atomic / lock / gcd_sync / @ synchronized

  8. table view 的优化!必问!滚动视图的卡顿!必问!
    cell复用
    cell高度缓存
    复杂视图的优化(圆角、阴影会触发离屏渲染)还问到了什么是离屏渲染
    异步绘制图片 这里提到了将所有控件绘制到一张图片中,还挺厉害的

9.runloop 这个问的比较少 只有一个面试官问到了几个模式,平时几乎也用不到。

10 array dictionary set 的理解:基本知识 + 空间复杂度

11 弱引用 循环引用 weak -> 这个太灵活 可以问的点太多

零星东西:
a。方法交换要用gcd_once处理,保证类的唯一性。
b。项目中哪里用到了分类(面试官提到了frame坐标转换,这个当时人家也不告诉我,我到现在也不知道)。
c。还有一位面试官问到了 clang。有这么个东西 一般情况也就是用看下编译为c++的源码,用来扩展视野

d。还有一个问题是 请求用到的userid存在哪里?我说userDefault,面试官说性能会变差,然后也不告诉我应该存在哪里,烦请看到的同学留言告诉我,共同进步。
突然想到,这货可以成为一个单例类。
e。static作用
f。还提到了为什么直接用autolayout比frame耗能。
g。图片的异步绘制
h。安装包的优化

附上神文章 - 面试宝典 - 学会它!!

你可能感兴趣的:(面试总结)