问题1:Spring事务失效的场景?

答:A. 数据库引擎不支持事务;

  B. 没有纳入Spring管理范围;

  C. 注解所在的方法不是public修饰的;

  D. 发生了自调用问题;

  E. 所用数据源没有配置事务管理器;

  F. 异常被捕捉或抛异常错误;

  G. 引入shiro中权限注解;

  H. 发生了Spring父子上下文重叠; 

问题2:Spring中Bean为何默认是单例?

答:A. 减少了新生成实例的性能和内存消耗;

  B. 减少JVM垃圾回收,因为回收对象少了;

  C. 缓存快速获取Bean,除了第一次生成之外;

缺点是如果有状态的话在并发环境下线程不安全,prototype则不会。

 

问题3:Spring获取request的几种方法及其线程安全性?

答:A. Controller类中方法里加request参数,线程安全,缺点是request对象贯穿整个请求处理中,传来传去太过繁琐冗余;

  B. Controller类中自动注入request依赖,线程安全,优点是减少代码冗余,注入范围不限于Controller层,如Service、Repository层等,注入对象不限于request对象,如response、session等;

java spring 事务面试 spring事务面试题目_spring

这种若是有异步操作,则request不能传递

  C. 基类中自动注入request依赖,Controller类继承基类,线程安全,优点是避免了在不同的Controller中重复注入request;

  D. 手动调用(HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest()),线程安全,优点是可以在非Bean中直接获取;

  E. @ModelAttribute方法中设置request对象,线程不安全,应忽略。

  可参考:Spring中获取request的几种方法,及其线程安全性分析

 

问题4:Spring生态项目有哪些?

答:A. SpringBoot:一站式快速开发解决项目;

  B. SpringCloud:提供对分布式系统的支持;

  C. SpringData:提供对主流的关系型及NoSQL型数据库的封装支持;

  D. SpringSecurtiy:支持系统授权、认证的支持;

  E. SpringSession:提供对Session管理的支持;

  F. SpringBatch:提供对大数据的批处理简化处理优化的支持;

  G. SpringAMQP:提供对AMQP的消息支持;

  H. SpringIntegration:通过消息机制对企业集成模式EIP的支持

  I. SpringWebFlow:基于SpringMVC提供对向导流程式的开发;

  J. SpringWebService:提供基于SOAP/Web协议服务的支持。

 

问题5:Spring Framework中模块构成及作用?

java spring 事务面试 spring事务面试题目_spring_02

答:1. Spring核心容器

    A. spring-core:Spring中的核心工具类包;

    B. spring-beans:Spring中定义bean的组件;

    C. spring-context:Spring的运行容器;

    D. spring-context-support:Spring容器的扩展支持;

    E. spring-expression:Spring的表达式语言支持;

  2. 面向切面编程AOP

    A. spring-aop:基于代理的AOP支持;

    B. spring-aspects:集成Aspects的AOP支持;

  3. 支持WEB应用程序

    A. spring-web:提供web的基础功能;

    B. spring-webmvc:提供springmvc的功能;

    C. spring-websocket:提供web socket支持;

    D. spring-webmvc-portlet:提供Portlet环境的支持;

  4. 数据访问与集成

    A. spring-jdbc:提供对jdbc连接的封装功能;

    B. spring-tx:提供对事务的支持;

    C. spring-orm:提供对象-关系映射支持;

    D. spring-oxm:提供对象-XML映射支持;

    E. spring-jms:提供消息队列的支持;

  5. 测试Test

    A. spring-test:提供对测试功能的支持。

 

问题6:Spring解决循环依赖的方式?

答:A. 构造器参数循环依赖;

  B. setter方式单例,默认方式;

  C. setter方式原型;

  注意:Spring是通过递归的方式获取目标bean及其依赖的bean的;Spring实例化一个bean的时候,是先实例化目标bean,然后为其注入属性。

 

问题7:Spring中使用了的九大设计模式?

答:A. 简单工厂模式:Spring使用工厂模式通过BeanFactoryApplicationContext创建bean对象;

  B. 工厂方法模式:FactoryBean接口;

  C. 单例模式:Spring 中的Bean默认都是单例的;

  D. 适配器模式:Spring AOP的增强或通知(Advice)使用到了适配器模式,spring MVC中也是用到了适配器模式适配Controller;

  E. 装饰器模式:我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库,这种模式让我们可以根据客户的需求能够动态切换不同的数据源;

  F. 代理模式:Spring AOP功能的实现;

  G. 观察者模式:Spring事件驱动模型就是观察者模式很经典的一个应用;

  H. 策略模式:Spring框架的资源访问Resource接口 ,该接口提供了更强的资源访问能力,Spring框架本身大量使用了Resource接口来访问底层资源;

  I. 模板方法模式:Spring中jdbcTemplatehibernateTemplate等以Template结尾的对数据库操作的类,它们就使用到了模板模式。