美文网首页
iOS面试之架构模块

iOS面试之架构模块

作者: 木子心语 | 来源:发表于2019-12-16 17:30 被阅读0次

    架构

    架构内容如下:

    • 图片缓存
    • 阅读时长统计
    • 复杂页面架构
    • 客户端整体架构
    • 等等
    架构.png

    1.架构设计的目的

    • 模块化
    • 分层
    • 解耦
    • 降低代码重合度

    2.图片缓存

    • 怎样设计一个图片缓存框架?


      图片缓存框架.png
    - 图片缓存框架,需要一个管理者
    - 需要一个内存管理模块
    - 需要对图片磁盘上的处理
    - 本地没有图片,可以通过网络下载图片
    - 如果图片如果压缩或者是解码,需要解码的管理者
    - 需要负责图片解码,图片压缩/解压缩
    
    • 图片读写的方式,过程是怎样的?
    - 以图片URL的单向Hash值作为Key
    
    
    图片缓存.png
    - 图片缓存,先到内存中进行查找,如果找到,结束查找
    - 如果缓存中,没有找到,我们可以通过磁盘查找,如果磁盘查找找到,结束查找
    - 如果没有找到,通过网络下载,图片缓存结束
    
    • 内存的设计上需要考虑哪些问题?
    - 存储的大小
    - 淘汰策略
    
    • 淘汰策略

      • 先进先出淘汰

      • LRU算法(最近最久未使用的页面予以淘汰),某个时间内是否使用过

      • 定时检查,开启定时器,多少时间内未使用予以淘汰,影响性能

      • 提高检查触发频率:每次进行读写时;前后台切换时

      • 注意时间空间的开销

    • 磁盘设计需要考虑哪些问题?

    - 存储方式
    - 大小限制
    - 淘汰策略 ,某一图片存储时间距今已超过7天
    
    • 网络部分的设计需要考虑哪些问题?

      • 图片请求最大并发量
      • 请求超时策略
      • 请求优先级
    • 对于不同格式的图片,解码采用什么方式来做?

    - 应用策略模式对不同图片格式进行解码
    
    • 在哪个阶段做图片解码处理?
    - 磁盘读取后:从磁盘读取未解码,放在内存中解码完成,系统显示图片之
    前,会在主线程进行图片解码操作,从磁盘读取后进行解码,放在内存中
    
    - 网络请求返回后:通过对图片解码,回传给内存模块,通过管理者在内存模块中进行缓存
    

    2.阅读时长统计

    • 怎样设计一个时长统计框架?


      时长统计.png
    - 分为2块:记录器,记录管理者
    - 记录器:负责对每一条时长统计的数据进行记录
    - 记录管理者:记录器时长数据交给记录管理者进行统计
    
    - 记录器
    - 页面式,比如视频,阅读时长同push开始,到pop结束为结点
    - 流式,比如新闻的阅读时长记录
    - 自定义记录器
    
    - 记录管理者
    - 记录缓存(通过内存记录,如果出现,应用退出及手机停电的问题,怎么处理?)数据会丢失
    - 通过磁盘存储,记录时长统计数据
    - 需要一个上传器记录时长统计记录交给服务器端,保证记录时长的正确性
    
    • 为何要有不同类型的记录器?
    - 不同分类场景提供的关于记录的封装,适配
    
    • 记录数据由于某种原因丢失,怎样处理?
    - 定时写磁盘
    - 限定内存缓存条数,超过某条,就写磁盘
    
    • 关于延时上传的场景有哪些?
    - 前后台切换
    - 从无网到有网的变化
    
    • 上传时机是怎样把控的?
    - 立刻上传
    - 延时上传
    - 定时上传
    

    3.复杂页面架构

    • MVVM
    MVVM.png
    - Model :数据层
    - View :包含ViewController, ViewController对ViewModel强引用,作为
    ViewController的成员变量,viewModel通过block的方式,回传结果给使用方
    - ViewModel 业务逻辑层, ViewModel对model强引用,model通过block或者代理模式回传给业务层
    
    

    4.客户端整体架构

    客户端整体架构.png
    • 客户端独立于App的通用层
    - 通用层,时长统计框架,崩溃统计,网络第三方库
    - 放到任何App,都可以起到支撑的作用
    
    • 通用业务层
    - 公司通用的基础组件
    
    • 中间层
    协调与解耦的作用
    
    • 各个业务层

    问题:业务层之间如何解耦?

    - OpenURL
    - 依赖注入的方式
    

    QQ交流群: 796142709

    相关文章

      网友评论

          本文标题:iOS面试之架构模块

          本文链接:https://www.haomeiwen.com/subject/xjaewctx.html