spring面试题

1详细描述什么是Spring?

Spring是一个轻量级的,开源设计框架,核心是IOC和AOP,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用

优点 :

  • spring如同一个工厂, 将所有的对象创建和销毁JavaBean交给spring管理,降低了对象之间的耦合性

  • 集成各种优秀的框架 , 封装了java EE中的一些难用的API , 降低了开发的难度

  • 同时spring支持JUnit4 , 可以通过注解方便测试spring程序

  • 支持AOP编程,可方便的实现对程序进行权限和运行监控

  • 声明式事务支持 , 通过配置就可以完成对事务的管理

    缺点:

    1.使用门槛升高,入门Spring需要较长时间;

    2.对过时技术兼容,导致复杂度升高;

    3.使用XML进行配置,但已不是流行配置方式;

    4.集成第三方工具时候需要考虑兼容性;

    5.系统启动慢,不具备热部署功能,完全依赖虚拟机或Web服务器的热部署。

2什么是Spring IOC?

概念:控制反转 , 将设计好的对象交给spring管理

优点:降偶 , 资源集中管理 , 提高复用性

Spring IOC 负责创建对象,管理对象(通过依赖注入(DI),装配对象,配置对象,并且管理这些对 象的整个生命周期。

3.什么是Spring AOP?描述其应用场景(最少2个)

概念:面向切面编程 , 通过预编译的方式和运行期动态代理 , 实现不修改代码 , 给应用添加统一功能,也可以利用AOP对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率

应用: 事务 , 日志 , 缓存等

4.AOP的通知有几个,分别是什么

  • 前置通知:before在连接点之前执行,不会影响连接点执行除非抛出异常
  • 后置通知:after**在连接点之后执行,连接点抛出异常,则不执行
  • 返回通知:after-returning在连接点执行后执行,不管是否抛出异常都会执行
  • 异常通知:after-throwing**连接点之后执行,连接点抛出异常则执行
  • 环绕通知:around**环绕在连接点前后执行

5.描述Spring Bean的作用域?

  • singleton:在spring容器中只存在一个bean实例,为默认值,单例模式
  • prototype:每次从spring中调用都会创建一个新的实例,多例模式
  • request:HTTP请求都会创建一个新的bean,适用于WebApplicationContext环境
  • session:**同一个HTTPsession共享一个Bean,不同的session使用不同的Bean,适用于WebApplicationContext环境
    application:绑定一个bean的作用域为selevelContent的生命周期,该作用域只适用于web的spring webapplicationcontent环境

6.Spring Bean 注入有几种方式?

  • 构造器注入:通过在bean的构造方法中将bean注入

  • setter注入:在bean的set方法中注入

  • 工厂方法注入:通过方法返回值注入

    什么时候用 SET注入、什么时候构造器注入?

    从bean生命周期:

    实例化BEAN:构造器

    SET注入属性赋值 set注入

7.SpringBean 生命周期?

实例化BEAN

(前置处理器)

init()初始化方法

(后置处理器)

SET注入属性赋值

使用目标方法

destrory()方法

   <bean id="a" class="org.A">

   		<property name="name" value="123"></property>
   	
   		</bean>
   	
   		<bean id="b" class="org.B">
   				<property name="name" value="123"></property>
   	
   		</bean>
   	
   		  1 A实例化BEAN
   		   2 SET赋值
   		   3、使用BEAN
   		   4、B实例化BEAN
   		   5、SET赋值
   		   6、使用BEAN


   ​		

   		有依赖关系
   	
   		<bean id="a" class="org.A">
   	
   		<property name="name" value="123"></property>
   	
   		<property name="b" ref="b"></property>	
   	
   		</bean>


   ​		

   		<bean id="b" class="org.B">
   				<property name="name" value="123"></property>
   	
   		​	<property name="a" ref="A"></property>	
   	
   		</bean>
   	
   		 1.A实例化BEAN
   		  2.B实例化BEAN
   		   。。。

1、Spring 容器根据配置中的 bean 定义中实例化 bean。

2、Spring 使用依赖注入填充所有属性,如 bean 中所定义的配置。

3 .如果 bean实现BeanNameAware 接口,则工厂通过传递 bean的 ID来调用setBeanName()

4 、如果 bean 实现 BeanFactoryAware 接口,工厂通过传递自身的实例来调用 setBeanFactory()

5、如果存在与 bean 关联的任何 BeanPostProcessors,则调用 preProcessBeforeInitialization()

方法。

6、如果Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法。

7 、 最 后 , 如 果 存 在 与 bean 关 联 的 任 何 BeanPostProcessors , 则 将 调 用

postProcessAfterInitialization() 方法。

8、如果 bean 实现 DisposableBean 接口,当 spring 容器关闭时,会调用 destory()。

9、如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。

8.Spring框架中 用到了哪些设计模式?(不低于3个)

代理模式,在 AOP 中被使用最多。

单例模式,在 Spring 配置文件中定义 bean 的时候默认的是单例模式。

工厂模式, BeanFactory 用来创建对象的实例。

模板方法, 用来解决重复性代码。 前端控制器,Spring 提供了 DispatcherSerclet 来对请求进行分发。视图帮助,Spring 提供了一系列的 JSP 标签。

依赖注入,它是惯穿于 BeanFactory/ApplicationContext 接口的核心理念。

设计模式:前人的经验总结。

设计一种思想,有来简化软件开发。提高代码复用率。

框架:

定义:一系列类、方法、接口的集成。

作用:简化代码开发,提高开发效率。减少BUG产生。

9.描述Spring事务传播行为?

PROPAGATION(蔓延、传播、传输)

proparation+** 如下七种前面加这个单词

  • required:**默认传播行为,有事务加入事务,没有事务创建一个
  • required_New:**不管事务是否存在,都创建一个新的事务,先执行新事务,原事务挂机,稍后执行
  • supports:**为调用此方法的bean声明事务,否则就不用声明事务
  • Notsupported:**容器不为这个方法开启事务
  • mandatory:**必须在一个已有事务中执行,否则抛出异常
  • Never:**必须在一个没有事务中执行,否则抛出异常
  • Nested:**如果当前事务存在,则嵌套事务内执行(如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。)

10.描述Spring事务的隔离级别?

  • isolation-default:默认传播行为
  • isolation-read-uncommitted:读未提交
  • isolation-read-commit:读已提交
  • isolation-repeatable-read:可重复读
  • isolation-serializable:序列化读

11.Spring事务传播行为 REQUIRED和REQUIRED_NEW区别

@Transactional` 注解来实现(底层用的是AOP机制)–》

​ 1、注解声明在 接口(public方法修饰)、类上(当前所有的public方法)、方法上。

​ 2、PROPAGATION_REQUIRED 和REQUIRES_NEW 的区别?

PROPAGATION_REQUIRED (默认)

  • 支持当前事务,如果当前没有事务,则新建事务
  • 如果当前存在事务,则加入当前事务,合并成一个事务

REQUIRES_NEW (REQUIRES_NEW 一般用在子方法需要单独事务)

  • 新建事务,如果当前存在事务,则把当前事务挂起
  • 这个方法会独立提交事务,不受调用者的事务影响,父级异常,它也是正常提交

3、 aop 来代理事务控制 ,是针对于接口或类的,所以在同一个 service 类中两个方法的调用,传播机制是不生效的。

a:需要将两个方法分别写在不同的类里。
b:调用B方法的时候,将service自己注入自己,用这个注入对象来调用B方法。

12.数据库设计三大范式?

1.第一范式:

第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。

2.第二范式:

第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

3.第三范式:

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

13.软件开发生命周期?

软件生命周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段

14.说一下DTO和PO的区别?以及优缺点?

PO(Persistent Object):持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性。

DTO(Data Transfer Object):数据传输对象,减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。

DTO代表服务层需要接收的数据和返回的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值