一、图片缓存框架面试题
问题1:怎样设计一个图片缓存框架?
问题2:图片通过什么方式进行读写,过程是怎样的?
读写方式:
- 以图片URL的单向Hash值作为Key进行存储和读取
过程:
问题3:图片缓存框架中内存的设计需要考虑哪些问题?
-
存储的Size
1、对不同大小图片,设置最大数量。
2、图片是先进先出。
-
淘汰策略
1、以队列先进先出的方式淘汰。
2、LRU算法(如30分钟之内是否使用过)。LRU算法实现如下:
问题4:磁盘设计需要考虑哪些问题?
- 存储方式
- 大小限制(如100M)
- 淘汰策略(如某一图片存储时间距今已超过7天)
问题5:网络部分的设计需要考虑哪些问题?
- 图片请求最大并发量
- 请求超时策略
- 请求优先级
问题6:对于不用格式的图片,解码采用什么方式来做?
- 应用策略模式对不同图片格式进行解码
问题7:在哪个阶段做图片解码处理?
问题8:框架中线程处理是怎样的?
- 先从内存缓存中读取。
- 内存缓存中不存在,则从磁盘中读取;如果读取成功,则存入内存缓存。
- 磁盘中不存在,则从网络下载;如果网络下载成功,则存入内存缓存。
二、阅读时长统计面试题
问题9:怎样设计一个时长统计框架?
问题10:为何有不同类型的记录器,你的考虑是什么?
问题11:记录的数据会由于某种原因丢失,你是怎样处理的?
也就是降低丢失率。
问题12:记录上传器,关于延时上传的具体场景有哪些?
问题13:记录上传器,关于上传时机是怎样把控的?
三、复杂页面架构
以微博为例
3.1、整体架构
整体框架
视图层
业务逻辑层
数据层
3.2、数据流
3.3、反向更新
3.4、总结
MVVM
RN数据流
四、客户端整体架构
4.1、整体框架图
问题14:业务之间的解藕通信方式?
4.2、依赖注入
这里业务A依赖业务C。
通过将业务C注入到中间层,业务A通过中间层获取所需要的信息,从而达到了业务解藕。