0
点赞
收藏
分享

微信扫一扫

【高频java面试题】Spring、SpringMVC和Springboot的区别

犹大之窗 2022-04-29 阅读 53
java后端

1、问?)Spring、SpringMVC和Springboot的区别

背景!

相关概念

2、问?)SpringMVC的请求过程?

------------问题:

a、典型的应用程序中可能会有多个控制器,这些请求到底应该发给哪一个控制器呢?

DispatcherServlet会查询一个或多个处理器映射来确定请求的下一站在哪里,处理器映射会根据请求所携带的URl 信息来进行决策。

b、SpringMVC的控制器是不是单例模式?如果是,有什么问题?怎么解决?

是单例模式,所以在多线程访问的时候有线程安全问题,注意不要用同步,会影响性能,解决方案是在控制器里面不能写字段

3、问?)Spring中运用了哪些设计模式?

  • 工厂模式: Spring使用工厂模式通过BeanFactoryApplicationContext创建 bean 对象。

  • 代理模式: Spring AOP 功能的实现。

  • 单例模式: Spring 中的 Bean 默认都是单例的。

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

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

  • **观察者模式:**Spring 事件驱动模型就是观察者模式很经典的一个应用。

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

  • ……

4、问?)事务的传播属性有哪些?

事务的属性

1 propagation用来设置事务的传播行为

事务的传播行为:一个方法运行在了一个开启事务的方法中,当前方法是使用依附的方法事务还是使用自身的事务

Propagation.REQUIRED默认值 使用其依附的别人方法的事务

Propagation.REQUIRES_NEW 将原来的事务挂起 开启一个新的事务(即执行自身的事务)

使用方法 在需要使用事务的方法上加注解 @Transactional 什么都不加默认为Propagation.REQUIRED

若想开启新事务执行自己的事务则可以在方法上加@Transactional(propagation=Propagation.REQUIRES_NEW)

2 isolation用来设置事务的隔离级别

Oracle支持的事务隔离级别为

  • 默认读已提交read committed
  • 串行化 serializable

Mysql支持所有的事务隔离级别

  • 读未提交 read uncommitted
  • 读已提交 read commited
  • (默认)可重复读 repeatable read
  • 串行化 serializable

同传播行为一样 也是在注解@Transaction()中添加 (isolation=Isolation.DEFAULT)

SQL Server默认系统事务隔离级别是

  • read committed,读已提交

Spring事务七大传播机制与五个隔离级别

5、问?)事务的隔离机制有哪些?

问?7、)说说Struts2和SpringMVC的区别

  • SpringMVC的入口是一个servlet,即前端控制器,而struts2入口是一个filter过滤器
  • SpringMVC是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或者多例(建议单例),Struts2基于类开发,传递参数是通过类的属性,只能设计为多例
  • Struts2采用值栈存储请求和相应的数据,通过OGNL存取数据,SpringMVC通过参数解析器将request 请求内容解析,并给方法形参赋值,将数据个视图封装成ModelAndView对象,最后将ModelAndView中的模型数据通过request域传输到页面,JSP视图解析器默认使用jstl
举报

相关推荐

0 条评论