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
 ↓
MQTT

TLS 解决的问题

复制代码
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
        ↓
TCP

TLS 握手过程

复制代码
客户端:
我要安全通信

服务端:
这是我的证书

客户端:
验证证书是否合法

然后:
交换密钥
建立加密通道

后续数据:

复制代码
全部加密

延伸知识链

复制代码
TLS
→ HTTPS
→ MQTTS
→ WSS
→ CA证书
→ 非对称加密
→ 对称加密

四、401 与 403


标准答案

复制代码
401:
未认证(没登录、Token失效)

403:
已认证,但无权限

经典理解:

复制代码
401:
"你是谁?"

403:
"我知道你是谁,但你不配"

工程理解

JWT 请求流程

复制代码
请求来了
 ↓

有没有 Token?
 ↓
没有 → 401

Token 合法吗?
 ↓
不合法 → 401

身份解析成功
 ↓

有没有权限?
 ↓
没有 → 403

有权限
 ↓
200

Android / 前端处理

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 Change

3. 输出不够结构化

容易:

复制代码
想到哪说到哪

十三、后续学习建议


第一阶段(最高优先级)

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. 延伸知识链

这样:

既能命中八股关键词,

又能体现工程深度。

相关推荐
野犬寒鸦1 小时前
MCP 回包外层结构嵌套问题:原理、排查与开发避坑指南
后端·语言模型·面试·ai编程
青岛前景互联信息技术有限公司1 小时前
企业专职消防队的数字化升级:物联网和大数据的结合
大数据·物联网
禧西1 小时前
面试准备——agent和大模型_1
面试·职场和发展
星辰_mya2 小时前
码头调度主任——Kubernetes
后端·云原生·容器·面试·kubernetes
林多2 小时前
【Android】 GPU过度绘制实现原理
android·gpu·性能·实现原理·过度绘制·overdraw
Yeats_Liao2 小时前
智能感知低功耗设计:MCU上的AI异常检测与能效优化
人工智能·单片机·物联网·neo4j
薄荷椰果抹茶2 小时前
手机端Obsidian安装与同步全攻略
android
醇氧2 小时前
CentOS 7安装 mysql-8.0.27-1.el7.x86_64.rpm 安装包
android·mysql·centos
号码认证服务2 小时前
给用户打电话,怎么在对方手机显示为“XX证券”?号码认证办理步骤
android·运维·服务器·ios·智能手机·iphone·webview