当前位置: 首页 > news >正文

【美团】后端一面复盘|项目驱动 + 手撕 + JVM + 数据库全面覆盖

【美团】后端一面复盘|项目驱动 + 手撕 + JVM + 数据库全面覆盖

📍 面试公司:美团
🎯 面试岗位:后端开发工程师
📞 面试形式:电话面(OC)
🕒 面试时长:约 50 分钟
🔁 面试轮次:第一轮技术面


✨ 面试整体节奏

这场美团的一面整体感觉是“项目驱动型”面试。面试官的问题多数是围绕我实际做过的项目展开的,穿插了一些八股基础与手撕考察,风格偏实战,细节问得很深。

由于没能录音,问题顺序是大致回忆整理,难度中等偏上,但非常考察“你做过什么、做得多细、做得多深入”。


✅ 面试问题逐题整理与解析

非技术问题

  1. 你有实习经历吗?在哪里实习的?
    简单介绍了下过往实习经历、公司规模和主要做的项目。

  2. 平时怎么学习后端技术?学习路径是什么?坚持了多久?
    回答了从 Java 基础、Spring 全家桶、到中间件、性能优化,结合项目同步迭代的学习路径。


技术问题

  1. 你们项目里为什么用 JWT?具体是怎么用的?用的是什么协议?
    讲了 JWT 的结构(Header、Payload、Signature),我们是用它做登录态的传递,结合 HTTP 协议放在 Header 中,用于用户鉴权。

  2. ThreadLocal 的底层原理是怎样的?为什么会引发内存泄漏?
    介绍了 ThreadLocalMap 的结构、弱引用 key、未及时 remove 时 value 被强引用导致泄漏的风险。

  3. 你们为什么用 ThreadLocal 存用户 ID?具体业务场景是?
    项目中用于日志链路追踪、权限判断等,避免在方法层层传递 userId。

  4. ThreadLocal 保存大量用户信息会不会导致内存溢出?考虑用 Redis 存储吗?
    分析了使用线程池时,ThreadLocal 不及时清理会有隐患。解释了我们是单体架构,并不会有太多线程长期驻留,此外使用 Redis 虽然能解决一些问题,但也引入了额外的复杂度。

  5. 详细说一下你项目里的库存管理模块,包括迭代过程、选型、如何落地和做一致性维护?
    从最开始的单体锁实现讲起,后面优化为分布式锁 + 本地缓存,结合 Redis + Lua 保证原子操作,同时讲了 MQ 异步刷库、对超卖的防控等。

  6. 项目中遇到过 OOM 吗?你们是怎么调优的?
    遇到过老年代爆内存,分析了内存 dump,发现是缓存泄漏导致。后面优化了缓存使用、调小了 JVM 内存参数,并开启了 G1 GC。

  7. 能详细说下你负责的核心业务流程吗?
    花了比较多时间讲订单业务的整体流程、服务拆分、中间件接入、异常处理和监控告警。

  8. MySQL 中使用 SELECT … FOR UPDATE 时加的是什么锁?
    行级排它锁(X 锁),会锁住符合条件的记录,阻塞其他事务的修改操作。

  9. MySQL 中共享锁和排他锁的区别是什么?
    共享锁(S 锁)允许并发读,不允许写;排他锁(X 锁)不允许读写,互斥性更强。

  10. MySQL 的 B+ 树和 B 树的区别是什么?为什么使用 B+ 树做索引更好?
    B+ 树所有数据都在叶子节点,叶子节点之间有链表结构,范围查询效率更高,且更适合磁盘页设计。

  11. 你们项目里 WebClient 是用的什么网络协议?
    是基于 HTTP 协议的非阻塞客户端,用于异步请求下游服务。

  12. WebClient 在项目中的具体使用场景?
    主要用于调用外部接口服务,例如第三方支付、物流平台等,用 Mono/Flux 做异步编排。

  13. 线程池相关问题,你们项目用的是哪种线程池?怎么配置的?
    用的是自定义 ThreadPoolExecutor,控制核心线程数、队列长度和拒绝策略,主要用于异步任务和定时任务执行。

  14. 垃圾回收器相关问题,G1 和 CMS 有什么区别?你们是怎么选择的?
    CMS 并发回收但有碎片问题,G1 做分区回收、延迟更低且能预测。项目中使用 G1,因为我们更关注响应时间的可控性。

  15. 其他问题:
    面试官根据我回答的项目内容,延伸问了一些缓存、消息队列、数据库优化的细节,零碎地记不太清了,但整体偏向八股融合实际应用。


