美团容器平台 JAVA 一二面:消息一致性、MCP 权限与代码审查
本场面试题
- 数据库事务提交后 MQ 发送失败,或消费者重复收到消息,怎样界定可靠性和幂等责任?
- Skill 同时读写且按用户与部门隔离时,权限应由哪一层校验,MCP 承担什么职责?
- RAG 知识库中同一文档有多个版本时,怎样处理检索与使用边界?
- 审查单例 Spring Controller 的共享 HashMap 时,需要检查哪些并发与内存风险?
面经与参考答法
美团容器平台JAVA开发一二面自述,月日为9.2与9.7,年份未明示。一面前15分钟未录到,二面AI Coding没有题面,均不补写。
经历和岗位来自候选人自述,未独立认证;以下短答、详解与例子为编辑补充,不是候选人的现场答案或企业标准答案。未披露条件先澄清,教学假设会单独说明。
(1)数据库事务提交后 MQ 发送失败,或消费者重复收到消息,怎样界定可靠性和幂等责任?
短答:事务内同时写业务与待发布事件,发布器可恢复投递;消费者用稳定业务事件键把去重和业务写入放在同一事务,提交后确认。重复交付是需要处理的正常情形。
详解:生产者确认只覆盖发布方与broker,消费确认覆盖消费端交付责任,二者不互相证明。发布成功而进度未保存可重复发,业务提交后ACK丢失可重复收。外部支付、发信等效果不属于这个本地事务,还需对端幂等、状态查询与对账,不能声称端到端恰好一次。
(2)Skill 同时读写且按用户与部门隔离时,权限应由哪一层校验,MCP 承担什么职责?
短答:从受信任身份解析用户/部门/租户,按资源和读写操作做授权。工具服务执行点必须强制校验;MCP可承载这个服务边界,但协议名本身不等于完整权限系统。
详解:可见工具清单先裁剪,真正读取或写入前仍重新检查当前权限、对象归属、状态和必要确认。独立策略服务与Server内模块是部署取舍,关键是调用路径不能绕过,属性不能由模型自报,委派也不能扩大权限。记录决策和实际效果,处理撤销、过期与参数变化;有权不代表重复执行安全。
(3)RAG 知识库中同一文档有多个版本时,怎样处理检索与使用边界?
短答:先区分业务内容版本和索引构建版本,并明确查询当前规则还是某个历史时点。检索只选符合发布、有效期、权限与删除规则的版本,引用保留版本和块位置。
详解:新上传不等于已生效,向量更相似也不能越过版本规则。词法和向量使用同一版本条件,缓存也携带版本口径。新构建在旁路校验完整性与质量后再切换,并检查逐动作错误和最终指向;删除/撤权应先阻断当前查询,回滚旧索引也不能恢复撤权。原文未给生效语义,以上为教学合同。
(4)审查单例 Spring Controller 的共享 HashMap 时,需要检查哪些并发与内存风险?
短答:先辨认Map保存请求临时数据还是共享状态。默认单例Controller的实例字段可能被多请求共用,普通HashMap不提供并发安全;换并发容器也不自动解决复合业务动作和无限增长。
详解:临时数据可放请求局部状态;确需共享时,所有相关读写使用一致的并发合同,跨实例事实回到外部存储。单例是每容器每bean定义,不是所有进程唯一。缓存另定容量、过期、失效和隔离,监控条目与内存。原代码没有给出,本文只提供审查方向,不断言具体漏洞或虚构已测试补丁。
参考资料
- RabbitMQ:发布与消费确认
- NIST:ABAC定义
- MCP:工具校验与访问控制
- Elastic:别名逐动作结果
- Qdrant:过滤条件
- Spring7.0.5:bean作用域
- JDK25:HashMap