iOS校招面试汇总
Aug 23, 2019
| 移动开发iOS | 920 字 | 3 分钟计网
- 七层协议栈
- HTTP是哪一层的协议?TCP呢?
- HTTP常见返回码
- HTTP的请求方法(GET、POST、UPDATE、DELETE、HEAD…)
- HTTP1.0 1.1 2.0的区别
- HTTP头(请求头,响应头)有哪些
- HTTPS介绍一下
- 抓包的原理
- HTTPS能防止中间人攻击吗?
- HTTPS使用的是对称加密还是非对称加密?(前期非对称,计算完秘钥后,使用对称加密)
- TCP和UDP的区别
- TCP的拥塞控制介绍下(慢启动,快重传,快恢复)
- 客户端发送网络请求,到拿到响应的整个过程(类似一个网页打开的过程)
- DNS解析时,某个ISP服务器宕机了,这时候会怎样?
- Cookie和Session的区别
计组
- 进程和线程的区别
- 进程之间通信的方式
- 线程之间通信的方式
- 死锁产生的原因
- 死锁的处理方法(鸵鸟、预防、解除)
算法
- 最近公共父节点(两个节点可能为null,可能不在树上)
- 反转链表
- 合并两个有序链表
- 不用递归,打印UIView的所有subviews(包括孙子view)
- 设计图片缓存系统(LRU)
- 满二叉树,插入一个新节点
- 字符串求全排列
- 1G内存,一个1T的文件内每一行都是URL,去重
- 自己实现memcopy
OC
- Block截获变量
- C++ struct和Class的区别
- 内存管理怎么做的?(ARC是编译器插入xxx,再配合autoreleasepool)
- AutoreleasePool是怎么管理内存的
- 属性修饰符有哪些?(原子性、读写、内存)
业务
- iOS9-13,每个版本讲一个特性
- iOS有哪些多线程方式?(NSThread、GCD、NSOperation)
- 同步异步的区别
- 串行队列、并行队列的区别
- 队列和线程的关系
- 怎么实现多个任务执行完后,统一处理(同步阻塞、栅栏函数,dispatch_group)
- 线程安全错误是如何出现的?(i++:load i,值+1,写回)
- 如何保证线程安全
- iOS中有哪些锁
- 数据存储方式
- TableView滑动时,gif不动,为什么?(Runloop的Mode决定的)
- TableView性能优化
- 内存泄漏的原因(循环引用、还有?)
- Runloop的理解
- UIViewController的生命周期
- 应用的生命周期
其他
- GCD相关
- SDWebImage设计(自己设计,如果没缓存,多个cell同时请求图片,都请求的话不实际,如何处理)
- AFNetworking设计
- 夜间模式(改进:设置picker->使用配置文件;除了通知,有什么更优雅的方式吗?)
- Json转Model(与YYModel区别在哪)
常问问题
- 你有什么要问我的?
- 你未来的职业规划
- 为什么选择iOS开发岗位?
- 遇到的挑战:夜间模式通知的移除
iOS9之前通知中心是用指针指向的观察者,当观察者释放后,如果没有移除观察,那么通知中心发通知的时候,就对野指针进行了通知的发送,导致崩溃;
iOS9之后,通知中心对观察者做了弱引用,即使不释放也不崩溃
但我所遇到的问题不是由这个原因引起的,而是在分类的dealloc中移除通知时,移除的时候对象已经被销毁了,于是在通知中心对其做处理时,直接崩溃。注释掉分类的dealloc就可以了,这个问题只存在于iOS8的某个版本中,iOS7、9、其他iOS8版本都没有问题,所以就排查了很久。
解决方案就是,在分类中不重写dealloc,而是用method swizzling,写一个方法代替dealloc,在调用dealloc之前,移除通知。这样就能确保在通知是在dealloc前移除的。