• Spring常见面试题总结


    1、Spring是什么?
    Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。

    2、Spring的IoC理解:
    控制反转,把对象创建的过程和对象之间的调用过程交给spring管理。
    底层原理:xml解析,工厂模式,反射。
    单例模式:单例模式要求某一类能够有返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称)。

    工厂模式:为创建对象提供过渡接口,以便将创建对象的具体过程(new 关键字和具体的构造器)隐藏起来。用一个工厂方法来替代,对外提供的只是一个工厂方法,达到提高灵活性的目的。
    在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。该核心类成为一个抽象工厂角色,
    仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

    反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;
    这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

    Bean管理:spring创建对象,spring注入属性
    Spring的IOC有三种注入方式 :构造器注入、set方法注入、根据注解注入。

    3、BeanFactory和ApplicationContext有什么区别?
    BeanFactroy:spring内部的子接口,不提供开发人员使用。
    ApplicationContext是BeanFactory的子接口,一般由开发人员使用

    4、Spring Bean的生命周期?
    实例化 --> 属性赋值 -->(前置处理)把bean的实例传递给bean的前置处理器的方法--> 初始化 --> (后置处理)把bean的实例传递给bean的后置处理器的方法 --> 获取对象 --> 销毁

    5、 Spring中bean的作用域:

    6、Spring框架中的Bean是线程安全的么?如果线程不安全,那么如何处理?
    Spring容器本身并没有提供Bean的线程安全策略,因此可以说Spring容器中的Bean本身不具备线程安全的特性,但是具体情况还是要结合Bean的作用域来讨论。
    (1)对于prototype作用域的Bean,每次都创建一个新对象,也就是线程之间不存在Bean共享,因此不会有线程安全问题。
    (2)对于singleton作用域的Bean,所有的线程都共享一个单例实例的Bean,因此是存在线程安全问题的。但是如果单例Bean是一个无状态Bean,也就是线程中的操作不会对Bean的成员执行查询以外的操作,那么这个单例Bean是线程安全的。比如Controller类、Service类和Dao等,这些Bean大多是无状态的,只关注于方法本身。
    对于有状态的bean(比如Model和View),就需要自行保证线程安全,最浅显的解决办法就是将有状态的bean的作用域由“singleton”改为“prototype”。
    也可以采用ThreadLocal解决线程安全问题,为每个线程提供一个独立的变量副本,不同线程只操作自己线程的副本变量。

    7、Spring的自动装配:
    (1)在Spring框架xml配置中共有5种自动装配:
    no:默认的方式是不进行自动装配的,通过手工设置ref属性来进行装配bean。
    byName:通过bean的名称进行自动装配,如果一个bean的 property 与另一bean 的name 相同,就进行自动装配。 
    byType:通过参数的数据类型进行自动装配。
    constructor:利用构造函数进行装配,并且构造函数的参数通过byType进行装配。
    autodetect:自动探测,如果有构造方法,通过 construct的方式自动装配,否则使用 byType的方式自动装配。
    2)基于注解的自动装配方式:

    使用@Autowired、@Resource注解来自动装配指定的bean。在使用@Autowired注解之前需要在Spring配置文件进行配置,<context:annotation-config />。在启动spring IoC时,容器自动装载了一个AutowiredAnnotationBeanPostProcessor后置处理器,当容器扫描到@Autowied、@Resource或@Inject时,就会在IoC容器自动查找需要的bean,并装配给该对象的属性。在使用@Autowired时,首先在容器中查询对应类型的bean:

    8、Spring的AOP理解:面向切面编程,不修改源码进行主干功能增强。
    AOP实现的关键在于 代理模式,AOP代理主要分为静态代理和动态代理。静态代理的代表为AspectJ;动态代理则以Spring AOP为代表。
    动态代理的角色和静态代理的一样 ,动态代理的代理类是动态生成的 . 静态代理的代理类是我们提前写好的
    Spring AOP中的动态代理主要有两种方式,(有接口的情况下)JDK动态代理和(没有接口的情况下)CGLIB动态代理

    9、Spring AOP里面的几个名词的概念


    10.事务
    事务就是把一系列的动作当成一个独立的工作单元,这些动作要么全部完成,要么全部不起作用。
    事务四个属性ACID
    原子性(atomicity)
    事务是原子性操作,由一系列动作组成,事务的原子性确保动作要么全部完成,要么完全不起作用
    一致性(consistency)
    一旦所有事务动作完成,事务就要被提交。数据和资源处于一种满足业务规则的一致性状态中
    隔离性(isolation)
    可能多个事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏
    持久性(durability)
    事务一旦完成,无论系统发生什么错误,结果都不会受到影响。通常情况下,事务的结果被写到持久化存储器中

    参考链接
    Spring常见面试题总结:https://blog.csdn.net/a745233700/article/details/80959716

  • 相关阅读:
    Java修饰符
    java中接口的定义
    抽象类
    final关键字的特点
    hdu6489 2018 黑龙江省大学生程序设计竞赛j题
    POJ 3268 (dijkstra变形)
    poj 2253 floyd最短路
    poj1681 Network
    bzoj1202 狡猾的商人
    Nastya Is Buying Lunch
  • 原文地址:https://www.cnblogs.com/guobaoqing/p/14473407.html
Copyright © 2020-2023  润新知