新iOS面试题全集合(目前不断更新)
2020-11-08 本文已影响0人
iOS弗森科
持续更新 ,喜欢的开发们麻烦点赞+关注和评论!
做这个的初心是希望能巩固自己的基础知识,也通过这种方式检查自己知识的缺失点。目前还不完善,后续会根据时间不断更正和完善,当然也希望能帮助更多的开发者参与进来
数据结构
- 1.数据结构的存储一般常用的有几种?各有什么特点?
- 2.集合结构 线性结构 树形结构 图形结构
- 3.单向链表 双向链表 循环链表
- 4.数组和链表区别
- 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.网络七层协议
- 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.造成tableView卡顿的原因有哪些?
- 2.如何提升 tableview 的流畅度?
- 3.APP启动时间应从哪些方面优化?
- 4.如何降低APP包的大小
- 5.如何检测离屏渲染与优化
- 6.日常如何检查内存泄露?