首页 > 其他分享 >Spring面试题

Spring面试题

时间:2024-09-24 23:18:57浏览次数:3  
标签:容器 面试题 Spring Bean bean 注解 IOC

1.Spring框架基本理解

关键词:核心思想IOC/AOP、作用(解耦、简化),简单描述框架组成

  • Spring是一个企业级、轻量级开源的分层架构
  • 核心思想:IOC(控制反转)和AOP(面向切面编程)
  • 1.为Java应用程序开发提供组件管理服务;2.用于组件之间的解耦 3.简化第三方JavaEE中间技术的使用
  • Spring框架包括:IOC容器、Validation数据校验、AOP面向切面编程、Transaction事务管理、SpringJDBC、Spring MVC框架、以及第三方JavaEE中间技术集成
2.Spring框架有哪些模块组成?
关键词:官方文档描述,由7各模块组成

Spring Framework根据官方文档的描述,主要包括以下常用5各模块

1.Core:核心模块

   包括:IOC Container(IOC容器),Events(事件通知机制)、Resources(资源加载机制), iln8(国际化),Validation(数据校验)、Data Binding(数据绑定)、Type Conversion(数据转换),sqEL(Spring表达式),Aop(面向切面编程);

2.Testing:测试模块

  包括:Mock Objects(测试模拟对象),TestContext Framework(测试框架),Spring MVC Test(用于测试SpringMVC),WebTestClient(用于测试WebClient、Restful、Webflux等);

3.Data Access:数据访问模块

包括:Transaction(事务管理),DAO Support(Data Access Object DAO 模式封装),JDBC(Spring 对于JDBC的操作封装),O/R Mapping (Spring 对于对象关系映射框架的封装,例如Hibernate等框架)等;

4.Web Servlet:基于Servlet的Web应用开发

包括:Spring MVC(Spring 基于MVC模式设计封装的Web框架),WebSocket(Spring  集成WebSocket,WebSocket是一个服务器与客户端双向通信的技术)等;

5.Integration  企业级系统集成模块(不同系统之间的交互集成)

  包括:Remoting(Spring 用于在分布式系统中进行远程服务调用的通讯框架),JMS,(Spring集成各类java消息中间件、java消息服务[Java Message Service],例如ActiveMq等),Java Email(邮件发送),Tasks Scheduling(任务调用);

 3.Spring IOC的理解

关键词:IOC名词解释,作用是解耦,使用IOC容器管理项目之间的耦合关系

IOC(控制反转)是Spring框架核心思想之一,作用于解耦。IOC是指将创建Bean的权利交给Spring框架管理。Spring框架通过配置类和注解的方式,创建Bean并管理各个Bean之间的依赖关系,从而形成解耦。

控制:指创建对象(实例化、管理)的权利

反转:控制权交给外部环境来管理(Spring框架、IOC容器)

4.SpringIOC容器理解
关键词:IOC容器作用、存储形式、初始化过程
  • IOC通常被理解为IOC Container容器,IOC容器实质就是Map ,键指的是bean的id,值指的是bean对象。IOC对象负责创建和管理Bean对象和Bean的生命周期。通过注解或者配置类,管理bean的每个对象,以及根据bean之间依赖关系,完成bean注入。
  • IOC容器是属于spring core 模块,用来创建和管理Bean,默认使用单例方式将bean存储到一个ConcurrentHashMap类型的Map集合。
  • IOC容器使用ConcurrentHashMap集合存储了BeanDefinition对象,该对象封装了Spring对一个Bean的所有配置信息,包括:类名,属性,构造方法参数,依赖,是否延迟加载,是否是单例等配置信息
5.Spring DI的理解

 关键词:名词解释

DI(依赖注入),指应用程序在运行时,每一个bean对象都依赖IOC注入当前bean对象所需要的另一个bean对象。

6.什么是spring的bean?

Bean代表IOC容器管理的对象

通过配置文件或注解,告诉IOC容器我们管理那些对象