🧠 手撕代码题

  1. 实现单例模式(双重检查锁)
public class Singleton {private static volatile Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized(Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}
  1. 实现责任链模式
    简化示例:多个处理器按顺序执行处理逻辑。
abstract class Handler {protected Handler next;public void setNext(Handler next) { this.next = next; }public abstract void handle(String request);
}class AuthHandler extends Handler {public void handle(String request) {if (request.contains("auth")) {System.out.println("认证成功");}if (next != null) next.handle(request);}
}class LogHandler extends Handler {public void handle(String request) {System.out.println("记录日志");if (next != null) next.handle(request);}
}
  1. SQL 编写题
    被强行锤了 10 分钟,确实没练 SQL,面试官耐心教了怎么写。建议后续加强 SQL 实战训练。

  2. 算法题
    给了一道简单题,但我写得比较慢,没有达到预期速度。暴露了刷题不够熟练的问题。


🙋‍♂️ 反问环节

  • 问了一下美团部门的主要业务方向、团队技术栈、以及学习建议。面试官给了挺多建议,比如多写代码、项目中要敢于钻透原理、平时多练 SQL 和算法。

  • 面试官也问了:目前还有其他 offer 吗?(感觉是在试探我当前的竞争情况)


🧾 总结 & 面试复盘

整体来说,美团这轮面试节奏挺快,问题质量高,项目问得深入,八股融合业务场景,手撕题也有实战要求。

我的项目准备还算充分,但手撕题和 SQL 明显暴露短板,后续要加强刷题训练 + SQL 练习,别在这些点上失分。


📢 最后:

如果你也在准备 Java 后端社招,可以留言交流,我会持续整理类似的高频面试题 + 项目思路拆解,祝大家都能稳稳上岸 💪!

相关文章:

  • QT 使用QPdfWriter和QPainter绘制PDF文件
  • Parsec解决PnP连接失败的问题
  • 11 web 自动化之 DDT 数据驱动详解
  • Swagger go中文版本手册
  • 【HCIA】策略路由
  • 搭建Hadoop集群standalone
  • STM32 SD卡拔插后FatFs挂载失败可能原因
  • 短视频二创App功能深度解析:短剧创作与推广的智能化革命
  • 开源模型应用落地-模型上下文协议(MCP)-Resources-资源的使用逻辑
  • Python中plotext 库详细使用(命令行界面中直接绘制各种图形)
  • 前馈神经网络回归(ANN Regression)从原理到实战
  • 从单线程到多线程:项目实战web Worker线程使用总结
  • 联合建模组织学和分子标记用于癌症分类|文献速递-深度学习医疗AI最新文献
  • 2025 后端自学UNIAPP【项目实战:旅游项目】5、个人中心页面:微信登录,同意授权,获取用户信息
  • 大模型智能体与 React Flow:构建智能化可视化交互系统的技术范式
  • Node.js 安装 + React Flow 快速入门:环境安装与项目搭建
  • #跟着若城学鸿蒙# 鸿蒙-卡证识别
  • 【搭建Node-RED + MQTT Broker实现AI大模型交互】
  • 游戏引擎学习第283天:“让‘Standing-on’成为一个更严谨的概念
  • 算法分析:蛮力法
  • 外企聊营商|武田制药:知识产权保护助创新药研发
  • “免签圈”扩容,旅游平台:今年以来巴西等国入境游订单显著增加
  • 一图看懂|印巴交火后,双方基地受损多少?
  • 创同期历史新高!1至4月全国铁路发送旅客14.6亿人次
  • 讲武谈兵|视距外的狙杀:从印巴空战谈谈超视距空战
  • 2025财政观察|长三角“三公”经费普降,钱要用在刀刃上