iOS面试题目整理 - jiaxw32/iNote GitHub Wiki

iOS

ObjC

  1. 谈谈你对 KVO 的理解?[3]
  2. runloop内部实现逻辑?[8]
  3. 请说明并比较以下关键词:__weak,__block[10]
  4. 请说明并比较以下关键词:atomatic, nonatomic[10]
  5. 以scheduledTimerWithTimeInterval的方式触发的timer,在滑动页面上的列表时,timer会暂停,为什么?该如何解决?[10]
  6. block 原理,循环引用问题举例? block 的属性修饰词为什么用 copy,使用 block 时有哪些要注意的?
  7. classA 继承 classB,classB 继承 NSObject。画出完整的类图。
  8. Category 中有 load 方法吗? load 方法是什么时候调用的? load 方法能继承吗?
  9. 实现 isEqual 和 hash 方法时要注意什么?
  10. @property 的本质是什么?ivar、getter、setter 是如何生成并添加到这个类中的[11]
  11. id 声明的对象有什么特性?[11]
  12. Category(类别)、 Extension(扩展)和继承的区别[11]
  13. 为什么我们常见的delegate属性都用是week而不是retain/strong?[11]
  14. 什么是 KVO 和 KVC?[11]
  15. KVC的底层实现?[11]
  16. 你是否接触过OC中的反射机制?简单聊一下概念和使用[11]
  17. isKindOfClass、isMemberOfClass 区别是什么[11]
  18. BAD_ACCESS在什么情况下出现?[11]
  19. 用伪代码写一个线程安全的单例模式 [11]
  20. 请简单的介绍下APNS发送系统消息的机制 [11]

Swift

  1. 类(class)和结构体(struct)有什么区别?[10]
  2. Swift 是如何实现多态的?
  3. Swift 和 OC,各自的优缺点有哪些?
  4. 如果让你实现 NSNotificationCenter,讲一下思路

内存管理

  1. 让你设计一种机制检测UIViewController的内存泄漏,你会怎么做?[1]
  2. 什么是 ARC? (ARC 是为了解决什么问题而诞生的?)[2]
  3. 关键字 assign 与 weak, __block 与 __weak 的区别[2]
  4. weak 实现原理[3]
  5. 请说明并比较以下关键词:strong, weak, assign, copy[10]
  6. 什么情况下会出现循环引用?举例说明 [10]
  7. Autorelease Pool 原理
  8. property 原理及关键字介绍,weak 与 assign 区别
  9. EXE_BAD_ACCESS 错误是什么,如何解决?
  10. copy 关键字的作用,为什么 NSString 用 copy 修饰,还有其他的类型使用吗?
  11. @property中有哪些属性关键字?/ @property 后面可以有哪些修饰符?[11]
  12. 怎么用 copy 关键字?[11]
  13. 用@property声明的 NSString / NSArray / NSDictionary 经常使用 copy 关键字,为什么?如果改用strong关键字,可能造成什么问题?[11]
  14. 浅拷贝和深拷贝的区别?[11]
  15. 系统对象的 copy 与 mutableCopy 方法[11]
  16. 如何让自己的类用 copy 修饰符?如何重写带 copy 关键字的 setter?[11]
  17. Objective-C 如何对内存管理的,说说你的看法和解决方法?[11]
  18. 什么是野指针、空指针?[11]

多线程与锁

  1. 谈下Objective C都有哪些锁机制,你一般用哪个?[1]
  2. iOS下如何实现指定线程数目的线程池?[1]
  3. 使用 nonatomic 一定是线程安全的吗?[2]
  4. GCD 里面有哪几种 Queue? 背后的线程模型是什么样的?[2]
  5. Core Data 或者 sqlite 的读写是分线程的吗? 死锁如何解决?[2]
  6. 你理解的多线程?[8]
  7. GCD执行原理?[9]
  8. 说一下 OperationQueue 和 GCD 的区别,以及各自的优势
  9. 线程安全的处理手段有哪些?把你想到的都说一下。
  10. 如果让你实现 GCD 的线程池,讲一下思路
  11. Objective-C 中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么?[11]
  12. 如何用GCD同步若干个异步调用?(如根据若干个url异步加载多张图片,然后在都下载完成后合成一张整图)[11]
  13. dispatch_barrier_async(栅栏函数)的作用是什么?[11]
  14. OC中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?[11]

Runtime 运行时

  1. 如何使用runtime hook一个class的某个方法,又如何hook某个instance的方法?[1]
  2. +load 与 initialize 方法有什么作用?[2]
  3. 为什么其他语言里叫函数调用, Objective-C 中是给对象发送消息 (谈下对 runtime 的理解)[2]
  4. 什么是 Method Swizzling?[2]
  5. 谈谈你对 Runtime 消息转发机制的理解[3]
  6. runtime如何通过selector找到对应的IMP地址?[8]
  7. Category 的实现原理,以及 Category 为什么只能加方法,不能加属性
  8. _objc_msgForward 函数是做什么的,直接调用它将会发生什么?[11]

