Spring面试题pro版-6

简介: Spring面试题pro版-6


Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

Spring中的单例Beans是线程安全的吗?

Spring框架中的单例Beans在创建时是线程安全的,但在使用时是否线程安全取决于具体的设计和实现

spring中的bean如果是无状态的不共享数据,那么是线程安全的。如果说spring中的bean存在共享数据的情况。那 么就是线程不安全的,需要自行进行并发处理。或者使用多例模式。

Spring中事务传播行为

PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常。

Spring事务中的隔离级别有哪几种?

在TransactionDefinition接口中定义了五个表示隔离级别的常量:

ISOLATION_DEFAULT:使用后端数据库默认的隔离级别, Mysql默认采用的REPEATABLE_READ隔离级别; Oracle 默认采用的READ_COMMITTED隔离级别。

ISOLATION_READ_UNCOMMITTED:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不 可重复读。

ISOLATION_READ_COMMITTED:允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有 可能发生

ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可 以阻止脏读和不可重复读,但幻读仍有可能发生。

ISOLATION_SERIALIZABLE:最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间 就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通

常情况下也不会用到该级别。

Spring中用到了哪些设计模式?

单例模式

Spring默认创建的Bean就是单例的。进一步的,依赖注入Bean实例默认是double check的单例模式。并且用 ConcurrentHashMap保证线程安全。

代理模式

AOP底层就是动态代理模式的实现。分JDK动态代理和CGLIB两种默认使用jdk动态代理,如果开启了cglib则优先使用 cglib。如果没有接口, jdk动态代理会失效。cglib则没有这个问题

工厂方法Spring中的BeanFactory就是工厂模式的体现,将对象的创建交给工厂来做。

原来依赖方和被依赖方耦合在一起,现在beanFactory将bean之间的耦合打开了。依赖方到工厂里拿依赖,不直接和 被依赖方接触耦合了,

模版模式

模板方法模式是一种行为设计模式,模版模式类似继承,父类定义规则,子类具体实现

Spring 中 jdbcTemplate、 hibernateTemplate 等以Template 结尾的对数据库操作的类,它们就使用到了模板模 式。

装饰者模式

Spring 在配置DataSource 的时候, DataSource 可能是不同的数据库和数据源。这个时候就要用到装饰者模式。

Spring 中用到的包装器模式在类名上含有Wrapper或者Decorator。这些类基本上都是动态地给一个对象添加一些 额外的职责。

适配器模式

实现方式: SpringMVC中的适配器HandlerAdatper。

实现原理: HandlerAdatper根据Handler规则执行不同的Handler。

实现过程: DispatcherServlet根据HandlerMapping返回的handler,向HandlerAdatper发起请求,处理

Handler。 HandlerAdapter根据规则找到对应的Handler并让其执行,执行完毕后Handler会向HandlerAdapter返 回一个ModelAndView,最后由HandlerAdapter向DispatchServelet返回一个ModelAndView。

实现意义: HandlerAdatper使得Handler的扩展变得容易,只需要增加一个新的Handler和一个对应的

HandlerAdapter即可。因此Spring定义了一个适配接口,使得每一种Controller有一种对应的适配器实现类,让适配 器代替controller执行相应的方法。这样在扩展Controller时,只需要增加一个适配器类就完成了SpringMVC的扩展 了。

观察者模式

观察者模式是一种对象行为型模式。 a观察b的行为, b发生时a相应的做出反应、

Spring 事件驱动模型就是观察者模式很经典的一个应用。主要包括三个组成部分:事件,事件发布者,事件订阅 者,当事件发生时,事件订阅者相应的做出改变。

相关文章
|
2天前
|
Java Spring
Spring面试题pro版-5
Spring面试题pro版-5
16 0
|
2天前
|
Java Spring
Spring面试题pro版-4
Spring面试题pro版-4
15 0
|
2天前
|
XML Java 数据格式
Spring面试题pro版-3
Spring面试题pro版-3
30 0
|
2天前
|
监控 Java 应用服务中间件
Spring Boot 源码面试知识点
【5月更文挑战第12天】Spring Boot 是一个强大且广泛使用的框架,旨在简化 Spring 应用程序的开发过程。深入了解 Spring Boot 的源码,有助于开发者更好地使用和定制这个框架。以下是一些关键的知识点:
20 6
|
2天前
|
监控 Java 数据库连接
总结Spring Boot面试知识点
Spring Boot是一个基于Spring框架的开源项目,它简化了Spring应用的初始搭建以及开发过程。通过提供“约定优于配置”的方式,Spring Boot可以帮助开发者快速构建出生产级别的Spring应用。
15 0
|
2天前
|
缓存 Java Spring
Spring面试题pro版-2
Spring面试题pro版-2
13 0
|
2天前
|
Java 数据库连接 API
Spring面试题pro版-1
Spring面试题pro版-1
17 0
|
XML JSON 前端开发
Spring 面试 7 大问题,你顶得住不?
Spring 面试 7 大问题,你顶得住不?
207 0
Spring 面试 7 大问题,你顶得住不?
|
XML Java 数据格式
Spring 面试问题 TOP 50
Spring Framework 现在几乎已成为 Java Web 开发的标配框架。那么,作为 Java 程序员,你对 Spring 的主要技术点又掌握了多少呢?不妨用本文的问题来检测一下。
1283 0
|
XML Java 数据格式
Spring面试基本问题(1)
1、什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。
1890 0