每日速记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博客 每…...
内存图及其画法
所有的文件都存在硬盘上,首次使用的时候才会进入内存 进程:有自己的Main方法,并且依赖自己Main运行起来的程序。独占一块内存区域,互不干扰。内存中有一个一个的进程。 操作系统只认识c语言。操作系统调度驱动管理硬件࿰…...
Ansys Maxwell:Qi 无线充电组件
Qi 无线充电采用感应充电技术,无需物理连接器或电缆,即可将电力从充电站传输到兼容设备。由 WPC 管理的 Qi 标准确保了不同无线充电产品之间的互操作性。以下是 Qi v1.3 标准的核心功能: Qi v1.3 标准的主要特点 身份验证:确保充…...
【Shell 脚本实现 HTTP 请求的接收、解析、处理逻辑】
以下是一个实现客户端对 Shell HTTP 服务发起 POST 请求并传入 JSON 参数的完整示例。Shell 服务会解析收到的 JSON 数据,根据内容执行操作。 服务端脚本:http_server.sh 以下脚本使用 netcat (nc) 来监听 HTTP 请求,并通过 jq 工具解析 JSO…...
【北京迅为】iTOP-4412全能版使用手册-第六十七章 USB鼠标驱动详解
iTOP-4412全能版采用四核Cortex-A9,主频为1.4GHz-1.6GHz,配备S5M8767 电源管理,集成USB HUB,选用高品质板对板连接器稳定可靠,大厂生产,做工精良。接口一应俱全,开发更简单,搭载全网通4G、支持WIFI、蓝牙、…...
【青牛科技】拥有两个独立的、高增益、内部相位补偿的双运算放大器,可适用于单电源或双电源工作——D4558
概述: D4558内部包括有两个独立的、高增益、内部相位补偿的双运算放大器,可适用于单电源或双电源工作。该电路具有电压增益高、噪声低等特点。主要应用于音频信号放大,有源滤波器等场合。 D4558采用DIP8、SOP8的封装形式 主要特点ÿ…...
Kafka 数据写入问题
目录标题 分析思路1. **生产者配置问题**:Kafka生产者的配置参数生产者和消费者的处理确定并优化 2. **网络问题**:3. **Kafka 集群配置问题**:unclean.leader.election.enable 4. **Zookeeper 配置问题**:5. **JVM 参数调优**&am…...
实战ansible-playbook(九)-profile配置- 确保 CUDA 和 MPI 环境变量正确设置并立即生效
Playbook 分析 --- - name: 确保 CUDA 和 MPI 环境变量正确设置并立即生效hosts: pod2 # 指定目标主机组或具体主机名become: yes # 使用特权提升(sudo),以root权限执行某些需要权限的任务remote_user: canopy # 远程连接使用的用户名vars: # 定义全局变量,用于Playbo…...
气膜馆:科技与环保融合的未来建筑新选择—轻空间
在全球城市化进程不断加快的背景下,传统建筑方式面临着越来越多的挑战。如何在有限的土地和资源条件下,快速、高效、环保地搭建符合多功能需求的建筑,成为现代建筑行业亟待解决的重要课题。而随着科技的进步与建筑材料的创新,一种…...
git回退到某个版本git checkout和git reset命令的区别
文章目录 1. git checkout <commit>2. git reset --hard <commit>两者的区别总结推荐使用场景* 在使用 Git 回退到某个版本时, git checkout <commit> 和 git reset --hard <commit> 是两种常见的方式,但它们的用途和影响有很…...
Preprocess
Preprocess数据预处理 文本 使用Tokenizer将文本转换为标记序列,创建标记的数值表示,并将它们组装成张量。 预处理文本数据的主要工具是标记器。标记器根据一组规则将文本拆分为标记。标记被转换为数字,然后转换为张量,这些张量…...
stm32 spi接口传输asm330l速率优化(及cpu和dma方式对比)
最近一段时间做了一个mems的项目,项目的方案是stm32g071做主控,读写3颗asm330l的硬件形态。最初是想放置4颗imu芯片,因为pcb空间布局的问题,改放了3颗。但对于软件方案来说无所谓,关键是如何优化spi的传输速率…...
数字时代的文化宝库:存储技术与精神生活
文章目录 1. 文学经典的数字传承2. 音乐的无限可能3. 影视艺术的数字化存储4. 结语 数字时代的文化宝库:存储技术与精神生活 在数字化的浪潮中,存储技术如同一座桥梁,连接着过去与未来,承载着人类文明的瑰宝。随着存储容量的不断增…...
flex: 1 display:flex 导致的宽度失效问题
flex: 1 & display:flex 导致的宽度失效问题 问题复现 有这样的一个业务场景,详情项每行三项分别占33%宽度,每项有label字数不固定所以宽度不固定,还有content 占满标签剩余宽度,文字过多显示省略号, 鼠标划入展示…...
Hive 窗口函数与分析函数深度解析:开启大数据分析的新维度
Hive 窗口函数与分析函数深度解析:开启大数据分析的新维度 在当今大数据蓬勃发展的时代,Hive 作为一款强大的数据仓库工具,其窗口函数和分析函数犹如一把把精巧的手术刀,助力数据分析师们精准地剖析海量数据,挖掘出深…...
前端工程 Node 版本如何选择
1. Node 与 Npm 版本对应 这是一个必知必会的问题,尤其是对于维护那些老掉牙、一坨坨、非常大的有着长期历史的老破大工程。 1.1. package-lock.json 版本 首先你要会看项目的 package-lock.json 文件中的 lockfileVersion 版本号,这对于 NPM 安装来说…...
推荐在线Sql运行
SQL Fiddle 1、网址: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…...
【数据结构】【线性表】特殊的线性表-字符串
目录 字符串的基本概念 字符串的三要素 字符串的基本概念 串的编码 串的实现及基本运算 顺序串的实现 串的静态数组实现 串的动态数组的实现 顺序存储的四种方案 链式串的实现 基本运算 方案三 方案一 字符串的基本概念 数据结构千千万,…...
app-1 App 逆向环境准备(mumu模拟器+magisk+LSPosed+算法助手+抓包(socksDroid+charles)+Frida环境搭建
一、前言 本篇是基于 mumu模拟器 进行环境配置记录。(真机的后面博客记录) 二、mumu模拟器magiskLSPosed算法助手 2.1、mumu模拟器 选择 mumu 模拟器,下载地址:https://mumu.163.com 安装完成后打开,找到设置中心进…...
在米尔FPGA开发板上实现Tiny YOLO V4,助力AIoT应用
学习如何在 MYIR 的 ZU3EG FPGA 开发板上部署 Tiny YOLO v4,对比 FPGA、GPU、CPU 的性能,助力 AIoT 边缘计算应用。 一、 为什么选择 FPGA:应对 7nm 制程与 AI 限制 在全球半导体制程限制和高端 GPU 受限的大环境下,FPGA 成为了中…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
数据库正常,但后端收不到数据原因及解决
从代码和日志来看,后端SQL查询确实返回了数据,但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离,并且ai辅助开发的时候,很容易出现前后端变量名不一致情况,还不报错,只是单…...
rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...
视觉slam--框架
视觉里程计的框架 传感器 VO--front end VO的缺点 后端--back end 后端对什么数据进行优化 利用什么数据进行优化的 后端是怎么进行优化的 回环检测 建图 建图是指构建地图的过程。 构建的地图是点云地图还是什么信息的地图? 建图并没有一个固定的形式和算法…...
Redis——Cluster配置
目录 分片 一、分片的本质与核心价值 二、分片实现方案对比 三、分片算法详解 1. 范围分片(顺序分片) 2. 哈希分片 3. 虚拟槽分片(Redis Cluster 方案) 四、Redis Cluster 分片实践要点 五、经典问题解析 C…...
从0开始一篇文章学习Nginx
Nginx服务 HTTP介绍 ## HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 ## HTTP工作在 TCP/IP协议体系中的TCP协议上&#…...
