面试题答案
一键面试处理大量数据传输
- 数据分批处理:
- 对于上传大量数据,将数据分成合适大小的块进行传输。例如在文件上传场景中,可以按照一定的字节数(如1024 * 1024字节,即1MB)为一块进行分块上传。在AFNetworking中,可以通过设置
AFHTTPRequestSerializer
的HTTPBodyStream
属性来实现分块上传。 - 对于下载大量数据,采用分段下载并实时处理。比如在下载大文件时,每下载一定字节的数据就进行本地存储或者其他处理,避免一次性将大量数据加载到内存中。
- 对于上传大量数据,将数据分成合适大小的块进行传输。例如在文件上传场景中,可以按照一定的字节数(如1024 * 1024字节,即1MB)为一块进行分块上传。在AFNetworking中,可以通过设置
- 优化数据格式:
- 使用轻量级的数据格式,如JSON。相比XML,JSON数据格式更加简洁,解析速度更快,数据量也相对较小。在Objective - C中,可以使用
NSJSONSerialization
类来解析和生成JSON数据。 - 对传输的数据进行压缩,如使用gzip压缩。在AFNetworking中,默认开启了gzip压缩,可以通过设置
AFHTTPRequestSerializer
的setValue:forHTTPHeaderField:
方法,设置Content - Encoding
字段为gzip
来启用。
- 使用轻量级的数据格式,如JSON。相比XML,JSON数据格式更加简洁,解析速度更快,数据量也相对较小。在Objective - C中,可以使用
减少网络请求次数
- 合并请求:
- 分析业务逻辑,将多个相关的小请求合并成一个大请求。例如,在一个应用中需要获取用户基本信息、用户设置信息和用户的最新通知,这三个请求如果都是向同一个服务器接口发起,可以将其合并为一个请求,通过一次网络交互获取所有数据。在代码实现上,可以构建一个包含多个参数的请求体,发送到服务器相应的合并接口。
- 数据复用:
- 在本地保存已经获取到的数据,当再次需要相同数据时,优先从本地获取。例如,一个新闻应用,用户进入应用时获取了新闻列表,当用户在应用内切换页面再次需要展示新闻列表时,直接从本地缓存中读取数据,而不是再次发起网络请求。可以使用
NSUserDefaults
来存储简单的数据,对于复杂的数据结构,可以使用Core Data
或SQLite
进行本地持久化存储。
- 在本地保存已经获取到的数据,当再次需要相同数据时,优先从本地获取。例如,一个新闻应用,用户进入应用时获取了新闻列表,当用户在应用内切换页面再次需要展示新闻列表时,直接从本地缓存中读取数据,而不是再次发起网络请求。可以使用
合理设置缓存策略
- 设置HTTP缓存:
- 在请求头中设置合适的缓存控制字段。例如,设置
Cache - Control
字段,max - age
指定缓存的有效时间(单位为秒)。在AFNetworking中,可以通过AFHTTPRequestSerializer
的setValue:forHTTPHeaderField:
方法来设置,如[requestSerializer setValue:@"max - age = 3600" forHTTPHeaderField:@"Cache - Control"]
,表示缓存有效期为1小时。
- 在请求头中设置合适的缓存控制字段。例如,设置
- 使用NSURLCache:
- 自定义
NSURLCache
,设置缓存大小和缓存策略。可以通过[NSURLCache sharedURLCache]
获取系统默认的缓存对象,也可以创建自定义的NSURLCache
对象并设置其属性。例如:
NSURLCache *customCache = [[NSURLCache alloc] initWithMemoryCapacity:10 * 1024 * 1024 diskCapacity:50 * 1024 * 1024 diskPath:@"myCache"]; [NSURLCache setSharedURLCache:customCache];
- 在请求时设置合适的缓存策略,如
NSURLRequestUseProtocolCachePolicy
表示遵循HTTP协议的缓存策略,NSURLRequestReloadIgnoringLocalCacheData
表示忽略本地缓存,直接从服务器获取数据等。可以在创建NSURLRequest
时设置,如:
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];
- 自定义
- 根据业务需求设置缓存:
- 对于不经常变化的数据,如应用的配置信息,可以设置较长的缓存时间。可以在本地存储配置信息,每次启动应用时先从本地读取,然后在后台异步检查服务器是否有更新,如果有更新再进行下载并更新本地缓存。
- 对于经常变化的数据,如实时的股票价格,设置较短的缓存时间或者不使用缓存,确保用户获取到最新的数据。