底层:
1.weak的实现原理:
https://www.jianshu.com/p/13c4fb1cedea;
备注:资深一些的面试官会问到这个,答的好是加分项,提到 weak 的时候,顺便提一下也更加分;
2.strong、weak、copy、assign 区别和使用:
https://www.jianshu.com/p/62913d6cbc40;
https://www.jianshu.com/p/d01429a4b5c0;
备注:一般会问到strong、copy的使用与区别,weak 和 assign 的区别,以及 copy 和 mutableCopy 的区别,关注点在浅拷贝和深拷贝,还有copy可变数组会出现什么问题等等,笔试题中常会出现,需要仔细的去了解,这个答不上来,会让人觉得基础很差,切记!
当然还包括__weak和__strong在Block中的使用,野指针的解决等问题;
3.NSDictionary 的实现原理:
https://www.jianshu.com/p/edc0f17a606e;
备注:字典实现原理无非是 hash 和 isEqual 两个方法,还需要关注 hash 冲突、重 hash 这些概念,以及可以利用这些去到哪些使用场景;还有类比 NSSet 的实现原理;
4.block 的实现原理:
https://www.jianshu.com/p/4e79e9a0dd82;
备注:需要了解 block 的本质是什么,包括后面会提到的 class 的本质,对象的实现其实就是一个结构体,结构体内部有什么,这里不展开,直接去看文章;包括 block 的类型,不同类型变量如何捕获,在内存中如何分配等等,仔细去看文章,资深一点的面试官都会问到这些;
5.KVO 的实现原理:
https://www.jianshu.com/p/5477cf91bb32;
备注:了解实现原理,然后如何手动触发;
留个小问题:KVC 会不会触发 KVO;
6.KVC 的实现原理:
https://www.jianshu.com/p/6ad5d7c15b5f;
备注:了解 KVC 的实现原理,以及使用场景;
7.RunLoop 的实现原理:
https://www.jianshu.com/p/d260d18dd551;
备注:了解 runloop 的实现原理,什么时候创建,什么时候销毁,了解 runloop 的有关类,有哪些模式,以及 runloop 的实战场景,仔细阅读!
留个小问题:如何用 runloop 来检测卡顿;
监控FPS缺点:24帧动画速度就可以正常看,不够精确,获取堆栈不好获取,方案地址!
8.Runtime 的实现原理:
https://www.jianshu.com/p/6ebda3cd8052;
备注:了解消息是如何转发的,类结构体里有哪些内容,元类的概念,Runtime 的使用场景等,务必仔细阅读,这个相当于是必考题,更资深一些的面试官可能会问方法交换是如何实现的(Method Swizzling);
9.自动释放池(Autorelease)实现原理:
https://www.jianshu.com/p/7bd2f85f03dc;
https://www.jianshu.com/p/19b3cea88acb;
备注:资深面试官一般会问这个;
10.load 和 Initialize :
https://www.jianshu.com/p/bd82ef5ea186;
备注:部分面试官会问,load 和 init 的启动时机这些;
11.Category :
https://www.jianshu.com/p/b08bbe3613ab;
备注:初级iOS开发面试官一般会问:category 和 扩展的区别;
中高级:category+A 和 category+B 都有一个 foo() 方法,会先执行哪一个,如果先让 category+A 中的 foo() 先执行,如何操作;
资深:category 和 类(class )的区别;
子类、分类、父类都有同一个方法,最先执行哪个?子类分类>子类>父类分类>父类
多线程:
1. GCD 详细总结:
https://www.jianshu.com/p/2d57c72016c6;
备注:GCD 必考题,仔细去阅读这篇文章,笔试题也可能会出现,要注意死锁,栅栏方法,信号量这些,了解 GCD 与 NSOperation 还有 NSThread 的关系;
2.『NSOperation、NSOperationQueue』:
https://www.jianshu.com/p/4b1d77054b35;
3.NSThread:
https://www.jianshu.com/p/686dbf4bbb52;
备注:GCD 要重点关注,后面两种用到的少一些,pthread 用到的更少,了解就好;
额外小问题:
(2)如何在子线程执行 performSelector ?(万法相通,RunLoop)
4.pthread:
pthread 用得少,自己去了解即可;
5.锁:
https://www.jianshu.com/p/467366e23fab;
https://www.jianshu.com/p/b1edc6b0937a;
备注:这个面试里出现的也比较多,特别是几种锁的概念,以及使用场景,两篇文章可以结合来看;
静态库与动态库:
https://www.jianshu.com/p/42891fb90304;
了解静态库与动态的使用与区别,以及为了加快编译速度,涂鸦做了哪些优化,组件内的代码,静态链接;
网络:
1.http 和 https 的区别;
2.http 1 和 http 2 以及 http 3的区别;
3.tcp 队头阻塞;
4.https 加密方式,对称加密,非对称加密
5.单向认证,双向认证;
6.如何优化http;
7.http 三次握手,四次挥手;
https://blog.csdn.net/weixin_34152820/article/details/91805142;
其他:
1.iOS 响应链:
https://www.jianshu.com/p/2e074db792ba;
2.crash 捕获,bugly 的实现原理:
https://www.jianshu.com/p/3f6775c02257;
3.如何通过 RunLoop 检测卡顿:
https://www.jianshu.com/p/d0aab0eb8ce4;
备注:其他方案;
4.iOS 性能优化:
(1)启动优化:
常见优化:https://www.jianshu.com/p/5d4fcc5b534d;
二进制重排:https://www.jianshu.com/p/3f9ed86a45cb;
(2)优化 ipa 包大小:
https://www.jianshu.com/p/a49d59b01669;(舍弃 arm7 架构)
(3)卡顿优化:
https://www.jianshu.com/p/af7bb933f1ff;(可以提到如何用 runloop 检测卡顿)
(4) tableview 优化:
https://blog.csdn.net/u012439446/article/details/107637522;
备注:注意离屏渲染产生原因以及如何优化,初级的面试官会问;
5.iOS 启动过程:
https://www.jianshu.com/p/d1399d6483b3;
备注:这个问题 网易 和 吉利 可能会问,一般能大致说出主流程即可,由此引申出的启动优化,二进制重排,Page Fault 这些概念等;
6.内存泄漏与检测:
https://www.jb51.net/program/292037qda.htm
https://www.jianshu.com/p/a2d52f523969
7.通过view获取到当前vc的原理:
备注:UIResponder *nextResponder = self; do{ nextResponder = [nextResponder nextResponder]; if ([nextResponder isKindOfClass:[UIViewController class]]) return (UIViewController*)nextResponder; } while (nextResponder != nil); return nil;
8.NSTimer 循环引用产生的原因以及解决方法:
因为self引用timer,timer引用了target;
https://www.jianshu.com/p/a8ddef42ca41
9.view和bounds的区别:
iOS frame和Bounds 以及frame和bounds区别
算法:
数组,链表,二叉树,动态规划,排序;
还有:
设计模式;
组件化方案;
设计架构:mvc,mvvm,mvp;
如何实现多代理;
类簇概念;
野指针,检测工具实现原理;
CGPoint 在内存中的分配;
flutter,RN,weex 分别的优缺点;
iOS 消息通知推送的过程;(初级面试官和小公司面试官会问)
数据库;
面试官还会问:
以前做得好的项目,亮点,准备一些,项目介绍,针对简历里来问;
网友评论