Foundation 与 UIKit 框架

  1. UIView 和 CALayer 有什么关系?[2]
  2. loadView 的作用是什么?[2]
  3. viewWillLayoutSubviews 的作用是什么?[2]
  4. cell 复用原理
  5. 细致地讲一下事件传递流程
  6. frame 和 bounds 有什么不同?[11]
  7. ViewController 生命周期[11]
  8. 谈谈 UITableView 的优化[11]

CoreGraphics 框架

  1. 如何高性能的给 UIImageView 加个圆角?[2]、[11]
  2. 使用 drawRect: 有什么影响?[2]

数据持久化

  1. 如何自己高效实现NSUserDefault?[1]
  2. 穷举iOS下所有的本地持久化方案。[1]
  3. iOS的沙盒目录结构是怎样的?

App 生命周期

  1. main()之前的过程有哪些?[3]

App 安全加固

  1. 怎么防止别人动态在你程序生成代码?[8]

App 性能优化

  1. 优化你是从哪几方面着手?[8]
  2. iOS 的热更新方案有哪些?介绍一下实现原理?
  3. 你在项目中,是如何优化内存的?
  4. 列表卡顿的原因可能有哪些?你是如何优化的?
  5. 开发项目时你是怎么检查内存泄露?

其他

  1. NSString如何计算字符的个数?[1]
  2. 介绍下iOS设备获取唯一设备号的历史变迁。[1]
  3. 断点的实现方式,app 是如何停止在断点的

计算机基础

  1. 介绍下内存的几大区域?[8]

网络

HTTP

  1. 如何用HTTP实现长连接?[1]
  2. HTTP2.0针对同一个域名的多个请求,会建立多少个tcp连接?[1]
  3. 聊下HTTP post的body体使用form-urlencoded和multipart/form-data的区别。[1]
  4. POST 和 GET 请求有什么区别?
  5. 在浏览器输入“google.com”后都发生了什么?
  6. HTTP和HTTPS的区别?
  7. 前端经典面试题: 从输入URL到页面加载发生了什么?
  8. http 请求报文,响应报文结构
  9. 为什么是三次握手?为什么是四次挥手?三次挥手不行吗?
  10. 讲一下 HTTPS 密钥传输流程

TCP 与 UDP

  1. 解释下tcp的慢启动特性。[1]
  2. TCP 与 UDP 区别

其他

  1. 项目中网络层如何做安全处理?[3]
  2. 通信底层原理(OSI七层模型)[11]

数据库

  1. 数据库建表的时候索引有什么用?[1]

开源库设计与原理

  1. SDWebImage 里面给 UIImageView 加载图片的逻辑是什么样的?[2]、[11]
  2. YYAsyncLayer如何异步绘制?[8]
  3. 热修复,JSPatch 原理
  4. AFNetworking 底层原理分析

设计模式、编程思想、架构

  1. 函数式编程当中的 first-class function是什么意思呢?[1]
  2. 如何设计一个简单的图片内存缓存器?[2]
  3. 假如 Controller 太臃肿,如何优化?[3]
  4. 你是如何组件化解耦的?[8]
  5. 常用的设计模式及区别
  6. 手写观察者模式
  7. 讲讲 MVC、MVVM、MVP,以及你在项目里具体是怎么写的?
  8. iOS 系统框架里使用了哪些设计模式?至少说6个。
  9. 设计模式是什么? 你知道哪些设计模式,并简要叙述?[11]
  10. MVC 和 MVVM 的区别 [11]

数据结构与算法

  1. 什么是 Binary search tree, 它的时间复杂度是多少?[2]
  2. 数组与链表的区别
  3. 快排与堆排
  4. 遍历一个树,要求不能用递归
  5. 找出两个字符串的最大公共子字符串

开放性问题

  1. 你在项目中遇到的最大的问题是什么?你是怎么解决的?
  2. 哪一个项目技术点最能体现自己的技术实力?具体讲一下。
  3. 和产品经理、测试产生冲突时,你是怎么解决的?
  4. 你是如何学习 iOS 的?

参考资料

  1. 一份"有点难"的iOS面试题
  2. 关于一些 iOS 面试问题的解答
  3. 2018-iOS面试题
  4. 阿里、字节:一套高效的iOS面试题
  5. 阿里、字节 一套高效的iOS面试题解答
  6. iOS Interviews DevNotes
  7. 面试题:在浏览器输入“google.com”后都发生了什么?
  8. iOS面试题:阿里-P6一面-参考思路
  9. 《招聘一个靠谱的 iOS》—参考答案
  10. 工程师必看的 20 道 iOS 面试题
  11. 【2017年最全】 iOS面试题及答案
⚠️ **GitHub.com Fallback** ⚠️