当前位置: 首页 > news >正文

每日速记10道java面试题14-MySQL篇

其他资料

每日速记10道java面试题01-CSDN博客

每日速记10道java面试题02-CSDN博客

每日速记10道java面试题03-CSDN博客

每日速记10道java面试题04-CSDN博客

每日速记10道java面试题05-CSDN博客

每日速记10道java面试题06-CSDN博客

每日速记10道java面试题07-CSDN博客

每日速记10道java面试题08-CSDN博客

每日速记10道java面试题09-CSDN博客

每日速记10道java面试题10-CSDN博客

每日速记10道java面试题11-CSDN博客

每日速记10道java面试题12-CSDN博客

每日速记10道java面试题13-CSDN博客

目录

1.索引这么好用,那我建一堆索引不好吗?

2.MySQL中使用索引就一定有效吗?

 3.请详细描述MySQL中的B+树中查询数据的全过程

4.为什么MySQL选择使用B+树作为索引结构?

5.为什么不使用B树呢?两者的区别在哪?

6.MySQL是如何实现事务的?

7.请你详细聊聊MySQL中的锁?

8.什么是MySQL中的Redo Log?

9.什么是MySQL中的Undo Log?

10.什么是MySQL中的MVCC?


1.索引这么好用,那我建一堆索引不好吗?

1)索引并不是越多越好,索引是会占用空间的,而且每次修改数据的时候还要维护索引的数据,要是建的太多,维护的成本会很高。

2)对于字段的值有大量重复的不要建立索引,例如性别字段,一般只有男或女,0或1,有大量重复的值,因此它的选择性很低,意味着很多行都会匹配到同一个索引值,这样的话建立索引也不能提高检索速度。

3)对于一些长字段也不应该建立索引,特别是文本字段,建立出来的索引结构特别庞大,而且特别占内存,如果一定要的话,那就要截取字段中的一部分来建索引。

4)当数据库的修改频率远大于查询频率时,也不该建索引,因为建索引是会影响更新操作的,因为每次更新数据同时也要更新索引,因此会很消耗性能。

2.MySQL中使用索引就一定有效吗?

1.查询列未涉及到索引列不会触发索引
2.如果数据表量很小,可能不会走索引,直接全表查询
3.可以使用EXPLAIN命令,得到MySQL的执行计划,其中type表示是否执行了索引,key表示使用了哪个索引
4.如果查询中存在函数或者表达式,索引失效
5.如果查询中涉及<>!=,索引失效
6.如果查询中%Like,索引也会失效,但不是所有的模糊都失效,后模糊不失效
7.如果随便使用or,必须or的两个字段,都有索引,索引才会生效
8.相同字段的类型不相同,会涉及到转换,索引也会失效
9.表中两个不同的字段进行比较,索引会失效
10.使用了is not null,索引会失效
11.使用了order by,索引失效

 3.请详细描述MySQL中的B+树中查询数据的全过程

首先从根节点开始,根据键值来判断是左子树还是右子树,逐层搜索,直到找到叶子节点,即对应的数据页。在确定了待查找数据就存在于这个数据页上之后,我们将这个数据页加载到内存,通过页目录做二分查找,定位出一个粗略的记录分组,最后在这个分组里通过链表遍历的方式来找到指定记录。

4.为什么MySQL选择使用B+树作为索引结构?

1.B+树是一种自平衡树,每个叶子节点到根节点的路径长度相同,在插入和删除结点是进行分裂和合并操作,以保持树的平衡,让树的高度不会太高。

2.非叶子节点仅保存主键或索引值的页面指针,使得每一页能容纳更多的记录,因此内存中就能存放更多索引。

3.B+树特别适合范围查询,因为叶子节点通过链表连接,从根节点定位到叶子节点查找到范围的起点之后,只需要顺序扫描链表即可遍历后续的数据,非常高效。

延伸→为什么不使用B树呢?两者的区别在哪?

5.为什么不使用B树呢?两者的区别在哪?

1)B树每个节点都存储了完整的数据,而 B+ 树非叶子节点仅存储 key 和指针,完整数据存储在叶子节点。这使得 B+ 树可以在内存中存放更多索引页,减少磁盘查询次数。
2)B+树叶子组成了链表,便于区间查找,而 B树只能每一层遍历查找。
3)B+ 树查询时间更平均、稳定,都需要从根节点扫描到叶子节点。而 B树则在非叶子节点就可能找到对应的数据返回。

6.MySQL是如何实现事务的?

1.MySQL是通过锁,Redo log,Undo log,MVCC来实现的
2.使用InnoDB锁机制实现数据并发修改的控制,实现事务的隔离性
3.Redo log记录日志修改的数据,在崩溃时恢复未提交的更改,实现事务的持久性
4.Undo log保留历史数据记录,在事务执行失败后,可以进行事务的回滚,实现了原子性和隔离性5.MVCC(多并发版本控制)满足了非锁定读的需求,支持读未提交,读已提交,可重复读的隔离性6.一致性时通过AID,隔离性,原子性,持久性实现的

7.请你详细聊聊MySQL中的锁?

MySQL中的锁有全局锁、表级锁、行级锁,其中全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的 DML 的写语句, DDL 语句,已经更新操作的事务提交语句都将被阻塞。

表级锁就是作用在表上的锁,主要分类有表锁、元数据锁、意向锁,其中表锁又分有表共享读锁和表独占写锁,顾名思义就是作用在这张表上之后,允许有多线程的读操作但只能有单线程的写操作。
元数据锁为了解决在增删改的时候表结构被修改,然后造成前后不一致的情况,是为了确保读写一致的锁。
意向锁是为了解决行锁和表锁的区别,如果没有意向锁,那在加上表锁之前需要逐行的遍历检查是否存在行锁,如果没有就上表锁,这样逐行遍历肯定是会比较消耗性能的。

行级锁分有间隙锁和临键锁,针对两个索引记录之间的空间加锁,防止其他事务在两个间隙之间添加记录。临键锁是行级锁和间隙锁的结合,能够保证一定范围之内不会出现幻读。

延伸→什么是幻读?

在一个事务中,多次读取同一范围的数据,由于另一个事务的插入操作,导致读取到之前不存在的数据。

8.什么是MySQL中的Redo Log?

重做日志,记录的是事务提交时数据页的物理修改,是用来实现事务的持久性。

该日志文件由两部分组成:重做日志缓冲( redo log buffer)以及重做日志文件(redo log

file) ,前者是在内存中,后者在磁盘中。当事务提交之后会把所有修改信息都存到该日志文件中 , 用 于在刷新脏页到磁盘 ,发生错误时 , 进行数据恢复使用。

延伸→那Redo log是怎么进行数据恢复使用的呢?

InnoDB的内存结构中有个Buffer Pool,Buffer Pool中存放着数据页,我们的增删改操作会先在Buffer Pool中进行,增删改之后的数据页叫做脏页,脏页会在一定时机之后通过后台线程刷新到磁盘中,redo log是为了保证我们在进行脏页刷新发生错误时进行数据恢复,从而保证事务的持久性。

延伸→具体是怎么的操作呢?

有了redo log(内存中的Redolog Buffer + 磁盘中的redo log file)之后,会先将脏页记录在redo log buffer中,在事务提交时,再将redo log buffer 中的数据刷新到redo log file中(内存到磁盘),当脏页刷新磁盘错误时就可以通过redo log进行数据恢复。

9.什么是MySQL中的Undo Log?

回滚日志,用于记录数据被修改前的信息  , 作用包含两个   : 提供回滚(保证事务的原子性) 和 MVCC(多版本并发控制) 。

undo log和redo log记录物理日志不一样,它是逻辑日志。可以认为当delete一条记录时, undo log中会记录一条对应的insert记录,反之亦然,当update一条记录时,它记录一条对应相反的update记录。当执行rollback时,就可以从undo log中的逻辑记录读取到相应的内容并进行回滚。

10.什么是MySQL中的MVCC?

建议阅读我的另一篇文章:MySQL数据表中的InnoDB引擎原理(存储结构+架构+事务原理+MVCC)_mysql innodb存储引擎实现原理-CSDN博客

相关文章:

每日速记10道java面试题14-MySQL篇

