动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

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

08-13 16:57 302浏览
举报 T字号
  • 大字
  • 中字
  • 小字

说到互联网,大家自然而然想到的就是计算机,那么对于计算机而言,最重要的就是相应的技术支撑。Java语言是应用最广泛的计算机语言,想掌握好java技术,几大框架是必备技能:SpringMVCMybatisMaven等,都是常用的java框架,想要应聘java程序员岗位的,在面试前搜集java框架面试题是必做功课之一,这篇文章整理了2020最新java框架面试题,供有面试需要的朋友们学习参考。

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

答:(1)轻量:Spring是轻量的,基本的版本大约2MB;(2)控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们;(3)面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开;(4)容器:Spring 包含并管理应用中对象的生命周期和配置;(5)MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品;(6)事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA);(7)异常处理:Spring提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。

2、Spring的Bean工厂和Application 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 : bean在每个Spring ioc 容器中只有一个实例。缺省的Spring bean 的作用域是Singleton,且Spring框架中的单例bean不是线程安全的。 prototype:一个bean的定义可以有多个实例。 request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。 session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。 * global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

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服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架

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

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

8、Dubbo能做什么?

答:(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仅可以编写针对ParameterHandler、ResultSetHandler、StatementHandler、Executor这4种接口的插件,Mybatis使用JDK的动态代理,为需要拦截的接口生成代理对象以实现接口方法拦截功能,每当执行这4种接口对象的方法时,就会进入拦截方法,具体就是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还是由我们自己写sql语句。batis可以出来复杂语句,而hibernate不能;(3)ibatis要比hibernate简单的多。ibatis是面向sql的,不同考虑对象间一些复杂的映射关系。

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

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

学完2020最新java框架面试题不是对于java框架的整体把握一步15道java框架面试题是最新常考的题目,这篇文章把这些题目整理总结到一起,目的就是让正在搜集java面试题的朋友们节省时间看最精华的内容,希望大家可以将这些题目中涉及到的知识点都学会,因为java框架帮助我们减少代码冗余提高运行速度便于维护规范编程的作用,所以只要是将来从事java编程工作的程序员一定避免不了学框架,框架是一名优秀的程序员必须掌握的技能。

0人推荐
共同学习,写下你的评论
0条评论
滨崎君
程序员滨崎君

6篇文章贡献37441字

作者相关文章更多>

推荐相关文章更多>

Java数据结构

HelloWorld10-31 08:24

浅谈MySQL中SQL优化的常用方法

军哥08-12 23:29

五分钟读懂UML类图

江湖人称小李白12-10 10:41

MyBatis开发框架的四大核心

IT逐梦者08-17 21:43

一次搞定continue,break和return

HelloWorld11-06 11:19

发评论

举报

0/150

取消