`
guzizai2007
  • 浏览: 358828 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Spring面试题

 
阅读更多

1、Spring依赖注入的方式以及理解?

-------------------------------------------------------------------------------------------------------------------------------------

      1)、set方法注入(property name="..." value="..."),注入方式分为:byName、byType、default、no...

      2)、构造方法注入(constructor-arg index="..." value="...")

      3)、理解:原来写代码如果是不同层次互相调用的话是在调用层去new 被调用者一个对象,然后进行操作,通过依赖注入,这种创建被调用者的工作就由Spring容器去维护,当调用者需要的时候spring就会去new一个(或者提供一个)相应对象给它。这样可以实现各个层次的解耦。

-------------------------------------------------------------------------------------------------------------------------------------

2、Spring AOP理解?

-------------------------------------------------------------------------------------------------------------------------------------

      1)、AOP:面向切面编程,可对执行的方法动态的加入一些业务逻辑,比如加入日志管理、权限验证、或者是事务管理,底层是通过动态代理实现的,代理有两种方式:一种是使用jdk的动态代理,另一种是使用cglib的动态代理,它们两个都是可以在程序运行中根据需要来动态生成加入额外业务的代理类来实现aop功能。

      2)、AOP优点:把额外的操作从业务逻辑中抽离出来,可以使程序更专注于本身的业务,而不用关注其他与业务紧密型不大的操作(日志、事务...)。可插拔式。

-------------------------------------------------------------------------------------------------------------------------------------

3、Spring动态代理的两种方式?

-------------------------------------------------------------------------------------------------------------------------------------

     1)、jdk动态代理:只针对实现了接口的类,代理类实现了目标类同样的接口,代理对象内部持有了目标对象,最后执行的还是目标对象,只不过是在他执行前后加了一些额外的业务逻辑。

              通过Proxy类和InvocationHandler接口完成代理。增强业务类实现InvocationHandler接口,实现里面的invoke()方法。

public class DynamicProxy implements InvocationHandler {
    
    public Object target;    
    public DynamicProxy(Object target) {
        this.target = target;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        
        System.out.println("横切逻辑开始...");
        Object result = method.invoke(target, args);//调用目标的实例方法
        System.out.println("横切逻辑结束...");
        return result;
}

             通过Proxy的newProxyInstance方法生成代理类:(把横切逻辑编织到China实例中,创建一个实现了Person接口的代理实例)   

        Person p = new China();
        DynamicProxy handler = new DynamicProxy(p);//设置代理类
        
        Person proxy = (Person)Proxy.newProxyInstance(p.getClass().getClassLoader(), p.getClass().getInterfaces(), handler);
        proxy.say();

 

      2)、cglib动态代理:生成代理类的子类,通过在子类中使用拦截的方式来拦截父类方法的调用并在调用前后植入横切逻辑。

public class CglibProxy2 implements MethodInterceptor{
    
    @Override
    public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
        
        System.out.println("横切逻辑开始...");
        Object result = proxy.invokeSuper(obj, args);//代理类调用父类方法
        System.out.println("横切逻辑结束...");
        return result;
}

 

        CglibProxy2 proxy = new CglibProxy2();
        
        Enhancer hancer = new Enhancer();
        hancer.setSuperclass(China.class);
        hancer.setCallback(proxy);
        Person p = (China)hancer.create();
        
        p.say();        

     3)、性能比较:cglib创建的代理对象性能高,不过创建时间长,所以如果是单例Bean,可以使用cglib创建,反之jdk动态代理,另cglib是通过生产目标类子类的方式来生成代理类,所以目标类不能是final类型,也不能为final方法进行代理。

-------------------------------------------------------------------------------------------------------------------------------------

4、Spring一般都用来做什么,优点?

-------------------------------------------------------------------------------------------------------------------------------------

     1)、依赖注入(Service层注入Action层,Dao层注入Service层...)

     2)、AOP(日志、监控、事务、权限...)

     3)、优点:

                      轻量非侵入型框架:Spring应用中的对象不依赖Spring特定的类。

                      依赖注入:很好的实现各个层次解耦,对象之间的依赖关系由Spring容器管理

                      面向切面编程:可以把核心业务逻辑和其他一些非业务逻辑的操作分离出来,可以使程序只专注于实现业务。

                      声明式配置:可通过简单的配置来管理对象之间复杂的依赖关系以及一些aop操作。

-------------------------------------------------------------------------------------------------------------------------------------

5、如何具体的实现切面编程?

-------------------------------------------------------------------------------------------------------------------------------------

      1)、写一个切面类,不需要实现任何接口和继承任何类,里面包含各种不同切入点需要加入的方法,比如before、after、around、returnFinally...,

      2)、在application.xml中声明这个Bean。<bean id="Aspect" class="com.sxit.Aspect" />

      3)、引入aop命名空间,使用<aop:config>进行aop配置,先声明一个切入点<aop:pointcut id="onePointcut"  expression="execution(* com.sxit.service..*.*(..))" />

      4)、通过<aop:aspect>标签声明一个切面 <aop:aspect id="oneAspect" ref="Aspect">

      5)、针对切入点进行不同的增强类型配置,比如前置增强、后置增强(返回增强、异常增强、finally增强...)

<aop:aspect id="FirstAspect" ref="helloWorldAspect">
            <aop:before pointcut-ref="FirstPointcut" method="before"/>
            <aop:after  pointcut-ref="FirstPointcut" method="after"/>
            <aop:after-throwing pointcut-ref="FirstPointcut" method="throwException"/>
            <aop:around pointcut-ref="FirstPointcut" method="throwException"/>
            <aop:after-returning pointcut-ref="FirstPointcut" method="returnFinally"/>
</aop:aspect>

-------------------------------------------------------------------------------------------------------------------------------------

6、Spring事务如何配置?

-------------------------------------------------------------------------------------------------------------------------------------

      1)、声明式事务:

                  依次配置数据源、sessionFactory、事务管理器、配置事务不同增强类型以及事务的传播性、声明切入点并应用事务。(基于tx/aop命名空间)

                  使用原始的TransactionProxyFactoryBean来生成业务类代理,已起到实施功能的增强。  有target属性、transactionManger属性,以及ransactionAttrubutes属性。

                  使用注解@Transaction配置 Spring配置文件中加上一句@Transaction注解自动扫描  <tx:annotation-driven transaction-manager="txManger" />

      2)、编程式事务:

                  没用过...

-------------------------------------------------------------------------------------------------------------------------------------

7、Spring事务管理?

-------------------------------------------------------------------------------------------------------------------------------------

      0)、事务并发访问的问题:

                    --、脏读:一个事务读取了另一个事务还未提交的数据(有可能这个数据之后又改变了或者回滚了)

                    --、不可重复读:同一个事务内多次读取同一个数据时返回不同结果(第二次读有可能是别的事务已提交的数据,前后读取的数据不一致)

                    --、幻象读:同一个事务多次读取同一查询插件返回不同结果(第二次读可能别的事务新增了数据,导致前后不一致)

                    --、不可重复读和幻象读差别在于:幻象读是读到别的事务新增的数据,可通过给表加锁方式解决,而不可重复读是读取某个记录被更改了,可通过给这条记录加行级锁解决。

                    --、第一类丢失更新:A事务撤销时把已经提交的B事务的数据覆盖了

                    --、第二类丢失更新:A事务把已经提交的B事务的数据覆盖了

      1)、隔离性:

                    --、read_uncommited:隔离最低级别,允许一个事务读取另一个事务未提交的数据,可能会产生脏读、不可重复读、幻象读...

                    --、read_commited:可避免脏读,但是会出现不可重复读和幻读。

                    --、repeatable_read:可防止脏读、不可重复读,但会存在幻象读。(行锁)

                    --、serializable:隔离最高级别,避免上面所有问题。

              Spring中通过isolation来配置隔离性,还外加一个default属性:使用数据库自身默认的隔离级别。

      2)、传播性:

                    --、required:如果存在一个事务则使用它,如果没有则开启一个新的事务。

                    --、supports:如果存在则使用它,如果没有,则按非事务方式执行。

                    --、requires_new:中开启一个新的事务,如果已存在,则挂起原有事务开启一个新的事务。

                    --、not_supported:不支持事务,如果有则挂起原有事务。

                    --、never:不支持事务,如果有,则抛出异常。

                    --、nested:镶嵌事务,如果有则开启一个新事物镶嵌在原有事务内执行,如果没有则与required类似操作。

       3)、Spring做了什么?

                    --、为事务管理提供了一致的编程模板,建立了统一的事务抽象,不论jdbc、hibernate、jpa或者ibatis都是用统一的编程模型进行事务管理。

                    --、提供的接口:PlatformTransactionManager(声明三个方法,获取事务、提交事务、回滚事务)、TransactionDefinition(用于描述事务隔离级别、超时时间、事务传播规则等控制事务具体行为)、TransactionStatus(代表一个事务运行状态,事务管理器通过该接口获取事务运行的状态信息)

                    --、Spring将事务管理委托给底层具体的持久化框架,它只提供一个接口让他们去实现。比如常见的hibernate实现类就是org.springframework.orm.hibernate3.HibernateTransactionManager。

-------------------------------------------------------------------------------------------------------------------------------------

8、BeanFactory和ApplicationContext的区别?

-------------------------------------------------------------------------------------------------------------------------------------

          1)、两者都可以通过读取xml配置文件来加载Bean,BeanFactory是pring ioc的核心接口它提供了从容器中获取Bean和Bean信息的一些简单方法,而ApplicationContext也是BeanFactory的实现类,不过它在BeanFactory的基础上扩展了更多功能(提供国际化消息访问,事件机制、底层资源访问),主要区别在于基于BeanFactory的实现(XmlBeanFactory)在容器初始化的时候是采用延迟加载来注入Bean的,只有使用到某个Bean时才对他进行实例化,这样就会产生一些隐患,可能实例化的对象类不存在,而applicationContext在容器的初始化时一次性把所有非延迟加载的单例Bean实例化,启动的时候就会检验Bean之间的依赖关系,如果配置有问题,在启动的时候就能够发现。

-------------------------------------------------------------------------------------------------------------------------------------

9、Spring Bean的作用域?

-------------------------------------------------------------------------------------------------------------------------------------

        1)、通过<bean>标签的scope属性配置Bean的作用域,singleton:单例Bean,spring容器中只会存在一个这样的Bean实例

        2)、prototype:每次请求都会产生一个新的bean实例,spring只管创建,后续Bean的生命周期不由spring容器管理

        以下几个是在web环境下使用的:需要在web.xml中配置一个监听器,监听每一次请求请求。

        3)、request:表示针对每一次http请求都会产生一个新的Bean,每个request有效

        4)、session:每个session中有效

        5)、gobal session:类似于session作用域。

-------------------------------------------------------------------------------------------------------------------------------------

10、bean的生命周期?

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

Spring的优点?

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Spring面试题总结.pdf

    标题为"Spring面试题总结"的文档是一份专门针对程序员在应聘与Spring相关职位时可能会遇到的技术面试题的整理和总结。Spring作为一个企业级Java应用框架,已经成为业界使用最为广泛的框架之一,对于期望从事Java后端...

    spring面试题

    spring面试题总结,spring面试题总结,spring面试题总结,spring面试题总结

    spring 面试题集锦

    spring 面试题集锦spring 面试题集锦spring 面试题集锦spring 面试题集锦spring 面试题集锦spring 面试题集锦

    Spring面试题(含答案).pdf

    Spring面试题(含答案) Spring 是一个 Java 企业级应用的开源开发框架,主要用来开发 Java 应用,但是有些扩展是针对构建 J2EE 平台的 web 应用。Spring 框架目标是简化 Java 企业级应用开发,并通过 POJO 为基础...

    Spring面试题(2024最新版)-重点.docx

    Spring面试题(2024最新版)-重点.docx

    后端+spring面试题+面试用

    spring面试题 博主是一名工作多年的老Java开发,这份Spring面试题送给你,希望对你有所帮助 小伙伴们还可以免费看下本博主整理的Spring专栏 https://blog.csdn.net/u014534808/category_7677806.html 学习的路上我们...

    Spring面试题与答案.doc

    阿里Spring面试题与答案

    spring面试题大全

    面试中,Spring的相关问题经常出现,下面将详细解答这些常见面试题。 首先,Spring的优点包括: 1. 分层架构:Spring允许开发者选择需要的模块,避免了不必要的复杂性。 2. POJO(Plain Old Java Object)编程:它...

    spring面试题宝典

    《Spring面试题宝典》是针对Java开发者,尤其是对Spring框架有一定掌握的程序员们准备的一份面试指南。Spring作为企业级应用开发中的重要组件,其深入理解和熟练运用是面试过程中的常见考察点。本宝典将围绕Spring的...

    spring面试题.doc

    Spring 框架是Java开发中的一...以上内容涵盖了Spring的核心概念、AOP、DI、集成其他框架以及事务管理等方面,这些都是Spring面试中常见的知识点。理解和熟练运用这些内容,将有助于提升在Spring开发和面试中的竞争力。

    Spring面试题【面试题大整合】(含答案)

    Spring面试题【面试题大整合】(含答案) Java Spring后端面试题整理, 包含依赖注入,SpringMVC,SpringBoot等等问题, 用简洁明了的语言,通俗易懂地阐述了Java相关的知识点。 适用人群:适合想了解或学习Spring的...

    Spring面试题和答案(70道,史上最全).pdf

    标题中提到的“Spring面试题和答案(70道,史上最全).pdf”暗示了文档包含了大量与Spring框架相关的面试问题及其答案。Spring是一个非常流行的Java企业级应用开发框架,它提供了全面的编程和配置模型,使得开发者...

    Spring面试题合集

    Spring面试题合集涵盖了Spring框架的核心概念、重要特性以及常见的面试问题。以下是对这些知识点的详细阐述: 1. **IoC(控制反转)与DI(依赖注入)**: - IoC是指应用程序的控制权由传统模式中的对象自己控制...

    高级开发spring面试题和答案.pdf

    在Spring框架中,面试常涉及的关键知识点包括Spring的IoC(控制反转)、依赖注入、Bean的生命周期、AOP(面向切面...以上知识点都是Spring面试中可能涉及的核心内容,理解和掌握这些将有助于应对高级开发岗位的面试。

    【BAT必备】spring面试题,spring MVC面试题,spring boot面试题,spring cloud面试题

    ### Spring框架核心概念 #### 1. Spring框架简介 Spring框架是一个开源的Java平台,用于构建企业级应用程序。它提供了一种简洁的方式来管理组件、事务处理、数据访问以及与各种第三方库集成。Spring的核心功能包括...

    Java Spring面试题.zip

    本资料“Java Spring面试题.zip”包含了针对Spring框架的面试题,旨在帮助求职者评估自己对Spring的理解程度和实战能力。下面我们将深入探讨Spring框架的核心概念、关键特性以及常见面试题的相关知识点。 1. **...

    Spring面试题详细讲解

    Spring面试题详细讲解 Spring 是什么? Spring 是一个轻量级的 IoC 和 AOP 容器框架。是为 Java 应用程序提供基础性服务的框架,目的是简化应用程序的开发主要由以下几个模块组成:Spring Core:核心类库,提供 ...

Global site tag (gtag.js) - Google Analytics