版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android网络通信面试题及详细答案(实战版)一、Android网络基础面试题1、Android中常用的网络请求方式有哪些?各自的优缺点是什么?参考答案:日常开发中主流使用四种网络请求方式,适配不同开发场景:1)HttpURLConnection(原生自带)优点:系统原生API,无需引入第三方依赖,轻量化、兼容性好,低版本系统适配无压力。缺点:API繁琐,封装度极低,手动处理请求头、参数、流关闭、线程切换,不支持请求队列、缓存、重试,大型项目开发效率极低。2)OkHttp(主流底层框架)优点:高效轻量,支持HTTP/2、连接池复用、自动重连、请求拦截、超时配置灵活,支持同步/异步请求,是目前绝大多数开源网络框架的底层依赖。缺点:原生不支持自动解析JSON、不支持自动线程切换,需要手动封装,基础使用需要写模板代码。3)Retrofit(主流应用层框架)优点:基于OkHttp封装,注解式编程,代码简洁易维护,支持动态代理、请求参数自动拼装、响应体自动解析,支持多种解析器,适配RESTful接口,大型项目首选。缺点:本质是封装框架,依赖OkHttp,小型简单项目使用略显冗余。4)Volley(谷歌推出)优点:适合频繁小数据量请求,自带请求队列、图片缓存、请求优先级,自动处理线程切换,轻量便捷。缺点:不适合大文件上传下载,大数据流处理容易出现内存溢出,目前逐渐被Retrofit替代。总结:实际项目统一采用Retrofit+OkHttp组合,兼顾开发效率、性能和稳定性。2、Android网络请求为什么不能在主线程执行?参考答案:核心原因两点,一是用户体验,二是系统机制限制:1、主线程负责UI绘制、事件分发,如果执行网络请求,会阻塞主线程,导致页面卡顿、点击无响应,严重时触发ANR(应用无响应)。2、Android4.0及以上系统,新增网络主线程禁止策略,一旦在主线程执行网络请求,会直接抛出NetworkOnMainThreadException崩溃异常。日常开发中,必须通过子线程、协程、RxJava等方式执行网络请求,再切回主线程更新UI。3、Android访问网络需要配置哪些权限?有什么注意事项?参考答案:1、基础网络权限,在AndroidManifest.xml中配置:<uses-permissionandroid:name="android.permission.INTERNET"/>该权限是普通权限,无需动态申请,清单文件配置即可生效。2、拓展权限(按需配置):-ACCESS_NETWORK_STATE:获取网络状态(WiFi/流量/无网络),用于网络预判断;-ACCESS_WIFI_STATE:获取WiFi相关信息。3、关键注意事项:-Android9.0及以上,默认禁止明文HTTP请求,需要在res/xml中配置network-security-config,放行明文域名,或者统一使用HTTPS;-网络权限无法申请动态权限,只需清单配置,不要做动态权限判断,避免无效代码。二、OkHttp核心面试题(高频)1、OkHttp的核心优势是什么?连接池原理讲一下参考答案:核心优势:支持HTTP/2和SPDY协议、连接池复用、请求超时自动处理、拦截器机制、同步异步双模式、自动处理Cookie、重定向,请求稳定性和性能远超原生API。连接池原理:OkHttp会将成功建立的TCP连接缓存到连接池中,默认保持5个空闲连接,空闲时长5分钟。后续相同域名的网络请求,不会重新建立TCP三次握手,直接复用已有连接,减少连接创建销毁的耗时,大幅提升请求速度,减少网络开销。当连接超时、失效、或者数量超出阈值时,连接池会自动清理无效连接,释放内存和资源。2、OkHttp拦截器的执行流程?常用拦截器有哪些?参考答案:OkHttp采用责任链模式执行拦截器,请求会依次经过所有拦截器处理,最终发起网络请求,响应结果反向传回。五大核心内置拦截器(执行顺序):1、自定义拦截器:开发者自行添加,用于统一添加请求头、参数、日志打印、token校验;2、RetryAndFollowUpInterceptor:负责请求重试、重定向处理;3、BridgeInterceptor:补全请求头、编码请求参数、解析响应体;4、CacheInterceptor:处理网络缓存,读取缓存、更新缓存;5、ConnectInterceptor:获取连接池中的连接,建立网络通道;6、CallServerInterceptor:真正发起网络请求,和服务器交互,获取响应数据。核心流程:请求下发层层处理→真正请求服务器→响应层层回调返回结果。3、OkHttp超时时间有几种?分别代表什么?参考答案:OkHttp提供四种独立超时配置,精准控制整个请求生命周期:1、连接超时(connectTimeout):TCP建立连接的超时时间,默认10秒,网络差、服务器延迟高时容易触发;2、读取超时(readTimeout):连接成功后,读取服务器响应数据的超时时间,默认10秒;3、写入超时(writeTimeout):向服务器写入请求数据的超时时间,默认10秒;4、总超时(callTimeout):整个请求从发起、连接、读写数据的全部耗时,默认0(不限制)。日常开发中,会根据业务场景自定义超时,比如文件上传下载调大超时时间。三、Retrofit核心面试题(必考)1、Retrofit的工作原理?为什么用注解配置请求?参考答案:Retrofit核心基于动态代理+注解解析实现网络请求封装,底层完全依赖OkHttp做真正的网络交互。工作流程:1、开发者定义接口,通过注解(GET/POST/Query/Body等)声明请求方式、接口地址、请求参数;2、通过Retrofit.create()方法,利用动态代理生成接口的实现类;3、代理类解析注解信息,拼接完整请求地址、封装请求头、请求体;4、将封装好的请求交给OkHttp的Call对象,由OkHttp完成网络请求;5、请求成功后,通过配置的转换器(Gson)自动解析响应体,转为实体类返回。注解优势:摒弃硬编码拼接URL和参数,代码统一、简洁、易维护,便于接口统一管理和后期迭代。2、Retrofit中GET和POST请求的区别?使用场景?参考答案:核心区别:1、参数位置:GET参数拼接在URL后面,POST参数放在请求体中;2、参数限制:GET参数长度有限制,无法传递大量数据;POST无长度限制;3、缓存机制:GET请求默认可被浏览器、网络框架缓存;POST默认不缓存;4、安全性:GET参数暴露在地址栏,安全性低;POST参数隐藏,相对安全;5、请求幂等性:GET是幂等请求,多次请求结果一致;POST非幂等,多次请求可能产生不同结果(如新增数据)。使用场景:GET:查询数据、获取列表、详情等只读业务;POST:提交数据、登录、注册、上传、新增/修改业务数据。3、Retrofit动态配置URL有几种方式?参考答案:实际开发常用两种方式,适配多环境、动态域名场景:1、注解占位符方式:接口地址用{key}占位,调用请求时通过@Path传入动态地址片段,适合统一域名下的动态接口路径;2、拦截器动态替换BaseUrl:自定义OkHttp拦截器,根据业务环境(测试/正式)动态修改请求域名和路径,适合多域名、多环境切换场景,是项目主流方案。四、网络常见问题与优化面试题(实战高频)1、网络请求出现ANR的原因和解决方案?参考答案:常见原因:1、网络请求阻塞主线程,未异步执行;2、网络超时时间设置过长,子线程请求阻塞,主线程等待回调;3、请求队列堆积,大量网络请求并发阻塞线程;4、弱网、无网络环境下未做预判,请求一直阻塞。解决方案:1、所有网络请求统一在子线程/协程执行,杜绝主线程请求;2、合理配置OkHttp超时时间,避免无限等待;3、请求前判断网络状态,无网络直接回调失败,不发起无效请求;4、页面销毁时,取消当前页面所有网络请求,避免页面销毁后请求继续执行导致阻塞或内存泄漏。2、如何避免网络请求内存泄漏?参考答案:内存泄漏核心原因:网络请求是异步耗时操作,页面销毁时请求未取消,回调持有Activity/Fragment引用,导致页面资源无法释放。解决方案:1、页面生命周期结束(onDestroy)时,取消所有未完成的Call请求;2、使用协程发起网络请求,绑定页面生命周期,页面销毁自动取消协程任务;3、避免在网络回调中直接使用强引用Activity,必要时使用弱引用;4、统一管理请求队列,页面级请求单独管理,销毁时批量清空。3、HTTPS和HTTP的区别?HTTPS加密原理?参考答案:核心区别:1、HTTP是明文传输,端口80,无加密、不安全,易被抓包、篡改;2、HTTPS是HTTP+SSL/TLS加密传输,端口443,数据加密、防篡改、防劫持,安全性更高;3、HTTPS需要证书校验,握手过程更复杂,请求耗时略高于HTTP。HTTPS加密原理:1、客户端向服务器发起请求,服务器返回CA证书;2、客户端校验证书合法性,验证通过后生成随机密钥;3、客户端用服务器公钥加密随机密钥,发送给服务器;4、服务器用自身私钥解密,获取随机密钥;5、后续所有通信,双方通过该对称密钥加密解密数据,完成安全传输。4、Android网络优化方案有哪些?参考答案:结合项目实战,主流优化方向分为5点:1、连接优化:使用OkHttp连接池复用TCP连接,减少重复握手耗时;开启HTTP/2协议,支持多路复用;2、请求优化:合并高频小请求,减少请求次数;避免重复请求,做请求防抖、去重;3、缓存优化:合理配置OkHttp缓存策略,静态数据、列表数据本地缓存,无网时加载缓存数据;4、超时与重试优化:适配弱网环境,自定义超时时间;失败请求做合理重试,避免无限重试;5、数据优化:接口返回数据压缩(Gzip),减少传输流量;精简接口字段,减少无效数据传输;6、异常优化:统一拦截网络异常、token失效、401/500错误,全局处理,减少重复代码。五、进阶面试题(中高级必问)1、HTTP缓存机制?强缓存和协商缓存区别参考答案:HTTP缓存分为强缓存和协商缓存,优先级从高到低。1、强缓存通过Cache-Control、Expires控制,缓存未过期时,直接读取本地缓存,不请求服务器,返回200状态码。Cache-Control优先级高于Expires,支持更细致的缓存时间配置。2、协商缓存强缓存失效后,客户端携带缓存标识(Last-Modified/ETag)请求服务器,服务器对比资源是否更新:-资源未更新:返回304状态码,客户端继续使用本地缓存;-资源已更新:返回200,返回最新数据,更新本地缓存。区别:强缓存不联网,直接读本地;协商缓存需要联网校验,节省流量但会产生一次请求。2、Token失效、401问题
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 杭州西湖 2026 年商超营业员新员工入职基础考卷 招聘 23 人
- 2026年碳交易高级运营专家招聘笔试试卷 招录12人大全
- 2026年环境监测高级技术工程师招聘笔试试卷 招录11人完整题库
- 2026年不动产登记从业人员业务知识测题库及答案
- 2026年畜牧兽医职业资格考试真题解析模拟卷
- 2026年安全员C3类模考试题及答案
- 2026年半导体制造岗位考试题(含答案)
- 2026年变电站值班员专项考核试题及答案
- 2026年病案信息技术师考试题及答案
- 2026年初级社会工作者考试题库及答案(全科)
- 2026-2027学年人教版九年级上学期数学第一次月考模拟考试培优卷(含答案)
- T-SDPEA 0046-2025 燃煤发电机组延寿改造项目可行性研究报告编制导则
- 成人鼻肠管留置与维护技术规范(2025版)(置管流程+并发症处理)
- 【2026版企业安全生产日常台账全套】
- 脑出血患者的呼吸道管理与吸痰技巧
- 呼吸困难及窒息患者的急救护理
- 码头装卸协议书简单
- 国企招聘笔试题及答案-投资专员、投资经理A卷
- 鄂尔多斯市国有资产投资控股集团有限公司招聘笔试真题2024
- 辅导员工作岗位知识培训课件
- 地产尾盘培训知识课件
评论
0/150
提交评论