美的 后端开发一面面经(9.28):线程池、MVCC 与 Spring Boot 自动配置
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
一面(约 30 分钟,无手撕)
- 请简单做一下自我介绍
- 你现在的项目经验是不是没有 AI Agent 开发相关经历?
- 请简单介绍一下 Java 中线程池的工作原理
- 可以举个例子说明一下 Java 线程池的核心参数有哪些吗?
- 请解释一下 MySQL InnoDB 的锁机制是什么
- 什么是 MVCC?以及它是如何解决幻读问题的?
- 具体什么是脏读,什么是幻读?
- Spring Boot 有用过吧?说一下 Spring Boot 自动配置的原理是什么
- 如何自定义一个 Starter?
- 你项目里最难的一个点是什么?
- 讲一个你阅读开源项目源码的经历,你是如何开始的?遇到哪些困难以及如何解决的?
- 假设你现在需要在团队内部去分享一个技术问题,比如 SQL 优化,或者大模型微调的训练经验,说明一下你会如何去组织这次分享,你的内容结构和讲解方式是怎样的
- 你是做过一些大模型相关的工作,你是基于什么背景去做的?
- 来介绍一下什么是 LoRA 微调
《参考解析》
-
线程池要按「提交—排队—扩容—拒绝」的顺序讲:任务进来先看核心线程是否已满,没满就新建核心线程直接跑;核心线程满了进阻塞队列排队;队列满了才扩到最大线程数;再满就走拒绝策略。核心参数就是
corePoolSize、maximumPoolSize、keepAliveTime、workQueue、threadFactory、handler六个,举例时挑一个真实场景说清队列怎么选(有界队列防内存打爆,LinkedBlockingQueue无界要小心任务堆积)。 -
InnoDB 锁要分清锁的对象和场景:按粒度有表锁、意向锁、行锁;行锁里细分为记录锁、间隙锁和临键锁,间隙锁与临键锁是 RR 隔离级别下防幻读的关键。实际答题时补一句「加锁行为取决于索引」——走不到索引就退化成锁全表扫描到的记录甚至升级,这是线上最容易踩的坑。
-
MVCC 与幻读要一起答:MVCC 靠隐藏的事务 ID 与回滚指针加 undo log 版本链,配合 Read View 判断当前事务能看到哪个版本,实现快照读不加锁;RR 下快照读因此不会出现幻读。但当前读(
select for update、update、insert)走的是加锁路径,要靠临键锁锁住区间来防幻读。只说「MVCC 解决幻读」而不区分快照读与当前读,是这题的常见失分点。 -
脏读和幻读是不同层面的事:脏读是读到了别的事务还没提交、之后可能回滚的数据;幻读是同一事务内两次同样的范围查询,第二次多出了别的事务提交的新行。前者是隔离级别不够,后者是范围查询的语义问题——用一个「转账未提交被读走」和一个「批量插入后两次 count 不一致」的例子区分最省事。
-
自动配置讲清「怎么被加载 + 怎么被裁剪」:
@SpringBootApplication里的@EnableAutoConfiguration会去读依赖 jar 里注册的自动配置类清单(Spring Boot 2.7 之后是META-INF/spring/...AutoConfiguration.imports,旧版是spring.factories),再靠一堆@Conditional条件注解决定生效与否。自定义 Starter 就是照这个套路来:写自动配置类、加@ConditionalOnMissingBean给用户留覆盖空间、用@ConfigurationProperties收配置项、注册到 imports 文件,starter 模块只负责把依赖引进来。 -
「项目最难的点」要选有决策含量的难点:不要挑纯体力活(接口多、改字段多),挑一个当时信息不全、需要做取舍的问题——性能瓶颈定位、数据一致性方案选型、线上问题的排查过程。结构是背景、候选方案及为什么否掉、最终做法、结果与代价。读源码的经历同理,讲清你带着什么问题去读、用什么工具定位调用链、卡在哪、最后怎么绕过去的,比罗列读过哪些框架有用。
-
技术分享题考的是结构化表达:先定听众与目标(是让同事能上手,还是统一方案口径),再排内容——问题背景与现象、原理与关键机制、我们的场景约束、方案对比、落地步骤与踩坑、最后留 Q&A 与后续行动项。讲解方式上给一个可运行的例子或线上数据,别整场堆 PPT 概念。这题本质是在预演你未来在团队里的沟通方式。
-
LoRA 要讲清「小在哪、省在哪」:冻结预训练权重,在注意力层的线性变换旁挂一对低秩矩阵,只训练这两个小矩阵——秩
r远小于原维度,所以可训练参数量降到千分之几,显存和存储都省;推理时可以把BA合并回原权重,不引入额外延迟。常见追问是秩怎么选、作用在哪些模块、和全量微调的效果差距,答的时候给出「任务越接近预训练分布,小秩越够用」这类经验判断即可,别硬报论文数字。