美文网首页
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面试之架构模块

    架构 架构内容如下: 图片缓存 阅读时长统计 复杂页面架构 客户端整体架构 等等 1.架构设计的目的 模块化 分层...

  • iOS架构:AOP实现局部模块化(附Demo)

    iOS架构:AOP实现局部模块化(附Demo) iOS架构:AOP实现局部模块化(附Demo)

  • iOS好文整理

    大神: iOS_吴白iOS大全_破船之家sunnyxx 架构,多线程,源码 面试 ----iOS 面试常见问题最全...

  • iOS开发进阶- 图片缓存框架

    课程: 新浪微博资深大牛全方位剖析 iOS 高级面试 一、框架&架构 模块化分层解耦降低代码重合度 二、图片缓存框...

  • OC的Runtime能干什么?

    参考文章:iOS 面试题·项目中用过 Runtime 吗?iOS 模块分解—「Runtime面试、工作」看我就ok...

  • iOS面试之网络模块

    网络 网络内容如下 HTTP协议 HTTPS与网络安全 TCP / UDP DNS解析 Session/Cooki...

  • iOS面试之Block模块

    Block Block内容如下: 关于Block 截获变量 __block修饰符 Block的内存管理 Block...

  • iOS面试之算法模块

    算法 算法内容如下: 字符串反转 链表反转 有序数组合并 Hash算法 查找两个子视图的共同父视图 求无序数组当中...

  • iOS面试之OC模块

    OC oc内容如下:1.分类2.关联对象3.扩展4.代理5.通知6.KVO7.KVC8.属性关键字 1.分类 分类...

  • iOS面试之Runtime模块

    Runtime内容如下: 数据结构 类对象与元类对象 消息传递 方法缓存 消息转发 Method-Swizzlin...

网友评论

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

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