通过朋友内推京东数科,进行首轮电话面试,分配的面试官为p5职级的技术人员
以下是面试中所问的技术点,面试结果给我的p3职级的评估,不符合招聘的要求,最低p4职级起招
1.自我介绍
2.技术哪方面擅长
3.Autolayout和frame性能区别
我一直有这么一条原则:简单的 UI 使用 Auto Layout ,复杂的 UI 使用 frame。原因如下:
1、从代码量上来看,两种布局方式相差不大。有时候发现复杂的 UI 使用 Auto Layout 的话,代码量反而会变多,因为复杂的 UI 往往会有复杂的逻辑,比如根据数据的不同,部分 UI 的显示会有变动(比如某个子视图隐藏与显示, 会影响到其它视图的布局)。
2、会将那种仅做了一次约束之后,就可以不用做太多 update 的那种视为简单的布局,这种情况下使用 Auto Layout 还是挺方便的。
3、会将 Cell 的高度会随着数据的不同而不同的布局视为复杂的 UI 布局,这种情况下使用 Auto Layout 来布局,感觉就不合适。因为不管是 frame 还是 Auto Layout,都需要去计算高度,其实在计算 高度的时候,所有的子视图的 frame 都已经决定了,这种情况下,直接使用 frame 会比较精简。
Auto Layout拥有一套Layout Engine引擎,由它来主导页面的布局。App启动后,主线程的Run Loop会一直处于监听状态,当约束发生变化后会触发Deffered Layout Pass(延迟布局传递),在里面做容错处理(约束丢失等情况)并把view标识为dirty状态,然后Run Loop再次进入监听阶段。当下一次刷新屏幕动作来临(或者是调用layoutIfNeeded)时,Layout Engine 会从上到下调用 layoutSubviews() ,通过 Cassowary算法计算各个子视图的位置,算出来后将子视图的frame从Layout Engine拷贝出来,接下来的过程就跟手写frame是一样的了。
4.约束动画
5.setNeedsDisplay,setNeedsLayout,layoutSubViews区别
6.mrc,arc 内存管理
7.自动释放池,一个app有几个自动释放池,释放池建立销毁时间
8.WKWebView 新特性,对比UIWebView有什么改进
9.KVO底层实现
10.weak弱指针实现
11.字典在哈希表里怎么存存储位置计算方式,在iOS还类似的类需要这样存,
12.iOS网络优化
13.https请求实现