Android / IoT 面试复盘总结:从 MQTT、TLS 到 JWT 权限体系(标准答案 + 工程理解 + 延伸知识链)
最近经历了一场偏 Android / IoT 方向的技术面试。
整个过程下来,最大的感受其实不是:
“完全不会”而是:
“很多东西做过,但没有形成标准化表达体系”。
尤其:
- MQTT
- QoS
- TLS
- 401 / 403
- JWT
- 生命周期
- 地图实时点位
这些问题。
其实本质上已经开始进入:
“系统工程能力 + 企业级架构思维”
这一层了。
所以这篇文章,我想不只是简单记录面试问题。
而是:
用“标准答案 + 工程理解 + 延伸知识链”
的方式,把这次面试真正串成一个体系。
一、MQTT 与 MQTTS
标准答案
MQTT
MQTT 是轻量级发布订阅协议, 适用于 IoT、实时通信、长连接场景。 MQTTS 本质是: MQTT + TLS/SSL 类似: HTTP → HTTPS MQTT → MQTTS工程理解
协议栈结构
MQTT: TCP ↓ MQTT MQTTS: TCP ↓ TLS ↓ MQTTTLS 解决的问题
1. 数据加密 2. 防抓包 3. 防中间人攻击 4. 防数据篡改为什么 IoT 必须加密
比如:
- 智能门锁
- 割草机器人
- 工业控制
- 远程设备控制
如果 MQTT 明文:
{ "cmd":"unlock" }抓包即可看到。
公网环境非常危险。
延伸知识链
TCP → TLS → HTTPS / MQTTS / WSS → 企业安全通信二、MQTT QoS
标准答案
QoS 是 MQTT 消息可靠性等级。 QoS0: 最多一次,可能丢失。 QoS1: 至少一次,不丢但可能重复。 QoS2: 只有一次,不丢不重复。工程理解
实际项目场景
QoS0
适合:
- 状态同步
- 高频位置
- 电量
因为:
允许偶尔丢包但性能最高。
QoS1
适合:
- 控制命令
- OTA
- 开关机
因为:
控制命令不能丢企业最常用。
QoS2
一般较少使用。
因为:
可靠性最高 但性能最差延伸知识链
MQTT → QoS → ACK → 消息重试 → 幂等 → 网络可靠性三、TLS 是什么
标准答案
Transport Layer Security
TLS 是传输层安全协议, 用于对网络通信进行加密。核心:
数据加密 身份认证 防篡改工程理解
TLS 本质
给 TCP 通信增加了一层安全保护壳。结构:
应用层协议 (HTTP / MQTT / WebSocket) ↓ TLS ↓ TCPTLS 握手过程
客户端: 我要安全通信 服务端: 这是我的证书 客户端: 验证证书是否合法 然后: 交换密钥 建立加密通道后续数据:
全部加密延伸知识链
TLS → HTTPS → MQTTS → WSS → CA证书 → 非对称加密 → 对称加密四、401 与 403
标准答案
401: 未认证(没登录、Token失效) 403: 已认证,但无权限经典理解:
401: “你是谁?” 403: “我知道你是谁,但你不配”工程理解
JWT 请求流程
请求来了 ↓ 有没有 Token? ↓ 没有 → 401 Token 合法吗? ↓ 不合法 → 401 身份解析成功 ↓ 有没有权限? ↓ 没有 → 403 有权限 ↓ 200Android / 前端处理
401
跳转登录页因为:
登录失效403
提示权限不足因为:
账号有效 但无权限延伸知识链
JWT → 拦截器 → ThreadLocal → Spring Security → RBAC → OAuth2五、HTTP 状态码体系
标准答案
2XX:成功
200 OK 请求成功 201 Created 创建成功 204 No Content 成功但无返回体4XX:客户端错误
400 Bad Request 请求参数错误 401 Unauthorized 未认证 403 Forbidden 无权限 404 Not Found 资源不存在 405 Method Not Allowed 请求方式错误核心:
客户端请求有问题5XX:服务端错误
500 Internal Server Error 服务器异常 502 Bad Gateway 网关异常 503 Service Unavailable 服务不可用 504 Gateway Timeout 网关超时核心:
服务端处理失败工程理解
为什么要区分 4XX / 5XX
4XX: 客户端问题 5XX: 服务端问题前后端联调时非常重要。
延伸知识链
HTTP → RESTful → Gateway → 微服务 → Spring Cloud六、长登录 / Token 刷新
标准答案
企业里通常采用双 Token 机制: AccessToken: 接口访问, 有效期较短。 RefreshToken: 用于刷新 AccessToken, 有效期较长。流程
AccessToken 过期 → 401 → Interceptor → RefreshToken → 获取新 AccessToken → 重试请求工程理解
为什么不用永久 Token
Token 泄露风险太高所以:
AccessToken 短期 RefreshToken 长期更安全。
延伸知识链
JWT → RefreshToken → Redis → 单点登录 → Token黑名单七、Activity 生命周期与屏幕旋转
标准答案
Android
屏幕旋转本质是: Configuration Change 会导致: Activity 重建生命周期
onPause onStop onDestroy onCreate onStart onResume工程理解
常见解决方案
ViewModel
Android Jetpack ViewModel
保存业务状态。
onSaveInstanceState
保存 UI 临时状态。
rememberSaveable
Jetpack Compose
Compose 状态恢复。
延伸知识链
生命周期 → Configuration Change → ViewModel → SavedStateHandle → Compose状态管理八、多态与继承
标准答案
多态本质是: 同一接口, 不同对象表现出不同实现。Java 中:
- 继承
- 接口实现
- 方法重写
实现运行时多态。
工程理解
底层本质
C++
vtable / vptr 动态绑定Java
JVM 虚方法派发为什么框架大量使用多态
比如:
- Spring
- Android 回调
- AOP
- MQTT Callback
本质都依赖:
接口多态延伸知识链
OOP → 动态绑定 → AOP → 动态代理 → Spring九、地图边界绘制
标准答案
地图边界本质是一组经纬度点。通常通过:
Polyline Polygon进行绘制。
工程理解
边界丢失原因
1. 点顺序错误 2. Polygon 未闭合 3. MultiPolygon 未处理 4. 坐标系问题 5. 点过多延伸知识链
GIS → GeoJSON → Polygon → MultiPolygon → GCJ02 / WGS84十、地图绘制优化
标准答案
地图绘制优化常见方案: 1. 点位抽稀 2. Marker 聚合 3. LOD 4. 视野内渲染 5. Bitmap 缓存 6. 分段绘制工程理解
为什么要优化
因为:
地图点位过多 会导致: CPU/GPU 压力过高出现:
- 卡顿
- 掉帧
- OOM
延伸知识链
GIS → GPU渲染 → LOD → 轨迹优化 → 实时地图十一、实时点位乱序 / 跳点
标准答案
实时点位场景下, 网络延迟可能导致旧数据后到。 通常会增加: timestamp 或 sequenceId。 客户端只接受更新的数据, 旧数据直接丢弃。工程理解
Marker 不要瞬移
应该:
插值动画实现:
平滑移动异常点过滤
根据:
- 速度
- 距离
过滤 GPS 漂移点。
延伸知识链
实时轨迹 → GPS漂移 → 插值算法 → 实时数据流十二、本次面试暴露的问题
核心问题
不是缺项目经验, 而是缺标准化面试表达。典型问题
1. 缺标准定义
容易直接讲本质。
2. 缺术语
比如:
TLS QoS0/1/2 RefreshToken Configuration Change3. 输出不够结构化
容易:
想到哪说到哪十三、后续学习建议
第一阶段(最高优先级)
JWT 与权限认证体系
重点:
JWT → AccessToken → RefreshToken → Spring Security → RBAC → OAuth2第二阶段
MQTT 与实时通信体系
重点:
MQTT → QoS → TLS → 长连接 → Netty → Reactor第三阶段
Android 状态管理
重点:
Configuration Change → ViewModel → SavedStateHandle → rememberSaveable第四阶段
地图 / GIS 体系
重点:
Polyline → Polygon → MultiPolygon → GeoJSON → Marker聚合 → LOD十四、最终总结
这次面试:
并不是:
完全不会而更像:
“项目经验已经有了,但面试术语体系与结构化输出不足”。
当前真正缺的:
不是:
做项目能力而是:
“把已有经验翻译成企业标准面试语言”。
以后回答问题:
尽量采用:
三段式结构
1. 标准答案 2. 工程理解 3. 延伸知识链这样:
既能命中八股关键词,
又能体现工程深度。