其他资料 每日速记10道java面试题01-CSDN博客 每日速记10道java面试题02-CSDN博客 每日速记10道java面试题03-CSDN博客 每日速记10道java面试题04-CSDN博客 每日速记10道java面试题05-CSDN博客 每日速记10道java面试题06-CSDN博客 每日速记10道java面试题07-CSDN博客 每…...

内存图及其画法

所有的文件都存在硬盘上&#xff0c;首次使用的时候才会进入内存 进程&#xff1a;有自己的Main方法&#xff0c;并且依赖自己Main运行起来的程序。独占一块内存区域&#xff0c;互不干扰。内存中有一个一个的进程。 操作系统只认识c语言。操作系统调度驱动管理硬件&#xff0…...

Ansys Maxwell:Qi 无线充电组件

Qi 无线充电采用感应充电技术&#xff0c;无需物理连接器或电缆&#xff0c;即可将电力从充电站传输到兼容设备。由 WPC 管理的 Qi 标准确保了不同无线充电产品之间的互操作性。以下是 Qi v1.3 标准的核心功能&#xff1a; Qi v1.3 标准的主要特点 身份验证&#xff1a;确保充…...

【Shell 脚本实现 HTTP 请求的接收、解析、处理逻辑】

以下是一个实现客户端对 Shell HTTP 服务发起 POST 请求并传入 JSON 参数的完整示例。Shell 服务会解析收到的 JSON 数据&#xff0c;根据内容执行操作。 服务端脚本&#xff1a;http_server.sh 以下脚本使用 netcat (nc) 来监听 HTTP 请求&#xff0c;并通过 jq 工具解析 JSO…...

【北京迅为】iTOP-4412全能版使用手册-第六十七章 USB鼠标驱动详解

iTOP-4412全能版采用四核Cortex-A9&#xff0c;主频为1.4GHz-1.6GHz&#xff0c;配备S5M8767 电源管理&#xff0c;集成USB HUB,选用高品质板对板连接器稳定可靠&#xff0c;大厂生产&#xff0c;做工精良。接口一应俱全&#xff0c;开发更简单,搭载全网通4G、支持WIFI、蓝牙、…...

【青牛科技】拥有两个独立的、高增益、内部相位补偿的双运算放大器,可适用于单电源或双电源工作——D4558

概述&#xff1a; D4558内部包括有两个独立的、高增益、内部相位补偿的双运算放大器&#xff0c;可适用于单电源或双电源工作。该电路具有电压增益高、噪声低等特点。主要应用于音频信号放大&#xff0c;有源滤波器等场合。 D4558采用DIP8、SOP8的封装形式 主要特点&#xff…...

Kafka 数据写入问题

目录标题 分析思路1. **生产者配置问题**&#xff1a;Kafka生产者的配置参数生产者和消费者的处理确定并优化 2. **网络问题**&#xff1a;3. **Kafka 集群配置问题**&#xff1a;unclean.leader.election.enable 4. **Zookeeper 配置问题**&#xff1a;5. **JVM 参数调优**&am…...

实战ansible-playbook(九)-profile配置- 确保 CUDA 和 MPI 环境变量正确设置并立即生效

Playbook 分析 --- - name: 确保 CUDA 和 MPI 环境变量正确设置并立即生效hosts: pod2 # 指定目标主机组或具体主机名become: yes # 使用特权提升(sudo),以root权限执行某些需要权限的任务remote_user: canopy # 远程连接使用的用户名vars: # 定义全局变量,用于Playbo…...

气膜馆:科技与环保融合的未来建筑新选择—轻空间

在全球城市化进程不断加快的背景下&#xff0c;传统建筑方式面临着越来越多的挑战。如何在有限的土地和资源条件下&#xff0c;快速、高效、环保地搭建符合多功能需求的建筑&#xff0c;成为现代建筑行业亟待解决的重要课题。而随着科技的进步与建筑材料的创新&#xff0c;一种…...

git回退到某个版本git checkout和git reset命令的区别

文章目录 1. git checkout <commit>2. git reset --hard <commit>两者的区别总结推荐使用场景* 在使用 Git 回退到某个版本时&#xff0c; git checkout <commit> 和 git reset --hard <commit> 是两种常见的方式&#xff0c;但它们的用途和影响有很…...

