写点什么

吃透互联网必问的 100 道 Spring 全家桶高频真题,金九银十稳了

  • 2022-11-27
    湖南
  • 本文字数:5778 字

    阅读完需:约 19 分钟

前言

又逢“金九银十”,年轻的毕业生们满怀希望与忐忑,去寻找、竞争一个工作机会。已经在职的开发同学,也想通过社会招聘或者内推的时机争取到更好的待遇、更大的平台。


然而,面试人群众多,技术市场却相对冷淡,面试的同学们不得不面临着 1 个职位 N 个应聘者的巨大竞争。


问:在这种现状下,如何才能收获又多又好的 Offer?


答:短期准备——刷面试题;长期筹谋——巩固核心技能。


面试题怎么刷?刷高频题、有深度的题、符合时效性的题。


核心技能如何巩固?先深入理解原理,再系统应用到实践。


这篇文章主要是记录一下自己的面试经历,分享一些小伙伴们都很关注的面试题,然后文章末尾也会推荐一些电子书籍,完全免费推荐的哈,我个人感觉不错的,可以提升技术的,当然面试中也会对你有特别大的帮助。这次主要分享 Spring 全家桶系列的面试题,当然,面试题只是起一个查漏补缺的作用,并不是让你直接去整理答案,去背答案的哈。一个合格的面试官,是会针对你的简历去问的,每个人的面试题也都是不一样的。



喜欢挑战自己的可以先看目录自己做做,不会的再看答案解析!


一、微服务


  • Sentinel 怎么防止激增流量打垮冷系统?

  • Ribbon 说说有哪些负载均衡策略

  • 你们的微服务项目里面有没有用到什么监控追踪工具?

  • 说说 Seata 的实现原理?

  • 什么是服务熔断?什么是服务降级?区别是什么?

  • 什么是服务雪崩?什么是服务限流?

  • 说说服务网关可以做什么?

  • 谈谈配置中心?

  • 注册中心的原理是什么?

  • Spring Cloud 有哪些常用组件,作用是什么?

  • 分布式架构下会有什么问题?

  • SOA、分布式、微服务之间有什么关系和区别?

  • 什么情况下需要进行微服务架构?


二、Spring Boot


  • 说说你在开发的时候怎么在 SpringBoot 的基础上做扩展?

  • SpringBoot 的默认日志实现框架是什么?怎么切换成别的?

  • SpringBoot 读取配置文件的原理是什么?

  • SpringBoot 中配置文件的加载顺序是怎样的?

  • 会不会 SpringBoot 自定义 Starter?大概实现过程?

  • SpringBoot 外置 Tomcat 启动原理?

  • SpringBoot 内置 Tomcat 启动原理?

  • SpringBoot 的启动原理?

  • 为什么 SpringBoot 的 jar 可以直接运行?

  • springboot 的自动配置原理?

  • SpringBoot 的核心注解

  • Spring 和 SpringBoot 的关系和区别?

  • 谈谈你对 SpringBoot 的理解,它有哪些特性(优点)?


三、Spring MVC


  • SpringMVC 的拦截器和过滤器有什么区别?执行顺序?

  • 如何实现无 XML 零配置的 SpringMVC

  • 是否可以把我们所需的 Bean 都放入 Spring­mvc 子容器里面来管理(springmvc 的 spring-servlet.xml 中配置全局扫描)?

  • 是否可以把所有 Bean 都通过 Spring 容器来管理?(Spring 的 applicationContext.xml 中配置全局扫描)

  • Spring 和 SpringMVC 为什么需要父子容器?

  • SpringMvc 怎么和 AJAX 相互调用的?

  • 请描述 Spring MVC 的工作流程?描述一下 DispatcherServlet 的工作流程?

  • Spring MVC 的控制器是不是单例模式,如果是,有什么问题,怎么解决?

  • 说说你是如何解决 get 和 post 乱码问题?

  • 什么是 Spring MVC?简单介绍下你对 Spring MVC 的理解?


四、Spring 核心 API


  • Spring 是如何整合 MyBatis 将 Mapper 接口注册为 Bean 的原理?

  • Spring 框架中都用到了哪些设计模式?

  • Spring 事件监听的核心机制是什么?


五、Spring 事务


  • Spring 事务的失效原因?

  • Spring 多线程事务 能否保证事务的一致性(同时提交、同时回滚)?

  • Spring 事务传播行为实现原理:

  • Spring 事务实现原理

  • 说一下 spring 的事务隔离?

  • 说一下 Spring 的事务传播行为

  • Spring 支持的事务管理类型, spring 事务实现方式有哪些?

  • 事务四大特性


