跳到主要内容
Java 主流框架核心面试题解析:Spring 生态与微服务 | 极客日志
Java java
Java 主流框架核心面试题解析:Spring 生态与微服务 Java 主流框架面试高频考点覆盖 Spring 核心、Boot 自动配置、MVC 流程、MyBatis 机制及安全认证。内容包含 50 道经典题目详解,涉及 IoC/AOP 原理、循环依赖解决、事务管理、缓存策略及微服务组件对比。适合求职者系统复习框架底层逻辑,提升技术深度与实战应对能力。
BigDataPan 发布于 2026/3/24 更新于 2026/5/11 7 浏览Java 主流框架核心面试题解析
在多年的技术面试中,我发现很多开发者对 Spring 生态的理解停留在 API 调用层面。真正能脱颖而出的候选人,往往能讲清楚背后的设计思想。下面整理了 50 道经典题目,涵盖 Spring、Boot、MVC、MyBatis 及安全认证,希望能帮你把知识体系串起来。
一、Spring Framework 核心(15 题)
1. Spring 框架的核心是什么?
这个问题考察的是对整体架构的宏观认知。简单来说,Spring 的灵魂在于 IoC(控制反转) 和 AOP(面向切面编程) 。
IoC :将对象创建和依赖管理的控制权从代码转移到容器,降低耦合。
AOP :通过横切关注点分离,提高模块化程度。
核心容器 :包括 BeanFactory 和 ApplicationContext。
设计模式 :大量应用了工厂、代理、单例等模式。
2. Spring Bean 的生命周期是怎样的?
理解生命周期是调试 Bean 问题的关键。大致流程如下:
实例化 :通过反射创建 Bean 实例。
属性赋值 :完成依赖注入。
Aware 接口回调 :如 BeanNameAware、BeanFactoryAware 等。
前置处理 :BeanPostProcessor 的 postProcessBeforeInitialization。
初始化 :执行 InitializingBean 的 afterPropertiesSet 或自定义 init-method。
后置处理 :BeanPostProcessor 的 postProcessAfterInitialization(AOP 代理通常在这里生成)。
使用阶段 :Bean 处于就绪状态。
销毁 :DisposableBean 的 destroy 或自定义 destroy-method。
3. Spring 如何解决循环依赖?
这是高频考点。Spring 主要通过 三级缓存机制 解决单例下的 Setter/属性注入循环依赖。
singletonObjects :存放完全初始化的 Bean。
earlySingletonObjects :存放早期引用(未完全初始化)。
singletonFactories :存放 ObjectFactory,用于获取早期引用。
注意,构造器注入的循环依赖无法通过此机制解决,会直接抛出异常。
// 伪代码逻辑示意
// 创建 A -> 依赖 B -> 创建 B -> 依赖 A
// 当 B 需要 A 时,从三级缓存中获取 A 的早期引用
4. BeanFactory 和 ApplicationContext 的区别?
两者都是容器,但 ApplicationContext 更强大:
特性 BeanFactory ApplicationContext 实例化时机 延迟加载 预加载 国际支持 不支持 支持 事件传播 不支持
生产环境通常直接使用 ApplicationContext。
5. Spring AOP 的实现原理?
JDK 动态代理 :基于接口,实现 InvocationHandler。
CGLIB 动态代理 :基于类继承,生成子类。
核心概念包括连接点(JoinPoint)、切点(Pointcut)、通知(Advice)和织入(Weaving)。
6. Spring 事务的实现原理? 底层基于 AOP 代理。@Transactional 注解会被拦截器 TransactionInterceptor 捕获,结合 PlatformTransactionManager 管理事务边界。需要注意传播行为(如 REQUIRED)和隔离级别的配置。
7. @Autowired 和@Resource 的区别?
来源 :@Autowired 来自 Spring,@Resource 来自 JSR-250。
默认方式 :@Autowired 按类型(byType),@Resource 按名称(byName)。
参数 :@Autowired 有 required 属性,@Resource 有 name 和 type。
8. Spring 中的设计模式有哪些?
工厂模式(BeanFactory)
单例模式(Bean 默认作用域)
代理模式(AOP 实现)
模板方法模式(JdbcTemplate)
观察者模式(事件监听)
适配器模式(HandlerAdapter)
9. Spring Bean 的作用域有哪些? 除了默认的 singleton,还有 prototype(每次请求新实例)、request、session、application 以及 websocket 会话周期。
10. Spring MVC 的工作流程?
DispatcherServlet 接收请求。
HandlerMapping 找到处理器。
HandlerAdapter 执行处理器。
Controller 处理业务逻辑。
ModelAndView 返回结果。
ViewResolver 解析视图。
View 渲染响应。
11. Spring 如何整合 MyBatis? 关键组件包括 SqlSessionFactoryBean 和 MapperScannerConfigurer。推荐使用 @MapperScan 注解简化配置。
<bean id ="sqlSessionFactory" class ="org.mybatis.spring.SqlSessionFactoryBean" >
<property name ="dataSource" ref ="dataSource" />
<property name ="mapperLocations" value ="classpath:mapper/*.xml" />
</bean >
12. Spring 中的事件机制? 核心接口包括 ApplicationEvent、ApplicationListener 和 ApplicationEventPublisher。常见内置事件有 ContextRefreshedEvent 等。
13. Spring 的国际化支持? 通过 MessageSource 接口实现,常用 ResourceBundleMessageSource 加载资源文件。
@Autowired
private MessageSource messageSource;
String message = messageSource.getMessage("key" , args, locale);
14. Spring 如何处理异常? 局部用 @ExceptionHandler,全局推荐 @ControllerAdvice + @ExceptionHandler。底层依赖 HandlerExceptionResolver。
15. Spring 的缓存抽象? 核心注解包括 @Cacheable、@CachePut、@CacheEvict。支持多种缓存管理器,如 RedisCacheManager。
二、Spring Boot(10 题)
16. Spring Boot 自动配置原理? 核心是 @EnableAutoConfiguration。启动时扫描 META-INF/spring.factories,加载符合条件的配置类(@ConditionalOnClass 等)。这大大减少了样板代码。
17. Spring Boot 起步依赖(Starter)原理? 本质是 Maven POM 继承。例如 spring-boot-starter-web 包含了 Tomcat、Spring MVC 等依赖。自定义 Starter 需配置 spring.factories。
<dependency >
<groupId > org.springframework.boot</groupId >
<artifactId > spring-boot-starter-web</artifactId >
</dependency >
18. Spring Boot 外部化配置? 配置源优先级从高到低:命令行参数 > JNDI > 系统属性 > 配置文件等。支持 properties、yml 格式。
19. Spring Boot Actuator 的作用? 提供运维监控能力,如 /actuator/health 健康检查、/actuator/metrics 指标监控等。
20. Spring Boot 如何实现热部署? 使用 spring-boot-devtools。它包含 ClassLoader 重启机制和 LiveReload 支持。
<dependency >
<groupId > org.springframework.boot</groupId >
<artifactId > spring-boot-devtools</artifactId >
<optional > true</optional >
</dependency >
21. Spring Boot 多环境配置? 通过 application-{profile}.yml 区分环境,使用 @Profile 激活。命令行可指定 --spring.profiles.active=prod。
22. Spring Boot 的嵌入式容器? 默认 Tomcat,也可切换为 Jetty 或 Undertow。需在 pom.xml 排除默认依赖并引入目标容器依赖。
23. Spring Boot 的事务管理? 开启@EnableTransactionManagement 即可,底层由 DataSourceTransactionManagerAutoConfiguration 自动装配。
24. Spring Boot 的测试支持? 提供 @SpringBootTest、@WebMvcTest 等切片测试注解,配合 @MockBean 方便 Mock 依赖。
25. Spring Boot 的监控指标? 集成 Micrometer,可对接 Prometheus、Graphite 等监控系统。
三、Spring MVC(8 题)
26. DispatcherServlet 的作用? 作为前端控制器,接收所有 HTTP 请求,并委托给后续组件处理。
27. HandlerMapping 的类型? 包括 BeanNameUrlHandlerMapping、RequestMappingHandlerMapping(最常用)等。
28. HandlerAdapter 的作用? 解耦 DispatcherServlet 与 Controller,支持不同类型的处理器。
29. 视图解析器(ViewResolver)类型? InternalResourceViewResolver 用于 JSP,ContentNegotiatingViewResolver 用于内容协商。
30. @Controller 和@RestController 的区别? @Controller 返回视图名,@RestController 组合了@ResponseBody,直接返回 JSON/XML,适合 RESTful API。
31. Spring MVC 的拦截器? 实现 HandlerInterceptor 接口,重写 preHandle、postHandle、afterCompletion 三个方法。
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors (InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor ());
}
}
32. Spring MVC 的参数绑定? 支持 @RequestParam、@PathVariable、@RequestBody 等多种注解,自动映射请求数据。
33. Spring MVC 的文件上传? 需配置 MultipartResolver,Controller 中使用 MultipartFile 接收。
四、MyBatis(8 题)
34. MyBatis 中#{}和${}的区别? #{}是预编译参数,防 SQL 注入;${}是字符串替换,有安全风险,常用于表名等动态部分。
35. MyBatis 的一级缓存和二级缓存? 一级缓存作用于 SqlSession,默认开启;二级缓存作用于 Mapper 级别,需手动配置。
36. MyBatis 的映射方式? 支持注解映射(@Select)和 XML 映射。复杂结果集建议使用 ResultMap。
37. MyBatis 的动态 SQL? 支持 if、choose、where、foreach 等标签,灵活构建 SQL。
38. MyBatis 的插件机制? 通过 Interceptor 接口拦截 Executor、StatementHandler 等关键点,常用于分页和性能监控。
39. MyBatis 和 Hibernate 的比较? MyBatis 更可控,SQL 优化空间大;Hibernate 自动化程度高,学习曲线较陡。
40. MyBatis 的分页实现? 物理分页推荐 PageHelper 插件,逻辑分页可用 RowBounds。
41. MyBatis 的延迟加载? 关联查询时可设置 fetchType="lazy",配合 lazyLoadingEnabled 配置开启。
五、Spring Security(5 题)
42. Spring Security 的核心组件? 包括 SecurityContextHolder、Authentication、UserDetails、AccessDecisionManager 等。
43. Spring Security 的过滤器链? 核心过滤器包括 UsernamePasswordAuthenticationFilter、FilterSecurityInterceptor 等,按顺序处理请求。
44. 认证和授权的区别? 认证验证身份(你是谁),授权控制访问(你能做什么)。
45. OAuth2 在 Spring Security 中的实现? 支持授权码、密码、客户端等多种模式,涉及 AuthorizationServer 和 ResourceServer。
46. 如何实现自定义 UserDetailsService? 实现 loadUserByUsername 方法,从数据库加载用户信息并转换为 UserDetails。
@Service
public class CustomUserDetailsService implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername (String username) {
User user = userRepository.findByUsername(username);
return new org .springframework.security.core.userdetails.User(
user.getUsername(), user.getPassword(), getAuthorities(user.getRoles()));
}
}
六、微服务/Spring Cloud(4 题)
47. 微服务架构的核心概念? 服务拆分、独立部署、轻量通信、去中心化治理及容错设计。
48. Spring Cloud Netflix 核心组件? Eureka(注册中心)、Ribbon(负载均衡)、Feign(声明式客户端)、Hystrix(熔断)。
49. Spring Cloud Alibaba 核心组件? Nacos(注册与配置)、Sentinel(流控)、Dubbo(RPC)、Seata(分布式事务)。
50. Spring Cloud Gateway 和 Zuul 的区别? Gateway 基于 WebFlux 异步非阻塞,性能更高;Zuul 基于 Servlet 阻塞,已逐渐被替代。
面试准备建议
1. 理解层次 不要只背答案。从基础使用到原理理解,再到源码阅读,层层深入。
2. 实践建议 动手搭建完整项目,跟踪关键流程源码,了解常见优化点和故障排查方法。
3. 面试技巧 结合实际项目经验支撑理论,回答时从表层到底层逐步深入。遇到不会的问题坦诚说明,避免误导。
掌握这些内容,不仅能应对面试,更能深入理解 Java 主流框架的设计精髓,为成为优秀的企业级 Java 开发者打下坚实基础。
相关免费在线工具 Keycode 信息 查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
Escape 与 Native 编解码 JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
JavaScript / HTML 格式化 使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
JavaScript 压缩与混淆 Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online