面灵AI→

美的 后端开发一面面经(9.28):线程池、MVCC 与 Spring Boot 自动配置

轮次
一面
时间
2026-09
来源
牛客网

《面试题目》

一面(约 30 分钟,无手撕)

  1. 请简单做一下自我介绍
  2. 你现在的项目经验是不是没有 AI Agent 开发相关经历?
  3. 请简单介绍一下 Java 中线程池的工作原理
  4. 可以举个例子说明一下 Java 线程池的核心参数有哪些吗?
  5. 请解释一下 MySQL InnoDB 的锁机制是什么
  6. 什么是 MVCC?以及它是如何解决幻读问题的?
  7. 具体什么是脏读,什么是幻读?
  8. Spring Boot 有用过吧?说一下 Spring Boot 自动配置的原理是什么
  9. 如何自定义一个 Starter?
  10. 你项目里最难的一个点是什么?
  11. 讲一个你阅读开源项目源码的经历,你是如何开始的?遇到哪些困难以及如何解决的?
  12. 假设你现在需要在团队内部去分享一个技术问题,比如 SQL 优化,或者大模型微调的训练经验,说明一下你会如何去组织这次分享,你的内容结构和讲解方式是怎样的
  13. 你是做过一些大模型相关的工作,你是基于什么背景去做的?
  14. 来介绍一下什么是 LoRA 微调

《参考解析》

  1. 线程池要按「提交—排队—扩容—拒绝」的顺序讲:任务进来先看核心线程是否已满,没满就新建核心线程直接跑;核心线程满了进阻塞队列排队;队列满了才扩到最大线程数;再满就走拒绝策略。核心参数就是 corePoolSize、maximumPoolSize、keepAliveTime、workQueue、threadFactory、handler 六个,举例时挑一个真实场景说清队列怎么选(有界队列防内存打爆,LinkedBlockingQueue 无界要小心任务堆积)。

  2. InnoDB 锁要分清锁的对象和场景:按粒度有表锁、意向锁、行锁;行锁里细分为记录锁、间隙锁和临键锁,间隙锁与临键锁是 RR 隔离级别下防幻读的关键。实际答题时补一句「加锁行为取决于索引」——走不到索引就退化成锁全表扫描到的记录甚至升级,这是线上最容易踩的坑。

  3. MVCC 与幻读要一起答:MVCC 靠隐藏的事务 ID 与回滚指针加 undo log 版本链,配合 Read View 判断当前事务能看到哪个版本,实现快照读不加锁;RR 下快照读因此不会出现幻读。但当前读(select for update、update、insert)走的是加锁路径,要靠临键锁锁住区间来防幻读。只说「MVCC 解决幻读」而不区分快照读与当前读,是这题的常见失分点。

  4. 脏读和幻读是不同层面的事:脏读是读到了别的事务还没提交、之后可能回滚的数据;幻读是同一事务内两次同样的范围查询,第二次多出了别的事务提交的新行。前者是隔离级别不够,后者是范围查询的语义问题——用一个「转账未提交被读走」和一个「批量插入后两次 count 不一致」的例子区分最省事。

  5. 自动配置讲清「怎么被加载 + 怎么被裁剪」:@SpringBootApplication 里的 @EnableAutoConfiguration 会去读依赖 jar 里注册的自动配置类清单(Spring Boot 2.7 之后是 META-INF/spring/...AutoConfiguration.imports,旧版是 spring.factories),再靠一堆 @Conditional 条件注解决定生效与否。自定义 Starter 就是照这个套路来:写自动配置类、加 @ConditionalOnMissingBean 给用户留覆盖空间、用 @ConfigurationProperties 收配置项、注册到 imports 文件,starter 模块只负责把依赖引进来。

  6. 「项目最难的点」要选有决策含量的难点:不要挑纯体力活(接口多、改字段多),挑一个当时信息不全、需要做取舍的问题——性能瓶颈定位、数据一致性方案选型、线上问题的排查过程。结构是背景、候选方案及为什么否掉、最终做法、结果与代价。读源码的经历同理,讲清你带着什么问题去读、用什么工具定位调用链、卡在哪、最后怎么绕过去的,比罗列读过哪些框架有用。

  7. 技术分享题考的是结构化表达:先定听众与目标(是让同事能上手,还是统一方案口径),再排内容——问题背景与现象、原理与关键机制、我们的场景约束、方案对比、落地步骤与踩坑、最后留 Q&A 与后续行动项。讲解方式上给一个可运行的例子或线上数据,别整场堆 PPT 概念。这题本质是在预演你未来在团队里的沟通方式。

  8. LoRA 要讲清「小在哪、省在哪」:冻结预训练权重,在注意力层的线性变换旁挂一对低秩矩阵,只训练这两个小矩阵——秩 r 远小于原维度,所以可训练参数量降到千分之几,显存和存储都省;推理时可以把 BA 合并回原权重,不引入额外延迟。常见追问是秩怎么选、作用在哪些模块、和全量微调的效果差距,答的时候给出「任务越接近预训练分布,小秩越够用」这类经验判断即可,别硬报论文数字。