iOS面试12 - 结构/框架

框架/ 架构

  1. 模块化
  2. 分层
  3. 解耦
  4. 降低代码的重合度

图片缓存

  1. 如何设计一个图片缓存框架?
  • 1743129-b7d9ae83ba260b67.png
    屏幕快照 2019-02-16 下午10.17.17.png
  • 图片通过什么方式进行读写, 过程是如何的?
    • 以图片URL的单向hash值作为key
    • 1743129-56b5addb30d5ba04.png
      屏幕快照 2019-02-16 下午10.19.29.png
  1. 内存设计

    • 内存设计上面应该考虑哪些问题?
      • 存储的size
        • 1743129-055388b6691658e9.png
          存储size及方式
      • 淘汰的策略
        • 1743129-189e45693a91762f.png
          淘汰策略
  2. 磁盘设计

    • 磁盘设计需要考虑的问题?
      • 1> 存储方式
      • 2> 大小限制(eg: 102MB)
      • 3> 淘汰策略(如果某一个图片存储时间距今已经超过5天)
  3. 网络设计

    • 需要考虑的问题?
      • 图片请求最大并发量
      • 请求超时策略
      • 请求优先级
  4. 图片解码

    • 对于不同格式的图片, 解码采用什么样的方式去做?
      • 应用策略模式对不同图片格式进行解码
    • 在哪个阶段做图片解码处理?
      • 磁盘读取后
      • 网络请求返回后
  5. 线程处理

    • 1743129-2be1ab83e220e489.png
      查找图片

阅读时长统计

  1. 如何设计一个时长统计框架
    a) 记录器

    • 分类:
      • 页面式
      • 流式
      • 自定义式
    • 为什么要有不同类型的记录器, 你的考虑是什么?
      • 基于不同分类场景提供的关于记录的封装, 适配
      • 自定义式的记录器是为了框架有更好的扩展性和灵活性

    b) 记录管理者

    • 记录缓存:
      • 记录的数据, 可能会由于某种原因丢失, 你是如何处理的?(如何降低丢失率)
        • 定时写入磁盘, 固定间隔某一时间写入磁盘
        • 限定内存缓存条数, 如果达到某个值, 就写入磁盘
    • 磁盘缓存: 为了处理手机端的一场情况 -> 断电, 突然杀死app
    • 上传器:
      • 关于延时上传的具体场景有哪些(立即上传耗流量和性能)
        • 前后台切换的时候
        • 从无网到有网的切换
        • 通用轻量接口捎带上传
      • 上传时机是如何把控的?
        • 立即上传
        • 延时上传
        • 定时上传

复杂页面架构

  1. MVVM框架思想

    • 1743129-ff1bc859c5741de5.png
      MVVM流程
  2. ReactNative的数据流思想

    • 1743129-d60b5716b67f6aef.png
      任何一个子孙节点是没有权利更新的, 需要从根节点自顶向下遍历更新
  • 1743129-52ca81f0915a792c.png
    屏幕快照 2019-02-17 上午11.17.03.png

客户端整体架构

  1. 设计方式
    • 1743129-85b8d1ef433169b6.png
      屏幕快照 2019-02-17 上午11.28.48.png
  2. 业务之间的解耦方式
    • OpenUrl
    • 依赖注入
      • 1743129-b135d12f7ac03332.png
        依赖注入的具体实现!!!!!

面试总结

猜你喜欢

转载自blog.csdn.net/weixin_34245749/article/details/90773749