那些 iOS开发 常备的底层面试题合集!

一、Runtime

  • 一个objc对象的isa的指针指向什么?有什么作用?
  • 一个 NSObject 对象占用多少内存空间?
  • 说一下对 class_rw_t 的理解?
  • 说一下对 class_ro_t 的理解?
  • 说一下对 isa 指针的理解
  • 说一下 Runtime 的方法缓存?存储的形式、数据结构以及查找的过程?
  • 使用runtime Associate方法关联的对象,需要在主对象dealloc的时候释放么?
  • 实例对象的数据结构?
  • 什么是method swizzling(俗称黑魔法)
  • 什么时候会报unrecognized selector的异常?
  • 如何给 Category 添加属性?关联对象以什么形式进行存储?
  • 能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么?
  • 类对象的数据结构?
  • runtime如何通过selector找到对应的IMP地址?
  • runtime如何实现weak变量的自动置nil?知道SideTable吗?
  • objc中向一个nil对象发送消息将会发生什么?
  • objc在向一个对象发送消息时,发生了什么?
  • isKindOfClass 与 isMemberOfClass
  • Category 在编译过后,是在什么时机与原有的类合并到一起的?
  • Category 有哪些用途?
  • Category 的实现原理?
  • _objc_msgForward函数是做什么的
  • [self class] 与 [super class]
  • 代码题 一
  • 代码题 二

二、Runloop

  • 为什么 NSTimer 有时候不好使?
  • AFNetworking 中如何运用 Runloop?
  • autoreleasePool 在何时被释放?
  • PerformSelector 的实现原理?
  • PerformSelector:afterDelay:这个方法在子线程中是否起作用?为什么?怎么解决?
  • RunLoop的Mode
  • RunLoop的实现机制
  • RunLoop和线程
  • RunLoop的数据结构
  • RunLoop概念
  • RunLoop与NSTimer
  • 讲一下 Observer ?
  • 解释一下 NSTimer
  • 解释一下 事件响应 的过程?
  • 解释一下 手势识别 的过程?
  • 什么是异步绘制?
  • 利用 runloop 解释一下页面的渲染的过程?

三、Objective_C语言特性

  • KVC(Key-value coding)
  • KVO (Key-value observing)
  • 分类、扩展、代理(Delegate)
  • 属性关键字
  • 通知(NSNotification)

四、Animation

  • 请说一下对 CALayer 的认识。
  • CALayerContents 有几下几个主要的属性:

五、Block

  • Block的几种形式
  • Block变量截获
  • 什么是Block?

六、UI相关

七、多线程

  • 进程、线程
  • 多进程、多线程
  • 任务、队列
  • iOS中的多线程
  • GCD---队列
  • 死锁
  • GCD任务执行顺序
  • dispatch_barrier_async
  • dispatch_group_async
  • Dispatch Semaphore
  • 延时函数(dispatch_after)
  • 使用dispatch_once实现单例
  • NSOperationQueue的优点
  • NSOperation和NSOperationQueue
  • NSThread+runloop实现常驻线程
  • 自旋锁与互斥锁

八、内存管理

  • 在 Obj-C 中,如何检测内存泄漏?你知道哪些方式?
  • 在 MRC 下如何重写属性的 Setter 和 Getter_
  • 循环引用
  • 说一下什么是 悬垂指针?什么是 野指针?
  • 说一下对 retain,copy,assign,weak,_Unsafe_Unretain 关键字的理解
  • 是否了解 深拷贝 和 浅拷贝 的概念,集合类深拷贝如何实现
  • 使用自动引用计数应遵循的原则
  • 能不能简述一下 Dealloc 的实现机制
  • 内存中的5大区分别是什么?
  • 内存管理默认的关键字是什么?
  • 内存管理方案
  • 内存布局
  • 讲一下 iOS 内存管理的理解
  • 讲一下 @dynamic 关键字?
  • 简要说一下 @autoreleasePool 的数据结构?
  • 访问 __weak 修饰的变量,是否已经被注册在了 @autoreleasePool 中?为什么?
  • retainrelease 的实现机制?
  • MRC(手动引用计数)和ARC(自动引用计数)
  • BAD_ACCESS 在什么情况下出现?
  • autoReleasePool 什么时候释放?
  • ARC自动内存管理的原则
  • ARC 在运行时做了哪些工作?
  • ARC 在编译时做了哪些工作
  • ARCretainCount 怎么存储的?
  • __weak 属性修饰的变量,如何实现在变量没有强引用后自动置为 nil
  • __weak_Unsafe_Unretain 的区别?

九、设计模式

  • 如何设计一个时长统计框架?
  • 如何设计一个图片缓存框架?
  • 编程中的六大设计原则?

十、数据安全及加密

  • RSA非对称加密
  • 简述 SSL 加密的过程用了哪些加密方法,为何这么作?

十一、数据结构与算法

  • iOS开发 数据结构
  • iOS 算法面试题(一)
  • iOS 算法面试题(二)

十二、网络相关

  • HTTP协议
  • HTTPS、对称加密、非对称加密
  • 一个基于UDP的简单的聊天Demo
  • UDP的特点、UDP的报文结构及差错检测
  • TCP、三次握手、四次挥手、代码实现
  • 可靠数据传输、流量控制(滑动窗口)、拥塞控制
  • DNS
  • Cookie和Session
  • IP协议、IP数据报分片、IPv4编址、网络地址转换(NAT)
  • IPv6、从IPv4到IPv6的迁移

十三、性能优化

  • iOS 性能优化面试题
  • 光栅化
  • 日常如何检查内存泄露?
  • 如何高性能的画一个圆角?
  • 如何提升 tableview 的流畅度?
  • 如何优化 APP 的电量?
  • 如何有效降低 APP 包的大小?
  • 什么是 离屏渲染?什么情况下会触发?该如何应对?
  • 如何检测离屏渲染?
  • 怎么检测图层混合?

面试题还在更新,请记得要关注该哦~

那些 iOS开发 常备的底层面试题合集!_第1张图片

面试题持续整理更新中,需要拿到第一手大厂面试题及答案文档可以添加 iOS进阶学习交流群:551346706 !结实人脉、讨论技术你想要的这里都有!

你可能感兴趣的