7.将一个类声明的注解有哪些?
  • @Component:通用Bean的注解,可标注任意类

  • @Repository:数据访问层的注解

  • @Service:业务层注解

  • @Controller:控制层注解

8.@Component和@Bean的区别是什么?

@Component注解在类上,@Bean注解在方法上

@Component是通过类路径扫描来实现自动扫描并完成装配Bean到SpringIOC容器中

@Bean通过注解方式告诉IOC容器,该方法返回是一个实例bean。

9.@Autowired和@Resource的区别?

@Autowired是Spring提供的,@Resource是jdk提供的

@Autowired默认注入方式是byType(按类型注入)@Resource默认注入是按照ByName(按名称注入) 

10.Spring框架中的常见注入方式?

关键词:整体介绍三种注入方式,分别介绍每个注入的细节

Spring IOC有三种注入方式:构造注入、Setter注入、属性注入

 构造注入:使用构造方法注入bean

Setter注入:使用Setter方法注入bean

属性注入:使用成员属性注入bean,不推荐。原因:使用私有成员属性变量,依靠反射实现,破坏封装,只能依靠IOC容器实现注入,不严谨

11.Spring中常见的ApplicationContext实现类有哪些?

关键词:分别介绍每种实现类或子接口

  • ClassPathXmlApplicationContext:根据项目类路径下配置文件加载bean
  • FileSystemApplicationContext:根据当前磁盘下绝对路径下的配置文件加载bean
  • AnnotationConfigApplicationContext:根据读取注解加载bean
  • WebApplicationContext:web容器下按照配置文件加载bean 
12.BeanFactory和ApplicationContext有什么区别?
关键词 :两者之间的关系、区别与不同、Bean的创建加载方法

两者之间的关系:BeanFactory和ApplicationContext是spring的两大核心接口,两者都可做spring容器

两者区别与不同:BeanFactory是Spring最底层的接口,定义IOC最基本功能,包括:定义、加载、实例化、依赖、生命周期等。

Application是BeanFactory的子接口,具备BeanFactory所具有的功能,其次还继承其他框架接口:MessageSource(支持国际化)、资源文件访问、同时可加载多个配置文件、监听器可管理Bean的生命周期。

Bean的创建加载方法:

BeanFactory延迟加载

Application通过容器启动加载

13.Spring框架Bean的作用域

Singleton:只创建一次对象,单例是spring的bean默认作用域 

prototype:每次获取bean,spring会创建一次新的bean实例

request:每一次Http请求,spring会创建一次新的bean实例

session:不同Http会话,spring会创建不同的bean实例;

14.Spring框架中的线程安全
  • 对singleton作用域bean,只会创建一次新对象,所有线程会共享同一个单例bean,存在资源竞争,因此是存在线程不安全
  • 对propotype作用域bean,每次都会创建新对象,不会存在线程共享问题,所以线程安全

如何解决线程不安全:

1.在类中避免定义可变成员变量

2.在类中定义ThreadLocal成员变量,将可变成员变量保存在ThreaadLocal中。

15.bean生命周期

实例化、初始化、操作使用、销毁

Spring容器启动时,会加载xml配置文件获取bean信息,并将bean的信息封装成一个BeanDefition,此刻可以对BeanDefition进行动态处理,也就是bean工厂后处理,BeanFactory分为两个接口,一个是BeanFactoryPostProcess,另一个是BeanFactoryRegisterPostProcess,通过BeanFactory后处理对BeanDefinition进行注册或修改之后,保存到一个数据结构为BeanDefitionMap中,

实例化:对bean保存后的bean信息进行实例化,只是创建bean对象,并未进行属性赋值,此刻的bean是“半成品”

初始化:对半成品的bean对象进行 属性赋值、Aware接口方法的回调、执行BeanPostProcess的before,接口初始化(或者接口初始化),BeanPoSTProcess的after。此刻生成的bean是“完整的”

