前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA面试锦囊(七)

JAVA面试锦囊(七)

作者头像
用户7386338
发布2020-05-29 11:13:19
3680
发布2020-05-29 11:13:19
举报
文章被收录于专栏:Java患者

● 说说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管理下,但是已经被计划删除。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java患者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档