Java面试题汇总

Java面试题(Spring/SpringMVC)

2020-07-23  本文已影响0人  我最酷_b537

90.为什么要使用 spring?

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。

91.解释一下什么是 aop?

92.解释一下什么是 ioc?

93.spring 有哪些主要模块?

Spring有七大模块组成:


20190412160350745.png

94.spring 常用的注入方式有哪些?

95.spring 中的 bean 是线程安全的吗?

Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。但实际上,大部分的Spring bean并没有可变的状态(比如Serview类和DAO类),所以在某种程度上说Spring的单例bean是线程安全的。如果你的bean有多种状态的话(比如 View Model 对象),就需要自行保证线程安全。

最浅显的解决办法就是将多态bean的作用域由“singleton”变更为“prototype”。

96.spring 支持几种 bean 的作用域?

当通过spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域。Spring支持如下5种作用域:

其中比较常用的是singleton和prototype两种作用域。对于singleton作用域的Bean,每次请求该Bean都将获得相同的实例。容器负责跟踪Bean实例的状态,负责维护Bean实例的生命周期行为;如果一个Bean被设置成prototype作用域,程序每次请求该id的Bean,Spring都会新建一个Bean实例,然后返回给程序。在这种情况下,Spring容器仅仅使用new 关键字创建Bean实例,一旦创建成功,容器不在跟踪实例,也不会维护Bean实例的状态。

如果不指定Bean的作用域,Spring默认使用singleton作用域。Java在创建Java实例时,需要进行内存申请;销毁实例时,需要完成垃圾回收,这些工作都会导致系统开销的增加。因此,prototype作用域Bean的创建、销毁代价比较大。而singleton作用域的Bean实例一旦创建成功,可以重复使用。因此,除非必要,否则尽量避免将Bean被设置成prototype作用域。

97.spring 自动装配 bean 有哪些方式?

Spring中bean有三种装配机制,分别是:

  1. 在xml中显示配置;
  2. 在java中显示配置;
  3. 隐式的bean发现机制和自动装配。

98.spring 事务实现方式有哪些?

事务:事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败.比如,保证数据的运行不会说A给B钱,A钱给了B却没收到。

实现事务的三种方式:
1.aspectJ AOP实现事务:
2.事务代理工厂Bean实现事务:
3.注解方式实现事务:
在需要进行事务的方法上增加一个注解“@Transactional(rollbackFor = MyExepction.class )”

99.说一下 spring 的事务隔离?

一、 事务特性(4种):

  1. 原子性 (atomicity):强调事务的不可分割.
  2. 一致性 (consistency):事务的执行的前后数据的完整性保持一致.
  3. 隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰
  4. 持久性(durability) :事务一旦结束,数据就持久到数据库
    二、 如果不考虑隔离性引发安全性问题:
  5. 脏读 :一个事务读到了另一个事务的未提交的数据
  6. 不可重复读 :一个事务读到了另一个事务已经提交的 update 的数据导致多次查询结果不一致.
  7. 虚幻读 :一个事务读到了另一个事务已经提交的 insert 的数据导致多次查询结果不一致.
    三、解决读问题: 设置事务隔离级别(5种)
  8. DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.
  9. 未提交读(read uncommited) :脏读,不可重复读,虚读都有可能发生
  10. 已提交读 (read commited):避免脏读。但是不可重复读和虚读有可能发生
  11. 可重复读 (repeatable read) :避免脏读和不可重复读.但是虚读有可能发生.
  12. 串行化的 (serializable) :避免以上所有读问题.
  1. read uncommited:是最低的事务隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。
  2. read commited:保证一个事物提交后才能被另外一个事务读取。另外一个事务不能读取该事物未提交的数据。
  3. repeatable read:这种事务隔离级别可以防止脏读,不可重复读。但是可能会出现幻象读。它除了保证一个事务不能被另外一个事务读取未提交的数据之外还避免了以下情况产生(不可重复读)。
  4. serializable:这是花费最高代价但最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读之外,还避免了幻象读(避免三种)。
    四、事务的传播行为(7种)
    PROPAGION_XXX :事务的传播行为
  1. PROPAGATION_REQUIRED 支持当前事务,如果不存在 就新建一个(默认)
    2.PROPAGATION_SUPPORTS 支持当前事务,如果不存在,就不使用事务
  2. PROPAGATION_MANDATORY 支持当前事务,如果不存在,抛出异常
  1. PROPAGATION_REQUIRES_NEW 如果有事务存在,挂起当前事务,创建一个新的事务
  2. PROPAGATION_NOT_SUPPORTED 以非事务方式运行,如果有事务存在,挂起当前事务
  3. PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常
  4. PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行

100.说一下 spring mvc 运行流程?

20190412163441472.png

流程
1、用户发送请求至前端控制器DispatcherServlet
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、DispatcherServlet调用HandlerAdapter处理器适配器
5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、Controller执行完成返回ModelAndView
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、ViewReslover解析后返回具体View
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户

101.spring mvc 有哪些组件?

微信截图_20200721145947.png

102.@RequestMapping 的作用是什么?

@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。

103.@Autowired 的作用是什么?

这个注解就是spring可以自动帮你把bean里面引用的对象的setter/getter方法省略,它会自动帮你set/get。

<bean id="userDao" class="..."/>
<bean id="userService" class="...">
    <property name="userDao">
      <ref bean="userDao"/>
    </property>
</bean>

这样你在userService里面要做一个userDao的setter/getter方法。
但如果你用了@Autowired的话,你只需要在UserService的实现类中声明即可。

@Autowired
private IUserDao userdao;

目录:2020最新Java面试题及答案汇总(上)
目录:2020最新Java面试题及答案汇总(下)

上一篇下一篇

猜你喜欢

热点阅读