Java开发面试题分享

news2024/11/27 8:41:30

目录

1、简述MyISAM和InnoDB的区别

2、简述Hash和B+树索引的区别

3、简述MyBatis的实现逻辑

4、#{}和${}的区别

5、简述Mybatis的优缺点

6、当实体类中的属性名和表中的字段名不一样时怎么办?

7、resultType与resultMap的区别

8、如何执行批量插入

9、Mybatis延迟加载的实现原理是什么?

10、Mybatis动态SQL是干什么的?都有哪些动态SQl?简述动态SQL的执行原理


1、简述MyISAM和InnoDB的区别

MyISAM和InnoDB的区别

名称MyISAM

InnoDB

事务处理不支持支持
数据行锁定不支持支持
外键约束不支持支持
全文索引支持不支持
表空间大小较小较大,约两倍

MyISAM不支持事务处理、数据行锁定和外键约束,支持全文索引,表空间大小较小

InnoDB支持事务处理、数据行锁定和外键约束,不支持全文索引,表空间大小较大

2、简述Hash和B+树索引的区别

Hash索引和B+树索引的主要区别在于数据组织方式和使用场景。


Hash索引:

  • 数据以哈希表的形式存储,通过哈希函数确定存储位置。
  • 适合等值查询,速度快,但不支持范围查询和排序。
  • 不支持模糊查询和多列索引的最左前缀匹配。
  • 无法避免回表查询,查询性能不稳定,可能受到哈希碰撞的影响。

B+树索引:

  • 数据以B+树的形式存储,保持有序。
  • 支持范围查询和排序。
  • 在某些条件下可以避免回表查询,提高查询效率。
  • 查询性能相对稳定,每次查询都在根节点到叶子节点的路径上完成,查询效率与树的高度相关。

总而言之,Hash索引适合等值查询但不适合范围查询和排序,而B+树索引则适合范围查询和排序,且查询性能相对稳定。

3、简述MyBatis的实现逻辑

  1. 在 MyBatis 的初始化过程中,会生成一个 Configuration 全局配置对象,里面包含了所有初始化过程中生成的对象
  2. 根据 Configuration 创建一个 SqlSessionFactory 对象,用于创建 SqlSession “会话”
  3. 通过 SqlSession 可以获取到 Mapper 接口对应的动态代理对象,去执行数据库的相关操作
  4. 动态代理对象执行数据库的操作,由 SqlSession 执行相应的方法,在他的内部调用 Executor 执行器去执行数据库的相关操作
  5. 在 Executor 执行器中,会进行相应的处理,将数据库执行结果返回

4、#{}和${}的区别

两者在 MyBatis 中都可以作为 SQL 的参数占位符,在处理方式上不同


#{}:在解析 SQL 的时候会将其替换成 ? 占位符,然后通过JDBC的 PreparedStatement 对象添加参数值,这里会进行预编译处理,可以有效地防止 SQL 注入,提高系统的安全性


${}:在 MyBatis 中带有该占位符的 SQL 片段会被解析成动态 SQL 语句,根据入参直接替换掉这个值,然后执行数据库相关操作,存在 SQL注入 的安全性问题

5、简述Mybatis的优缺点

优点

  1. 消除了JDBC大量冗余的代码,不需要手动开关连接;
  2. 基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,降低了sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。
  3. 很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。
  4. 能够与Spring很好的集成;
  5. 提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。

缺点

  1. SQL语句的编写工作量较大,尤其当字段多、关联表多时,要有足够的SQL编写能力。
  2. SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

6、当实体类中的属性名和表中的字段名不一样时怎么办?

  1. 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致。
  2. 通过映射字段名和实体类属性名的方式进行一一对应。

7、resultType与resultMap的区别

resultmap与resulttype的区别为:对象不同、描述不同、类型适用不同

对象不同

  1. resultmap:resultMap如果查询出来的列名和pojo的属性名不一致,通过定义resultMap从而对列名和pojo属性名之间作映射关系。
  2. resultType:resultType使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。

描述不同

  1. resultmap:resultMap对于一对一表连接的处理方式通常为在主表的pojo中添加嵌套另一个表的pojo,然后在mapper.xml中采用association节点元素进行对另一个表的连接处理。
  2. resulTtype:resultType无法将查询结果映射到pojo对象的pojo属性中,根据对结构集查询遍历的需要选择使用resultType还是resultMap。适用于单表查询。

类型适用不同

  1. resultmap:mybatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap。
  2. resulttype:resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。

8、如何执行批量插入

