Skip to content

Commit 339d10b

Browse files
committed
111
1 parent eb4185a commit 339d10b

File tree

25 files changed

+1456
-1
lines changed

25 files changed

+1456
-1
lines changed

面试准备第七天/第三方库.md

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
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+

面试准备第六天/多线程.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@
3434

3535
9、状态控制?
3636
如果重写了main方法,底层控制变更任务执行完成状态,以及任务退出
37-
如果重写了start方法,自行控制任务状态
37+
如果重写了start方法,自行控制任务状态
38+
39+
10、NSThread内部实现机制?
40+
3841

3942

4043

0 commit comments

Comments
 (0)