Spring面试题 02
目录✅ 一、核心概念与对比Q1-Q21. ApplicationContext 和 BeanFactory 有什么区别2. Spring Boot、Spring MVC 和 Spring 有什么区别✅ 二、容器与生命周期Q3-Q53. 介绍一下 Spring 容器的启动流程。4. 如何实现一个 IOC 容器5. 描述一下 Spring Bean 的生命周期✅ 三、设计模式与组件Q6-Q86. Spring 用到了哪些设计模式请举例说明。7. 介绍一下 Spring MVC 的工作流程。8. Spring MVC 的主要组件有哪些✅ 四、Spring Boot 特性Q9- Q109. 如何理解 Spring Boot 中的 Starter10. 说一说你知道的 Spring Boot 中常用注解及其底层实现。 面试加分技巧串联作答示例这份清单涵盖了Spring 框架的核心原理、容器机制、MVC 流程、Boot 特性及设计思想是中高级 Java 开发面试的“必考组合拳”。下面我将为你整理每道题的高分回答话术语言精炼、逻辑清晰、重点突出适合直接用于面试表达。✅ 一、核心概念与对比Q1-Q21. ApplicationContext 和 BeanFactory 有什么区别标准对比法维度BeanFactoryApplicationContext定位Spring 最基础容器接口BeanFactory 的子接口功能更强大加载方式懒加载首次获取时才初始化 Bean预加载启动时初始化所有单例 Bean功能扩展仅支持基本 DI支持 AOP、事件发布、国际化、资源访问等使用场景资源受限环境如嵌入式设备企业级应用主流选择 补充“我们日常开发用的ClassPathXmlApplicationContext、AnnotationConfigApplicationContext都是 ApplicationContext 的实现类。”2. Spring Boot、Spring MVC 和 Spring 有什么区别层级关系 职责划分Spring→ 核心框架提供 IOC、AOP、事务管理等底层能力。Spring MVC→ 基于 Spring 的 Web 层框架负责请求分发、视图渲染、参数绑定等。Spring Boot→ 不是新技术而是“脚手架”“自动配置”简化 Spring 应用的搭建和部署。 类比Spring 汽车发动机 底盘Spring MVC 方向盘 仪表盘Web 控制层Spring Boot 整车出厂套装一键启动开箱即用✅ 总结“Spring 是根基MVC 是 Web 模块Boot 是加速器——三者协同工作构成现代 Java Web 开发基石。”✅ 二、容器与生命周期Q3-Q53. 介绍一下 Spring 容器的启动流程。四步走战略创建容器对象如new ClassPathXmlApplicationContext(applicationContext.xml)加载配置文件 / 扫描注解解析 XML 或扫描Component,Configuration等注解生成 BeanDefinition实例化 依赖注入根据 BeanDefinition 创建 Bean 实例并通过反射完成属性注入DI初始化回调 注册后置处理器执行InitializingBean.afterPropertiesSet()、PostConstruct、BeanPostProcessor 等 关键点“整个过程由AbstractApplicationContext.refresh()方法驱动包含 12 个步骤核心是‘加载→实例化→注入→初始化’。”4. 如何实现一个 IOC 容器手写简易版思路展示理解深度// 1. 定义注解 interface Component {} interface Autowired {} // 2. 扫描包路径收集带 Component 的类 ListClass? classes scanPackages(com.example); // 3. 实例化并缓存到 MapString, Object beanMap for (Class? clazz : classes) { Object instance clazz.newInstance(); beanMap.put(clazz.getSimpleName().toLowerCase(), instance); } // 4. 处理 Autowired 字段注入 for (Object bean : beanMap.values()) { for (Field field : bean.getClass().getDeclaredFields()) { if (field.isAnnotationPresent(Autowired.class)) { field.setAccessible(true); String name field.getType().getSimpleName().toLowerCase(); field.set(bean, beanMap.get(name)); } } }✅ 总结“IOC 本质就是‘反射 映射表’——通过扫描、实例化、注入三步把对象管理权从程序员交给容器。”5. 描述一下 Spring Bean 的生命周期七阶段记忆法实例化Instantiation→ 调用构造函数创建对象属性赋值Populate→ 注入依赖setter/构造器/AutowiredAware 接口回调→ 如BeanNameAware,ApplicationContextAware前置处理BeanPostProcessor.postProcessBeforeInitialization初始化Initialization→PostConstruct/InitializingBean.afterPropertiesSet()/ init-method后置处理BeanPostProcessor.postProcessAfterInitialization→ AOP 代理在此处生成销毁Destruction→PreDestroy/DisposableBean.destroy()/ destroy-method 图解口诀“生实例化→ 养赋值→ 认亲Aware→ 前插前置→ 成年初始化→ 后插后置/AOP→ 死销毁”✅ 三、设计模式与组件Q6-Q86. Spring 用到了哪些设计模式请举例说明。五大经典模式工厂模式→BeanFactory,ApplicationContext创建 Bean单例模式→ 默认 Bean 作用域为 singleton代理模式→ AOP 动态代理JDK/CGLIB事务、日志等功能实现模板方法模式→JdbcTemplate,RestTemplate封装重复逻辑观察者模式→ 事件驱动模型ApplicationEventPublisherListener 加分项“还有策略模式不同 ValidationStrategy、适配器模式HandlerAdapter、责任链模式FilterChain等。”7. 介绍一下 Spring MVC 的工作流程。九步请求旅程用户发送请求 →DispatcherServlet前端控制器Dispatcher 查询HandlerMapping→ 找到对应 Controller 方法Dispatcher 调用HandlerAdapter→ 执行 Controller 方法Controller 返回ModelAndView或ResponseBodyDispatcher 交给ViewResolver→ 解析视图名ViewResolver 返回具体 View 对象如 JSP、ThymeleafDispatcher 渲染视图 → 填充模型数据响应返回给用户可选拦截器、异常处理器全程参与️ 图示关键词“前端控制器 → 映射器 → 适配器 → 控制器 → 视图解析器 → 视图渲染”8. Spring MVC 的主要组件有哪些六大核心组件DispatcherServlet→ 中央调度器所有请求入口HandlerMapping→ 请求映射到 HandlerController 方法HandlerAdapter→ 适配不同类型的 Handler如注解方法、旧式 ControllerController→ 业务逻辑处理器RestController / ControllerViewResolver→ 视图名称 → 实际视图对象JSP/Thymeleaf/FreemarkerView→ 最终渲染页面或 JSON 数据 补充“还有LocaleResolver,ThemeResolver,MultipartResolver等辅助组件。”✅ 四、Spring Boot 特性Q9- Q109. 如何理解 Spring Boot 中的 Starter依赖打包 自动配置双引擎Starter 是什么一组预定义的依赖集合 自动配置类让你“零配置”快速集成第三方库。命名规范官方 starterspring-boot-starter-web,spring-boot-starter-data-jpa第三方 startermybatis-spring-boot-starter,redisson-spring-boot-starter工作原理引入 starter → 自动传递相关依赖如 web starter 包含 Tomcat、Jackson、Spring MVC触发EnableAutoConfiguration→ 扫描META-INF/spring.factories中的自动配置类条件装配ConditionalOnClass,ConditionalOnMissingBean→ 按需启用功能✅ 总结“Starter 依赖炸弹 自动配置开关 —— 让开发者专注业务不用操心环境搭建。”10. 说一说你知道的 Spring Boot 中常用注解及其底层实现。高频注解 原理拆解注解作用底层实现SpringBootApplication主启动类标识SpringBootConfigurationEnableAutoConfigurationComponentScanEnableAutoConfiguration开启自动配置导入AutoConfigurationImportSelector→ 读取spring.factoriesConditionalOnXXX条件装配如ConditionalOnClass(RedisTemplate.class)→ 类存在才生效ConfigurationProperties绑定配置文件到 Java 对象通过Binder工具类反射赋值RestControllerRESTful 控制器ControllerResponseBodyValue注入配置值通过PropertySourcesPlaceholderConfigurer解析占位符 深入一点“spring.factories文件位于META-INF/目录下存储了所有自动配置类的全限定名Spring Boot 启动时会加载它们。” 面试加分技巧串联作答示例如果面试官问“你对 Spring 整体架构怎么理解”你可以这样回答“Spring 的核心是IOC 容器Q1, Q2, Q9, Q10它通过反射和依赖注入管理 Bean 生命周期。在 Web 层面Spring MVCQ5, Q6基于 DispatcherServlet 实现请求分发背后大量使用设计模式Q3。而Spring BootQ4, Q7, Q8则通过 Starter 和自动配置极大简化了这些组件的使用门槛让我们能‘开箱即用’地构建微服务。”这样回答既有广度又有深度展现系统性思维✅建议背诵顺序先掌握 Q1-Q3基础概念→ 再理解 Q4-Q5容器机制→ 最后攻克 Q6-Q10组件与 Boot。祝你面试顺利拿下 Offer
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2410335.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!