Android面试题——掘金-性能优化之网络优化(4.6)

一 概述

1
Android 网络优化相关常见面试题

二 面试题解答(仅供参考)

2.1 Android 网络请求的优化目标是什么?

1
2
3
4
5
-减少请求次数:避免不必要的网络请求,减少网络带宽占用。
-减小请求和响应的数据量:压缩请求和响应数据,提高下载速度,减少内存和CPU消耗。
-提高请求的响应速度:通过合理的请求调度、缓存、CDN 等技术优化响应时间。
-增强网络请求的稳定性:避免因网络波动导致的请求失败,提高应用稳定性
-减少电量消耗:尽量减少后台频繁网络请求,减少电池消耗。

2.2 如何减少网络请求的次数?

1
2
3
4
-合并请求:如果多个请求是相互独立的,可以合并成一个请求。
-批量上传:批量上传请求,而不是逐个上传。
-缓存策略:使用缓存减少重复请求,利用本地存储(如 SharedPreferences、数据库)缓存数据。
-延迟加载:延迟加载不重要的资源,减少启动时的请求。

2.3 如何压缩网络请求的响应数据?

1
2
3
4
-数据压缩:使用 gzip 或 Brotli 对请求和响应数据进行压缩。
-图片压缩:传输图片时使用合适的格式(如 WebP、JPEG)并进行压缩,避免传输过大的图片。
-分页加载:对于大量数据,采用分页策略,按需加载,避免一次加载全部数据。
-字段选择:API 请求时只请求必要的字段,避免请求无用数据。

2.4 如何优化图片的网络加载?

1
2
3
4
5
-使用图片库 Glide 或 Coil 等,它们有内存缓存和磁盘缓存功能,能够有效避免重复下载。
-图片懒加载:
使用RecyclerView时,尽量使用RecyclerView.OnScrollListener控制图片加载时机,避免提前加载。
-图片压缩与格式优化:尽量使用 WebP 格式,采用压缩算法(如 JPEG)减少图片传输大小。
-缓存策略:使用 LRUCache 或类似的机制缓存图片,避免重复下载。

2.5 如何避免网络请求的阻塞主线程?

1
2
3
4
5
6
-使用异步请求:
避免在主线程进行网络请求,使用 AsyncTask(过时)、ExecutorService、
Coroutine 或 OkHttp 异步调用来处理网络请求。

-使用 Retrofit 或 OkHttp:这两个库内建支持异步请求。
-使用 WorkManager:可以处理后台定时任务和长时间运行的网络请求。

2.6 如何优化 Retrofit 请求的性能?

1
2
3
-设置缓存:利用 OkHttp 的缓存机制,缓存请求的响应,减少网络请求次数。
-减少响应体的大小:只请求必要的字段,避免传输过多的无用数据。
-配置超时策略:合理配置连接超时、读取超时、写入超时等

2.7 网络请求中的重试策略如何设计?

1
2
3
4
-指数退避算法:当请求失败时,可以设置一定的时间间隔逐渐加长,进行重试。
-最大重试次数:避免死循环,可以设置最大重试次数。
-根据错误类型选择重试:
例如,网络超时(SocketTimeoutException)可以重试,而服务器 500 错误可以不重试。

2.8 如何处理网络请求中的 API 版本控制?

1
2
3
-API 版本号:在请求的 URL 中附加 API 版本号(如 /api/v1/)。
-Header 传递版本信息:通过 HTTP Header(如 X-API-Version)来传递版本号。
-支持多版本 API:设计时考虑版本间的兼容性和向后兼容性,确保旧版客户端仍能正常访问。

2.9 如何提高 API 请求的响应速度?

1
2
3
4
-CDN 加速:将静态资源(如图片、视频)放置在 CDN 上,减少请求延迟。
-连接复用:使用 HTTP/2 或长连接来减少频繁连接建立的时间开销。
-API 服务器优化:通过负载均衡、数据库优化、缓存等提高服务器端的处理速度。
-服务端数据压缩:服务端启用 GZIP 或 Brotli 等数据压缩技术,减少传输的数据量。

2.10 如何利用缓存减少网络请求的次数?

1
2
3
4
-HTTP 缓存:通过设置缓存头部(如 Cache-Control, ETag)让服务器支持 HTTP 缓存。
-图片缓存:使用 Glide 或 Fresco 等库,利用内存缓存和磁盘缓存机制来避免重复下载图片。
-数据缓存:
在应用中缓存网络请求结果(如 SharedPreferences、SQLite、Room)来避免每次都进行网络请求。

2.11 网络优化面试技巧(项目经验回答模板)

1
2
3
4
5
6
在我参与的项目中,我们通过以下几种方法优化了网络请求: 
1)使用 OkHttp 和 Retrofit 实现异步请求,避免了主线程阻塞。
2)配置了合适的缓存策略,在无网络时使用缓存数据。
3)对图片使用了 Glide 缓存,减少了图片重复下载。
4)实现了指数退避的重试策略,在网络波动较大的场景下减少了请求失败的情况。
5)通过在服务器端启用了 GZIP 和 CDN 加速,减少了网络延迟,提高了用户体验。”

三 参考

  • 掘金—知识库的大纲