最近工作不忙,悄悄的投了几家大厂。
有去哪儿网,快手,百度app,新氧等。记下了一些面试题。希望与君共勉。
1/ UIView和CAlayer的区别。
答:uiview更像是layer的管理容器。本身view就自带layer。可以重写这个layer。
layer是负责试图渲染的。修改一个试图的大小,实际是修改了layer。view是呈现负责呈现出来的。
layer是继承NSobject的。view继承UIresponse。
layer主要负责视图渲染。view负责试图交互
2/ 数组和字典对数据是强引用还是弱引用。
答:都是强引用。(原因没找到很好的解释。请大神指点迷津)
3/ __block的底层实现是什么?
答:编译器会将__block变量包装成一个对象
__block可以用于解决block内部无法修改auto变量值的问题
__block不能修饰全局变量、静态变量(static)
__block可以拿到对象的地址和值。
他是直接修改了对象当前地址的值。并且外部的对象的指针也是指向了这个地址。从而达到修改变量的目的。
4/ 什么是循环引用。如何避免
答:当两个不同的对象各有一个强引用指向对方,那么循环引用便产生了,当然多一个对象产生的环也是一样的。
例如block内部使用self。 代理使用strong NStimer 等
使用week __week 等
5/ 什么是消息机制 SEL是怎么工作的。IMP是什么
答:推荐看这篇文章 https://www.jianshu.com/p/fdd8f5225f0c
6/ runloop是什么
答:runloop是对象。
主线程默认启动runloop (相当于一个死循环)
这个对象在循环中用来处理程序运行过程中出现的各种事件(比如说触摸事件、UI刷新事件、定时器事件、Selector事件),从而保持程序的持续运行;而且在没有事件处理的时候,会进入睡眠模式,从而节省CPU资源,提高程序性能。
推荐这篇文章:https://www.jianshu.com/p/413811babe1e
7/ 二分法
推荐这个:https://blog.csdn.net/shihuboke/article/details/73196317
8/ 寻找两个UIView的最近的公共父类
推荐这篇文章: https://www.jianshu.com/p/4465aea69f5c
9/ 线程安全。原子性是否可以保证线程安全。为什么。
答:加锁可以保证安全。原子性不能保证安全。因为其只保证对象的setter和getter方法安全。除了以后就不能保证了。
10/ NSLock和@synchronized 有什么区别
答: NSLock是对象
synchronized
这道题希望大神给一点指点。网上没有看太懂。