2019年底在北京面试两天 - 5家公司,无一例外的被面试官鄙视了。特此吸收教训,做此总结。
网络编程:http / https / tcp/ip / socket 网络编程这块是一块大石头。希望日后能捡起来吧。
数据结构 + 算法 + 网络编程:对我而言的三座大山。runtime底层:在刚毕业的时候 准备的面试题是:什么是runtime。那时候只需要答一答定义就好。
现在的问题是:你的项目中哪块用到了runtime。你的项目中哪里用到了kvc(调取私有属性) kvo(属性值监听)method swapping(方法交换) 关联对象 动态创建类、方法
--- 其中一个面试官还问到了 objc_msgSend() 有哪三步?
1。 消息发送 :查找方法缓存列表 - 查找方法列表 - 父类方法列表(查到后会塞进缓存,然后返回方法)
2。动态解析 --- method resolved 消息决议,实现方法返回要决议的方法。
3。消息转发 --- 实现方法返回 target/selector 。
最后,如果都没实现 抛出unrecognized selector。多线程:必问。thread / gcd / operation qeueu 区别联系。
这里可能会出题来实际考察:自己总结了一个窍门吧,应该会有点用。
多线程无非就是两点:1队列 2任务。
首先考虑任务顺序,是不是必须一个执行完才能执行另一个。判断出是串行队列还是并行队列。
再者是任务方式:线程执行a的时候,能不能同时执行b。判断是同步任务还是异步任务。设计模式:mvc mvvm 单例 代理。
会问你 mvvm 。还有单例在哪里用过。block是oc对象。什么是block值截获。 block为什么要用copy。
load initialize
线程安全:atomic / lock / gcd_sync / @ synchronized
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。安装包的优化