度小满和虎牙iOS面经
面了一整天,整个人都不好了……
度小满一面
- TCP 为什么需要三次握手
- 线程间通信的方式
- 手写连接两个字符串的代码
- 两个线程同时调用这个拼接函数,会有什么问题
- 进程有哪几个区
- 画出两个线程同时调用这个拼接函数时,进程的内存里的样子
- 项目中有哪些 CPU 和 GPU 密集的地方,怎么优化的
- 进程调度算法
度小满二面
- HTTPS 和 HTTP 的区别
- 合并有序链表
- static关键字在 C 和 C++的使用
- Objective-C 的动态性是怎么实现的
- 进程有哪些状态
- 进程的各种状态对应到 iOS 应用中是怎么样的
- 描述一下Runtime
- 描述一下RunLoop
- 什么是中断
- 解释一下虚拟内存
- 有没有进行过应用性能的优化
- Objective-C 中如何表示一个类,有哪些属性
- 类方法和实例方法的区别
- 从 Masonry 中学到了什么
- const 和 static 有什么不同
- HTTP 如何实现安全传输
- 常见对称和非对称加密算法
度小满三面
- HTTPS 和 HTTP 的区别
- 怎么防止中间人攻击
- 项目中使用的框架选择的依据是什么
- NSURLConnection 和 NSURLSession 的区别
- 写一个快排
- 项目中的重难点
- AFNetworking 的优点,为什么用 AFNetworking
- Lua 和JSPatch 进行热更新的原理
- JSPatch 中进行 Method Swizzling 的时机
- JS 和 Native 进行交互的方法
- 如何设计 JS 和 Native 进行交互的 JS SDK
- 说说常见的数据库及其优缺点
- 红黑树的实现
- 红黑树是怎么保证时间复杂度的
- iOS 中数据持久化的措施
- Keychain 的使用场景
- 西安市有多少辆车
虎牙一面
- 看过哪些库的代码
- iOS多线程的方案
- NSURLSession 是怎么实现的
- SDWebImage 的思路
- SDWebImage 如何清除过期的缓存
- HTTP 中有哪些常用首部
- HTTP 各种状态码及其含义
- HTTP 缓存策略
- HTTP1.1 和 HTTP 1.0的区别
- HTTP2的特点
- HTTP1.1 的 KeepAlive 是怎么实现的
- HTTP 如何进行新鲜度检测
- 引用和指针的区别
- block 如何修改变量的值
- iOS 进程和线程的区别
- 什么是循环引用
- C++中的智能指针有哪些,和 ARC 的区别
虎牙二面
- property 的常见修饰符
- weak 是怎么实现自动置 nil 的
- Objective-C 和 C++的不同
- iOS 的消息转发的原理
- iOS 的 Runtime 的原理
- 如何选择排序算法
- 如何设计一个安全的单例
虎牙三面
- iOS 的热更新方案、原理和缺点
- 项目中的长连接是怎么实现的
- KeepAlive 的默认时长是多少
- 项目中为什么要有心跳包,心跳包的时长为什么是270s
- JS 和 Native 通信的方式