|
| 1 | +1、AFNetWorking是什么? |
| 2 | + AFNetWorking是一款轻量级网络请求的开源框架,基于iOS和mac os网络进行扩展的高性能框架,大大降低了iOS开发工程师处理网络请求的难度。 |
| 3 | + |
| 4 | +2、AFN的优点 |
| 5 | + ①原有基础URLSession上封装一层,在传参方面更加灵活。 |
| 6 | + ②回调更友好。 |
| 7 | + ③支持返回序列化 |
| 8 | + ④支持文件上传,断点下载 |
| 9 | + ⑤自带多线程,防止死锁 |
| 10 | + ⑥处理了Https证书流程,节省移动端开发 |
| 11 | + ⑦支持网络判断 |
| 12 | + |
| 13 | +3、AFN的五大功能模块 |
| 14 | + 网络通信模块(AFURLSessionManager,AFHTTPSessionManager) |
| 15 | + 网络状态监听模块(Reachability) |
| 16 | + 网络通信安全策略模块(Security) |
| 17 | + 网络通信信息序列化/反序列化模块(Serialization) |
| 18 | + 对于iOS UIKit库的扩展(UIKit) |
| 19 | + |
| 20 | +4、AFN的6大模块 |
| 21 | + ①NSURLConnection:主要对NSURLConnection进行了进一步的封装,包含一下核心类:AFURLConnectionOperation,AFHTTPRequestOperationManager, AFHTTPRequestOperation |
| 22 | + ②NSURLSession:主要对URLSession进行进一步的封装,包含以下核心类:AFURLSessionManager,AFHTTPSessionManager。 |
| 23 | + ③Reachability:提供了网络状态相关接口,包含以下核心的类:AFNetworkReachabilityManager。 |
| 24 | + ④Security:提供了与安全性相关的的操作接口,包含以下核心类:AFSecurityPolicy。 |
| 25 | + ⑤Serialization:提供了与解析数据相关的操作接口,包含以下核心类:AFURLRequestSerialization,AFURLResponseSerialization。 |
| 26 | + ⑥UIKit:提供了大量网络请求过程中与UI界面显示相关的操作接口,通常用于网络请求中过程中的提示,使用户交互更加友好。 |
| 27 | + |
| 28 | +5、AFN的框架图 |
| 29 | + AFNetWorking |
| 30 | + UIKit集成模块 |
| 31 | + 请求序列化 响应序列化 |
| 32 | + 会话 网络监听模块 网络安全模块 |
| 33 | + |
| 34 | +6、AFURLSessionmanager主要负责哪些功能? |
| 35 | + 创建和管理NSURLSession、NSURLSessionTask |
| 36 | + 实现NSURLSessionDelegate等协议的代理方法 |
| 37 | + 引入AFSecurityPolicy来保证请求的安全 |
| 38 | + 引入AFReachability来监控网络的状态 |
| 39 | + |
| 40 | + |
| 41 | +SDWebImage |
| 42 | +1、SDWebImage是什么? |
| 43 | + SDWebImage是一个异步下载图片并且支持缓存的框架 |
| 44 | + |
| 45 | +2、SDWebImage架构简图 |
| 46 | + |
| 47 | + UIImageView+WebCache |
| 48 | + SDWeabImageManager |
| 49 | + SDImageCache SDWebImageDownloader |
| 50 | + |
| 51 | +3、SDWebImage加载图片的流程 |
| 52 | + 首先图片请求URL所对应的key去查找内存缓存,如果找到了则返回给调用方,没有找到就去磁盘去查找,如果找到就返回给调用方,没有找到就进行网络请求。 |
| 53 | + |
| 54 | +4、怎么去设计一个图片缓存框架? |
| 55 | + 分层: manager |
| 56 | + 内存 磁盘 网络 |
| 57 | + code Manager |
| 58 | + 图片解码 图片压缩/解压缩 |
| 59 | + manager:管理者,负责调度各个功能模块,以及和外界的交互。为一个单例用来暴露出缓存框架的各个接口, |
| 60 | + 内存:指的是当前程序的运行空间,缓存速度快容量小,是临时存储文件用的,供CPU直接读取。 |
| 61 | + 磁盘:是程序的存储空间,缓存容量大速度慢可持久与内存不同的是磁盘是永久存储的,只要里面存放东西,不管运不运行,他都占用空间,磁盘缓存是存放在Library/ Caches |
| 62 | + code Manager:图片的解码应用策略模式,针对jpg,png,gif等不同的图片格式进行解码。图片的解码时机,在子线程图片刚下载完,在子线程刚从磁盘读取完。避免在主线程进行解码解压缩,避免卡顿 |
| 63 | + |
| 64 | + 图片通过什么样的方式进行读写,过程是怎样的? |
| 65 | + 以图片URL的单向hash值作为key |
| 66 | + |
| 67 | + 内存设计需要考虑的问题? |
| 68 | + 存储的size:10kb以下的50个,100kb以下的20个,100kb以上的10个 |
| 69 | + 淘汰策略:以队列先进先出的方式淘汰;LRU算法策略(最近最久未使用算法,固定时长使没使用),可以使用定时检查(非常low,非常损耗性能),提高检查触发的频率(每次读写时,前后台切换时)使用这种算法需要注意时间和空间的开销 |
| 70 | + |
| 71 | + 磁盘设计需要考虑的问题? |
| 72 | + 存储方式 |
| 73 | + 大小限制 |
| 74 | + 淘汰策略 |
| 75 | + |
| 76 | + 网络部分的设计需要考虑哪些问题? |
| 77 | + 图片请求的最大并发量 比如同一时间请求图片的最大并发量限制如10张20张 |
| 78 | + 请求超时策略 比如我们请求图片是可能会发生超时的,我们可以在第一次超时后在去请求一遍如果继续超时那就不去请求 |
| 79 | + 请求的优先级 比如我们请求的图片或者缓存的图片是否是当下最紧急的使用的,如果是那么请求的优先级就需要高一些 |
| 80 | + |
| 81 | + 对于不同格式的图片,解码采用什么方式来做? |
| 82 | + 应用策略模式对不同图片格式进行解码 |
| 83 | + |
| 84 | + 在哪个阶段做图片的解码处理? |
| 85 | + 职责分工,磁盘读取之后直接进行解码放到内存中,减少主线程的压力,或者网络请求返回后对图片进行解码,然后在回传给内存模块,或者通过管理者然后在内存模块中进行缓存。 |
| 86 | + |
| 87 | + 整体图片缓存的线程处理 |
| 88 | + 通过manager管理者通过URL对应的key去内存中去查找,如果有返回给调用方,如果没有则去磁盘中进行查找,有的话返回给调用方并且将图片缓存在内存中,没有则进行网络请求,待返回后给调用方并且将图片缓存在内存中。 |
| 89 | + |
| 90 | + |
| 91 | + |
| 92 | + |
| 93 | + |
| 94 | + |
| 95 | + 客户端的整体架构 |
| 96 | +1、客户端的整体架构图? |
| 97 | + 业务流水线(业务A,B,C,D....) |
| 98 | + 中间层(协调和解耦的作用,业务流水线的解耦) |
| 99 | + 通用业务层(通用的控件,公用的方法工具..) |
| 100 | + 独立于App的通用层(第三方库如网络请求的,图片缓存的,崩溃监测...) |
| 101 | + |
| 102 | +2、各个业务之间解耦通信方式? |
| 103 | + OpenUrl |
| 104 | + 依赖注入,通过中间件解除连个业务之间的耦合 依赖 |
| 105 | + |
| 106 | + |
| 107 | + |
| 108 | + |
| 109 | + |
| 110 | + |
| 111 | + |
| 112 | + |
| 113 | + |
| 114 | + |
| 115 | + |
| 116 | + |
| 117 | + |
| 118 | + |
| 119 | + |
| 120 | + |
| 121 | + |
| 122 | + |
| 123 | + |
| 124 | + |
| 125 | + |
| 126 | + |
| 127 | + |
| 128 | + |
0 commit comments