Java面试题·解释题·框架部分

news2025/1/11 6:57:55

系列文章目录

Java面试题·解释题·总体概括
Java面试题·解释题·JavaSE部分
Java面试题·解释题·框架部分


文章目录

  • 系列文章目录
  • 前言
  • 一、MyBatis
    • 1. 请你介绍MyBatis框架
    • 2. MyBatis框架的核心思想是什么?
    • 3. MyBatis的核心配置文件中常用的子标签有哪些?
    • 4. mapper层代理开发模式所遵守的6个要求都有哪些?
    • 5. 请你介绍逆向工程
    • 6. 请你介绍动态sql
    • 7. MyBatis中关联查询如何实现?
    • 8. MyBatis中分页查询如何实现?
    • 9. MyBatis中延迟加载如何实现?
    • 10. MyBatis中查询缓存如何实现?
  • 二、Spring
    • 1. 请介绍Spring框架
    • 2. 请介绍IoC控制反转
    • 3. 请介绍DI依赖注入
    • 4. 请介绍AOP面向切面编程
    • 5. 请介绍TX事务传播策略
  • 三、Spring MVC
    • 1. 请介绍MVC设计模式
    • 2. 请介绍SpringMVC框架
    • 3. 请介绍参数绑定
    • 4. 请介绍映射请求
    • 5. 请介绍返回值类型
    • 6. 请介绍拦截器
    • 7. 请介绍处理流程
  • 四、Spring Boot
    • 1. 请介绍SpringBoot框架
    • 2. 什么叫做约定优于配置
    • 3. 请介绍SpringBoot启动器
    • 4. 请介绍SpringBoot配置文件
    • 5. 请介绍ThymeLeaf


前言

本文将介绍:
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. 请你介绍逆向工程

代码逆向工程是指通过已有的代码生成相应的UML类图、类关系图或者其他代码模型。代码逆向工程可以帮助开发人员理解和分析现有的代码,并在此基础上进行开发和修改。通过代码逆向工程,开发人员可以更好地理解和修改现有的代码,加快开发速度,并提高代码的可维护性和可读性。

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面向切面编程

面向切面编程:程序开发过程中,一些业务代码的前后会出现非业务的横切代码,
通过aop技术,可以将横切代码提取单独存放再切面类,再通过通知类型+execution表达式再重新作用到业务代码上。到此完成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框架

Spring Boot 是一个用于简化创建和开发基于 Spring 框架的应用程序的开发框架。它提供了一种快速、方便的方式来启动和配置一个基于 Spring 的应用程序。Spring Boot 基于约定优于配置的原则,通过自动配置和默认值,减少了开发人员的配置工作,使得开发过程更加简单和高效。

2. 什么叫做约定优于配置

一种软件开发原则,它强调在开发过程中使用约定(即默认行为)来减少配置的需要。这意味着在一些常见的场景中,开发人员可以通过遵循约定来自动完成一些配置,而无需显式地进行配置。

3. 请介绍SpringBoot启动器

在SpringBoot中,启动器是一种便捷的方式来集中管理项目的依赖、配置和辅助工具。启动器是一个Maven项目,它包含了一组预定义的依赖项,并提供了默认的配置和辅助工具,以简化SpringBoot应用程序的开发和部署。

4. 请介绍SpringBoot配置文件

在 Spring Boot 中,配置文件用于配置应用程序的属性和参数,它是一种常用的方式来对应用程序进行定制和配置。一般命名为application.yml。使用配置文件的好处是可以将应用程序的配置集中管理,方便进行修改和维护。

5. 请介绍ThymeLeaf

Thymeleaf是一个用于在基于Java的Web应用程序中实现服务器端模板渲染的现代化服务器端Java模板引擎。它的设计目标是提供一种优雅且功能丰富的模板引擎,可以与任何后端技术集成。
需要在html页面设置标签

<html  xmlns:th="http://www.thymeleaf.org">

---
# 总结
以上是框架部分的解释题,感谢各位客官收看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2112644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

饲料加工机器设备有哪些组成部分

在快速发展的畜牧业中&#xff0c;饲料加工作为支撑养殖业的重要环节&#xff0c;其效率与品质直接影响着养殖业的成本效益与动物健康。随着科技的进步&#xff0c;饲料加工机器设备也在不断升级&#xff0c;为养殖行业带来了变革。一、智能化粉碎机&#xff1a;细度可调&#…

Unity Adressables 使用说明(五)在运行时使用 Addressables(Use Addressables at Runtime)

一旦你将 Addressable assets 组织到 groups 并构建到 AssetBundles 中&#xff0c;就需要在运行时加载、实例化和释放它们。 Addressables 使用引用计数系统来确保 assets 只在需要时保留在内存中。 Addressables 初始化 Addressables 系统在运行时第一次加载 Addressable …

SimD:基于相似度距离的小目标检测标签分配

摘要 https://arxiv.org/pdf/2407.02394 由于物体尺寸有限且信息不足&#xff0c;小物体检测正成为计算机视觉领域最具挑战性的任务之一。标签分配策略是影响物体检测精度的关键因素。尽管已经存在一些针对小物体的有效标签分配策略&#xff0c;但大多数策略都集中在降低对边界…

怎么利用XML发送物流快递通知短信

现如今短信平台越来越普遍了&#xff0c;而短信通知也分很多种&#xff0c;例如服务通知、订单通知、交易短信通知、会议通知等。而短信平台在物流行业通知这一块作用也很大。在家时:我们平时快递到了&#xff0c;如果电话联系不到本人&#xff0c;就会放到代收点&#xff0c;然…

正负极层数更新器

