注意事项
1.面试官并不喜欢你长篇大论的去回答,只需要回答到关键知识点即可
2.简历上的知识点一定要掌握好,特别是最有可能问到的问题
一.关于 OC 最常见的面试题
1.分类和扩展有什么区别?
2.有哪些属性修饰关键字?atomic是绝对的线程安全吗?
3.KVO 实现的原理?
4.内存管理机制、自动释放池和循环引用
5.Block? weakSelf ,StrongSelf
6.说一下事件响应传递链 hitTest
7.Runloop 的运行原理和使用?
8.说一下Runtime,消息机制是如何实现?
9.进程、线程、多线程、多进程、任务、队列?如何实现线程安全(@synchronized 互斥锁(死锁问题),dispatch_semaphore_t 信号量,dispatch_barrier_async 栅栏函数,NSLock、NSConditionLock条件锁)搞明白这几种锁性能对比,使用条件就好,其他的不用管
Swift 相关的面试
1.Struct 和 类 的区别?
2.Swift,什么是泛型?
3.关键字:Strong,Weak,Unowned 区别?
4.为什么将 String,Array,Dictionary设计为值类型?
5.比较 Swift和OC中的 protocol 有什么不同
6.尾随闭包、逃逸闭包、自动闭包?
7.swift中, 存储属性和计算属性的区别?
8.Swift 初始化器?
网络相关
1.网络ISO网络七层架构,TCP/IP四层架构?
2.Socket、HTTP 三次握手、四次挥手、为什么?HTTPS 链接流程
3.Cookie和Session
4.Res 非对称加密、Aes 对称加密
设计模式
1.MVC(非重点)、MVVM、MVP
2.设计模式原则:单一职责原则、开闭原则、接口隔离原则、依赖倒置原则、里式替换原则、迪米尔法则
总体来说,设计模式分为三大类:(重要的标记起来了,其他的了解就行)
创建型模式(五种):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
结构型模式(七种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
行为型模式(十一种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
第三方库源码
- AFNetwork
- 考察点主要是线程管理,如 同时100个并发请求,里面是怎么处理?
- Alamofire 和 AFN 的对比
2.SDWebImage
- 考察的点主要是缓存机制,其他的不要太多废话
数据结构和算法-- 没别的好办法,多去看算法题,Leecode 中简单的就好,难的就不要看
iOS相关的主要考察链表的比较多,提到链表就要想到 指针,重点掌握链表的 **查询 ** 或 搜索 操作
1.100万个数据如何找到最小的100个?,时间复杂度?
2.长度为 n 的链表查找倒数第k个元素?
3.链表的反转?
附加:非重要,但可能遇到的问题,不做重点(持续更新...)
1.对项目有做过哪些性能优化?(非重点,可以尽情发挥)
1.UI层面:离屏渲染、Cell复用、高度不重复计算、避免锯齿
2.代码层面:遵循设计模式原则(下面有提),去除重复和多余代码
3.启动速度优化、CPU消耗优化、内存占用优化
4.数据安全优化:对频繁读取和修改的数据设计多线程需要加锁处理,添加NSSafe利用Runtime 方法替换在Release下实现常见崩溃拦截等。
5.包体积缩小优化
6.Log日志上报和打捞,奔溃分析,如Bugly
- 画一下 代理模式的 类图
原生和Web怎么交互?
推送Apns