当前位置: 首页 > 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.lryc.cn/news/619733.html

相关文章:

  • 华为 HCIE 大数据认证中 Linux 命令行的运用及价值
  • 安装Win10怎样跳过欢迎界面
  • 数字货币的去中心化:重构价值交换的底层逻辑​
  • uniapp微信小程序-登录页面验证码的实现(springboot+vue前后端分离)EasyCaptcha验证码 超详细
  • Lombok插件介绍及安装(Eclipse)
  • Python3解释器深度解析与实战教程:从源码到性能优化的全路径探索
  • Day51--图论--99. 岛屿数量(卡码网),100. 岛屿的最大面积(卡码网)
  • 【数据结构】——栈(Stack)的原理与实现
  • 最新Coze(扣子)智能体工作流:用Coze实现「图片生成-视频制作」全自动化,3分钟批量产出爆款内容
  • 自由学习记录(83)
  • 【Unity开发】Unity核心学习(一)
  • 简单了解:CS5803芯片技术解析:HDMI到V-by-One的信号转换
  • BGP特性笔记
  • Cursor替代品:亚马逊出品,Kiro免费使用Claude Sonnet4.0一款更注重流程感的 AI IDE
  • PG靶机 - PayDay
  • lowbit函数
  • 打靶日常-文件上传
  • 《Power Voronoi图的数学原理》
  • latex 中将新的一个section重新从1开始排序,而不是和前面的section继续排序
  • PHP Word 批注处理工程设计方案(基于 `docx` 模板 + 批注驱动)
  • 【Word VBA Zotero 引用宏错误分析与改正指南】【解决[21–23]参考文献格式插入超链接问题】
  • [AI React Web] E2B沙箱 | WebGPU | 组件树 | 智能重构 | 架构异味检测
  • Navicat 询问 AI | 优化 SQL 查询
  • 打造专属 React 脚手架:从 0 到 1 开发 CLI 工具
  • Redis中灵活结合SET和SETEX的方法及多语言工具库实现
  • C#自定义日期时间选择器
  • 用python可视化分析海南自贸港封关运作:动因、影响
  • velero 资源备份测试
  • 达梦数据库常见漏洞及处理方案
  • 计算机网络---用户数据报协议User Datagram Protocol(UDP)