iOS面试题整理
在线查看地址:https://ios.nobady.cn
iOS面试相关问题整理,做这个的初心是希望能巩固自己的基础知识,当然也希望能帮助更多的开发者,如发现答案不准确或者不完整的可前往 Github 提交完善。
主要从以下方面做了整理:
数据结构
- 1.数据结构的存储一般常用的有几种?各有什么特点?
- 2.集合结构 线性结构 树形结构 图形结构
- 3.单向链表 双向链表 循环链表
- 4.数组和链表区别
- 5.堆、栈和队列
- 6.输入一棵二叉树的根结点,求该树的深度?
- 7.输入一课二叉树的根结点,判断该树是不是平衡二叉树?
算法
- 1.时间复杂度
- 2.空间复杂度
- 3.常用的排序算法
- 4.字符串反转
- 5.链表反转(头差法)
- 6.有序数组合并
- 7.查找第一个只出现一次的字符(Hash查找)
- 8.查找两个子视图的共同父视图
- 9.无序数组中的中位数(快排思想)
- 10.给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
Foundation
- 1.nil、NIL、NSNULL 有什么区别?
- 2.如何实现一个线程安全的 NSMutableArray?
- 3.atomic 修饰的属性是绝对安全的吗?为什么?
- 4.实现 isEqual 和 hash 方法时要注意什么?
- 5.id 和 instanceType 有什么区别?
- 6.self和super的区别
- 7.@synthesize和@dynamic分别有什么作用?
- 8.typeof 和 typeof,typeof 的区别?
- 9.类族
- 10.struct和class的区别
UIKit
- 1.UIView 和 CALayer 是什么关系?
- 2.Bounds 和 Frame 的区别?
- 3.setNeedsDisplay 和 layoutIfNeeded 两者是什么关系?
- 4.谈谈对UIResponder的理解
- 5.loadView的作用?
- 6.使用 drawRect有什么影响?
- 7.keyWindow 和 delegate的window有何区别
WebView
内存管理
- 1.什么情况使用 weak 关键字,相比 assign 有什么不同?
- 2.如何让自己的类用 copy 修饰符?如何重写带 copy 关键字的 setter?
- 3.@property 的本质是什么?ivar、getter、setter 是如何生成并添加到这个类中的
- 4.@protocol 和 category 中如何使用 @property
- 5.简要说一下 @autoreleasePool 的数据结构??
- 6.BAD_ACCESS在什么情况下出现?
- 7.使用CADisplayLink、NSTimer有什么注意点?
- 8.iOS内存分区情况
- 9.iOS内存管理方式
消息传递的方式
- 1.KVC实现原理
- 2.KVO的实现原理
- 3.如何手动触发KVO方法
- 4.通知和代理有什么区别
- 5.block和delegate的区别
- 6.为什么Block用copy关键字
网络
- 1.网络七层协议
- 2.Http 和 Https 的区别?Https为什么更加安全?
- 3.HTTPS的连接建立流程
- 4.解释一下 三次握手 和 四次挥手
- 5.TCP 和 UDP的区别
- 6.Cookie和Session
- 7.DNS是什么
- 8.DNS解析过程
数据存储
多线程
- 1.进程与线程
- 2.什么是多线程?
- 3.多线程的优点和缺点
- 4.多线程的 并行 和 并发 有什么区别?
- 5.iOS中实现多线程的几种方案,各自有什么特点?
- 6.多个网络请求完成后执行下一步
- 7.多个网络请求顺序执行后执行下一步
- 8.异步操作两组数据时, 执行完第一组之后, 才能执行第二组
- 9.多线程中的死锁?
- 10.GCD执行原理?
动画
图像处理
数据安全及加密
Runtime
- 1.Category 的实现原理?
- 2.isa指针的理解,对象的isa指针指向哪里?isa指针有哪两种类型?
- 3.Objective-C 如何实现多重继承?
- 4.runtime 如何实现 weak 属性?
- 5.讲一下 OC 的消息机制
- 6.runtime具体应用
- 7.runtime如何通过selector找到对应的IMP地址?
- 8.简述下Objective-C中调用方法的过程
- 9.load和initialize的区别
- 10.怎么理解Objective-C是动态运行时语言。
Runloop
- 1.Runloop 和线程的关系?
- 2.RunLoop的运行模式
- 3.runloop内部逻辑?
- 4.autoreleasePool 在何时被释放?
- 5.GCD 在Runloop中的使用?
- 6.AFNetworking 中如何运用 Runloop?
- 7.PerformSelector 的实现原理?
- 8.PerformSelector:afterDelay:这个方法在子线程中是否起作用?
- 9.事件响应的过程?
- 10.手势识别的过程?
- 11.CADispalyTimer和Timer哪个更精确
项目架构
设计模式
组件化
- 1.组件化有什么好处?
- 2.你是如何组件化解耦的?
- 3.为什么CTMediator方案优于基于Router的方案?
- 4.基于CTMediator的组件化方案,有哪些核心组成?
调试技巧
性能优化
- 1.造成tableView卡顿的原因有哪些?
- 2.如何提升 tableview 的流畅度?
- 3.APP启动时间应从哪些方面优化?
- 4.如何降低APP包的大小
- 5.如何检测离屏渲染与优化
- 6.日常如何检查内存泄露?
源码理解
代码管理
持续集成