美团后端开发岗面经-06
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 线程池的工作原理和任务提交流程是什么?
- Kafka 如何保证消息的串行消费?
- JDK 1.7 与 1.8 的 HashMap 有哪些区别?
- JVM 内存区域和新生代 Survivor 区如何工作?
- MyBatis 中 #{} 和 ${} 有什么区别?
- 大表在线增加字段应注意什么?
- Redis 与 MySQL 如何保证最终一致?
《参考解析》
- 线程池先创建核心线程,再入队,队列满后创建非核心线程,最终执行拒绝策略;关闭状态下不应继续接收任务。
- 让同一业务键映射到同一分区,分区内单线程按 offset 顺序消费;跨分区无法保证全局顺序。
- JDK 1.8 在冲突严重时将链表转为红黑树,并优化了哈希扰动;两者都不是线程安全容器。
- 新生代通常按 Eden 与两个 Survivor 区复制存活对象,老年代存放长期存活对象;具体布局由收集器决定。
- #{} 使用预编译参数可防注入,${} 进行字符串拼接,只能对经过严格白名单校验的标识符使用。
- 评估锁表、复制延迟和回滚方案,优先使用在线变更工具或分阶段发布,避免长时间阻塞生产流量。
- 采用先更新数据库再删除缓存,并结合重试、消息或 Binlog 订阅修复删除失败,读路径要能容忍短暂不一致。