Android HTTP 高频面试题及详细参考答案_第1页
Android HTTP 高频面试题及详细参考答案_第2页
Android HTTP 高频面试题及详细参考答案_第3页
Android HTTP 高频面试题及详细参考答案_第4页
Android HTTP 高频面试题及详细参考答案_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AndroidHTTP高频面试题及详细参考答案适用场景:Android初级/中级开发面试、岗位技能考核、技术复盘,题目均为企业高频提问,内容贴合实际项目开发,侧重原理与实战问题解决。一、基础概念面试题(含答案)1.简述HTTP与HTTPS的核心区别?参考答案:第一,传输协议与端口不同。HTTP是超文本传输协议,明文传输,默认端口80;HTTPS是在HTTP基础上叠加SSL/TLS加密协议,默认端口443。第二,安全性差异极大。HTTP所有数据均为明文传输,中间人可以直接窃听、篡改、伪造数据,存在严重安全漏洞;HTTPS会对传输数据进行加密、校验,杜绝窃听、篡改和冒充问题。第三,性能与成本不同。HTTP无需加密解密运算,请求速度更快、服务器开销小;HTTPS需要握手加密、数据加解密,会产生少量性能损耗,同时服务器需要配置SSL证书,存在一定运维成本。第四,适用场景不同。HTTP仅适用于静态公开资源访问;HTTPS是移动端、网页端主流标准,所有涉及用户隐私、账号支付、业务数据的接口必须使用HTTPS。2.HTTP1.0、HTTP1.1、HTTP2.0三者的核心差异是什么?参考答案:HTTP1.0:默认短连接,每次HTTP请求都会新建TCP连接,请求完成后立即断开,频繁请求会产生大量握手开销,不支持断点续传,头部信息冗余严重。HTTP1.1:是目前移动端最常用的基础版本,默认长连接,支持TCP连接复用,一个连接可处理多次请求;新增断点续传、缓存协商机制、管道化请求,大幅减少连接创建开销,但存在队头阻塞问题,同一连接下前一个请求未完成,后续请求无法执行。HTTP2.0:基于HTTPS,彻底解决队头阻塞,支持多路复用,一个TCP连接可并行处理多个请求;支持头部压缩、服务器主动推送资源、二进制帧传输,传输效率远高于1.1,有效降低移动端网络延迟。3.简述GET和POST请求的核心区别,项目中如何选型?参考答案:1.参数位置不同:GET参数拼接在URL后面,公开可见;POST参数放在请求体中,相对隐蔽。2.数据限制不同:GET受限于浏览器和系统URL长度限制,无法传输大量数据;POST无严格长度限制,可传输大文本、文件等数据。3.缓存机制不同:GET请求默认可被浏览器、网络缓存;POST请求默认不缓存,每次都会发起全新请求。4.语义与幂等性不同:GET用于查询数据,幂等性请求,多次请求结果一致;POST用于提交、新增、修改数据,非幂等,多次提交可能产生重复数据。选型原则:单纯查询列表、详情、静态数据用GET;涉及用户提交数据、登录注册、上传文件、修改业务数据必须用POST。4.什么是HTTP幂等性?常用幂等请求有哪些?参考答案:HTTP幂等性指的是,客户端发起一次或多次相同请求,对服务器资源产生的最终影响完全一致,不会产生重复数据、重复操作。常用幂等请求:GET、PUT、DELETE。GET只查询不修改数据,天然幂等;PUT用于更新指定资源,多次更新结果一致;DELETE删除指定资源,多次删除不会产生额外影响。非幂等请求:POST,多用于新增数据,多次提交会创建多条重复数据,项目中需要做幂等校验避免重复提交。二、Android网络框架实操面试题5.Android中原生HttpURLConnection与OkHttp的区别?项目中为什么优先用OkHttp?参考答案:HttpURLConnection是Android系统原生网络请求类,无需引入第三方依赖,轻量无冗余,但API简陋、封装度低,不支持连接池、自动重试、拦截器,适配复杂网络场景需要大量手写代码,兼容性问题较多。OkHttp是目前Android主流底层网络框架,优势非常明显:自带连接池,实现TCP连接复用,大幅减少频繁请求的握手耗时;支持请求拦截、响应拦截,方便统一处理请求头、日志、token、异常;支持自动重连、超时重试、弱网适配;支持同步、异步请求,适配文件上传下载、断点续传;API简洁稳定,兼容性极佳,Retrofit底层也是基于OkHttp实现。项目选型:简单单次请求可使用原生API,正式业务项目全部使用OkHttp,降低维护成本,适配复杂网络场景。6.Retrofit的工作原理是什么?为什么它是主流网络请求框架?参考答案:Retrofit是基于OkHttp封装的注解式网络请求框架,核心是通过动态代理机制,将开发者定义的接口、注解(GET、POST、请求参数、请求头)解析成标准的HTTP请求,交由OkHttp完成底层网络调度。核心工作流程:1.定义网络请求接口,通过注解配置请求方式、接口地址、参数;2.通过Retrofit构建器实例化接口对象,底层通过动态代理生成接口实现类;3.封装请求参数、请求头、请求体,构建Request对象;4.交由OkHttp发起网络请求;5.接收响应数据,通过转换器解析为实体类返回。主流原因:解耦性强,网络请求与业务代码分离;注解化开发,代码简洁易维护;支持多种数据解析器,适配Gson、Xml等格式;支持拦截器、统一异常处理、请求封装,适配大型项目架构。7.OkHttp拦截器的作用是什么?项目中常用拦截器场景有哪些?参考答案:拦截器是OkHttp的核心机制,可在请求发起前、响应返回后对请求和响应进行统一拦截、修改、处理,实现网络逻辑统一封装,避免重复代码。项目常用场景:1.统一请求头拦截:全局添加Token、设备信息、版本号、时间戳等公共请求头;2.日志拦截:打印完整的请求地址、参数、响应数据、耗时,方便调试排查问题;3.异常拦截:统一处理401、403、500等状态码,实现token过期自动刷新、弹窗提示、退出登录;4.缓存拦截:统一配置网络缓存,实现无网读取本地缓存数据;5.参数统一加密:对所有请求参数统一加密、响应数据统一解密。三、网络异常与性能优化面试题8.Android网络请求常见异常有哪些?分别如何解决?参考答案:1.超时异常:分为连接超时、读取超时、写入超时,多由弱网、服务器卡顿、网络延迟导致。解决:合理配置OkHttp超时时间,弱网环境适当延长超时,增加重试机制。2.证书异常:HTTPS证书过期、不匹配、证书不信任。解决:正式环境使用合法证书,测试环境可适配自定义证书校验,禁止随意忽略证书校验上线。3.401异常:Token过期、失效、未携带token。解决:拦截器统一捕获401状态码,触发自动登录、刷新token逻辑,重新发起请求。4.403异常:权限不足、接口禁止访问。解决:校验用户权限、请求参数合法性,配合后端调整权限配置。5.500异常:服务器代码报错。解决:前端捕获异常,隐藏加载状态,友好提示用户,同步记录日志反馈后端排查。6.网络未连接异常:设备无网络、飞行模式。解决:请求前主动判断网络状态,提前弹窗提示用户。9.如何解决Android网络请求重复提交问题?参考答案:1.按钮防重:点击提交按钮后,立即禁用按钮,请求结束(成功/失败)后再恢复可点击状态,避免快速重复点击。2.请求标记去重:给每个请求添加唯一标识,通过集合记录正在执行的请求,相同请求未完成前禁止重复发起。3.防抖机制:通过延时防抖,短时间内多次相同请求只执行最后一次。4.后端幂等校验:核心业务接口由后端实现幂等,通过唯一订单号、请求ID防止重复数据生成,前后端双重保障。10.简述Android网络请求的性能优化方案?参考答案:1.连接复用:依靠OkHttp连接池,避免频繁创建销毁TCP连接,减少握手耗时。2.合理缓存:配置网络缓存,静态数据、列表数据优先读取缓存,减少重复网络请求,提升加载速度、节省流量。3.请求合并:多个零散接口请求,尽量和后端协商合并为一个接口,减少请求次数。4.超时与重试优化:根据网络场景配置合理超时时间,弱网环境智能重试,避免无效请求阻塞线程。5.避免主线程请求:所有网络请求必须在子线程执行,杜绝ANR异常。6.资源压缩:图片、文件上传前压缩尺寸,减少传输数据量,提升上传速度。四、进阶原理面试题11.什么是TCP三次握手、四次挥手?为什么HTTP基于TCP协议?参考答案:TCP三次握手:是TCP建立可靠连接的过程。第一次客户端向服务器发送连接请求;第二次服务器接收请求并返回确认消息;第三次客户端确认接收,连接正式建立。目的是确认双方收发能力正常,保证连接可靠。TCP四次挥手:是TCP断开连接的过程。客户端、服务器分别主动关闭读写通道,双向确认后彻底断开连接,避免数据残留丢失。HTTP基于TCP的原因:HTTP是应用层协议,本身无传输能力,需要依托TCP传输层协议。TCP面向连接、可靠传输、不丢包、有序传输,能够保证网络请求数据完整送达,适配业务数据传输需求。12.HTTPS的SSL/TLS握手流程是什么?参考答案:1.客户端发起握手请求,携带支持的加密套件、协议版本;2.服务器响应,确认使用的加密套件、协议,返回服务器SSL证书;3.客户端校验证书合法性,验证通过后生成随机密钥,通过服务器公钥加密后发送给服务器;4.服务器通过私钥解密获取随机密钥;5.双方通过协商好的密钥进行对称加密通信,后续所有HTTP数据均加密传输。13.网络请求中Cookie、Token、Session的区别与使用场景?参考答案:Cookie:客户端本地存储的小型文本数据,由服务器下发,自动携带在请求头中,存储量小、安全性低,多用于网页端,移动端极少单独使用。Session:存储在服务器端的用户会话信息,通过Cookie传递sessionId识别用户,服务器压力大,不适合移动端分布式项目。Token:后端生成的用户身份令牌,字符串格式,无状态、服务器无需存储,移动端登录后获取Token,后续所有请求携带Token完成身份校验,是目前Android项目主流身份校验方式。场景:移动端统一使用Token认证;传统网页端常用Cookie+Session组合。五、实战场景问答题14.项目中如何实现Token自动刷新机制?参考答案:基于OkHttp拦截器实现全局自动刷新,流程如下:1.所有网络请求统一在请求拦截器中携带Token;2.响应拦截器捕获接口401、token过期状态码;3.触发刷新token接口,使用refreshToken请求新的有效Token;4.刷新成功后,本地保存最新Token,重新发起本次失败的请求;5.刷新失败(refreshToken过期),清空本地登录信息,跳转登录页面;6.加锁处理,避免多请求同时触发多次刷新

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论