前言
收录的iOS面试技术点,可能没那么多时间来总结答案,有什么需要讨论的地方欢迎大家底部留言。主要记录一下大厂技术点,希望能帮助到正在面试或者将要面试的伙伴吧。
- 更多iOS技术题合集:
Runloop
- RunLoop 的本质是什么?
- Runloop和线程是什么关系?
- Runloop的底层数据结构是什么样的?有几种 运行模式(mode)?每个运行模式下面的 CFRunloopMode 是哪些?他们分别是什么职责?
- Runloop 的监听状态有哪几种?
- Runloop 的工作流程大概是什么样的?
- Runloop 有哪些应用?
- Source0, Source1
线程、队列、锁
- 线程、队列的关系? 一个线程是否可能存在于两个队列?
- 队列一定会创建线程吗?
- 队列是否可以无限制创建?
- PerformSelector & NSInvocation优劣对比
- gcd 的使用,能不能取消?
- 如何进行线程保活
- 编程题 3个线程顺序打印 0-100
GCD
- GCD、NSOperation区别, 功能方法区别.
- gcd queue 的区别
- group 如何实现barrier类似的功能?
- GCD group 如何实现同步的? (还能用什么实现?)
- 执行一个 NSThread 任务, 如何在执行过程中让他终止?
- iOS NSOperation 是如何终止/取消任务的?
- 多线程,异步执行(async)一个performSelector 会执行么?如果加上 afterDelay呢?
- GCD 实现 NSOperationQueue
- DispatchQoS的作用
KVC、KVO
- 结构体的字节对齐和OC对象的字节对齐?
- instance(实例对象)、class(类对象)、meta-class(元类对象)分别储存了什么信息?为什么要设计元类?
- KVO的具体实现流程?访问成员变量(类似self->age)会触发KVO嘛?KVC会触发KVO嘛?KVO的两个核心调用方法是?
- KVC的原理?getter 和 setter 的搜索策略是什么?KVC 有什么实际的应用?
ISA、类结构
- isa 指针是什么?里面有哪些特殊的位数?什么是TaggedPointer的优化?
- isa指针里面都存了什么,32和64位分别讲一下
- OC 是否支持重载? 为什么?
- IMP、SEL Method 都表示什么意思? 与 _cmd 相关
- class 的底层结构是什么样的?
- method_t 里包含什么?
- super 关键字的本质是什么?
- OC的消息机制有几步?
消息转发
- 如何防止类似 unrecognized selector 的错误?_objc_msgForward能干什么?
- runtime 有哪些应用?方法替换(method - Swizzling)有什么缺点?如何安全的进行方法替换?
- person有个+test方法,实现输出persion test,student继承persion,头文件定义-test方法,但没实现,student *obj=new student [obj test] 结果是啥?
- 介绍下 Swizzle 的步骤? 具体到方法名.
- Swizzle 时, 我不想替换父类, 只想替换子类,怎么办?
- Swizzle 的优缺点? 缺点会导致什么问题?
- 方法交换和分类同时去hook同一个方法,结果会怎么样? 具体交换的是什么?交换时是如何处理传参数? 如果使用NSInvocation 的话, 是否能处理方法有返回值的场景?具体怎么处理的?
引用计数、weak、autoreleasepool
- 引用计数怎么实现的?weak怎么实现的?sideTable的 底层结构是怎么样的? weak指针做了什么操作?
- 对象的 release 是怎么处理的?
- 堆和栈的区别是什么?
- 栈、堆分别是否会被线程所共享?
- 内存空间中除了堆和栈还有什么内容?
- weak 如何把 对象重制为 nil
- assign、strong 区别, 是否能用assign修饰 NSObject?
- AutoReleasePool(自动释放池) 的底层实现是什么?他怎么实现及时释放的?子线程的释放时机是怎么样的?
内存检测、OOM
- ARC下哪些情况会造成内存泄漏
- 内存泄漏如何检测?
- -OOM (Out Of Memory) 类型的 crash介绍下, 怎么检测, 怎么处理?
- dealloc __weak会有什么问题
分类、扩展、关联对象
- Catagory 和 extension 分别的使用场合和特点是什么?
- Catagory 的实现原理是什么?Catagory 有哪些用处?Catagory 有什么局限?
- Class 和 他的 Catagory 同名方法的调用顺序是什么?Catagory A 和 Catagory B 同名方法的调用顺序是如何?如果想要不按照系统顺序执行要怎么做?
- +load 和 +initialize 的调用时机和顺序?两者区别是什么?
- Catagory 有 +load 方法么?+load 是什么时候调用的?能继承么?会覆盖Class 的 +load 么?
- Catagory关联对象(AssociateObject)的底层实现是什么?
- 方法如果写了多个分类、会执行哪一个?执行逻辑是什么样?
- 关联对象 weak 底层原理
NSMutableArray扩展
- [mutablearry alloc]init 和 [nsmublearray array]有什么区别
- 结构体中为什么不能使用oc对象
- 我们在开发中使用文件的.mm是基于什么原因?
- string和NSString的区别
- mutablearray是怎么实现的,mutablearray申请内存空间干什么用,做增删操作的时候内存空间是怎么改变的,可以用别的方法实现吗?
Timer、锁
- 你知道 iOS 有哪些锁?性能分别怎么样?
- NSTimer、CADisplayLink、dispatch_source_t 的优劣
- 自旋锁和互斥锁怎么选择?
- NSNotificationCenter 跨线程及底层结构是怎样的?
- 读写锁思路、手写一下
- atomic与@synchroize原理
TCP/IP协议族
- HTTP、HTTPS 区别?
- GET、POST 请求的 cache 怎么做,几级缓存? 着重讲本地缓存? 缓存有效期怎么做的?内部缓存机制的优化机制?如何防止内存、磁盘的缓存爆掉?
- HTTP 请求方法种类有哪些?(别忘记HEAD)
- TCP流量控制
- HTTPS的握手过程
- HTTPS与HTTP的区别? 非对称加密、对称加密都是在哪一个步骤?
- DNS、工作在什么层、默认端口?
- Ping原理
- 证书信息相关
二叉树、排序
- 堆的数据结构
- 二叉搜索树的作用
- 层序遍历也叫什么遍历,怎么实现
- 二叉树中增加节点
- 堆排序、归并排序、快排原理,优缺点
- 二叉树反转, 数组形式
- 更多iOS技术题答案合集: