Java-【SSM框架】高频面试笔试题

目录

1.Spring Bean的作用域之间有什么区别

2.Spring常用的数据库传播事务属性和事务的隔离级别

3.SpringMVC处理post和get中文乱码问题

4.简述SpringMVC的工作流程

5.Mybatis实体类属性名和数据库字段名不一致怎么办


1.Spring Bean的作用域之间有什么区别

在Spring中。可以设置<bean>元素的scope属性来设置bean的作用域,若不设置,作用域默认是是singleton,Bean以实例的方式存在,除了singleton,还有以下几种类别:

如何设置:

 

singleton是在IOC容器创建的时候就创建这个唯一的bean实例(类比于单例模式中的类变量/静态变量),而protptype在IOC容器创建时不再创建对象,而是在调用getBean时才创建,每次getBean都创建一个新的,自然不是单例的了。 

request:每次HTTP请求创建Bean

session:同一个seesion共享同一个,不用session使用不同的Bean

2.Spring常用的数据库传播事务属性和事务的隔离级别

一、传播事务属性:

情景:用户表中某个用户存款100,书表中第一本书60元,第二本书50元,那么当用户想要买这两本书时,显然钱是不够的,直接购买会发生错误,为此我们给两个方法加了事务,一个是【买单(要买的书目list)】,一个是【购买一本书(书id)】,在【买单()】中调用【购买一本书()】,那么当发起来要买单的请求,他是会两本都买不了,还是只买一本呢?

我们都知道事务具有原子性,当一个事务中有某个部分执行失败,则会回滚,全部不执行,如果是用【买单()】方法的事务,则一本也买不成,如果是以【购买一本书()】方法的事务,则还能买成一本。

       当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中进行,也可能开启一个新事物,在自己的事务中运行。事务的传播行为通过传播属性制定,Spring定义了七种类传播行为,在@Tansactional(propagation="...")中设置:

例如:Required表示在原有的事务中运行,不启动新的事务,那么就在【买单】事务进行,最后一本也买不了

同理,Requires_new表示新开启事务,那么就在【购买一本】这个自己的事务中执行,会先把【买单事务挂起】->【运行购买第一本事务】->【买单事务】->【买单事务挂起】->【购买第二本事务】->【买单事务】

二、事务隔离级别

首先:数据库并发可能存在哪些问题?

  • 1、脏读(未提交)
  • 2、不可重复读(已提交)
  • 3、幻读(已提交)

具体如下:

 

其次,有哪些隔离级别:

怎么设置:


开发中一般用读已提交(第二个),读一个值,然后这个值被改了,再读它,读出来的是更新后的值

如果到第三个,可重复读,读一个值,然后这个值被改了,再读它,读出来的还是更新前的,重复的

第二个就可以解决脏读的问题了,不是级别越高越好,因为效率也跟着下降。

 

3.SpringMVC处理post和get中文乱码问题

  • 解决Post请求乱码问题:

过滤器:

映射:

  • 解决Get请求乱码问题:

到Servers->server.xml->第一个Connector加上:URIEncoding="UTF-8"

4.简述SpringMVC的工作流程

5.Mybatis实体类属性名和数据库字段名不一致怎么办

其中第二: 

其中第三: 

发布了21 篇原创文章 · 获赞 16 · 访问量 308

猜你喜欢

转载自blog.csdn.net/qq_37414463/article/details/105501149
今日推荐