Android / IoT 面试复盘总结:从 MQTT、TLS 到 JWT 权限体系(标准答案 + 工程理解 + 延伸知识链)
最近经历了一场偏 Android / IoT 方向的技术面试。整个过程下来最大的感受其实不是“完全不会”而是“很多东西做过但没有形成标准化表达体系”。尤其MQTTQoSTLS401 / 403JWT生命周期地图实时点位这些问题。其实本质上已经开始进入“系统工程能力 企业级架构思维”这一层了。所以这篇文章我想不只是简单记录面试问题。而是用“标准答案 工程理解 延伸知识链”的方式把这次面试真正串成一个体系。一、MQTT 与 MQTTS标准答案MQTTMQTT 是轻量级发布订阅协议 适用于 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 SecurityTLS 是传输层安全协议 用于对网络通信进行加密。核心数据加密 身份认证 防篡改工程理解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 / 5XX4XX 客户端问题 5XX 服务端问题前后端联调时非常重要。延伸知识链HTTP → RESTful → Gateway → 微服务 → Spring Cloud六、长登录 / Token 刷新标准答案企业里通常采用双 Token 机制 AccessToken 接口访问 有效期较短。 RefreshToken 用于刷新 AccessToken 有效期较长。流程AccessToken 过期 → 401 → Interceptor → RefreshToken → 获取新 AccessToken → 重试请求工程理解为什么不用永久 TokenToken 泄露风险太高所以AccessToken 短期 RefreshToken 长期更安全。延伸知识链JWT → RefreshToken → Redis → 单点登录 → Token黑名单七、Activity 生命周期与屏幕旋转标准答案Android屏幕旋转本质是 Configuration Change 会导致 Activity 重建生命周期onPause onStop onDestroy onCreate onStart onResume工程理解常见解决方案ViewModelAndroid Jetpack ViewModel保存业务状态。onSaveInstanceState保存 UI 临时状态。rememberSaveableJetpack ComposeCompose 状态恢复。延伸知识链生命周期 → Configuration Change → ViewModel → SavedStateHandle → Compose状态管理八、多态与继承标准答案多态本质是 同一接口 不同对象表现出不同实现。Java 中继承接口实现方法重写实现运行时多态。工程理解底层本质Cvtable / vptr 动态绑定JavaJVM 虚方法派发为什么框架大量使用多态比如SpringAndroid 回调AOPMQTT 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. 延伸知识链这样既能命中八股关键词又能体现工程深度。