<!--批量插入-->
<insert id="insertUserBatch" parameterType="User">
    insert into SMBMS_USER (userCode,userName,userPassword,birthday,userRole)
    values
    /*           类型        别名        分隔符   */
   <foreach collection="list" item="user"  separator=",">
     (#{user.userCode},#{user.userName},#{user.userPassword},#{user.birthday},#{user.userRole})
   </foreach>
</insert>

9、Mybatis延迟加载的实现原理是什么?

Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection指的就是一对多查询。在Mybatis配置文件中,可以配置是否启用延迟加载lazyLoadingEnabled=true|false。


它的原理是,使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用a.getB().getName(),拦截器invoke()方法发现a.getB()是null 值,那么就会单独发送事先保存好的查询关联B对象的sql,把B查询上来,然后调用a.setB(b),于是a的对象b属性就有值了,接着完成a.getB().getName()方法的调用。这就是延迟加载的基本原理。


不光是Mybatis,几乎所有的包括Hibernate,支持延迟加载的原理都是一样的。

10、Mybatis动态SQL是干什么的?都有哪些动态SQl?简述动态SQL的执行原理

作用:

动态sql是指在进行sql操作的时候,传入的参数对象或者参数值,根据匹配的条件,有可能需要动态的去判断是否为空,循环,拼接等情况;

内容:

动态Sql大致有以下几种:if、where、choose-when、set、forEach、trim等

执行原理:

  1. 首先在解析xml配置文件的时候,会有一个SqlSource sqlSource = langDriver.createSqlSource(configuration, context, parameterTypeClass) 的操作
  2. createSqlSource底层使用了XMLScriptBuilder来对xml中的标签进行解析
  3. XMLScriptBuilder调用了parseScriptNode()的方法,
  4. 在parseScriptNode()的方法中有一个parseDynamicTags()方法,会对nodeHandlers里的标签根据不同的handler来处理不同的标签
  5. 然后把DynamicContext结果放回SqlSource中
  6. DynamicSqlSource获取BoundSql
  7. 在Executor执行的时候,调用DynamicSqlSource的解析方法,并返回解析好的BoundSql,和已经排好序,需要替换的参数

简单的说:就是使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql

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

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

相关文章

[中级]软考_软件设计_计算机组成与体系结构_12_概述及回顾

概述及回顾 总纲考情分析与分值海明校验码计算公式重点 总纲 考情分析与分值 海明校验码计算公式 2 r m r 1 2^r mr1 2rmr1 重点 数据的表示是计算题型的基础计算机组成中的CPU组成计算机组成中的存储系统&#xff0c;是核心重点的考察CISC与RISC及流水线执行时间的求取

YOLOv8在windows平台的C++推理

前言 YOLOv8很多人很多人很熟悉了,现在V9都已经出来了,学习没有比别人更新的快! 个人记录一下在windows平台使用C++推理的记录。 环境配置 YOLOv8的传统的环境配置,就不多说,网上很多参考教程。 需要注意的点就是,本次C++推理需要使用OPENCV的DNN模块,所以我们需要下…

每日OJ题_BFS解决FloodFill①_力扣733. 图像渲染

目录 BFS解决FloodFill简介 力扣733. 图像渲染 解析代码 BFS解决FloodFill简介 FloodeFill算法即填充算法&#xff0c;中文&#xff1a;洪水灌溉&#xff0c;算法原理就是从一个点开始向四周扩散&#xff0c;向周围可以走到的点填充颜色&#xff0c;直到将可扩散到的点全部填…

ElasticSearch分词检索

1. 倒排索引&#xff1a;表示一种数据结构&#xff0c;分词词条与文档id集合的隐射关系 2. 它跟关系型数据库是一种互补的关系&#xff0c;因为关系型数据库支持事务操作&#xff0c;满足ACID原则 3. 索引库的文档字段只允许新增不允许修改 1.创建索引库 put /索引库名称2.1 …

Altair® (澳汰尔)Inspire™ Render —— 强大的 3D 渲染和动画工具

Inspire Render 是一种全新 3D 渲染和动画工具&#xff0c;可供创新设计师、建筑师和数字艺术家以前所未有的速度快速制作精美的产品演示。 借助基于物理特性的内置高品质全局照明渲染引擎 Thea Render&#xff0c;可以快速创建、修改和拖放各种材质并添加照明环境&#xff0c…

风电场智能化转型基于ARM工控机的HDMI数据实时监控显示

全球能源结构不断调整的大背景下&#xff0c;智能电网、太阳能发电、风能发电等清洁能源领域正经历着一场由技术创新引领的深刻变革。在这场变革中&#xff0c;ARM架构的工控机凭借其出色的性能、低功耗及高度可定制化的特点&#xff0c;正在成为能源管理系统的核心组件&#x…

LeetCode-1702. 修改后的最大二进制字符串【贪心 字符串】

LeetCode-1702. 修改后的最大二进制字符串【贪心 字符串】 题目描述&#xff1a;解题思路一&#xff1a;贪心&#xff0c;几个规则。解题思路二&#xff1a;当前遇到0&#xff0c;去找下一个0的位置&#xff0c;将当前变为00。通过解题思路三&#xff1a;另一种贪心写法。 题目…

从电工到电气工程师:PLC编程之路

在当前的工业自动化时代&#xff0c;电气工程师的角色变得越来越重要&#xff0c;特别是在掌握了PLC&#xff08;可编程逻辑控制器&#xff09;编程技能后&#xff0c;这一技能不仅能够大幅提升生产效率&#xff0c;还能为企业节省大量成本。对于那些从事电工职业的人来说&…

中科数安 || 透明加密是怎么防止公司办公终端电脑文件资料外泄的?

#企业电脑数据防泄密软件# 中科数安作为一家专注于信息安全领域的公司&#xff0c;其提供的透明加密解决方案旨在通过以下机制来防止公司办公终端电脑上的文件资料外泄&#xff1a; 中科数安 || 公司办公透明加密系统 PC地址&#xff1a;www.weaem.com 实时加密&#xff1a; …

《由浅入深学习SAP财务》:第2章 总账模块 - 2.6 定期处理 - 2.6.1 月末操作:自动清账

2.6.1 月末操作&#xff1a;自动清账 清账是指会计科目的借贷挂账后的核销&#xff0c;包括客户、供应商和实行未清项管理的总账科目等。 总账模块实行未清项管理的科目有GR/IR&#xff08;Goods Receipt/Invoice Receipt&#xff09;、银行存款-清账&#xff08;较少使…

O2OA(翱途)开发平台-如何基于nginx上下文分发的方式快速集群部署

O2OA(翱途)开发平台[下称O2OA开发平台或者O2OA]使用分布式架构设计&#xff0c;提供灵活的扩展方案用于对服务器的负载能力进行扩展&#xff0c;保障系统的高可用性。本篇主要介绍如何基于nginx上下文分发的方式快速集群部署。 O2OA平台应用结构 O2OA服务器默认启动5个服务&am…

51单片机 DS1302

DS1302 实现流程 将提供的ds1302底层参考程序拷贝到工程下 注意在ds1302.c中可能硬件引脚没有定义&#xff0c;注意去看一下。还有头文件什么的在ds1302中记得加上 参考代码&#xff1a; #include "reg52.h" #include "ds1302.h"unsigned char Write_…

Linux网络名称空间与网络协议栈:区别、联系与理解

在深入探讨Linux网络名称空间和网络协议栈之间的区别和联系之前&#xff0c;重要的是先明确这两个概念的定义。网络名称空间是Linux提供的一种虚拟化技术&#xff0c;允许在同一物理机器上运行的不同进程组拥有独立的网络环境&#x1f3e2;。而网络协议栈是操作系统用于实现网络…

【趣味学算法】14_梅森素数

注&#xff1a; 本系列仅为个人学习笔记&#xff0c;学习内容为《算法小讲堂》&#xff08;视频传送门&#xff09;&#xff0c;通俗易懂适合编程入门小白&#xff0c;需要具备python语言基础&#xff0c;本人小白&#xff0c;如内容有误感谢您的批评指正 梅森数&#xff08;Me…

从“执行SQL”到“返回结果”,数据库到底发生了什么?

SQL 全称是 Structured Query Language 结构化查询语言。由于其简单易学、完整安全、灵活且具备高可扩展性&#xff0c;SQL 如今已经成为标准的关系型数据库管理语言。 当连接到数据库&#xff0c;写下一条 SQL 语句&#xff0c;点击“执行”&#xff0c; SELECT name, compa…

1.Spring的核心思想 —— IOC和DI

1. Spring是什么&#xff1f; 简单的说&#xff0c;Spring其实指的是Spring Framework&#xff08;Spring框架&#xff09;&#xff0c;是一个开源框架。 如果要用一句话概括&#xff1a;它是包含众多工具方法的IOC&#xff08;Inverse of Control控制反转&#xff09;容器。…

STC89C52学习笔记(四)

STC89C52学习笔记&#xff08;四&#xff09; 综述&#xff1a;本文讲述了在STC89C51中数码管、模块化编程、LCD1602的使用。 一、数码管 1.数码管显示原理 位选&#xff1a;对74HC138芯片的输入端的配置&#xff08;P22、P23、P24&#xff09;&#xff0c;来选择实现位选&…

相机模型浅析

相机模型 文章目录 相机模型四个坐标系针孔相机模型世界坐标系到相机坐标系相机坐标系到图像坐标系图像坐标到像素坐标 四个坐标系 ①世界坐标系&#xff1a;是客观三维世界的绝对坐标系&#xff0c;也称客观坐标系。因为数码相机安放在三维空间中&#xff0c;我们需要世界坐标…

Java springmvc 参数名用is开头导致为null

因为最近在整理一些源码和编写规范&#xff0c;这里写一下只是记录几年前自己遇到的问题&#xff0c;好久都忘了&#xff0c;还是写下来比较好。 问题记录&#xff1a;由于变量使用了boolean&#xff0c;并且变量名是is开头的&#xff0c;由于java机制boolean默认是false&#…

网络学习学习笔记

NETEBASE学习笔记 一.VRP系统1.四种视图模式2.基础命令 二.TCP/IP1.五层模型 一.VRP系统 1.四种视图模式 (1)< Huawei > 用户视图 【查看运行状态】 (2)[Huawei] 系统视图 【配置设备的系统参数】 system-view /sys 进入系统视图 CtrlZ/return 直接返回用户视图 (3)[Hua…