六、Spring AOP


  • Spring 的 Aop 的完整实现流程?

  • Spring 的 AOP 是在哪里创建的动态代理?

  • 什么情况下 AOP 会失效,怎么解决?

  • 介绍 AOP 有几种实现方式

  • JavaConfig 方式如何启用 AOP?如何强制使用 cglib?

  • JDK 动态代理和 CGLIB 动态代理的区别

  • Spring AOP and AspectJ AOP 有什么区别?

  • Spring 通知有哪些类型?

  • 解释一下 Spring AOP 里面的几个名词

  • 什么是 AOP、能做什么


七、Spring 注解


  • 为什么 @ComponentScan 不设置 basePackage 也会扫描?

  • @Bean 之间的方法调用是怎么保证单例的?

  • 配置类 @Configuration 的作用解析原理:

  • 使用 @Autowired 注解自动装配的过程是怎样的?

  • @Autowired 和 @Resource 之间的区别

  • @Autowired 注解有什么作用

  • 如何让自动注入找到多个依赖 Bean 时不报错

  • 如何让自动注入没有找到依赖 Bean 时不报错

  • @Import 可以有几种用法?

  • @Component, @Controller, @Repository, @Service 有何区别?

  • 用过 JavaConfig 方式的 spring 配置吗?它是如何替代 xml 的?

  • Spring 有哪几种配置方式:


八、Spring Beans


  • Bean 的创建顺序是什么样的?

  • Spring 容器启动时,为什么先加载 BeanFactoryPostProcess

  • 如何在 Spring 所有 Bean 创建完后做扩展?

  • 如何在 Spring 所有 BeanDefinition 注册完后做扩展?

  • BeanDefinition 的加载过程:

  • Spring 如何避免在并发下获取不完整的 Bean?

  • Spring 是如何解决 Bean 的循环依赖?

  • 解释 Spring 框架中 bean 的生命周期

  • Spring 在加载过程中 Bean 有哪几种形态:

  • 有哪些生命周期回调方法?有哪几种实现方式?

  • 解释不同方式的自动装配,spring 自动装配 bean 有哪些方式?

  • 自动装配有哪些限制(需要注意)?

  • 什么是 bean 的自动装配?

  • 什么是 bean 装配?

  • Spring 如何处理线程并发问题?

  • Spring 框架中的单例 bean 是线程安全的吗?

  • Spring 实例化 bean 方式的几种方式

  • 单例 bean 的优势

  • 解释 Spring 支持的几种 bean 的作用域

  • 配置 Bean 有哪几种方式?

  • 什么是 Spring beans?


九、Spring IOC


  • 你知道 Spring 的哪些扩展点,在什么时候调用?

  • IOC 容器的加载过程:

  • BeanFactory 和 FactoryBean 有什么区别?

  • BeanFactory 和 ApplicationContext 有什么区别?

  • BeanDefinition 的作用

  • BeanFactory 的作用

  • 紧耦合和松耦合有什么区别?

  • 什么是 Spring 的依赖注入(DI)?IOC 和 DI 的区别是什么

  • Spring IoC 的实现机制是什么?

  • IOC 的优点是什么?

  • 控制反转(IoC)有什么作用

  • 什么是 Spring IOC 容器?有什么作用?


十、Spring Framework


  • Spring 的优缺点是什么?

  • 谈谈你对 Spring 的理解



一、Spring MVC

1、SpringMVC 的拦截器和过滤器有什么区别?执行顺序?

  • 拦截器不依赖与 servlet 容器,过滤器依赖与 servlet 容器。

  • 拦截器只能对 action 请求(DispatcherServlet 映射的请求)起作用,而过滤器则可以对几乎所有的请求起作用。

  • 拦截器可以访问容器中的 Bean(DI),而过滤器不能访问(基于 spring 注册的过滤器也可以访问容器中的 bean)。



多个过滤器的执行顺序跟 xml 文件中定义的先后关系有关

当然,对于多个拦截器它们之间的执行顺序跟在 SpringMVC 的配置文件中定义的先后顺序有关。

2、如何实现无 XML 零配置的 SpringMVC

1. 省略 web.xml


  • a. servlet3.0 之后规范中提供了 SPI 扩展:META-INF/services/javax.servlet.ServletContainerInitializer

  • b. SpringMVC 通过实现 ServletContainerInitializer 接口

  • c. 动态注册 ContextLoaderListener 和 DispatcherServlet 并创建子父容器(Application)