Preprocess

Preprocess数据预处理 文本 使用Tokenizer将文本转换为标记序列&#xff0c;创建标记的数值表示&#xff0c;并将它们组装成张量。 预处理文本数据的主要工具是标记器。标记器根据一组规则将文本拆分为标记。标记被转换为数字&#xff0c;然后转换为张量&#xff0c;这些张量…...

stm32 spi接口传输asm330l速率优化(及cpu和dma方式对比)

最近一段时间做了一个mems的项目&#xff0c;项目的方案是stm32g071做主控&#xff0c;读写3颗asm330l的硬件形态。最初是想放置4颗imu芯片&#xff0c;因为pcb空间布局的问题&#xff0c;改放了3颗。但对于软件方案来说无所谓&#xff0c;关键是如何优化spi的传输速率&#xf…...

数字时代的文化宝库:存储技术与精神生活

文章目录 1. 文学经典的数字传承2. 音乐的无限可能3. 影视艺术的数字化存储4. 结语 数字时代的文化宝库&#xff1a;存储技术与精神生活 在数字化的浪潮中&#xff0c;存储技术如同一座桥梁&#xff0c;连接着过去与未来&#xff0c;承载着人类文明的瑰宝。随着存储容量的不断增…...

flex: 1 display:flex 导致的宽度失效问题

flex: 1 & display:flex 导致的宽度失效问题 问题复现 有这样的一个业务场景&#xff0c;详情项每行三项分别占33%宽度&#xff0c;每项有label字数不固定所以宽度不固定&#xff0c;还有content 占满标签剩余宽度&#xff0c;文字过多显示省略号&#xff0c; 鼠标划入展示…...

Hive 窗口函数与分析函数深度解析:开启大数据分析的新维度

Hive 窗口函数与分析函数深度解析&#xff1a;开启大数据分析的新维度 在当今大数据蓬勃发展的时代&#xff0c;Hive 作为一款强大的数据仓库工具&#xff0c;其窗口函数和分析函数犹如一把把精巧的手术刀&#xff0c;助力数据分析师们精准地剖析海量数据&#xff0c;挖掘出深…...

前端工程 Node 版本如何选择

1. Node 与 Npm 版本对应 这是一个必知必会的问题&#xff0c;尤其是对于维护那些老掉牙、一坨坨、非常大的有着长期历史的老破大工程。 1.1. package-lock.json 版本 首先你要会看项目的 package-lock.json 文件中的 lockfileVersion 版本号&#xff0c;这对于 NPM 安装来说…...

推荐在线Sql运行

SQL Fiddle 1、网址&#xff1a;SQL Fiddle - Online SQL Compiler for learning & practiceDiscover our free online SQL editor enhanced with AI to chat, explain, and generate code. Support SQL Server, MySQL, MariaDB, PostgreSQL, and SQLite.http://www.sqlfi…...

【数据结构】【线性表】特殊的线性表-字符串

目录 字符串的基本概念 字符串的三要素 字符串的基本概念 串的编码 串的实现及基本运算 顺序串的实现 串的静态数组实现 串的动态数组的实现 顺序存储的四种方案 链式串的实现 基本运算 方案三 方案一 字符串的基本概念 数据结构千千万&#xff0c…...

