系列文章目录
Java面试题·解释题·总体概括
Java面试题·解释题·JavaSE部分
Java面试题·解释题·框架部分
前言
本文将介绍:
MyBatis、
Spring、
Spring MVC、
Spring Boot
本文主要介绍框架部分的面试题。
一、MyBatis
1. 请你介绍MyBatis框架
MyBatis原本是Apache的一个开源项目原叫ibatis,后改名为MyBatis迁移到GitHub上。
MyBatis 是一个基于Java的半自动化的数据持久层(ORM)框架,它提供了一种简单且灵活的方式来映射Java对象与关系型数据库中的数据。
(使得开发人员可以通过编写简洁、可维护的SQL语句来操作数据库)
2. MyBatis框架的核心思想是什么?
MyBatis的核心思想是将SQL语句与Java代码解耦,通过XML文件或者注解来定义SQL语句,使得代码与SQL语句的开发和维护更加灵活和可控。它提供了丰富的SQL映射配置选项,允许开发人员对SQL语句进行动态拼装,以适应不同的业务需求。
3. MyBatis的核心配置文件中常用的子标签有哪些?
属性文件加载:properties
作用:1、创建成员变量;2、引入外部属性文件;
配置全局设置:setting
作用:1、启用二级缓存;2、启用延迟加载;
类型别名:typeAliases
作用:给类型取别名,一般取entry实体类包下的和pojo包下的类的别名
数据库连接环境:environments
作用:设置多个数据库连接对象,可以选择使用哪个
配置映射文件:mappers
作用:配置映射文件的所在路径
4. mapper层代理开发模式所遵守的6个要求都有哪些?
①mapper.java接口名字跟mapper.xml映射文件的名字相同并且在同一个包下。
②在映射文件中,namespace=“接口在src下的地址”。
③接口中的方法名和映射文件中statement的id值一致。
④接口中的方法输入参数类型和映射文件中statement的parameterType指定的类型一致
⑤接口中的方法返回值类型和映射文件中statement的resultType指定的类型一致
⑥SqlMapConfig.xml配置文件中,加载mapper接口
实现的效果:sql脱离java代码单独存于映射文件里,利于后期的修改、维护,而且无需编写接口的实现类
5. 请你介绍逆向工程
逆向工程是指通过已有的数据库表生成相应的实体类、mapper层代码。通过逆向工程,开发人员可以更好地理解和修改现有的代码,加快开发速度,并提高代码的可维护性和可读性。逆向工程只能还原出结构和设计信息,无法还原代码中的业务逻辑和注释等非结构性的信息。因此,在使用逆向工程生成的代码时,仍需开发人员进行适当的修改和调整,以满足实际业务需求。
6. 请你介绍动态sql
在 MyBatis 中,动态 SQL 是一种允许在 SQL 语句中根据不同条件动态生成和拼接 SQL 片段的功能。MyBatis 提供了多种方式来实现动态 SQL,其中包括使用 if(跟据test判断是否为null)、{choose、when、otherwise}(类似switch-case语句)等标签进行条件判断和循环处理。
7. MyBatis中关联查询如何实现?
使用resultType和pojo类实现,pojo类写需要返回的数据。
8. MyBatis中分页查询如何实现?
我一般使用RowBounds插件来实现分页,在Mapper接口中创建RowBounds对象作为参数,然后给RowBounds的两个参数赋值就能实现分页,底层实现是给sql中limit后的两个属性赋值
9. MyBatis中延迟加载如何实现?
延迟加载类似单例模式的懒汉式加载,同样是按需加载,
优点是只有真正用到该对象时,才进行mapping操作,减少了数据库查询开销。
但缺点有两点:
1、多次连接数据库,增加数据库的压力
2、有些问题按需加载没法及时暴露出来
10. MyBatis中查询缓存如何实现?
缓存技术是一种“以空间换时间”的设计理念,是利用内存空间资源来提高数据检索速度的有效手段。
MyBatis提供一级缓存和二级缓存
一级缓存作用域为session,当此session刷新或关闭后,所有的缓存会被清除。
二级缓存的缓存域是以Mapper类或方法为单位的,不同的Mapper类或方法可以配置不同的缓存策略。缓存是基于命名空间(Namespace)进行隔离的。
需要注意的是,如果进行DML(增删改)操作,所有的缓存都会被清除。
二、Spring
1. 请介绍Spring框架
Spring全称Spring Framework,是一个优秀的开源的轻量级的企业应用开发框架,是为了解决企业应用程序开发复杂性而创建的。通过IoC和AOP解决方案创建出松耦合,易扩展,易维护的java应用系统。
2. 请介绍IoC控制反转
将对象的创建、依赖关系的管理和生命周期的控制交给一个容器来完成,而不是由开发人员手动进行管理。
详细解释:
传统的应用程序开发中,开发人员通常需要手动创建和管理对象,包括对象的创建、依赖关系的配置和对象的销毁等。这样的开发方式存在一些问题,如代码的耦合度高、对象的创建和销毁过程繁琐、难以维护和测试等。
而IoC的思想是将这些创建对象和管理依赖关系的责任转移到一个容器中,开发人员只需关注业务逻辑的实现。在IoC容器中,对象的创建和依赖关系的配置是通过配置文件(如XML文件)或注解来完成的。开发人员只需在配置文件或注解中描述对象之间的关系,容器会根据配置来创建对象并将它们组装起来。
3. 请介绍DI依赖注入
依赖注入是一种设计模式,用于解耦组件之间的依赖关系。在依赖注入中,一个组件不再负责创建、管理和查找它所依赖的其他组件,而是由外部容器负责将依赖的对象注入到组件中。依赖注入可以通过构造函数注入、Setter 方法注入或接口注入等方式实现,目的是将依赖的创建和管理交给容器,使组件专注于自身的功能实现。
自动注入是依赖注入的一种实现方式,在 Spring 框架中被广泛使用。自动注入通过使用@Autowired 注解来标记需要注入的依赖对象。在启动时,Spring 容器会扫描被注解标记的类和对象,自动创建、管理和注入依赖的对象。
4. 请介绍AOP面向切面编程
面向切面编程:Aspect Oriented Programming面向切面编程,目的在于提升代码的扩展性。为了解决将分散在各个业务逻辑代码中的相同代码通过横向切割的方式抽取到一个独立的模块中。AOP有特定的应用场合,它只适合具有横切逻辑的应用场合,如:性能检测,访问控制,事务控制,日志记录等。
5. 请介绍TX事务传播策略
事务是指将多个sql操作视为一个整体,一个失败,那么所有操作都会都会失败,事务具有原子性、一致性、隔离性、持久性。
事务的传播策略只出现在业务层,Spring 中常用的事务传播策略:
REQUIRED(默认):如果当前存在事务,则加入到当前事务中;如果当前没有事务,则创建一个新的事务。
REQUIRES_NEW:创建一个新的事务,并挂起当前事务。新的事务将独立于当前事务进行,如果新的事务失败则回滚,当前事务不受影响。
NESTED:如果当前存在事务,则创建一个嵌套事务,并在该嵌套事务中执行;如果当前没有事务,则行为类似于 REQUIRED。
SUPPORTS:如果当前存在事务,则加入到当前事务中;如果当前没有事务,则以非事务方式执行。
NOT_SUPPORTED:以非事务方式执行,如果当前存在事务,则挂起当前事务。
NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
MANDATORY:如果当前存在事务,则加入到当前事务中;如果当前没有事务,则抛出异常。
事务的传播策略只在方法调用过程中起作用,对于同一个方法内部的多个事务操作,传播策略不会生效,所有操作将在同一个事务中执行。
三、Spring MVC
1. 请介绍MVC设计模式
MVC(Model-View-Controller)是一种常见的软件设计模式,用于将应用程序的不同部分分离,以实现更好的代码组织、可维护性和可扩展性。MVC模式将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。
模型(Model):模型是应用程序的核心组件,负责处理数据(dao)和业务逻辑(service)。
视图(View):视图是用户界面的表示,负责展示模型中的数据给用户。
控制器(Controller):控制器是模型和视图之间的协调者,负责处理用户的输入和更新模型和视图之间的关系。
MVC设计模式将应用程序分为模型、视图和控制器三个组件,通过分离关注点和职责,提高代码的可维护性和可扩展性。模型负责数据和业务逻辑的处理,视图负责展示用户界面,控制器负责处理用户输入和协调模型与视图之间的关系。
2. 请介绍SpringMVC框架
SpringMVC是一种基于Java的MVC(Model-View-Controller)Web框架,它是Spring Framework框架的子框架。SpringMVC提供了一种灵活、高效的方式来开发Web应用程序,它将请求和响应的处理逻辑分离,并提供了丰富的功能和易于扩展的机制。
3. 请介绍参数绑定
自动参数绑定:SpringMVC根据请求参数的名称(key)和对象参数的属性名称进行匹配。如果请求参数的名称与Post类的属性名称匹配,则会将请求参数的值赋给对应的属性,SpringMVC会将请求参数的值转换为该对象类型。
4. 请介绍映射请求
在SpringMVC中,映射请求是指将请求URL映射到相应的处理方法上的过程。通过映射请求,可以将不同的请求路径与不同的处理方法进行关联,从而实现请求的路由和处理。可以通过在方法上添加@RequestMapping注解来指定请求的映射路径。
5. 请介绍返回值类型
同步返回值类型包括ModelAndView、String、void。
ModelAndView可以同时返回数据(addObject)和要跳转到的页面(setViewName)。
String只进行页面跳转,不带值:
字符串以"forward: "为开头,表示转发模式进行跳转;
以"redirect: "开头表示重定向模式进行跳转;
开头不写表示以转发方式进行跳转。
void进行页面跳转。
6. 请介绍拦截器
在SpringMVC中,拦截器是一种用于拦截请求的组件,它可以在请求处理的前后进行预处理和后处理操作。拦截器可以用于实现一些公共的功能,如日志记录、权限验证、请求参数处理等。
SpringMVC的拦截器是基于接口HandlerInterceptor实现的,并通过配置文件或注解来进行配置和注册。
7. 请介绍处理流程
1、首先用户发送请求到DispatcherServlet:前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;
2、DispatcherServlet到HandlerMapping:HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;
3、DispatcherServlet到HandlerAdapter:HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;
4、HandlerAdapter到处理器:功能处理方法的调用HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);
5、DispatcherServlet到ViewResolver:ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;
6、DispatcherServlet到View:View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;
7、由DispatcherServlet返回响应给用户,到此一个流程结束。
四、Spring Boot
1. 请介绍SpringBoot框架
SpringBoot是一个用于简化创建和开发基于Spring框架的应用程序的开发框架。它提供了一种快速、方便的方式来启动和配置一个基于Spring的应用程序。SpringBoot基于约定优于配置的原则,通过自动配置和默认值,减少了开发人员的配置工作,使得开发过程更加简单和高效。
2. 什么叫做约定优于配置
一种软件开发原则,它强调在开发过程中使用约定(即默认行为)来减少配置的需要。这意味着在一些常见的场景中,开发人员可以通过遵循约定来自动完成一些配置,而无需显式地进行配置。
3. 请介绍SpringBoot启动器
在SpringBoot中,启动器是一种便捷的方式来集中管理项目的依赖、配置和辅助工具。启动器是一个Maven项目,它包含了一组预定义的依赖项,并提供了默认的配置和辅助工具,以简化SpringBoot应用程序的开发和部署。
4. 请介绍SpringBoot配置文件
在SpringBoot中,配置文件用于配置应用程序的属性和参数,它是一种常用的方式来对应用程序进行定制和配置。一般命名为application.yml。使用配置文件的好处是可以将应用程序的配置集中管理,方便进行修改和维护。
5. 请介绍ThymeLeaf
Thymeleaf是一个用于在基于Java的Web应用程序中实现服务器端模板渲染的现代化服务器端Java模板引擎。它的设计目标是提供一种优雅且功能丰富的模板引擎,可以与任何后端技术集成。
需要在html页面设置标签
<html xmlns:th="http://www.thymeleaf.org">
总结
以上是框架部分的解释题,感谢各位客官收看。