文件名&#xff1a;dcs_tkinter.py import tkinter as tk from tkinter import messagebox import redis# 连接Redis r redis.Redis(hostlocalhost, port6379, db0)def update_redis_and_display():try:# 从输入框获取值positive_layers int(entry_positive.get())negative_…

2024国赛数学建模C题论文:基于优化模型的农作物的种植策略

大家可以查看一下35页&#xff0c;包含结构完整&#xff0c;数据完整的C题论文&#xff0c;完整论文见文末名片 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xf…

Nexus配置npm私服

1&#xff0c;配置npm-hub 2&#xff0c;配置proxy-npm 3&#xff0c;配置group-npm 4&#xff0c;配置local-npm 5&#xff0c;配置淘宝

Java语言程序设计基础篇_编程练习题**17.20 (二进制编辑器)

目录 题目&#xff1a;**17.20 (二进制编辑器) 代码示例 结果展示 题目&#xff1a;**17.20 (二进制编辑器) 编写一个GUI应用程序&#xff0c;让用户在文本域输入一个文件名&#xff0c;然后单击回车键&#xff0c;在文本区域显示它的二进制表示形式。用户也可以修改这个二…

每日一题~cf 970 div3 (A思维,B小模拟,C二分,D排列数建图成环,E 26个字母暴力+前缀和,F 逆元,G 数论gcd )

A 题意&#xff1a; 有 a 个1 ,b 个2.问是否能将这些数划分为两个数值相等的集合。 输出 YES 或者 NO —————— 问题等价于 将数组 分成两个数值相同的数组。所以sum 应该是偶数。也就是说 1 的个数是偶数。在i1的个数是偶数的情况下&#xff0c;将 2 分成两份&#xff0c;…

FreeRTOS学习笔记(二)任务基础篇

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、 任务的基本内容1.1 任务的基本特点1.2 任务的状态1.3 任务控制块——任务的“身份证” 二、 任务的实现2.1 定义任务函数2.2 创建任务2.3 启动任务调度器2…

TMGM:美国劳动力市场正常化,而非衰退

新的数据显示&#xff0c;美国劳动力市场的降温正在增强对美联储降息的信心&#xff0c;但目前对主要市场的影响尚未明朗。本周&#xff0c;劳动力市场成为焦点&#xff0c;因为它有能力决定美联储何时以及多大幅度地削减其关键利率。周五的官方非农就业报告将成为亮点&#xf…

探究零工市场小程序如何改变传统兼职模式

近年来&#xff0c;零工市场小程序正逐渐改变传统的兼职模式&#xff0c;为求职者和雇主提供了一个更为高效、便捷的平台。本文将深入探讨零工市场小程序如何影响传统兼职模式&#xff0c;以及它带来的优势和挑战。 一、背景与挑战 传统的兼职市场往往存在信息不对称的问题&am…

辉煌版单据的金额字段可以使用自定义公式

有些用户反馈&#xff0c;使用管家婆录入单据时&#xff0c;金额不是数量乘以单价&#xff0c;需要增加一些自定义字段参与&#xff0c;所以需要自定义金额的计算公式&#xff0c;这样原来的单价乘以数量就不能满足了。其实管家婆是支持自定义公式的&#xff0c;具体操作如下&a…

广度优先搜索Breadth-First-Search

目录 1.问题 2.算法 3.代码 4.参考文献 1.问题 广度优先搜索&#xff0c;稍微学过算法的人都知道&#xff0c;网上也一大堆资料&#xff0c;这里就不做过多介绍了。直接看问题&#xff0c;还是从下图招到一条从城市Arad到Bucharest的路径。 该图是连通图&#xff0c;所以必然…

顺序表的定义

一.概述&#xff1a; 二.顺序表&#xff1a; 1.概念&#xff1a; 2.顺序表的实现&#xff1a; 1)静态分配&#xff1a; 比如数组&#xff0c;数组大小一旦确定&#xff0c;就不可以再被改变。 ElemType代表数据类型&#xff0c;比如整型&#xff0c;浮点型等。 例如&#x…

工厂数字化转型利器:.NET Core 与 ARMxy 嵌入式边缘计算网关

在当今数字化时代&#xff0c;工厂数字化转型已成为提高生产效率、降低成本、提升竞争力的关键。.NET Core与 ARMxy 嵌入式边缘计算网关的结合为工厂数字化转型提供了强大的技术支持。 一、.NET Core 的优势 跨平台性&#xff1a;.NET Core 可以在 Windows、Linux 和 macOS 等…

Python 从入门到实战10(流程控制-选择语句)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们通过举例学习了python 中集合的定义及相关操作。今天…

初识string(一)and内存管理

对类和对象的补充&#xff1a;缺省参数在函数定义中从右向左依次赋值&#xff0c;如果从右向左有一个参数没有赋值缺省参数&#xff0c;则左边的变量就不能在赋缺省参数&#xff0c;类中的变量可以赋缺省参数并且没有限制。 在类定义中我们总是看到函数后加const。这其实是调用…

算法备案究竟难在哪里?

算法备案究竟难在哪里&#xff1f; 在当今数字化社会中&#xff0c;算法备案已成为人工智能技术应用中的一个关键环节。然而&#xff0c;对于初学者和企业来说&#xff0c;这一过程充满了挑战和复杂性。本文将深入探讨算法备案的难度和应对策略。 算法备案的挑战 首先&#xff…

标准库标头 <filesystem> (C++17)学习

此头文件是文件系统支持库的一部分。本篇介绍filesystem命名空间的一些函数。 函数 在命名空间 std::filesystem 定义 absolute (C17) 组成一个绝对路径 (函数) canonicalweakly_canonical (C17) 组成一个规范路径 (函数) relativeproximate (C17) 组成一个相对路径 (函数) c…