2. 省略 spring.xml 和 spring-mvc.xml(只是 sprinmvc 方式 ,springboot 在自动配置类完成) 配置类--xml


  • a. 实现一个继承 AbstractAnnotationConfigDispatcherServletInitializer 的类

  • b. 该类就实现了 ServletContainerInitializer,它会创建 ContextLoaderListener 和 DispatcherServlet

  • c. 还会创建父子容器, 创建容器时传入父子容器配置类则可以替代 spring.xml 和 spring-mvc.xml

3、是否可以把我们所需的 Bean 都放入 Spring­mvc 子容器里面来管理(springmvc 的 spring-servlet.xml 中配置全局扫描)?

**可以 **, 因为父容器的体现无非是为了获取子容器不包含的 bean, 如果全部包含在子容器完全用不到父容器了, 所以是可以全部放在 springmvc 子容器来管理的。


虽然可以这么做不过一般应该是不推荐这么去做的,一般人也不会这么干的。如果你的项目里有用到事物、或者 aop 记得也需要把这部分配置需要放到 Spring-mvc 子容器的配置文件来,不然一部分内容在子容器和一部分内容在父容器,可能就会导致你的事物或者 AOP 不生效。 所以如果 aop 或事物如果不生效也有可能是通过父容器(spring)去增强子容器(Springmvc),也就无法增强。

4、是否可以把所有 Bean 都通过 Spring 容器来管理?(Spring 的 applicationContext.xml 中配置全局扫描)

5、Spring 和 SpringMVC 为什么需要父子容器?

就功能性来说不用子父容器也可以完成(参考:SpringBoot 就没用子父容器)


  • 1. 所以父子容器的主要作用应该是划分框架边界。有点单一职责的味道。service、dao 层我们一般使用 spring 框架来管理、controller 层交给 springmvc 管理

  • 2. 规范整体架构 使 父容器 service 无法访问子容器 controller、子容器 controller 可以访问父容器 service

  • 3. 方便子容器的切换。如果现在我们想把 web 层从 spring mvc 替换成 struts,那么只需要将 spring­mvc.xml 替换成 Struts 的配置文件 struts.xml 即可,而 spring­core.xml 不需要改变。

  • 4. 为了节省重复 bean 创建

6、SpringMvc 怎么和 AJAX 相互调用的?

7、请描述 Spring MVC 的工作流程?描述一下 DispatcherServlet 的工作流程?

(1)用户发送请求至前端控制器 DispatcherServlet;


(2) DispatcherServlet 收到请求后,调用 HandlerMapping 处理器映射器,请求获取 Handle;


(3)处理器映射器根据请求 url 找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet;


(4)DispatcherServlet 调用 HandlerAdapter 处理器适配器;


(5)HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);


(6)Handler 执行完成返回 ModelAndView;


(7)HandlerAdapter 将 Handler 执行结果 ModelAndView 返回给 DispatcherServlet;


(8)DispatcherServlet 将 ModelAndView 传给 ViewResolver 视图解析器进行解析;


(9)ViewResolver 解析后返回具体 View;


(10)DispatcherServlet 对 View 进行渲染视图(即将模型数据填充至视图中)


(11)DispatcherServlet 响应用户


8、Spring MVC 的控制器是不是单例模式,如果是,有什么问题,怎么解决?


9、说说你是如何解决 get 和 post 乱码问题?


10、什么是 Spring MVC?简单介绍下你对 Spring MVC 的理解?


11、SpringBoot 的核心注解一、微服务。


二、Spring Boot

1、说说你在开发的时候怎么在 SpringBoot 的基础上做扩展?


2、SpringBoot 的默认日志实现框架是什么?怎么切换成别的?


3、SpringBoot 读取配置文件的原理是什么?


4、SpringBoot 中配置文件的加载顺序是怎样的?


5、会不会 SpringBoot 自定义 Starter?大概实现过程?


6、SpringBoot 外置 Tomcat 启动原理?


7、SpringBoot 内置 Tomcat 启动原理?


8、SpringBoot 的启动原理?



9、为什么 SpringBoot 的 jar 可以直接运行?


10、springboot 的自动配置原理?


11、SpringBoot 的核心注解


12、Spring 和 SpringBoot 的关系和区别?


13、谈谈你对 SpringBoot 的理解,它有哪些特性(优点)?

三、微服务

1、Sentinel 怎么防止激增流量打垮冷系统?


2、Ribbon 说说有哪些负载均衡策略


3、你们的微服务项目里面有没有用到什么监控追踪工具?


4、说说 Seata 的实现原理?


5、什么是服务熔断?什么是服务降级?区别是什么?


6、什么是服务雪崩?什么是服务限流?


7、说说服务网关可以做什么?


