当前位置: 首页 > news >正文

【KO】Android 网络相关面试题

下面结合 Android 开发场景,对“网络相关面试题”的深度细化版回答(含代码、框架关联、实际应用),更贴近中高级 Android 面试考察方向:

一、HTTP/HTTPS

1. HTTP 核心细节(结合 Android)
  • 请求结构:Android 中通过 HttpURLConnection 或 OkHttp 构造请求,包含 请求行GET /api/user HTTP/1.1 )、请求头Headers,如 User-AgentCookie )、请求体(POST 时传参,如表单、JSON )。
  • 典型问题
    • 明文传输风险:Android 9.0 后默认禁止 HTTP 明文请求(需在 AndroidManifest.xml 配置 android:usesCleartextTraffic="true" 绕过,但不建议生产环境用 )。
    • 连接复用:HTTP 1.1 支持 长连接Connection: keep-alive ),减少 TCP 握手开销,OkHttp 内部默认启用连接池优化。
2. HTTPS 原理与 Android 实践
  • 加密流程(面试必问):

    • 客户端发起 HTTPS 请求,服务端返回 数字证书(含公钥、域名、有效期等 )。
    • 客户端验证证书(Android 系统内置 CA 根证书,或 App 自定义证书校验 ),若验证通过,生成 随机对称密钥,用服务端公钥加密后传给服务端。
    • 后续数据用 对称密钥加密(效率高 ),实现安全传输。
  • Android 常见场景

    • 证书锁定(Certificate Pinning):为防止证书劫持,App 可固定信任的证书(如 OkHttp 中配置 CertificatePinner ):
      CertificatePinner pinner = new CertificatePinner.Builder().add("your.domain.com", "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=").build();
      OkHttpClient client = new OkHttpClient.Builder().certificatePinner(pinner).build();
      
    • 自签名证书处理:调试时服务端用自签名证书,需在 Android 中自定义信任(通过 SSLSocketFactory 加载本地证书,或忽略校验(仅调试用,生产禁用 ))。

二、TCP/UDP

1. TCP 深度解析(结合 Android 网络框架)
  • 三次握手 & 四次挥手(重点):

    • 三次握手SYN -> SYN+ACK -> ACK,建立可靠连接。Android 中 OkHttp 发起请求时,底层 Socket 会经历此过程,可通过抓包工具(如 Wireshark )观察。
    • 四次挥手FIN -> ACK -> FIN -> ACK,断开连接时需双向确认。若一方异常(如服务端崩溃 ),可能触发 超时重传RST 复位
  • Android 中的 TCP 应用

    • OkHttp 底层基于 TCP 实现 HTTP 协议,通过 连接池 复用 TCP 连接(默认最多 5 个空闲连接,保持 5 分钟 ),减少握手开销。
    • 自定义 TCP 通信(如 Socket 长连接 ):需处理 心跳机制(定时发空包,维持连接,防止被网关断开 )、重连策略(网络切换、连接超时后自动重试 )。
2. UDP 实践与 Android 场景
  • 典型应用

    • 音视频传输:如 WebRTC 在 Android 中基于 UDP 传输实时流,结合 SRTP 加密RTCP 反馈丢包重传,平衡实时性与可靠性。
    • 广播/组播:Android 中通过 MulticastSocket 实现局域网设备发现(如 DLNA 投屏 ),但需申请 CHANGE_NETWORK_STATE 等权限。
  • 可靠性优化

    • UDP 本身不可靠,但可在应用层实现 简单确认重传(如给 UDP 包加序列号,接收方反馈 ACK,发送方超时重传 )。
    • 结合 QUIC 协议(基于 UDP ):Google 推广的协议,Android 10+ 已支持,具备 TCP 级可靠性(拥塞控制、重传 )+ UDP 低延迟,OkHttp 未来可能深度集成。

</

http://www.dtcms.com/a/330092.html

相关文章:

  • 326. 3 的幂
  • 不用费心备份操作的实验记录本
  • VUE基础笔记
  • 【AI学习100天】Day07 加入AI社区,通往AGI之路
  • C# 反射和特性(获取Type对象)
  • 【C#】利用数组实现大数数据结构
  • Spring Cloud系列— Alibaba Sentinel限流
  • Pycharm现有conda环境有对应env,但是添加后没反应
  • 《人形机器人的觉醒:技术革命与碳基未来》——生物混合肌肉:技术原理和进展、比较优势和不足、材料技术要求及材料限制
  • 递归函数与 lambda 函数:用法详解与实践
  • Synchronized锁的使用方式
  • three.js学习记录(鼠标控制)
  • Linux 计划任务
  • 【web站点安全开发】任务3:网页开发的骨架HTML与美容术CSS
  • STM32学习笔记10—DMA
  • JSON索引香港VPS:高效数据处理的完美解决方案
  • JDK17下载与安装图文教程(保姆级教程)
  • 《汇编语言:基于X86处理器》第13章 复习题和编程练习
  • VerIF
  • 【R语言】RStudio 中的 Source on Save、Run、Source 辨析
  • [系统架构设计师]系统架构基础知识(一)
  • MySQL表约束
  • 关于大学计算机专业的课程的一些看法
  • windows通过共享网络上网
  • JavaWeb之响应
  • 使用BeautifulReport让自动化测试报告一键生成
  • 开源组件的“暗礁”:第三方库中的输入与边界风险治理
  • 「数据获取」《广西调查年鉴》(2007-2024)(2009缺失)(获取方式看绑定的资源)
  • GISBox工具处理:将高斯泼溅模型导出为3DTiles
  • 【15】Transformers快速入门:添加自定义 Token