JAVA面试锦囊(七)

2020-05-29 11:13:19 浏览数 (1)

● 说说Spring MVC与Struts2的不同?

(1) 核心控制器不同:spring mvc核心控制器是Servlet,而struts2是Filter。

(2) 控制器实例:理论上,spring mvc会比struts2快一些,spring mvc是基于方法设计,而struts2是基于对象,每次发一次请求都会实例化一个action。每一个action都会被注入属性,而Spring mvc更像Servlet一样,只有一个实例,每次请求执行对应的方法即可(注意:由于是单例实例,所以应当避免全局变量的修改,这样会产生线程安全问题)

(3) 管理方式:Spring MVC是Spring的一个模块,所以Spring对Spring MVC的控制器管理更加方便。

(4) 参数传递:Struts2中自身提供多种参数接收,其实都是通过ValueStack进行传递和赋值,而Spring MVC是通过方法的参数进行接收。

(5) 学习难度:Struts2学习成本比较高,比如拦截器、值栈及OGNL表达式,而Spring MVC相对简单。

(6) Intercepter的实例机制:struts有以自己的Intercepter机制,Spring MVC用到是对立的AOP方式。

(7) Spring MVC处理Ajax请求,直接通过返回数据,方法中使用注解@ResponseBody,Spring MVC自动帮我们把对象转成为JSON数据,而Struts2是通过插件的方式进行处理的。

● Spring的两大核心?

Spring是J2EE应用程序框架,是轻量级的IOC和AOP的容器框架(相对于重量级的EJB),主要是针对javaBean的生命周期进行管理的轻量级容器。

(1) IOC(Inversion of Control)或 DI(Dependency Injection):原来我们的Service需要调用DAO,Service就需要创建DAO,Spring发现你的Service需要依赖DAO,就给你注入。核心原理:就是配置文件 反射(工厂也可以) 容器(map)。

(2) AOP面向切面的编程:我们主要使用AOP来做事务、权限判断、日志等功能,核心原理:使用动态代理的方式,在执行方法前后或出现异常后加入相关逻辑。

● 说说Spring事务的传播特性?

传播特性:多个事务存在是怎么处理的策略

(1) PROPAGATION_REQUIRED:如果存在一个事务,则支持当前事务。如果没有事务则开启。

(2) PROPAGATION_SUPPORTS:如果存在一个事务,则支持当前事务。如果没有则非事务运行。

(3) PROPAGATION_MANDATORY:如果存在一个事务,则支持当前事务。如果没有则抛异常。

(4) PROPAGATION_REQUIRED_NEW:总是开启一个事务,如果一个事务已经存在,则将这个存在的事务挂起。

(5) REQUIRED_NOT_SUPPORTS:总是非事务的执行,并挂起任何存在的事务。

(6) PROPAGATION_NEVER:总是非事务的执行,如果存在一个事务,则抛出异常。

(7) PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中,如果没有活动的事务,则按TransactionDefinition.PROPAGATION_REQUIRED属性执行。

● Mybatis和Hibernate有什么不同?

相同点:都是java的orm框架,屏蔽jdbc api的底层访问细节。

不同点:

(1) hibernate要比Mybatis功能强大很多,因为hibernate自动生成sql语句。

(2) Mybatis要比hibernate简单多,Mybatis是面向sql的。不用考虑对象间一些复杂的映射关系。

(3) 由于Mybatis需要我们在xml配置文件中写sql,hibernate我们无法直接控制语句。我们就无法去写特定的高效sql或复杂sql语句。

Mybatis好处:屏蔽jdbc api的底层访问细节。将sql语句与java代码进行分离;提供了将结果集自动封装为实体对象和对象的集合的功能。

Hibernate好处:hibernate是一个全自动的orm映射工具,他可以自动生成sql语句并执行返回java结果。

● Hibernate对象几状态?

瞬时状态:刚刚new出来,没有被持久化,没有id。(不处于session中,该对象就是临时对象)。

持久化状态/托管状态:已经被持久化,加入到session的缓存中,该状态的对象为持久化 对象。

游离状态:已经被持久化,但没有处于session中,该状态的对象为游离对象。

删除状态:对象有关联的ID,并且在session管理下,但是已经被计划删除。

0 人点赞