面试官:SpringBoot 场景化实战 10 问(第四弹·附图解)
第四篇 · 10 道 SpringBoot 面试题(全新不重复)
- 形式:对话 + 图解 + 大白话
- 场景:项目落地中的真实痛点
- 目标:解决常见生产问题
引言
做完前三套题,老王给你布置"生产落地卷"。这 10 问全部源于线上故障与最佳实践,务必掌握!
1. SpringBoot CLI 有啥用?优势?
面试官: 见过 spring run
吗?
候选人: SpringBoot CLI 让你 用 Groovy 写 Boot 脚本,省掉 public static void main
。原型 Demo 秒级出结果,也支持 --watch
热重载。适合快速验证想法。
2. DevTools 远程热部署如何配置?
候选人: spring.devtools.remote.secret
设置密钥,本地加 -Dspring.devtools.remote.secret
连接。仅开放内网,生产慎用。
3. 如何在 Boot 中开启 HTTPS?
面试官: 证书怎么配?
候选人: 三步:
keytool -genkeypair -storepass pass -keystore keystore.p12 -storetype PKCS12
生成证书。application.yml
:
server:
ssl:
key-store: classpath:keystore.p12
key-store-password: pass
key-store-type: PKCS12
enabled: true
- 8080->8443,HTTP 可以通过
TomcatConnectorCustomizer
重定向。
4. Spring Data JPA 方法命名查询规则?
候选人: findByUserIdAndStatusOrderByCreateTimeDesc(Pageable p)
解析为 SQL:WHERE user_id=? AND status=? ORDER BY create_time DESC
。保留字:Top
, First
, Distinct
, Between
, IsNull
… 记住 驼峰拆分 + 关键字映射。
5. Flyway 数据库版本管理流程?
候选人: Boot 自动扫描 db/migration
。脚本命名 V1__init.sql
、V1_1__patch.sql
。回滚用 R
版本或手动补丁,切勿改历史脚本。
6. Cache 抽象怎么接入 Redis?
面试官: @Cacheable
真能省数据库?
候选人: 引入 spring-boot-starter-data-redis
, 加 @EnableCaching
。在 yml 配:
spring:
cache:
type: redis
redis:
host: localhost
然后:
@Cacheable(value = "user", key = "#id")
public User getUser(Long id) { ... }
Boot 会用 RedisCacheManager
,自动序列化。
7. 事务传播 PROPAGATION_REQUIRES_NEW
用例?
候选人: 记录审计日志不能跟主业务同事务,主业务回滚日志也得记。用 @Transactional(propagation = REQUIRES_NEW)
开新事务,独立提交。
8. AOP 环绕通知怎么打印请求耗时?
@Aspect
class LogTimeAspect {
@Around("@annotation(org.springframework.web.bind.annotation.RequestMapping)")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
long start = System.currentTimeMillis();
Object ret = pjp.proceed();
log.info("cost:{}ms", System.currentTimeMillis()-start);
return ret;
}
}
9. 自定义条件注解实现步骤?
候选人:
- 实现
Condition
:判断环境变量/类路径。 - 写注解
@Conditional(MyCondition.class)
。 - 在配置类/Bean 上使用。
实例:只有测试环境加载 Mock Bean。
10. 多个 AutoConfiguration 顺序如何控制?
面试官: Bean 冲突咋办?
候选人: 在配置类上加 @AutoConfigureBefore
, @AutoConfigureAfter
或使用 @Order
。也可通过 spring.autoconfigure.exclude
排除整块自动配置。
结语
10 个生产实战题搞定!掌握这些技能,现场救火不再慌。