app-1 App 逆向环境准备(mumu模拟器+magisk+LSPosed+算法助手+抓包(socksDroid+charles)+Frida环境搭建

一、前言 本篇是基于 mumu模拟器 进行环境配置记录。&#xff08;真机的后面博客记录&#xff09; 二、mumu模拟器magiskLSPosed算法助手 2.1、mumu模拟器 选择 mumu 模拟器&#xff0c;下载地址&#xff1a;https://mumu.163.com 安装完成后打开&#xff0c;找到设置中心进…...

在米尔FPGA开发板上实现Tiny YOLO V4,助力AIoT应用

学习如何在 MYIR 的 ZU3EG FPGA 开发板上部署 Tiny YOLO v4&#xff0c;对比 FPGA、GPU、CPU 的性能&#xff0c;助力 AIoT 边缘计算应用。 一、 为什么选择 FPGA&#xff1a;应对 7nm 制程与 AI 限制 在全球半导体制程限制和高端 GPU 受限的大环境下&#xff0c;FPGA 成为了中…...

【IT】测试用例模版(含示例)

这里写目录标题 一、测试用例模版二、怎么用模版示例如何使用这个模板 一、测试用例模版 一个相对标准的测试用例模板通常包含以下部分&#xff1a; 测试用例ID&#xff1a;唯一标识符&#xff0c;用于追踪测试用例。测试用例标题&#xff1a;简短描述测试用例的目的。测试用…...

react dnd——一个拖拽组件

React DnD是一个流行的库&#xff0c;用于在React应用程序中实现拖放功能。以下是对React DnD的详细解释&#xff0c;包括示例和API说明&#xff1a; 基本概念 在开始使用React DnD之前&#xff0c;了解以下几个基本概念是很重要的&#xff1a; Drag Source&#xff08;拖动…...

3GPP R18 LTM(L1/L2 Triggered Mobility)是什么鬼?(三) RACH-less LTM cell switch

这篇看下RACH-less LTM cell switch。 相比于RACH-based LTM,RACH-less LTM在进行LTM cell switch之前就要先知道target cell的TA信息,进而才能进行RACH-less过程,这里一般可以通过UE自行测量或者通过RA过程获取,而这里的RA一般是通过PDCCH order过程触发。根据38.300中的描…...

Flutter解压文件并解析数据

Flutter解压文件并解析数据 前言 在 Flutter 开发中&#xff0c;我们经常需要处理文件的读取和解压。 这在处理应用数据更新、安装包、存档文件等场景中尤为常见。 本文将介绍如何在Flutter中使用archive插件来解压文件并解析数据。 准备 在开始之前&#xff0c;我们需要…...

21、结构体成员分布

结构体中的成员并不是紧挨着分布的&#xff0c;内存分布遵循字节对齐的原则。 按照成员定义的顺序&#xff0c;遵循字节对齐的原则存储。 字节对齐的原则&#xff1a; 找成员中占据字节数最大的成员&#xff0c;以它为单位进行空间空配 --- 遇到数组看元素的类型 每一个成员距离…...

TSWIKI知识库软件

TSWIKI 知识库软件介绍 推荐一个适合本地化部署、自托管的知识库软件 TSWIKI介绍 tswiki 是一个适合小团队、个人的知识库、资料管理的软件&#xff0c;所有数据均本地化存储。可以本地化、私有云部署&#xff0c;安装简单。在线预览。 主要功能说明 1、简化的软件依赖和安…...

深度学习安装环境笔记

1、输出cuda版本 torch.version.cuda 返回的是 PyTorch 在编译时所使用的 CUDA 版本&#xff0c;而不是运行时实际调用的 CUDA 版本。PyTorch 在运行时实际调用的 CUDA 版本取决于系统上安装的 CUDA 驱动和库。 import torch from torch.utils.cpp_extension import CUDA_HOME…...

使用android studio写一个Android的远程通信软件(APP),有通讯的发送和接收消息界面

以下是使用 Android Studio 基于 Java 语言编写一个简单的 Android APP 实现远程通信&#xff08;这里以 TCP 通信为例&#xff09;的代码示例&#xff0c;包含基本的通信界面以及发送和接收消息功能。 1. 创建项目 打开 Android Studio&#xff0c;新建一个 Empty Activity …...

学习Python的笔记14--迭代器和生成器

1.迭代器&#xff08;Iterator&#xff09; 概念&#xff1a; 迭代意味着重复多次&#xff0c;就像循环一样。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问&#xff0c;直到所有的元素被访问完结束。 迭代器只能往前不会后退。 1.iter…...

车机端同步outlook日历

最近在开发一个车机上的日历助手&#xff0c;其中一个需求就是要实现手机端日历和车机端日历数据的同步。然而这种需求似乎没办法实现&#xff0c;毕竟手机日历是手机厂商自己带的系统应用&#xff0c;根本不能和车机端实现数据同步的。 那么只能去其他公共的平台寻求一些机会&…...