面试必问———————Spring
作者:互联网
-
描述集群、负载均衡、分布式
集群
是将一个系统部署在不同的服务器上,我们把这些部署着相同系统的不同服务器叫做集群。
负载均衡
网络的负载均衡是一种动态均衡技术,常见的实现方式是通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理均衡地分配出去。
分布式
是将一个系统分为若干个子系统,每个子系统被部署在不同的服务器上,且每个子系统都可以独立运行。
-
Nginx负载均衡的规则有哪些
1、轮询(默认)
2、指定权重
3、IP绑定 ip_hash
4、fair(第三方)
5、url_hash(第三方)
-
详细描述什么是Spring?
1、Spring的核心是一个轻量级(Lightweight)的容器(Container)。
2、Spring是实现IoC(Inversion of Control)容器和非入侵性(No intrusive)的框架。
3、Spring提供AOP(Aspect-oriented programming)概念的实现方式。
4、Spring提供对持久层(Persistence)、事物(Transcation)的支持。
5、Spring供MVC Web框架的实现,并对一些常用的企业服务API提供一致的模 型封装。
6、Spring提供了对现存的各种框架相整合的方案。
总之,Spring是一个全方位的应用程序框架。 -
什么是Spring IOC?
Sring的IOC称为控制反转,是一种设计思想,SpringIOC的底层是基于动态代理来实现的,之前开发时需要重新new一个对象出来,如今则只需要将需要创建的对象注入到Spring 的IOC容器当中,由IOC容器来为我们创建并管理注入对象的生命周期,需要对象时我们只需要只需要从IOC容器中取出即可,创建对象控制权的转移就是一种控制反转,。
-
什么是Spring AOP?描述其应用场景(最少2个)
Spring的AOP称为面向切面编程,AOP 有助于我们将不同但是有必要的重复性代码重构为不同的模块。这么做的好处是,我们可以将这些重复性代码集中管理起来复用,而不是每次都要重复写一遍。这种方法的好处是,代码将会变得更易于维护,从而将业务逻辑从杂乱的代码中脱离出来,专注于业务逻辑代码的开发。我们将这些不同的功能划分到不同的切面中。
应用场景:
集中日志记录、事务管理
-
AOP的通知有几个,分别是什么
五个
前置通知,后置通知,异常通知,环绕通知,返回值通知
-
描述Spring Bean的作用域?
singleton
在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,bean作用域范围的默认值。
prototype
每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()。
request
每次HTTP请求都会创建一个新的Bean,该作用域仅适用于web的Spring WebApplicationContext环境。
session
同一个HTTP Session共享一个Bean,不同Session使用不同的Bean。该作用域仅适用于web的Spring WebApplicationContext环境。
application
限定一个Bean的作用域为ServletContext的生命周期。该作用域仅适用于web的Spring WebApplicationContext环境。
-
Spring Bean 注入有几种方式?
1、Set()注入
2、构造器注入
3、静态工厂的方法注入
4、实例工厂的方法注入
-
SpringBean 生命周期?
Bean的建立 由BeanFactory读取Bean定义文件,并生成各个实例。 Setter注入 执行Bean的属性依赖注入。 BeanNameAware的setBeanName() 如果Bean类实现了org.springframework.beans.factory.BeanNameAware接口,则执行其setBeanName()方法。 BeanFactoryAware的setBeanFactory() 如果Bean类实现了org.springframework.beans.factory.BeanFactoryAware接口,则执行其setBeanFactory()方法。 BeanPostProcessors的processBeforeInitialization() 容器中如果有实现org.springframework.beans.factory.BeanPostProcessors接口的实例,则任何Bean在初始化之前都会执行这个实例的processBeforeInitialization()方法。 InitializingBean的afterPropertiesSet() 如果Bean类实现了org.springframework.beans.factory.InitializingBean接口,则执行其afterPropertiesSet()方法。 Bean定义文件中定义init-method 在Bean定义文件中使用“init-method”属性设定方法名称,如下: <bean id="demoBean" class="com.yangsq.bean.DemoBean" init-method="initMethod"> ....... </bean> 这时会执行initMethod()方法,注意,这个方法是不带参数的。 BeanPostProcessors的processAfterInitialization() 容器中如果有实现org.springframework.beans.factory.BeanPostProcessors接口的实例,则任何Bean在初始化之前都会执行这个实例的processAfterInitialization()方法。 DisposableBean的destroy() 在容器关闭时,如果Bean类实现了org.springframework.beans.factory.DisposableBean接口,则执行它的destroy()方法。 Bean定义文件中定义destroy-method 在容器关闭时,可以在Bean定义文件中使用“destory-method”定义的方法 <bean id="demoBean" class="com.yangsq.bean.DemoBean" destory-method="destroyMethod"> ....... </bean> 这时会执行destroyMethod()方法,注意,这个方法是不带参数的。
-
Spring框架中 用到了哪些设计模式?(不低于3个)
(1)工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;
(2)单例模式:Bean默认为单例模式。
(3)代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;
(4)模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
-
描述Spring事务传播行为?
PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则新建一个事务。 -
描述Spring事务的隔离级别?
READ_UNCOMMITTED
意思是,一个事务可以读取到另一个事务未提交的事务记录。READ_COMMITTED
隔离级别表明,一个事务只能读取到已经提交的记录REPEATABLE_READ
意思是,一个事务可以多次从数据库读取某条记录,而且多次读取的那条记录都是一致的,SERIALIZABLE是Spring最强的隔离级别。事务执行时,会在所有级别上加锁,比如read和write时都会加锁,仿佛事务是以串行的方式进行的,而不是一起发生的。这会防止dirty read、non-repeatable read和phantom read的出现,但是,会带来性能的下降。
MySQL默认是
REPEATABLE_READ
。 -
Spring事务传播行为 REQUIRED和REQUIRES_NEW区别
PROPAGATION_REQUIRED
加入当前正要执行的事务不在另外一个事务里,那么就起一个新的事务
比如说,ServiceB.methodB的事务级别定义为PROPAGATION_REQUIRED, 那么由于执行ServiceA.methodA的时候,ServiceA.methodA已经起了事务,这时调用ServiceB.methodB,ServiceB.methodB看到自己已经运行在ServiceA.methodA
的事务内部,就不再起新的事务。而假如ServiceA.methodA运行的时候发现自己没有在事务中,他就会为自己分配一个事务。这样,在ServiceA.methodA或者在ServiceB.methodB内的任何地方出现异常,事务都会被回滚。即使ServiceB.methodB的事务已经被提交,但是ServiceA.methodA在接下来fail要回滚,ServiceB.methodB也要回滚PROPAGATION_REQUIRES_NEW
那么当执行到ServiceB.methodB的时候,ServiceA.methodA所在的事务就会挂起,ServiceB.methodB会起 一个新的事务,等待ServiceB.methodB的事务完成以后,
他才继续执行。他与PROPAGATION_REQUIRED 的事务区别在于事务的回滚程度了。因为ServiceB.methodB 是新起一个事务,那么就是存在
两个不同的事务。如果ServiceB.methodB已经提交,那么ServiceA.methodA失败回滚,ServiceB.methodB 是不会回滚的。如果ServiceB.methodB失败回滚,
如果他抛出的异常被ServiceA.methodA捕获,ServiceA.methodA事务仍然可能提交。
标签:事务,必问,PROPAGATION,Spring,面试,Bean,methodB,ServiceB 来源: https://blog.csdn.net/fuNSck/article/details/116148514