MySQL篇-其他面试题
MySQL事务
问题:事务是什么?ACID问题
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
1、事务的特性
问题:ACID是什么?
- 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
- 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
- 隔离性(lsolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
- 持久性(Durabiity):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
经典转账案例:A向B转账500,转账成功,A扣除500元,B增加500元,原子操作体现在要么都成功,要么都失败在转账的过程中,数据要一致,A扣除了500,B必须增加500在转账的过程中,隔离性体现在A像B转账,不能受其他事务于扰,在转账的过程中,持久性体现在事务提交后,要把数据持久化。
2、并发事务会有哪些问题?怎么解决?
并发事务可能出现的问题有:脏读、不可重复读、幻读。
脏读:
不可重复读:
幻读:
解决:脏读、不可重复读、幻读等问题。
对事务进行隔离。如下:
3、MySQL默认隔离级别是?
隔离级别:
- 读未提交(Read uncommitted):不能解决脏读、不可重复读、幻读等问题
- 读已提交(Read committed):能解决脏读,不能解决不可重复读、幻读等问题
- 可重复读(Repeatable Read):默认,能解决脏读、不可重复读。不能解决幻读等问题
- 串行化(Serializable):脏读、不可重复读、幻读都能解决。
注意:事务隔离级别越高,数据越安全,但是性能越低。从上往下【性能高到低】
4、undo log与redo log的区别
- redo log:记录的是数据页的物理变化,服务宕机可用来同步数据
- undo log:记录的是逻辑日志,当事务回滚时,通过逆操作恢复原来的数据
- redo log:保证了事务的持久性,undolog保证了事务的原子性和一致性
MySQL其他问题
5、解释一下MVCC
问题:事务中的隔离性是如何保证的呢?
MySQL中的多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突
- 隐藏字段:
- trx_id(事务id),记录每一次操作的事务id,是自增的
- roll_pointer(回滚指针),指向上一个版本的事务版本记录地址
- undo log
- 回滚日志,存储老版本数据
- 版本链:多个事务并行操作某一行记录,记录不同事务修改数据的版本,通过roll_pointer指针形成一个链表
- readView
- 解决的是一个事务查询选择版本的问题
- 根据readView的匹配规则和当前的一些事务id判断该访问那个版本的数据
- 不同的隔离级别快照读是不一样的,最终的访问的结果不一样
- RC:每一次执行快照读时生成ReadView
- RR:仅在事务中第一次执行快照读时生成ReadView,后续复用
6、MySQL主从同步原理
MySQL主从复制的核心就是二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但不包括数据查询(SELECT、SHOW)语句。
复制(同步)分成三步:
1.Master 主库在事务提交时,会把数据变更记录在二进制日志文件 Binlog 中。
2.从库读取主库的二进制日志文件 Binlog ,写入到从库的中继日志 Relay Log
3.slave重做中继日志中的事件,将改变反映它自己的数据。
7、MySQL分库分表
首先,什么情况下需要分库分表?
分库分表前提
- 前提:项目业务数据逐渐增多,或业务发展比较迅速 单表的数据量达1000W或20G以后
- 优化已解决不了性能问题(主从读写分离、查询索引...)
- IO瓶颈(磁盘IO、网络IO)、CPU瓶颈(聚合查询、连接数太多)
分库分表拆分策略
1、垂直分库
垂直分库:以表为依据,根据业务将不同表拆分到不同库中
特点:
- 按业务对数据分级管理、维护、监控、扩展
- 在高并发下,提高磁盘IO和数据量连接数
2、垂直分表
垂直分表:以字段为依据,根据字段属性将不同字段拆分到不同表中。
拆分规则:
- 把不常用的字段单独放在一张表
- 把text,blob等大字段拆分出来放在附表中
特点:
- 冷热数据分离
- 减少IO过渡争抢,两表互不影响
3、水平分库
水平分库:将一个库的数据拆分到多个库中。所有库的数据加起来才是完整数据。
路由规则
- 根据id节点取模
- 按id也就是范围路由,节点1(1-100万)节点2(100万-200万)
特点:
- 解决了单库大数量,高并发的性能瓶颈问题
- 提高了系统的稳定性和可用性
4、水平分表
水平分表:将一个表的数据拆分到多个表中(可以在同一个库内)。
路由规则
- 根据id节点取模
- 表名不同,可以单独用一张表当作逻辑表存分表的逻辑
特点:
- 优化单一表数据量过大而产生的性能问题
- 避免IO争抢并减少锁表的几率
8、分库分表之后产生的新问题
- 分布式事务一致性问题
- 跨节点关联查询
- 跨节点分页、排序函数
- 主键避重
使用新的技术解决,分库分表中间件:
- sharding-sphere
- mycat
相关文章:

MySQL篇-其他面试题
MySQL事务 问题:事务是什么?ACID问题 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 1、事务…...

iOS 蓝牙开发中的 BT 与 BLE
在 iOS 开发者的语境里,大家把 BT 和 BLE 当成两种不同的蓝牙技术在谈——它们来自同一个 Bluetooth 规范,但面向的场景、协议栈乃至 Apple 提供的 API 都截然不同。 缩写全称 / 技术名称规范层叫法iOS 支持现状典型用途BTBluetooth Classic(…...
Git的工作区,暂存区,本地仓库
Git 核心概念解析 1. 工作区(Working Directory) - 日常操作代码的目录,包含项目所有文件和子目录 - 开发者直接编辑和修改文件的位置 - 实际可见的项目文件结构 2. 暂存区(Staging Area) - 临时保存修改记录的缓冲区…...

鸿蒙Flutter实战:21-混合开发详解-1-概述
引言 在前面的系列文章中,我们从搭建开发环境开始,讲到如何使用、集成第三方插件,如何将现有项目进行鸿蒙化改造,以及上架审核等内容;还以高德地图的 HarmonyOS SDK 的使用为例, 讲解了如何将高德地图集成…...
MySQL错误1419(HY000)解决方案:SUPER权限缺失与二进制日志启用冲突的3种处理方式
一、错误背景与原因分析 错误描述 在执行存储过程、函数或触发器时,MySQL可能抛出以下错误: ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)…...

[架构之美]从PDMan一键生成数据库设计文档:Word导出全流程详解(二十)
[架构之美]从PDMan一键生成数据库设计文档:Word导出全流程详解(二十) 一、痛点 你是否经历过这些场景? 数据库字段频繁变更,维护文档耗时费力用Excel维护表结构,版本混乱难以追溯手动编写Word文档&#…...

大量程粗糙度轮廓仪适用于哪些材质和表面?
大量程粗糙度轮廓仪是一种能够在广泛的测量范围内对工件表面进行粗糙度分析的精密仪器。它通常采用接触式或非接触式传感器,通过对工件表面的扫描,捕捉表面微观的起伏和波动,从而获取粗糙度数据。该仪器不仅能测量微小的表面细节,…...
linux 查看java的安装路径
一、验证Java安装状态 java -version正常安装会显示版本信息: openjdk version "1.8.0_65" OpenJDK Runtime Environment (build 1.8.0_65-b17) OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)二、检查环境变量配置 若已配置JAVA_HOME&#…...
C 语言程序终止的艺术:理解 return main 与 exit() 函数
各类资料学习合集下载地址: https://pan.quark.cn/s/472bbdfcd014 每个 C 语言程序都有其起点——main 函数。同样,每个程序也都有其终点,即程序执行完毕并退出。在 C 语言中,主要有两种方式可以优雅或立即地终止整个程序的执行,并将一个状态码传递给…...
数据实时同步:inotify + rsync 实现数据实时同步
1 数据实时同步 在生产环境中,某些场景下,要将数据或文件进行实时同步,保证数据更新后其它节点能立即获得最新的数据。 数据同步的两种方式 PULL:拉,使用定时任务的方式配合同步命令或脚本等,从指定服务…...
LeetCode 404.左叶子之和的迭代求解:栈结构与父节点定位的深度解析
一、题目解析:左叶子的定义与问题本质 题目描述 LeetCode 404. 左叶子之和要求计算二叉树中所有左叶子节点的值之和。左叶子的定义是:如果一个节点是其父节点的左子节点,并且它本身没有左右子节点,则称为左叶子。 关键要点 左…...

