Spring 基础面试题

一.Spring

1.什么是Spring框架?

Spring是一种开源框架,用于简化开发,整合框架。主要包含三个方面:IOC,DI,AOP

IOC:控制反转,将对象的创建权交给spring框架创建

DI:依赖注入,给容器中的bean与bean之间建立的依赖关系

AOP:面向切面编程

2.IOC容器有哪些?

ClassPathXmlApplicationContext,FileSystemXmlApplicationContext,AnnotaionConfigApplicationContext,Beanfactoy

3.DI

依赖注入,给容器中bean的属性赋值就叫依赖注入。

依赖注入的方式有哪些?
    构造器注入
        <constructor-arg name="" ref="" / value="">
    setter注入
        <property name="" ref="" / value="">

4.ApplicationContext和BeanFactory的区别?

ApplicatinContext和BeanFactory都是spring容器

BeanFactory是底层接口,ApplicationContext是派生接口,功能更强大。BeanFactory是懒加载(使用的时候才会创建bean),当内存不足时可以选择BeanFactory容器。ApplicationContext默认在容器初始化时就会加载所有bean,优点是拿来即用,无需加载,缺点是起始阶段太占内存。

5.BeanFactory和FactorvBean的区别?

BeanFactory是spring容器,FactoryBean是工厂bean,用于创建bean,并将创建出来的bean放到容器中。

6.bean标签中的属性?

<bean  id=""  name=""  class=""  scope=""  init-method=""  desctory-method=""  lazy-init=""  autowire=""/>

id:创建Bean对象的名称

name:给bean对象起别名

class:要创建什么类型的对象

scope:singleton(默认为单例),prototype多例

init-method:初始化方法

desctory-method:销毁方法

lazy-init:是否为懒加载

autowire:是否自动装配

7.Spring中的单例Bean是线程安全的吗?怎么解决线程安全问题?

不安全。但是spring中Bena是无状态的,也就是不存储任何内容,从某种意义上是线程安全的。

1.把bean的作用域改为非单例 prototype
2,把共享变量放到ThreadLocal中,ThreadLocal是线程私有变量,线程间隔离,也可以解决线程安全问题

8.简单描述下Spring容器中bean的生命周期?

BeanDefinition  >>  实例化  >>  注入依赖  >>  初始化  >>  使用  >> 销毁

1.先通过配置文件或者注解拿到所有的BeanDefinition,并放到BeanDefinitionMap中

2.从BeanDefinitionMap中拿到bean定义并进行实例化 new 

3.依赖注入,给容器中的bean与bean建立依赖关系

4.初始化,给属性赋值

5.初始化完成后,就可以把bean放到spring容器中,ConcurrentHashMap,我们使用的时候就可以通过getBean来获取bean

6.容器销毁的时候,bean也会跟着销毁

BeanDefinition是bean定义。描述的是这个bean的类型,既这个bean的名字,有哪些属性,有哪些构造函数,有哪些方法。

9.AOP的理解?

概念?
    面向切面编程。把公共代码抽取出来,并在不改变原始代码的基础上对方法进行功能增强。

连接点:所有可以被功能增强的方法都是连接点
切入点:进行了功能增强的方法就是切入点
通知:共性功能
通知类:通知所在的类就是通知类
切面:切入点+通知就是切面。描述的是 在哪些方法上进行什么功能增强

10.AOP底层原理?

动态代理。在程序运行期间动态的生成一个代理对象,当调用到原始方法时,真正执行的是代理对象的代理方法。

动态代理实现方式有两种,基于JDK的动态代理(反射)和基于CGLib的动态代理(继承)。

11.AOP五种通知类型?

    前置通知:@Before
    后置通知:@After
    环绕通知:@Around
    异常后通知:@AfterThrowing
    返回后通知:@AfterReturning

12.注解

Spring中用过哪些注解? 

  定义bean: @Component @Controller @Service @Repository
  依赖注入:@Autowired @Qualifier @Resource @Value
  定义第三方bean:@Bean
  配置类注解:@Configuration @Import @PropertySource @ComponentScan
  bean的作用范围和生命周期:@Scope @PostConstruct @PreDestroy

13.事务

Spring中事务的作用?

        保证业务层的方法同时成功同时失败

如何添加事务?
    1. @Transactional
    2. 在主配置类上添加 @EnableTransactionManager
    3. 把事务管理器交给Spring管理 PlateformTransactionManagement

事务传播行为的作用?
    用于解决业务层方法相互调用产生的事务问题,描述的是 事务协调员是否要和事务管理员同成功同失败

事务传播行为有哪些?
    默认、新建、支持、不支持

说一下事务的ACID?

1.原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,保证事务要么同时成功,要么同时失败。

2.一致性(Consistency):事务的前后数据的完整性必须保持一致

3.隔离性(Isolation):事务的隔离性是指多个用户并发的访问数据库时,数据库为每一个用户开启事务,不能被其他事务操作所干扰,多个并发的事务之间要相互隔离

4.持久性(Durability):持久性是指事务一旦被提交,它对数据库的数据修改是永久性的,即使数据库发生故障也不能对其有任何影响

事务的隔离级别?

1.读未提交(read uncommitted):另一个事务修改了数据,但未提交数据,而本事务在select中会读到这些未被提交数据(脏读)

2.读以提交(read committed)RC:事务能够看到的数据都是其他事务已经提交的修改,也就是保证不会看到任何中间性状态,当然脏读也不会出现。

3.可重复读(repeatable read)RR:保证同一个事务中多次读取的数据是一致的,这是 MySQL InnoDB 引擎的默认隔离级别。

4.串行化(serializable):并发事务之间是串行化的,通常意味着读取需要获取共享读锁,更新需要获取排他写锁,如果 SQL 使用 WHERE 语句,还会获取区间锁,是最高的隔离级别。

二.SpringMvc

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值