操作使用:将完整bean存放在SingletonObject集合中,供应用程序所使用。

销毁:接口销毁或属性销毁。

 16.如何解决循环依赖

循环依赖:指两个或多个bean之间的相互依赖关系,形成闭环。

三级缓存缓存解决循环依赖问题:

一级缓存:实例化和初始化完成的bean对象

二级缓存:缓存半成品bean对象,但该对象被引用了

三级缓存:缓存半成品bean对象,但该对象未被引用

17. Spring框架都有哪些注解

用于声明Bean的注解

@Component:通用bean的注解,可以是任意类

@Repository:数据访问层注解

@Service:业务层注解

@Controller:控制层注解

用于注入的注解:

@Autowired:按类型自动注入

@Qualifier:按名称自动注入

用于声明配置、扫描、启用特性的注解

@Configration:声明配置类

18.Spring框架中使用的设计模式
  • 工厂模式:使用用工厂模式,通过BeanFactory和ApplicationContext,创建对象
  • 单例模式:bean默认单例模式,使用单例模式设计
  • 策略模式:Resource实现类,针对不同资源文件,实现不同方式的资源获取策略
  • 代理模式:spring的AOP的实现动态代理
  • 模版模式:spring提供JDBCTemplate、RediesTemplate等模版,将相同操作的步骤封装
  • 适配器模式:spring的AOP的增强和通知使用适配器模式,Spring MVC也使用适配器模式controller
19.Spring框架中AOP的理解

AOP(面向切面编程):将那些与业务无关,却为业务模块所共用调用逻辑(如:事务处理、日志管理、权限控制等)封装抽成一个可重用的模块,该模块称为切面,减少代码的可重复性,降低代码见得耦合度,可利于未来代码的可扩展性和可维护性。

SpringAOP动态代理:

  • 若被代理类实现接口,springAop使用JDK,基于接口的方式,创建对象
  • 若被代理类未实现接口,SpringAOP使用cglib,基于继承方式,生成被代理的子类来做代理。
 20.Spring AOP和AspectJ有什么区别?

增强方式:

  •    Spring AOP:运行时增强
  •    AspectJ:编译时增强

实现方式:

  •    Spring AOP:基于动态代理
  •     AspectJ:基于字节码操作

功能和复杂性:

  •    AspectJ:功能强大但相对复杂
  •     SpringAOP:更简单易用

性能:

  • 切面代码较少,两者性能差异不大
  • 切面代码较多时,AspectJ性能优于Spring AOP
21.Spring AOP有哪些通知类型?
  • 前置通知 :实现MethodBeforeAdvice接口,在目标方法调用前,执行通知;
  • 后置通知:实现AfterReturnAdvice接口,在目标方法成功完成后执行通知;
  • 异常通知:实现ThrowsAdvice接口,在方法抛出异常时,执行通知;
  • 环绕通知:实现MethodInterceptor接口,是一个包围目标方法通知。环绕通知可以在方法调用前后,完成自定义行为。
22. Spring事务中有哪几种事务隔离级别?

默认隔离级别(TRANSACTIONDefition.ISOLATION_DEFAULT):使用当前数据库的默认隔离级别,Mysql默认采用的是可重复读,Oracle默认采用读已提交

读未提交(TransactionDefinition.ISOLATION_READ_UNCOMMITTED最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复度

读已提交(TransactionDefition.ISOLATION_READ_COMMITTED:允许读取并发实物已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生

可重复读(TransactionDefition.ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果都是一致的,除非数据是本身事务自己所修改的,可以阻止脏读和不可重复读,但幻读仍有可能发生

串行化(TransactionDefition.ISOLATION_SERIALIZABLE:该级别可以防止脏读、不可重复读以及幻读。这将严重影响程序性能。通常情况下也不会用到该级别。

标签:容器,面试题,Spring,Bean,bean,注解,IOC
From: https://blog.csdn.net/fada_da_da/article/details/142327478

相关文章