一、做过的东西有哪些亮点?
二、OC
1、启动优化、列表卡顿、性能监控(工具和手动实现的方案)
2、对象内存存在哪里?weak指针的实现原理
3、多线程 OperationQueue 和 GCD 的区别,以及各自的优势。线程锁的方案,自旋锁和互斥锁的对比?
4、runloop的mode作用是什么? common 模式是一种模式吗? timer 与 runloop 的关系? NSTimer的问题?为什么DispatchTime更准确?
5、autoReleasePool的实现原理?push和pop?讲一下哨兵对象?
6、runtime消息机制,消息转发流程?runtime平时的应用? 编译状态和runtime状态?
NSData *data = (NSData *)[NSString stringWithString:@""] 在编译期间和runtime对象类型
首先我们来写一个对象 NSString *obj = {[NSData alloc] init];
一般来说我们写完上面的代码xcode会为我们提示一个warning:Incompatible pointer types intializing 'NSString *' with an expression of type 'NSDara'提示我们的obj对象指向的是一个NSData的方法,而不是NSString的,这个时候我们编译Xcode是以NSString为编译类型编译的,如果继续按照NSSting类型的方法写,理论上不会出错误
例如我们可以写一个NSSting的类方法:
obj = [obj stringByAppendingString:@"123"];
当我们写完这个方法运行的时候就crash掉并且报出错误
-[_NSZeroData stringByAppendingString:]: unrecognized selector sent to instance 0x60000001def0
这个很明显我们在运行后原来的obj对象的类型就变成了NSData类型了
我们可以得出结论,在我们写代码编译的时候,xcode会按照我们赋予的指针类型来判断类型,而我们通过运行的时候则是通过后面具体的实例化对象来判断是什么类型
7、一个对象的内存布局?KVO和KVC的实现原理?
8、category方法覆盖的原因?load、initialize方法的区别什么?它们在category中的调用的顺序?
9、Block循环引用的问题,其他循环引用?举例说明。__block的原理?
10、点击触发事件的响应链
11、UIView和UILayer的区别
12、iOS编译过程原理
13、讲如何将一张内存极大的图片可以像地图一样的加载出来(只说实现思路)
14、对于组件化的理解,对于市面上的组件化方案的理解,优劣分析等。
15、动画?显示动画、隐式动画? 动画分类:基础动画(base)、关键帧动画、转场动画
16、数据库事务的使用场景?数据库索引的创建原则?数据库索引底层实现(B+树)?数据库三大范式?数据库中delete和drop的区别?