Spring面试题



1. 谈谈你对Spring的认识

Spring 的两大核心是IOC和AOP。

IOC就是控制反转,指的是原本应该由我们自己创建和管理依赖的对象现在交给了Spring容器来管理。能够实现层与层之间的解耦。

AOP就是面向切面编程,面向切面编程的思想是把核心业务逻辑与非核心业务逻辑抽离,从而实现核心业务与非核心业务之间的解耦。比如添加一个商品信息,核心业务就是做添加商品信息记录这个操作,非核心业务就是事务的管理,日志,性能检测,读写分离的实现等等。AOP让开发者可以只关注业务逻辑的实现。


2. Spring的bean作用域有哪些

默认是singleton,即单例模式
prototype,每次从容器调用bean时都会创建一个新的对象
request,每次http请求都会创建一个对象
session,同一个session共享一个对象
global-session


3. Spring的bean是线程安全的吗

构成线程不安全的三要素:

1,多线程环境
2,访问同一个资源
3,资源具有状态性

Spring 的 Bean 默认是单例模式,处于多线程的工作环境,满足1,2条件。
但 Spring 的 Bean 基本不会对数据进行操作,它是无状态的,所以是线程安全的。


4. 谈谈SpringMVC的工作流程
  1. 首先将请求分发给前端控制器 DispatcherServlet
  2. DispatcherServlet 查询 HandlerMapping(映射控制器),从而找到处理请求的Controller(处理器)
  3. Controller 执行业务逻辑处理后,返回一个 ModelAndView(模型和视图)
  4. DispatcherServlet 查询一个或多个 ViewResolver(视图解析器),找到 ModelAndView 对应的视图对象,视图对象负责渲染返回给客户端

5. SpringMVC有哪些常用的注解?有什么作用?

@RequestMapping:做请求的URL跟我们controller或者方法的映射关系
@RequestParam:做请求参数的匹配,当请求参数名称跟我们方法的参数名不一致的时候,可以做匹配
@GetMapping: 请求方式为GET
@PostMapping:请求方式为POST
@PathVariable:获取URL中携带的参数值,处理RESTful风格的路径参数
@CookieValue:获取浏览器传递cookie值
@RequestBody:接收请求中的参数信息,一般来说,接收一个集合或数组,或者以post方式提交的数据
@ResponseBody: 改变返回逻辑视图的默认行为,返回具体的数据,比如json
@Controller:Spring定义的,作用就是标明这是一个controller类
@RestController:@Controller+@ResponseBody的组合


6. 什么是事务的传播特性及Spring支持的特性有哪些?
  • 什么是事务的传播特性?

我们一般都是将事务的边界设置在Service层

那么当我们调用Service层的一个方法的时,它能够保证我们的这个方法中执行的所有的对数据库的更新操作保持在一个事务中

在事务层里面调用的这些方法要么全部成功,要么全部失败。那么事务的传播特性也是从这里说起的。

如果你在你的Service层的这个方法中,还调用了本类的其他的Service方法,那么在调用其他的Service方法的时候,这个事务是怎么规定的呢?

必须保证在我方法里调用的这个方法与我本身的方法处在同一个事务中,否则无法保证事物的一致性。

事务的传播特性就是解决这个问题的

  • Spring支持的事务传播特性

在Spring中,针对传播特性的多种配置,我们大多数情况下只用其中的一种:PROPGATION_REQUIRED

当我调用service层的方法的时候,开启一个事务,那么在调用这个service层里面的其他的方法的时候,如果当前方法产生了事务就用当前方法产生的事务,否则就创建一个新的事务。这个工作是由Spring来帮助我们完成的。

  • Spring支持的事务传播特性

PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起
PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值