Unity-编辑器扩展
之前我们关于Unity的讨论都是针对于Unity底层的内容或者是代码层面的东西,这一次我们来专门研究Unity可视化的编辑器,在已有的基础上做一些扩展。 基本功能 首先我们来认识三个文件夹: Editor,Gizmos,Editor Defaul…...
【自用-python】生成准心居中exe程序,防止云电脑操作时候鼠标偏移
封装exe:: altf12是终端---我理解的就是最初始python的运行台 看where python(Windows的)看是在那个路径 再确保之前pip安装了pyinstaller 然后pyinstaller --onefile --noconsole --name 输出exe的文件名称 你的py文件名称.py…...

Lucide:一款精美的开源矢量图标库,前端图标新选择
名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、前言:为何选择 Lucide?二、Lucide 是什么?1.…...
在Rocky Linux 8.10上安装Nginx
如果没有配置操作系统安装源,并且不连接网络,先配置安装源。 sudo dnf install nginx sudo systemctl enable nginx sudo systemctl start nginx systemctl status nginx curl http://ip [rootrocky810 work]# sudo dnf install nginx Last metadata …...

Mac如何允许安装任何来源软件?
打开系统偏好设置-安全性与隐私,点击右下角的解锁按钮,选择允许从任何来源。 如果没有这一选项,请到打开终端,输入命令行:sudo spctl --master-disable, 输入命令后回车,输入电脑的开机密码后回车。 返回“…...
YOLO学习笔记 | YOLO11对象检测,实例分割,姿态评估的TensorRT部署c++
以下是YOLOv11在TensorRT上部署的步骤指南,涵盖对象检测、实例分割和姿态评估: 1. 模型导出与转换 1.1 导出ONNX模型 import torch from models.experimental import attempt_loadmodel = attempt_load(yolov11s.pt, fuse=True) model.eval...

