美文网首页
iOS开发面试实战

iOS开发面试实战

作者: zhouluyao | 来源:发表于2018-12-18 23:48 被阅读25次

关于面试:
你准备的时候就要知道,面试官会疯狂挑战你,你要能够清晰表达自己做的事情.

题目1. 函数指针和Block区别?
1.函数指针是一个指针,Block是一个对象
2.Block会获取运行环境,产生循环引用

题目2.C++中的多态和OC中多态实现有什么不同?OC调用C++ 的方式有哪些?
1.OC是弱类型的,在运行时才确定对象的类型,父类指针指向子类的对象,根据对象的真实类型去消息发送,动态方法解析,消息转发阶段
2.C++是强类型,父类的指针指向子类的对象,通过Virtual来实现多态,虚函数的实现原理是虚表,这个虚表里面存储着最终需要调用的虚函数地址,不是虚函数直接按照汇编的调用地址去调用

子类继承的父类有虚函数,子类对象的内存会增加4个字节,前4个字节存放虚函数表地址,子类如果没有重写父类的虚函数,那么子类虚函数表存储的就是父类的那个虚函数地址,调用时具体去哪个虚表里面找,就看指向的哪个对象

题目3.子视图超出父控件,如何让超出父控件的部分继续响应事件?
1.判断触摸点在哪个子控件上,在父控件的hitTest()直接返回子控件

题目4:OC中有哪些异常类型,如果自己做crash统计需要注意什么?

题目5:分类和继承有什么区别?

整理中

题目6:UITableView的性能优化?

思路:使用Instrucment检测哪些操作影响Cell的快速返回,发现瓶颈

1.重用cell,header,footer,对于header和footer,重用场景是tableView设置成分组时

2.那些还没有显示的cell不要进行数据绑定,可以在tableView:willDisplayCell:forRowAtIndexPath:中绑定数据

3.不要通过初始化cell的数据时通过计算获取高度,这样每秒钟会掉15~20帧,写一个类方法,把数据源和宽度传进去,计算cell的高度,把高度缓存起来

4.当Cell里面有很多子视图,通过写约束使用autolayout时,更多的子视图需要去布局,更多的约束需要计算,会花费更多的时间,会影响Cell的返回

5.减少或者不要用透明的叠加的视图

6.把耗时的操作放到异步线程中执行,在子线程加载网络图片,处理圆角,,clipsToBounds is slow,把处理好的image在主线程赋值给UIImageView

参考资料:UITableView性能优化

题目7. 你在项目中用到的动画有哪些?讲讲你对CoreAnimation的理解?

题目8. 利用关联对象给分类添加属性时,关联对象需不需要释放

题目 9. Const修饰函数,目的是什么? Static的作用是什么?
题目10. Replace 和exchange 的区别?不用runtime中的exchange,还有什么方法能达到hook的效果?

题目11.分类,类,代理有相同方法调用时的执行顺序?

题目12 .dispatch_group的底层实现是什么?参照GCD源码

题目13.日志的写文件操作,怎么防止丢最后一条日志?

题目14.你阅读哪些源码,讲讲他们的实现原理?CocoaAsyncSocket?

runtime,runloop?

题目15.Nsoperation和gcd的区别?

题目16.
NSDictionary的实现?

题目17.
OC中提供哪些可扩展的方式?

题目18.保证单例只创建一次,需要加锁

  • (id)sharedInstance
    {
    static __weak ASingletonClass *instance;
    ASingletonClass *strongInstance = instance;
    @synchronized(self) {
    if (strongInstance == nil) {
    strongInstance = [[[self class] alloc] init];
    instance = strongInstance;
    }
    }
    return strongInstance;
    }

题目19.displaylink和timer的区别?

题目20.runloop的理解,几种模式优先级排序

题目21.页面直接卡死,导致无法获取到FPS,怎么解决这个问题,为什么有时候FPS很高,但还是有卡的感觉,获取FPS后,发现卡顿,如何尽可能找到准确的调用栈

题目22.UIViewController的生命周期,如果loadView没有加载view,会在ViewDidLoad中加载调用LoadView,造成死循环


UIViewController的生命周期.png

HTTP 和 HTTPS 的区别以及 HTTPS 中的 TLS和 SSL 细节。
SSL 中的对称加密和非对称加密。
DLNA 的 SSDP 发现流程。
ObjC 问题集:NSObject 结构;isa 指针结构;引用计数相关;block 类型、特点及循环引用注意点。
聊了下之前的项目经验;
聊了下 Sepicat 中的一些动画实现;
ASDK 渲染大致原理;RunLoop 各个 Mode 差异;
SDWebImage 中关于 Download 部分的实现;

设计一个异步加载图片缓存库及其优化:这里主要讲了一遍 SDWebImage 的完整流程,画了整个黑板,并且说了一下可以在 Cache 部分把 YYCache 的思路拿过来进行优化;
完整讲了一遍 fishhook 的原理,可以详细看之前写的两篇 fishhook 源码解析;
NSAutoreleasePool 的原理,链表结构及自动释放原理。
项目经验和独立 APP 开发的目的;

大概是如何模拟 Tweet 中缓存上次浏览的 Cell 并上拉刷新,也问了一些图片预加载、数据库 DB 如何根据这种场景来设计等问题。

相关文章

网友评论

      本文标题:iOS开发面试实战

      本文链接:https://www.haomeiwen.com/subject/ndnrkqtx.html