Spring的两大核心是什么?谈一谈你对IOC的理解? 谈一谈你对DI的理解? 谈一谈你对AOP的理解?(必会)
    ioc和di
    ioc (控制反转): 将对象的创建,对象的赋值,对象的管理工作交给容器完成
    能够实现解耦合,降低类与类之间的耦合性
    di(依赖注入):将数据(对象)注入到某个类的成员变量中
    aop:在原有的业务方法代码不改变的情况下,增加一些额外的扩展功能。
    aop可以看作是实现动态代理的一种规范,

    Spring的生命周期?(高薪常问)
    Spring默认对bean采用的是单例设计模式,bean创建完毕的时候回调用init-method指定的方法,然后bean对象会进入到spring的容器中,如果bean配置有id或者是name那么该bean存储到spring容器的时候会使用id或者name作为对象标记。当spring容器销毁之前会调用destroy-method指定的方法。

    1、通过applocationcontext.xml文件生成spring容器
    2、如果bean上没有lazy-init=“true”的属性,将会创建并放到spring容器中,这一步就是ioc
    3、接下来需要根据xml中配置的依赖关系进行依赖注入(di)
    4、如果bean中配置了init-method和destory-method的话,在bean创建和销毁的时候会调用对应的方法
    5、此时spring容器中已准备好应该加载的bean,可以通过spring容易getbean(“id”)获取对应的bean

    Spring支持bean的作用域有几种吗? 每种作用域是什么样的?(必会)
    5种
    singleton:默认单例作用域,在多线程的情况下会存在并发访问的问题
    prototype:多例作用域
    request:一个用户的一次请求生效,完事后被回收
    session:一个用户的多次请求生效,关闭会话后被回收
    global-session:全局作用域,多个用户的多次请求生效,在服务器关闭的时候才会被回收

    BeanFactory和ApplicationContext有什么区别(了解)
    beanfactory:在启动时不会去创建bean,只在从容器中拿的时候才去创建
    applicationcontext:在启动时就已经把所有bean创建完

    Spring的对象默认是单例的还是多例的? 单例bean存不存在线程安全问题呢?
    单例的,存在线程安全问题,多线程访问时,其中一个线程在做操作,其他线程不能操作该对象
    解决方法:1、避免在单例对象中定义可变变量
    2、定义一个theadlocal的成员变量用来保存需要操作的可变变量