Spring 面试题集绵
问题1:Spring事务失效的场景?
答:A. 数据库引擎不支持事务;
B. 没有纳入Spring管理范围;
C. 注解所在的方法不是public修饰的;
D. 发生了自调用问题;
E. 所用数据源没有配置事务管理器;
F. 异常被捕捉或抛异常错误;
G. 引入shiro中权限注解;
H. 发生了Spring父子上下文重叠;
可参考:Spring事务失效的8大原因
问题2:Spring中Bean为何默认是单例?
答:A. 减少了新生成实例的性能和内存消耗;
B. 减少JVM垃圾回收,因为回收对象少了;
C. 缓存快速获取Bean,除了第一次生成之外;
D. 缺点是如果有状态的话在并发环境下线程不安全,prototype则不会。
问题3:Spring获取request的几种方法及其线程安全性?
答:A. Controller类中方法里加request参数,线程安全,缺点是request对象贯穿整个请求处理中,传来传去太过繁琐冗余;
B. Controller类中自动注入request依赖,线程安全,优点是减少代码冗余,注入范围不限于Controller层,如Service、Repository层等,注入对象不限于request对象,如response、session等;
这种若是有异步操作,则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中模块构成及作用?
答: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使用工厂模式通过BeanFactory
、ApplicationContext
创建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中jdbcTemplate
、hibernateTemplate
等以Template结尾的对数据库操作的类,它们就使用到了模板模式。
可参考: Spring面试7大问题