相关方面
- 图片缓存
- 阅读时长统计
- 复杂页面架构
- 客户端整体架构
目的:
- 模块化
- 分层
- 解耦
- 降低代码重合度
一. 图片缓存
1. 怎么设计一个图片缓存框架?
2. 图片是通过什么方式读写的?
- 以图片URL的单项Hash值作为key
3.
内存设计
上需要考虑哪些问题?
<1>存储Size设计
<2>淘汰策略
- 以队列先进先出的方式淘汰
- 模拟计算机
LRU算法
[中文名:最近最久未使用算法]
[如30分钟内是否使用过]
1. 定时检查(耗性能)
2. 提高检查触发频率:每次进行读写时, 前后台切换时检查
3. 根据实际业务的其他触发场景
注意开销
4.
磁盘设计
上需要考虑哪些问题?
- 存储方式
- 大小限制(如100M)
- 淘汰策略(如某一图片储存时间超过7天)
5.
网络设计
上需要考虑哪些问题?
- 图片请求最大并发量(10张或20等等)
- 请求超时策略(超时机制重试,再次失败就不请求了)
- 请求优先级
6.
图片解码
对不同格式的图片, 解码采取什么方式来做?
- 应用策略模式对不同格式图片格式进行解码
7.在那个阶段
图片解码
处理?
- 磁盘读取后
- 网络请求返回后
8.图片缓存框架整体流程, 类似SDWebImage?
二. 阅读时长统计
1. 怎么设计一个阅读框架?
2. 为什么有不同类型记录器, 基于什么考虑?
- 基于不同分类场景提供关于记录器的封装和适配
页面式 / 流式 / 自定义式(侧滑等)
3. 记录数据会由于某种原因丢失, 要怎么处理(降低丢失率)?
- 定时写磁盘
- 限定内存缓存条数(如100条), 超过该条数, 即写磁盘
4. 上传时机是怎么把控的?
- 立即上传
- 延时上传:
前后台切换, 从无网到有网, 通用轻量接口捎带上传等
- 定时上传
三. 复杂页面
如APP的复杂首页[今日头条, 微博, 腾讯新闻]
- 整体架构
- 数据流
- 反向更新
1. 整体架构
2. 复杂页面总结
- MVVM框架思想
1. Model(数据层)
2. ViewModel(业务逻辑层)
3. View(视图层)(包含View和ViewController)
4. ViewController 对ViewModel有一个强引用, Viewmodel通过Block等方式回传给视图
ReactNative的数据流思想
- 系统UIView更新机制思想
- Facebook的开源框架AsyncDisPlay关于预排班的设计思想
三. 客户端整体架构
业务之间解耦通信方式
- OpenURL
依赖注入