2025最新版Visual Studio Code for Mac安装使用指南
2025最新版Visual Studio Code for Mac安装使用指南 Installation and Application Guide to The Latest Version of Visual Studio Code in 2025 By JacksonML 1. 什么是Visual Studio Code? Visual Studio Code,通常被称为 VS Code,是由…...
机器学习第二十三讲:CNN → 用放大镜局部观察图片特征层层传递
机器学习第二十三讲:CNN → 用放大镜局部观察图片特征层层传递 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南 CNN详…...

【嵙大o】C++作业合集
参考: C swap(交换)函数 指针/引用/C自带-CSDN博客 Problem IDTitleCPP指针CPP引用1107 Problem A编写函数:Swap (I) (Append Code)1158 Problem B整型数据的输出格式1163 Problem C时间:24小时制转12小时制1205…...
《算法笔记》11.8小节——动态规划专题->总结 问题 B: 拦截导弹
题目描述 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,…...
Flink 核心概念解析:流数据、并行处理与状态
一、流数据(Stream Data) 1. 有界流(Bounded Stream) 定义:有明确起始和结束时间的数据集合,数据量固定,处理逻辑通常是一次性计算所有数据。 典型场景: 历史交易数据统计…...

C++23 范围迭代器作为非范围算法的输入 (P2408R5)
文章目录 一、引言二、C23及范围迭代器的背景知识2.1 C23概述2.2 范围迭代器的概念 三、P2408R5提案的内容3.1 提案背景3.2 提案内容 四、范围迭代器作为非范围算法输入的优势4.1 代码简洁性4.2 提高开发效率4.3 更好的兼容性 五、具体的代码示例5.1 使用范围迭代器进行并行计算…...
PHP-FPM 调优配置建议
1、动态模式 pm dynamic; 最大子进程数(根据服务器内存调整) pm.max_children 100 //每个PHP-FPM进程大约占用30-50MB内存(ThinkPHP框架本身有一定内存开销)安全值:8GB内存 / 50MB ≈ 160,保守设置为100 ; 启动时创建的进程数&…...

2025.05.20【Treemap】树图数据可视化技巧
Multi-level treemap How to build a treemap with group and subgroups. Customization Customize treemap labels, borders, color palette and more 文章目录 Multi-level treemapCustomization Treemap 数据可视化技巧什么是 TreemapTreemap 的应用场景如何在 R 中绘制 T…...
Elasticsearch 写入性能优化有哪些常见手段?
Elasticsearch 写入性能优化常见手段主要有以下 10 个方向,建议根据具体业务场景组合使用: 批量写入优化 使用_bulk API 批量提交文档建议每批次 5-15MB 数据量并发执行多个批量请求 索引配置调优 PUT /my_index {"settings": {"inde…...
CICD编译时遇到npm error code EINTEGRITY的问题
场景 CICD编译时抛出npm error code EINTEGRITY的错误 npm error code EINTEGRITY npm error sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA integrity checksum failed when using sha512: wanted sha512-PlhdFcillOINfeV…...

深入了解Springboot框架的启动流程
目录 1、介绍 2、执行流程 1、运行run方法 2、初始化SpringApplication对象 1、确定容器类型 3、加载所有的初始化器 4、加载Spring上下文监听器 5、设置程序运行的主类 3、进入run方法 1、开启计时器 2、Headless模式配置 3、获取并启用监听器 4、准备环境 1、设…...
DataWhale llm universe
搭建向量知识库 向量以及向量知识库 向量词与向量 词向量:是一种以单词为单位的将每个单词转化为实数向量的技术,这些实数可以被计算机更好的理解,如果是相近的理念或者相关的对象在向量空间中距离很近 词向量实际上将单词转化为固定的静态…...

LLaMA-Factory微调LLM-Research/Llama-3.2-3B-Instruct模型
1、GPU环境 nvidia-smi 2、pyhton环境安装 git clone https://github.com/hiyouga/LLaMA-Factory.git conda create -n llama_factory python3.10 conda activate llama_factory cd LLaMA-Factory pip install -e .[torch,metrics] 3、微调模型下载(LLM-Research/…...