Android第三次面试总结之网络篇补充
一、网络模型:OSI 七层 vs TCP/IP 四层(必考点)
1. 分层模型对比
OSI 七层模型 | TCP/IP 四层模型 | 核心功能 | Android 相关场景 |
---|---|---|---|
应用层(7 层) | 应用层 | 定义数据格式(HTTP/HTTPS/FTP/API) | OkHttp/Retrofit 封装的网络请求(如 JSON 解析、Header 处理) |
表示层(6 层) | - | 数据加密、压缩(TLS/SSL 属于此层) | HTTPS 通信时的证书校验、数据加密(Android 需处理 SSL Pinning) |
会话层(5 层) | - | 建立 / 管理会话(如 TCP 连接状态) | TCP 长连接保持(如 HTTP 1.1 的Connection: keep-alive ) |
传输层(4 层) | 传输层 | 端到端通信(TCP/UDP) | 网络请求底层选择(TCP 用于可靠传输如接口调用,UDP 用于实时通信如 VoIP) |
网络层(3 层) | 网络层 | 路由寻址(IP 协议、ARP 协议) | IP 地址获取(WifiManager.getDhcpInfo() )、子网划分 |
数据链路层(2 层) | 数据链路层 | MAC 寻址、差错校验(以太网协议) | Wi-Fi / 蓝牙的 MAC 地址识别(getMacAddress() 在 Android 6.0 + 需权限) |
物理层(1 层) | 物理层 | 二进制数据传输(光纤 / 电磁波) | 网络类型判断(Wi-Fi/4G / 蓝牙,ConnectivityManager ) |
2. 面试题:为什么网络要分层设计?
- 答:解耦复杂度(每层专注单一功能)、标准化接口(跨平台兼容)、便于故障定位(如 HTTP 404 定位到应用层问题)。
- Android 实例:OkHttp 底层用 Socket(传输层),上层封装 HTTP(应用层),分层设计让开发者无需关心 TCP 握手细节。
二、核心协议深度解析(高频考点)
1. 传输层:TCP vs UDP(必问)
特性 | TCP | UDP | Android 典型场景 |
---|---|---|---|
连接方式 | 面向连接(三次握手 / 四次挥手) | 无连接(即发即弃) | TCP:接口请求、文件下载;UDP:视频通话、IM 心跳包 |
可靠性 | 可靠(确认应答、重传机制) | 不可靠(无重传,需上层处理) | TCP 通过HttpURLConnection 实现重试策略 |
传输效率 | 低(额外控制报文) | 高(无额外开销) | UDP 适合实时性要求高的场景(如直播推流) |
流量控制 | 滑动窗口、拥塞控制 | 无 | TCP 拥塞控制影响网络优化(如慢启动算法) |
经典问题:
-
三次握手过程
- 客户端发 SYN 包(SEQ=x,请求连接),进入 SYN_SENT;
- 服务端回复 SYN+ACK(SEQ=y,ACK=x+1),进入 SYN_RCVD;
- 客户端回复 ACK(ACK=y+1),进入 ESTABLISHED。
为什么是三次? 两次无法确认双方收发能力(如服务端 ACK 丢失时客户端无法知晓)。
-
四次挥手原因:
服务端收到 FIN 后,可能仍有数据未发完,需先 ACK 确认,待数据发完再发 FIN,故 ACK 和 FIN 分开发送(两次挥手)。
2. 应用层:HTTP/HTTPS(核心考点)
(1)HTTP 1.1 vs 2.0 vs 3.0(QUIC)
特性 | 1.1 | 2.0(基于 SPDY) | 3.0(QUIC,基于 UDP) |
---|---|---|---|
连接方式 | 短连接(默认)/ 长连接 | 长连接(强制) | 无连接(基于 UDP,0RTT 建连) |
多路复用 | 管道化(有队头阻塞) | 二进制分帧(无阻塞) | 多路复用 + 流量控制 |
头部压缩 | 无(明文) | HPACK 算法 | 类似 2.0,但基于 UDP 更高效 |
Android 支持 | 全版本 | OkHttp 3.0 + 支持 | Android 10 + 部分支持 |
(2)HTTPS 加密原理(面试必问)
- 两次加密结合:
- 非对称加密(TLS 握手阶段):客户端用服务端公钥加密随机生成的对称密钥(如 AES);
- 对称加密(数据传输阶段):用上述对称密钥加密实际数据(效率高)。
- 证书校验流程:
客户端验证证书链(根证书→中间证书→服务器证书),防止中间人攻击(Android 可通过SSLSocketFactory
自定义校验)。
(3)HTTP 状态码(实战考点)
- 301/302:永久 / 临时重定向,Android 中 OkHttp 默认跟随重定向(可通过
followRedirects()
禁用); - 401/403:认证失败 / 权限不足,需处理 Token 刷新(如 Interceptor 中捕获后重新登录);
- 500 系列:服务端错误,需实现重试机制(结合 Retrofit 的
RetryCallAdapter
)。
3. 网络层:IP/ARP 协议(易忽略但重要)
- IP 地址 vs MAC 地址:
- IP(网络层):逻辑地址,动态分配(如 DHCP 获取),用于跨子网寻址;
- MAC(数据链路层):物理地址,固化在网卡,用于局域网内寻址。
- ARP 协议:通过 IP 地址获取 MAC 地址(如 Android 设备连接 Wi-Fi 时,用 ARP 解析路由器 MAC)。
三、Android 网络开发深度结合(面试重点)
1. 网络库底层原理(OkHttp 为例)
- 拦截器链:
RealInterceptorChain
按顺序执行RetryAndFollowUpInterceptor
(重试)→BridgeInterceptor
(处理 Header/Cookie)→CacheInterceptor
(缓存策略)→ConnectInterceptor
(建立 TCP 连接)→ 网络请求。 - Connection Pool:复用 TCP 连接(默认保持 5 分钟,最多 5 个空闲连接),减少三次握手开销。
2. 网络优化实战(面试高频)
- 缓存策略:
- 强制缓存(
Cache-Control: max-age
):直接读本地,不发请求; - 协商缓存(
ETag/Last-Modified
):发请求验证,304 状态码返回缓存; - OkHttp 集成
Cache
(需配置CacheInterceptor
)。
- 强制缓存(
- 流量压缩:GZip/Brotli 压缩请求 / 响应体(OkHttp 默认支持,需在 Header 加
Accept-Encoding: gzip
)。 - 避免队头阻塞:HTTP 2.0 多路复用(OkHttp 默认开启),或拆分为多个独立接口。
3. 网络安全(必问)
- SSL Pinning:在 Android 中固定服务端证书,防止中间人攻击(通过
CertificatePinner
实现); - HTTPS 双向认证:客户端也需提供证书(如企业内网 API),通过
KeyStore
加载客户端证书。
4. 系统级网络管理
- 网络类型检测:
ConnectivityManager.getNetworkInfo()
判断 Wi-Fi / 移动网络,Android 10 + 推荐用NetworkCapabilities
(区分 5G/4G); - 后台网络限制:Android 9 + 的
Background Execution Limits
,需用WorkManager/JobScheduler
处理后台网络任务。
四、面试真题与进阶思考
1. 经典问题:TCP 如何保证可靠性?
- 答:序列号(标识数据顺序)、确认应答(ACK 机制)、超时重传(RTO 动态计算)、流量控制(滑动窗口)、拥塞控制(慢启动→拥塞避免→快重传→快恢复)。
- Android 关联:OkHttp 的
RetryAndFollowUpInterceptor
实现超时重传,需注意 TCP 重传与应用层重试的区别(避免重复提交)。
2. 难题:HTTPS 握手过程中,客户端如何验证证书?
- 答:
- 检查证书有效期、主机名是否匹配;
- 用根证书(系统内置或自定义)解密证书签名,对比签名哈希值;
- 递归验证证书链直到根证书(Android 中可通过
X509TrustManager
自定义校验逻辑)。
3. 开放题:如何设计一个高可用的 Android 网络请求库?
- 思路:
- 分层设计:底层用 OkHttp/Socket,中层封装重试、缓存、序列化(如 Gson/Moshi),上层提供响应式接口(协程 / RxJava);
- 容错机制:超时重试、网络切换重试(如从 4G 切 Wi-Fi 时重新请求)、熔断机制(多次失败后暂时拒绝请求);
- 性能优化:HTTP 2.0 支持、连接池复用、流量压缩、按需选择 TCP/UDP(如文件上传用 TCP,实时日志用 UDP)。
4.描述一次完整的 HTTP 请求流程(结合 Android)
-
流程步骤:
- DNS 解析:客户端通过 DNS 服务器将域名(如
www.example.com
)解析为 IP 地址(需处理缓存和超时)。 - TCP 连接建立:三次握手建立可靠连接(SYN→SYN+ACK→ACK),Android 中通过
Socket
或 OkHttp 实现。 - 数据传输:
- 应用层:构造 HTTP 请求(如
GET /api/data HTTP/1.1
),通过 OkHttp/Retrofit 发送。 - 传输层:TCP 分段传输,Android 中需处理超时重传(OkHttp 默认超时 10 秒)。
- 网络层:IP 路由选择,Android 通过
ConnectivityManager
获取网络类型(WiFi / 移动网络)。
- 应用层:构造 HTTP 请求(如
- 响应处理:服务器返回 HTTP 响应(如
200 OK
),客户端解析 JSON/XML 数据(使用 Gson/Moshi)。 - 连接关闭:四次挥手断开 TCP 连接,Android 中需注意
Socket
及时关闭避免泄漏。
- DNS 解析:客户端通过 DNS 服务器将域名(如
-
面试陷阱:
- 若 DNS 解析失败,Android 会抛出
UnknownHostException
,需在try-catch
中处理。 - TCP 连接复用(HTTP Keep-Alive)可减少三次握手开销,OkHttp 默认开启连接池。
- 若 DNS 解析失败,Android 会抛出
知识扩展
TCP 可靠传输机制(面试高频原理题)
- 序列号与确认应答:如何通过 seq/ack 确保数据按序到达?
- 重传机制:超时重传(RTO 动态计算)、快速重传(三次冗余 ACK 触发)的区别。
- 滑动窗口:流量控制的核心,窗口大小动态调整,与 SACK(选择性确认)的结合优化。
- 拥塞控制:慢启动(cwnd 指数增长)→拥塞避免(线性增长)→快恢复(ssthresh 调整)的完整流程,Android 网络请求库(如 OkHttp)如何实现拥塞控制。
UDP 与 Android 实时通信
1. UDP 特性与不可靠性解决方案
- 优点:无连接、低延迟、适合实时场景(如视频通话、IM 消息);
- 缺点:丢包、无序、无流量控制,需应用层实现:
- 序列号 + ACK 确认机制(类似简化版 TCP);
- 重传策略(超时重传 + 最大重传次数限制);
- 拥塞控制(如 Google 的 CongeSTion Control for UDP)。
- Android 中的 UDP 使用:
DatagramSocket
的阻塞模式处理(需子线程),分片问题(MTU 通常 1500 字节,超过需手动分片重组)。
2. UDP vs TCP 应用场景对比
- 必问面试题:“为什么 DNS 用 UDP?”(响应快,容忍偶尔丢包,可重试);“微信视频通话用什么协议?”(UDP 为主,结合 NAT 穿透与 FEC 前向纠错)。
面试问题:
TCP 为什么是可靠的?UDP 如何实现可靠传输?
答:TCP 通过序列号、确认应答、重传、滑动窗口、拥塞控制实现可靠;UDP 需在应用层添加 ACK 机制、重传策略、流量控制(如 GTP-U 协议在 5G 中的应用)。
HTTPS 比 HTTP 慢的原因?如何优化?
答:慢在 TLS 握手(1-RTT 或 2-RTT)、加密计算;优化手段:启用 HTTP3.0(0-RTT)、会话重用(Session ID/Session Ticket)、压缩证书(OCSP Stapling)。
核心知识点脑图
网络模型与协议
├─ 分层模型(OSI/TCP/IP)
│ ├─ 各层职责与Android对应场景
│ └─ 分层设计优势(解耦/标准化)
├─ 核心协议
│ ├─ 传输层(TCP三次握手/四次挥手,UDP应用场景)
│ ├─ 应用层(HTTP/HTTPS原理,版本区别,状态码处理)
│ └─ 网络层(IP/ARP,MAC与IP区别)
├─ Android实战
│ ├─ 网络库原理(OkHttp拦截器、连接池)
│ ├─ 优化(缓存、压缩、多路复用)
│ └─ 安全与系统适配(证书校验、后台限制)
└─ 面试高频题├─ TCP可靠性/UDP优缺点├─ HTTPS加密流程与证书校验└─ 网络优化方案设计
相关文章:
Android第三次面试总结之网络篇补充
一、网络模型:OSI 七层 vs TCP/IP 四层(必考点) 1. 分层模型对比 OSI 七层模型TCP/IP 四层模型核心功能Android 相关场景应用层(7 层)应用层定义数据格式(HTTP/HTTPS/FTP/API)OkHttp/Retrofit…...
网络世界的“快递站”:深入浅出OSI七层模型
网络世界的“快递站”:OSI七层模型的奇妙旅程 为什么需要OSI七层模型? 想象一下,你正在给朋友寄一份生日礼物。你需要先包装礼物、贴上地址标签、选择快递公司、支付运费,最后把包裹交给快递员。这个过程看似简单,但…...
使用 Apache POI 生成包含文本和图片的 Word 文档
一、概述 在实际开发场景中,我们经常需要自动生成包含文本和图片的 Word 文档。本示例借助 Apache POI 库,实现了向 Word 文档中插入文本和图片的功能。代码会循环插入多次文本和同一张图片,并且对图片进行等比缩放处理,以保证图片…...

TransmittableThreadLocal:穿透线程边界的上下文传递艺术
文章目录 前言一、如何线程上下文传递1.1 ThreadLocal单线程1.2 InheritableThreadLocal的继承困境1.3 TTL的时空折叠术 二、TTL核心设计解析2.1 时空快照机制2.2 装饰器模式2.3 采用自动清理机制 三、设计思想启示四、实践启示录结语 前言 在并发编程领域,线程上下…...

基于STM32的甲醛检测
一、制作目标 以正点原子的miniSTM32F103RCT6开发板为主控,使用甲醛传感器检测环境空气中的甲醛含量(以mg/m^3为单位)、C02含量(以ppm为单位)和总有机挥发物含量TVOC(以mg/m^3为单位)在OLED显示…...

洛图报告中的 FSHD 是什么?—— 解密九天画芯推动的三色光源显示技术
目录 一、洛图报告新焦点:FSHD 为何成为显示产业重要突破方向? (一)洛图报告核心结论:从技术突围到产业重构 二、技术解析:FSHD 如何重构显示底层逻辑? (一)物理架构…...
含锡电镀废水深度净化技术体系解析化利用的全流程优化
一、含锡电镀废水的产生机理与污染特征 含锡电镀废水主要形成于三个关键生产环节:镀槽液定期置换排放、镀件后处理清洗水以及车间地面冲洗水。其中,清洗水作为电镀工艺的附属产物,承担着清除镀层表面残留镀液的重要功能;冲刷废水则…...

【MySQL】事务(重点)
目录 一、什么是事务: 二、事务的前置知识了解 引擎是否支持事务 事务的提交方式 事务操作的前置准备: 三、事务回滚: 四、事务崩溃: 原子性: 持久性: 五、自动提交和手动提交: 六、…...

Linux:线程同步与互斥
目录 线程互斥 锁 初始化 销毁 加锁 解锁 线程同步 条件变量 初始化 销毁 等待条件满足 唤醒等待 pthread_cond_signal pthread_cond_broadcast 生产者消费者模型 3种关系 2种角色 1个交易场所 POSIX信号量 初始化 销毁 等待 发布 线程互斥 互斥相关…...

每天五分钟机器学习:拉格朗日对偶函数
本文重点 在数学优化领域,拉格朗日对偶函数作为连接原始约束问题与对偶问题的核心纽带,展现了将复杂约束优化转化为无约束优化的方式。 数学表达 原始问题建模 拉格朗日函数构造 此时的目标就是: 先假设w为常数,让拉格朗日函数对橙子变量λ求极大值,消掉λ之后,在对λ求…...

AutoGen 框架解析:微软开源的多人 Agent 协作新范式
一、引言 在大语言模型(LLM)快速发展的今天,复杂任务的自动化协作需求日益增长。微软开源的AutoGen 框架(GitHub Star 超 10 万)提供了一种基于多智能体对话的协作范式,通过自然语言交互实现多角色 Agent …...

【bibtex4word】在Word中高效转换bib参考文献,Texlive环境安装bibtex4word插件
前言 现已退出科研界,本人水货一个。希望帮到有缘人 本篇关于如何将latex环境中的参考文献bib文件转化为word,和一些踩坑记录。 可以看下面的资料进行配置,后面的文字是这些资料的补充说明。 参考文章:https://blog.csdn.net/g…...
Listremove数据时报错:Caused by: java.lang.UnsupportedOperationException
看了二哥的foreach陷阱后,自己也遇见了需要循环删除元素的情况,立马想到了当时自己阴差阳错的避开所有坑的解决方式:先倒序遍历,再删除。之前好使,但是这次不好使了,报错Caused by: java.lang.UnsupportedO…...
k8s node 报IPVS no destination available
在 Kubernetes 集群中,IPVS no destination available 错误通常表示 kube-proxy(IPVS 模式)无法为 Service 找到可用的后端 Pod。这会导致流量无法正确转发,影响服务可用性。以下是详细的排查和解决方法: 一、错误原因…...

单片机-STM32部分:10-2、逻辑分析仪
飞书文档https://x509p6c8to.feishu.cn/wiki/VrdkwVzOnifH8xktu3Bcuc4Enie 安装包如下:根据自己的系统选择,目前这个工具只有window版本哦 安装方法比较简单,都按默认下一步即可,注意不要安装到中文路径哦。 其余部分参考飞书文档…...

计算机网络基础科普
IP地址是计算机网络中标识设备的唯一地址 IPv4(32位)IPv6(128位) 1.IPv4(32位) 简介:IPv4(Internet Protocol version 4)是互联网协议(IP)的…...

阿里云CDN的源站配置:权重的详解
在阿里云CDN中为静态资源域名cdn.example.com配置源站时,权重设置需根据实际架构和目标灵活调整。以下是具体建议和配置步骤: 一、权重的核心作用 在阿里云CDN中,源站权重用于控制多个源站之间的流量分配比例,适用于以下场景&…...
《Python星球日记》 第37天:向量与矩阵进阶
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏:《Python星球日记》,限时特价订阅中ing 目录 一、特征值与特征向量1. 基本概念2. 如何找到特征值和特征向量3. 特征值和特征向量的几何意义二…...

虚幻引擎5-Unreal Engine笔记之显卡环境设置使开发流畅
虚幻引擎5-Unreal Engine笔记之显卡环境设置使开发流畅 code review! 文章目录 虚幻引擎5-Unreal Engine笔记之显卡环境设置使开发流畅1.电源管理2.显卡优先设置3.拯救者支持FnQ性能模式切换,建议开发前切至“野兽模式”或高性能模式。4.NVIDIA 驱动设置5.VS2022中…...

【Linux】冯诺依曼体系结构和操作系统的理解
目录 冯诺依曼体系结构一个例子来深入理解 初识操作系统操作系统的作用设计操作系统的目的操作系统之上和之下分别有啥 管理的精髓,先描述,再组织 冯诺依曼体系结构 我们知道,计算机这个东西发明出来就是帮助人们快速解决问题的。那如果我们想…...
如何构建容器镜像并将其推送到极狐GitLab容器镜像库?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 构建容器镜像并将其推送到容器镜像库 (BASIC ALL) 在构建和推送容器镜像之前,您必须通过容器镜像库的身份验证。 …...

计网学习笔记———网络
🌿网络是泛化的概念 网络是泛化的概念 🍂泛化理解 网络的概念在生活中无处不在举例:社交网络、电话网路、电网、计算机网络 🌿网络的定义 定义: 离散的个体通过通讯手段连成群体,实现资源的共享与交流、个…...
计算机三大主流操作系统的前世今生 - Linux|macOS|Windows
全文目录 1 引言2 起源之路2.1 Linux 起源2.2 macOS 起源2.3 Windows 起源 3 综合解析3.1 Linux系统综合解析3.1.1 系统定义与核心架构3.1.2 发展历程3.1.3 核心特点3.1.4 主流发行版3.1.5 应用场景 3.2 macOS系统综合解析3.2.1 系统定义与核心架构3.2.2 发展历程3.2.3 核心特点…...

数据集-目标检测系列- 烟雾 检测数据集 smoke >> DataBall
数据集-目标检测系列- 消防 浓烟 检测数据集 smoke>> DataBall 数据集-目标检测系列- 烟雾 检测数据集 smoke >> DataBall * 相关项目 1)数据集可视化项目:gitcode: https://gitcode.com/DataBall/DataBall-detections-10…...

【单片机毕业设计15-基于stm32c8t6的智能酒窖系统设计】
【单片机毕业设计15-基于stm32c8t6的智能酒窖系统设计】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 🔥这里是小殷学长,单片机毕业设计篇15-基于stm32c8t6的智能酒窖系统设计 🧿创作不易,拒绝白嫖可私 一、功能介绍 ----…...

【Bluedroid】蓝牙 HID 设备服务注册流程源码解析:从初始化到 SDP 记录构建
本文围绕蓝牙 HID(人机接口设备)服务注册流程,详细解析从 HID 服务启用、设备初始化、L2CAP 通道注册到 SDP(服务发现协议)记录构建的全流程。通过分析关键函数如btif_hd_service_registration、BTA_HdEnable、HID_Dev…...

TWAS、GWAS、FUSION
全基因组关联研究(GWAS,Genome-Wide Association Study)是一种统计学方法,用于在全基因组水平上识别与特定性状或疾病相关的遗传变异。虽然GWAS可以识别与性状相关的遗传信号,但它并不直接揭示这些遗传变异如何影响生物…...

测试一下多模态提取图片中文字的能力
测试一下多模态提取图片中文字的能力 原图片, 提取结果, 各位嘉宾,大家好!明天(5月11日)9:00-12:00将在大连市高新园区星火亚庭32号A座一层二楼设置咖啡厅等六个小水活动。请大家积极安排时间,…...

(51单片机)LCD显示红外遥控相关数字(Delay延时函数)(LCD1602教程)(Int0和Timer0外部中断教程)(IR红外遥控模块教程)
前言: 本次Timer0模块改装了一下,注意!!!今天只是简单的实现一下,明天用次功能显示遥控密码锁 演示视频: 在审核 源代码: 如上图将9个文放在Keli5 中即可,然后烧录在…...

物品识别 树莓派4 YOLO v11
让树莓派可以识别身边的一些物品 python3 -m venv --system-site-packages yolooo source yolooo/bin/activate 树莓派换清华源,bookworm 下面这条命令将安装 OpenCV 以及运行 YOLO 所需的基础设施 pip install ultralytics 还会安装大量其他软件包,…...