8、谈谈配置中心?


9、注册中心的原理是什么?


10、Spring Cloud 有哪些常用组件,作用是什么?


11、分布式架构下会有什么问题?


12、SOA、分布式、微服务之间有什么关系和区别?


13、什么情况下需要进行微服务架构?

四、Spring 核心 API

1、Spring 是如何整合 MyBatis 将 Mapper 接口注册为 Bean 的原理?


2、Spring 框架中都用到了哪些设计模式?


3、Spring 事件监听的核心机制是什么?

五、Spring 事务

1、Spring 事务的失效原因?


2、Spring 多线程事务 能否保证事务的一致性(同时提交、同时回滚)?


3、Spring 事务传播行为实现原理:


4、Spring 事务实现原理


5、说一下 spring 的事务隔离?


6、说一下 Spring 的事务传播行为


7、Spring 支持的事务管理类型, spring 事务实现方式有哪些?


8、事务四大特性

六、Spring AOP

1、Spring 的 Aop 的完整实现流程?


2、Spring 的 AOP 是在哪里创建的动态代理?


3、什么情况下 AOP 会失效,怎么解决?


4、介绍 AOP 有几种实现方式


5、JavaConfig 方式如何启用 AOP?如何强制使用 cglib?


6、JDK 动态代理和 CGLIB 动态代理的区别


7、Spring AOP and AspectJ AOP 有什么区别?


8、Spring 通知有哪些类型?


9、解释一下 Spring AOP 里面的几个名词


10、什么是 AOP、能做什么

七、Spring 注解


1、为什么 @ComponentScan 不设置 basePackage 也会扫描?


2、@Bean 之间的方法调用是怎么保证单例的?


3、配置类 @Configuration 的作用解析原理:


4、使用 @Autowired 注解自动装配的过程是怎样的?


5、@Autowired 和 @Resource 之间的区别


6、@Autowired 注解有什么作用


7、如何让自动注入找到多个依赖 Bean 时不报错


8、如何让自动注入没有找到依赖 Bean 时不报错


9、@Import 可以有几种用法?


10、@Component, @Controller, @Repository, @Service 有何区别?


11、用过 JavaConfig 方式的 spring 配置吗?它是如何替代 xml 的?


12、Spring 有哪几种配置方式:

八、Spring Beans

1、Bean 的创建顺序是什么样的?


2、Spring 容器启动时,为什么先加载 BeanFactoryPostProcess


3、如何在 Spring 所有 Bean 创建完后做扩展?


4、如何在 Spring 所有 BeanDefinition 注册完后做扩展?


5、BeanDefinition 的加载过程:


6、Spring 如何避免在并发下获取不完整的 Bean?


7、Spring 是如何解决 Bean 的循环依赖?


8、解释 Spring 框架中 bean 的生命周期


9、Spring 在加载过程中 Bean 有哪几种形态:


10、有哪些生命周期回调方法?有哪几种实现方式?


11、解释不同方式的自动装配,spring 自动装配 bean 有哪些方式?


12、自动装配有哪些限制(需要注意)?


13、什么是 bean 的自动装配?


14、什么是 bean 装配?


15、Spring 如何处理线程并发问题?


16、Spring 框架中的单例 bean 是线程安全的吗?


17、Spring 实例化 bean 方式的几种方式


18、单例 bean 的优势


19、解释 Spring 支持的几种 bean 的作用域


20、配置 Bean 有哪几种方式?


21、什么是 Spring beans?

九、Spring IOC

1、你知道 Spring 的哪些扩展点,在什么时候调用?


2、IOC 容器的加载过程:


3、BeanFactory 和 FactoryBean 有什么区别?


4、BeanFactory 和 ApplicationContext 有什么区别?


5、BeanDefinition 的作用


6、BeanFactory 的作用


7、紧耦合和松耦合有什么区别?


8、什么是 Spring 的依赖注入(DI)?IOC 和 DI 的区别是什么


9、Spring IoC 的实现机制是什么?


10、IOC 的优点是什么?


11、控制反转(IoC)有什么作用


12、什么是 Spring IOC 容器?有什么作用?

十、Spring Framework

1、Spring 的优缺点是什么?


2、谈谈你对 Spring 的理解




对了,小伙伴们面试中有遇到过奇葩问题吗?有的话,欢迎发在评论区跟大伙交流哦!

需要文章中配套资料的朋友可以——点击传送门

发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2022-09-20 加入

还未添加个人简介

评论

发布
暂无评论
吃透互联网必问的100道Spring全家桶高频真题,金九银十稳了_Java_小二,上酒上酒_InfoQ写作社区