每日速记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 成为了中…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...
C# WPF 左右布局实现学习笔记(1)
开发流程视频: https://www.youtube.com/watch?vCkHyDYeImjY&ab_channelC%23DesignPro Git源码: GitHub - CSharpDesignPro/Page-Navigation-using-MVVM: WPF - Page Navigation using MVVM 1. 新建工程 新建WPF应用(.NET Framework) 2.…...
