iOS面试总结

框架与架构

2019-06-26  本文已影响0人  Jimmy_L_Wang

开发过程中引入框架与架构,是为了解决什么问题?

图片缓存框架

怎样设计一个图片缓存框架?(多级缓存)

图片缓存架构.png

图片通过什么方式进行读写,过程是怎样的?

图片读取流程.png

内存的设计上需要考虑哪些问题?

存储的Size

存储大小.png

淘汰策略

队列淘汰.png 淘汰策略.png

磁盘设计

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

网络设计

网络部分的设计需要考虑哪些问题?

图片解码

对于不同格式的图片,解码采用什么方式来做?

在哪个阶段做图片解码处理

线程处理

图片缓存时序图.png

阅读时长统计

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

时长统计框架.png

记录器

为何要有不同类型的记录器,你的考虑是什么?

记录的缓存和存储

记录的数据会由于某种原因丢失,你是怎样处理的?(降低丢失率)

记录上传器

客户端如果每出现一条就上传,是很浪费流量和性能的,所以会采取延时上传的策略。

关于延时上传的具体场景有哪些?

上传时机是怎样把控的?

复杂页面架构

微博APP的正文页

整体架构

微博架构.png

视图层(View & ViewController)

View:

ViewController:

业务逻辑层(ViewModel)

数据层(Engine & Model)

数据流

数据流.png
数据及数据关系
数据与数据之间的关系.png

反向更新

反向更新.png

view以代理的方式找到ViewController,再根据ViewController对ViewModel的强引用,找到对应的ViewModel。然后根据UI数据对业务数据的弱引用,由ViewController找到对应的业务数据,并在对应的业务数据上打下脏标记。之后再由查找到的ViewModel进行数据流的重新驱动。由业务数据经由ViewModel标记为脏数据的重新处理,生成一个新的UI数据,然后交由ViewController,在下一次刷新视图之前做一个数据的变化,这样在刷新之后就可以看到由于数据的变化导致的视图改变。

复杂页面架构总结

MVVM

MVVM.png

RN数据流思想

RN数据流.png

任何一个子节点或者子孙节点是没有权利做变化更新的,必须要把更新的消息传递给根节点,然后由根节点来去自顶向下的方式去询问哪些需要更新,然后去跟新具体的视图。

客户端整体架构

客户端整体架构.png

业务之间的解耦通信方式

依赖注入

依赖注入.png

面试总结

图片缓存怎么设计

阅读时长统计怎么设计

复杂页面架构怎么设计

客户端整体架构设计分层

上一篇 下一篇

猜你喜欢

热点阅读