当前位置: 首页 > 图灵资讯 > 技术篇> 2020最新java框架面试题(附答案)

2020最新java框架面试题(附答案)

来源:图灵教育
时间:2023-03-29 15:11:25

  说到互联网,人们自然会想到计算机,所以对于计算机来说,最重要的是相应的技术支持。Java语言是应用最广泛的计算机语言。如果你想掌握Java技术,几个框架是必要的技能:SpringMVC、Mybatis、Maven等,都是常用的java框架,想申请java程序员岗位的,面试前收集java框架面试题这篇文章是必修课之一2020年最新java框架面试题,供有面试需要的朋友学习参考。

  1、使用Spring框架有什么好处?

  答:(1)轻量级:Spring轻量级,基本版本2MB左右;(2)控制逆转:Spring通过控制逆转实现松散耦合,对象给予依赖,而不是创建或搜索依赖的对象;(3)面向截面的编程(AOP):Spring支持面向切面的编程,并将应用业务逻辑与系统服务分开;(4)容器:Spring 包括和管理应用中对象的生命周期和配置;(5)MVC框架:SpringWEB框架是精心设计的框架,是WEB框架的良好替代品;(6)事务管理:Spring 提供连续的事务管理接口,可以扩展到本地事务到全局事务(JTA);(7)异常处理:Spring提供方便的API与特定技术相关的异常(如JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。

  2、Bean工厂和Springaplication contexts有什么区别?

  答:两者都是装入的bean定义信息,组装bean,根据需要分发bean。然而,applicationcontext提供了更多的功能,它提供了bean工厂没有的分析信息文本工具,包括对国际化的支持,以及载入文件资源的一般方法,如载入图片,可以用注册为监听器的bean发送事件。另一个重要的区别是单例bean的输入方式不同。bean工厂延迟载入所有bean,直到getbean方法被调用。Applicationcontext将预装到所有单例bean中,以确保单例bean在必要时已经准备好,因此我们的应用程序不需要等待这些单例bean的创建。

  3、如何为Spring容器提供配置元数据?

  答:这里有三种重要的方法可以给出Spring容器提供配置元数据:(1)XML配置文件;(2)基于注释的配置;(3)基于java的配置。

  4、解释Spring支持的几个bean作用域。

  答:当定义一个时 在Spring中,我们也可以向这个bean声明一个作用域。它可以通过bean 定义scope属性。例如,当Spring需要时,每次都要生产一个新的bean实例,bean的scope属性被指定为prototype。另一方面,bean每次使用都必须返回同一个例子,这个bean的scope 属性 必须设为 singleton。 Spring框架支持以下五个bean功能域: singleton : 每个Springbean ioc 容器中只有一个例子。缺少Spring bean Singleton作用域,Spring框架中的单例bean线程不安全。 prototype:一个bean的定义可以有多个例子。 request:每次http请求都会创建一个bean,这个功能域只是基于web的Spring 在ApplicationContext的情况下有效。 session:HTTP 在Session中,一个bean定义对应一个例子。该功能域仅基于web的Spring 在ApplicationContext的情况下有效。 * global-session:HTTPP在全局 在Session中,一个bean定义对应一个例子。该功能域仅基于web的Spring ApplicationC在ontext的情况下有效。

  5、bean生命周期的重要方法是什么? 能重载它们吗?

  答:有两个重要的bean生命周期方法,第一种是setup,它在容器加载bean时被调用。第二种方法是 teardown 它在容器卸载时被调用。使用它们,您可以定制自己的初始化和注销方法。它们还有相应的注释(@Postconstruct和@PreDestroy)。

  6、Spring内部bean是什么?

  答:当一个当bean只被用作另一个bean属性时,它可以被声明为一个内部bean来定义inner bean,Spring 的 基于XML的 在配置元数据中,可以 \或\ 元素内使用\元素内使用\ 元素,内部bean通常是匿名的,它们的Scope通常是prototype。

  7、什么是Dubbo?

  答:Dubbo是一个致力于提供高性能、透明RPC远程服务调用和SOA服务治理的分布式服务框架。简单地说,dubo是一个服务框架,如果没有分布式需求,实际上不需要使用,只有在分布式中,有dubo等分布式服务框架的需求,本质上是一个服务呼叫,直率地说是一个远程服务呼叫分布式框架

  其核心部分包括:(1)远程通信: 提供基于长连接的各种NIO框架抽象包装,包括各种线程模型、序列化和“请求-响应”信息交换模式;

  (2)集群容错: 提供基于接口方法的透明远程过程呼叫,包括多协议支持、软负荷平衡、失败容错、地址路由、动态配置等集群支持;(3)自动发现: 基于注册中心目录服务,服务消费者可以动态找到服务提供商,使地址透明,使服务提供商能够平稳地增加或减少机器。

  8、Dubo能做什么?

  答:(1)透明的远程方法呼叫,就像呼叫本地方法一样,只需要简单的配置,没有API入侵;(2)软负载平衡和容错机制可以取代F5等硬件负载平衡器,降低成本和单点;(3)服务自动注册和发现,不再需要写下服务提供商的地址,注册中心根据接口名查询服务提供商的IP地址,并且可以平滑地添加或删除服务提供商。

  9、Mybatis是如何分页的?分页插件的原理是什么?

  答:Mybatis使用Rowbounds对象进行分页。它是Resultset结果集中执行的内存分页,而不是物理分页。它可以直接在sql中书写带有物理分页的参数来完成物理分页功能,或者使用分页插件来完成物理分页。

  使用分页插件的基本原理是Mybatis提供的插件接口,实现自定义插件,拦截待执行的sql,然后重写sql,根据dialect方言添加相应的物理分页语句和物理分页参数。举例:select * from student,拦截sql后重写为:select t.* from (select * from student)t limit 0,10

  10、简要介绍Mybatis的插件操作原理,以及如何编写插件。

  答:Mybatis只能为ParameterHandrer编写、ResultSetHandler、StatementHandler、对于Executor这四个接口的插件,Mybatis使用JDK动态代理,为需要拦截的接口生成代理对象,以实现接口方法的拦截功能。将进入拦截方法,特别是InvocationHandler的invoke()方法,当然,只会拦截您指定的拦截方法。

  实现Mybatis的Interceptor接口,重写intercept()方法,然后编写插件注释,指定要拦截哪个接口的方法。记住,别忘了在配置文件中配置你编写的插件。

  11、Mybatis是如何将sql执行结果封装为目标对象并返回的?有哪些映射形式?

  答:一是使用标签逐一定义列名与对象属性名之间的映射关系。二是使用sql列的别名功能,将别名写成对象属性名,如T_NAME AS NAME,对象属性名一般是name和小写,但列名不区分大小写。Mybatis会忽略列名大小写,智能找到对应的对象属性名,甚至可以写成T_NAME AS NaMe,Mybatis可以正常工作。

  列名与属性名的映射关系,Mybatis通过反射创建对象,并使用反射给对象的属性逐一赋值并返回。找不到映射关系的属性无法完成赋值。

  12、MyBatis中的动态Sql是如何设置的?用什么语法?

  答:MyBatis中的动态Sql一般是通过if节点和OGNL语法实现的,但如果要写得完整,必须配合where和trim节点。where节点是插入where来判断包含节点的内容,否则不会插入。trim节点用于判断如果动态句是and 或者or开始,然后会自动取下and或or。

  13、谈谈orm和jdbc的区别?

  答:jdbc只是java操作数据库的标准接口;orm只是一种对象关系映射的思想;ORM:是对象关系模型,比如hibernate,让你以面向对象的方式编程,包装JDBC;JDBC:从底层访问数据库服务器。为了安全起见,一般银行和金融业直接使用JDBC访问。

  14、mybatis和Hibernate有什么相似之处和不同之处?

  答:相似点:都是java中的orm框架屏蔽jdbc 我们不需要使用api的底层访问细节来使用jdbc 在处理api时,可以完成数据库的持久操作。jdbc api编程过程是固定的,sql语句和java代码混合在一起,经常需要拼凑sql语句,细节繁琐。

  不同点:(1)hibernate比ibatis强大得多。因为hibernate自动生成sql语句;(2)ibatis要求我们在xml配置文件中自己写sql语句。如果hibernate不能直接控制这个句子,就不能写特定高效的sql。对于一些不太复杂的sql查询,hibernate可以帮助我们完成,但是hibernate很难适应特别复杂的查询。这个时候用ibatis是个不错的选择,因为ibatis还是我们自己写的。batis可以出来复杂的句子,而hibernate不能;(3)ibatis比hibernate简单得多。ibatis面向sql,考虑对象之间一些复杂的映射关系。

  15、Mybatis一级、二级缓存简述?

  答:(一级缓存:一级缓存: Hashmapp基于Perpetualcache Sesssion是Session的本地缓存,其存储功能域 flush或close之后,session中的所有cache 清空;(2)二级缓存与一级缓存机制相同,默认也采用PerpetualCache、HashMap存储,不同之处在于,它的存储功能域是Mapper(Namespace),并且可以自定义存储源,如Ehcache。为了打开二级缓存,您需要在您的SQL映射文件中添加一行;(3)当某个作用域(一级缓存Session/二级缓存Namespaces)对缓存数据更新机制进行C//U/D 默认情况下,该作用域下所有select中的缓存都将被clear操作。

  学完