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

每日速记10道MySQL面试题16

其他资料

每日速记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-MySQL篇-CSDN博客

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

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

目录

1.如何在MySQL中避免单点故障?/如何实现读写分离?

2.如何处理MySQL的主从同步延迟?

3.什么是分库分表?分库分表有哪些策略?

4.对数据库分库分表会产生哪些问题?

5.从 MySQL获取数据,是从磁盘读取的吗?

6.MySQL 的 Doublewrite Buffer 是什么?它有什么作用?

7.什么是MySQL的Log buffer?

8.为什么在数据库中都是不推荐使用多表JOIN?

9.MySQL 中 DELETE、DROP 和 TRUNCATE 的区别是什么?

10.MySQL中INNER JOIN、LEFT JOIN 和 RIGHT JOIN 的区别是什么?


1.如何在MySQL中避免单点故障?/如何实现读写分离?

一般会使用主从架构的形式,主数据库+从数据库,读操作只在从数据库中读,写操作往主数据库中写,写完之后再数据同步到从数据库,当主数据库崩了之后,就让从数据库顶上来,读写操作都由从数据库承担,等到主数据库恢复了之后,再将从数据库中的数据同步到主数据库并恢复读写分离。

2.如何处理MySQL的主从同步延迟?

主从同步延迟就是主数据库和从数据库之间的数据同步存在时间差,导致从数据库的数据落后于主数据库。这种延迟是必然存在的,我们无法避免,只能尽量减少。

我能想到比较好的两点方案能够尽量减少主从同步延迟:

第一点就是关键业务的读写都走主数据库,比如用户注册这种比较重要的,这样用户登录进来就不会说账号不存在等问题。

第二点就是设置缓存,在主库写入之后同步到缓存,这样每次查询就先查缓存,缓存没有再查数据库,但是这样又会出现缓存数据不一致的问题。

3.什么是分库分表?分库分表有哪些策略?

什么是分库分表:
将数据进行拆分,放到不同的数据库或者表中


分库分表的类型(策略):水平分表,垂直分表,垂直分库,水平分库
水平分表:将一个表按行进行拆分,分成多行,放到不同的表中(表数据太多了,分一点到其他表)
垂直分表:将一个表按列进行拆分,分成多列,放到不同的表中(表字段太多了,分一点到其他表)
水平分库:不同的库可以具有相同的表结构,只不过每个表里面的数据不一样。
垂直分库:根据功能或者模块进行分库,不同的库存储不同功能或模块的数据,例如用户模块,订单模块,一个搞一个数据库。
水平分库比垂直分库维护起来更加的困难,跨库查询更加的复杂。


为什么要分库分表:业务发展需要,用户以及数据越来越多,单库单表抗不住压力,性能差。分库分表,能够提升性能。

4.对数据库分库分表会产生哪些问题?

1.事务问题。单机事务用不上,得使用分布式事务,而分布式事务大多只能保证数据的最终一致性,所以可能存在数据不一致的场景
2.分库之后,不同库里面的表不能进行ioin查询。一般在应用层进行外理,可以先查出一个表里面的数据,然后根据这些数据做一些处理之后,去查另一个库里面的表,最后进行整合,得到最终结果。还可以在表里面存储一些冗余数据,避免连表查询。
3.主键id重复问题。主键id在分库分表之后,可能存在重复的情况,可以使用雪花算法或者分布式唯一id生成器来生成。
4.order by和count问题。分库分表后,order by,count无法通过数据库直接实现。可以通过应用层代码实现。

这里可能会被问到分布式事务、分布式唯一id生成器等问题

5.从 MySQL获取数据,是从磁盘读取的吗?

并不总是从磁盘读取。mysql8.0之前有查询缓存,会先去查询缓存里面找,如果查询缓存里面有的话,直接返回。8.0的时候移除了查询缓存,因为命中率低,它是以sql作为key,sql语句要相同,而且表不能发生任何变化,才能命中。还有个buffer pool,里面存储了一个一个的数据页,mysql会从buffer pool里面找,如果找到的话就会返回。

6.MySQL 的 Doublewrite Buffer 是什么?它有什么作用?

MySQL 的 Doublewrite Bufer 是 InnoDB存储引擎中的一个机制,用于确保数据的安全性和一致性。它的作用是将数据先写入一个内存缓冲区(双写缓冲区),然后再将其写入数据文件。这种方式可以防止在写入过程中因崩溃或故障导致数据损坏,确保数据的一致性和完整性。

工作原理简述:
写入流程:当事务提交时,InnoDB 首先将数据写入 Doublewrite Buffer,再从该缓冲区将数据写入磁盘的实际数据文件。
恢复机制:在崩溃恢复时,InnoDB 会使用 Doublewrite Buffer 中的数据来修复损坏的页,保证教据不丢失。

延伸→那如果在写入Buffer的时候就出问题了怎么办?

这个问题我没深入研究过,我觉得InnoDB引擎在底层应该会对这次操作进行再次执行并重试写入Buffer中。

7.什么是MySQL的Log buffer?

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

8.为什么在数据库中都是不推荐使用多表JOIN?

多表 JOIN 可能导致查询性能下降,尤其是在处理大数据集时,JOIN 操作的计算复杂度会显著增加,需要进行大量的数据扫描和匹配,增加了内存和CPU的消耗,导致响应时间变长。数据量小倒数据库往往是我们系统的弱点,很多情况下性能瓶颈都在数据库,因此我们需要尽量避免把压力放在数据库上。

如果实在要JOIN,尽量值JOIN两张表,三表以上不JOIN,太耗性能了。JOIN的时候尽量小表做驱动表,因为驱动表要全表扫描,被驱动表走索引,整体复杂度是A+2log2B*A(A为驱动表,B为被驱动表),所以尽量让A尽量小。

9.MySQL 中 DELETE、DROP 和 TRUNCATE 的区别是什么?

1.Delete 用于删除行数据,但保留表结构和相关的对象。
2.Drop 用于完全删除数据库表,包括数据和结构。
3.Truncate只删除数据,不会删除表结构和索引等其他结构。

10.MySQL中INNER JOIN、LEFT JOIN 和 RIGHT JOIN 的区别是什么?

inner join 内连接:内连接就是返回两张表都关联上的数据
left join 左连接:返回时保留左表的数据,右表关联不上的会显示null值
right join 右连接:返回时保留右表的数据,左表关联不上的会显示null值

相关文章:

每日速记10道MySQL面试题16

其他资料 每日速记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博客 每…...

云计算考试题

1、与SaaS不同的,这种“云”计算形式把开发环境或者运行平台也作为一种服务给用户提供。(B) A、软件即服务 B、基于平台服务 C、基于WEB服务 D、基于管理服务 2、云计算是对(D)技术的发展与运用 A、并行计算 B、网格计算 C、分布式计算 D、三个选项都是 3、Amazon.com公司…...

无人机理论考试合格证书获取

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 轻型民用无人驾驶航空器安全操控理论培训合格证明 前言无人机特性和应用场景 前言 无人机(Drone)是一种非常受欢迎的技术产品,广泛应用于…...

AcWing 3496. 特殊年份

文章目录 前言代码思路 前言 写简单题没啥。反正都是要写的&#xff0c;先把能拿到的分数拿了&#xff0c;之后有机会再去啃一啃硬骨头。啃不下来就算了。 代码 #include<bits/stdc.h> using namespace std; char a1[10],a2[10],a3[10],a4[10],a5[10]; int main(){cin…...

YOLOv8模型改进 第二十讲 添加三重注意力机制Triplet Attention 提升小目标/遮挡目标

本文这次分享的是三重注意力机制Triplet Attention。现在注意力机制在计算机视觉任务中被广泛研究和应用&#xff0c;如 Squeeze-and-Excitation Networks (SENet)、Convolutional Block Attention Module (CBAM) 等。然而&#xff0c;这些方法存在一些局限性&#xff0c;例如需…...

Linux絮絮叨(三) Ubuntu桌面版添加中文拼音输入法

步骤很详细&#xff0c;直接上教程 一. 配置安装简体拼音输入法 #安装相应的平台支持包 sudo apt install ibus-gtk ibus-gtk3# 安装简体拼音输入法 sudo apt install ibus-pinyin安装完成如果下面的步骤找不到对应输入法可以重启一下&#xff0c;一般不需要 二. 添加简体拼音…...

Ungoogled Chromium127编译指南 Windows篇 - 安装Visual Studio 2022(六)

1. 引言 在编译Ungoogled Chromium之前&#xff0c;正确安装和配置Visual Studio 2022是至关重要的一步。作为主要的开发环境&#xff0c;Visual Studio不仅提供了必要的编译工具&#xff0c;还包含了大量构建过程中需要的组件和库。本文将详细介绍如何在Windows系统上安装和配…...

Kubernetes(K8s)

头条&#xff1a;参考资料 Kubernetes 入门指南&#xff1a;从基础到实践_kubernetes 从入门到实践-CSDN博客 Kubernetes&#xff08;k8s&#xff09;与docker的区别 Docker、Kubernetes之间的区别_docker和kubernetes区别-CSDN博客 Docker部署SpringBoot项目&#xff08;镜…...

证明切平面过定点的曲面是锥面

目录 证明&#xff1a;切平面过定点的曲面是锥面. 证明&#xff1a;切平面过定点的曲面是锥面. 证明&#xff1a; 方法一&#xff1a; 设曲面 S : r r ( u , v ) S:\mathbf{r}\mathbf{r}(u,v) S:rr(u,v)的切平面过定点 P 0 P_0 P0​,其位置向量为 p 0 . \mathbf{p}_0. p0​…...

python中数组怎么转换为字符串

1、数组转字符串 #方法1 arr [a,b] str1 .join(arr)#方法2 arr [1,2,3] #str .join(str(i) for i in arr)#此处str命名与str函数冲突&#xff01; str2 .join(str(i) for i in arr) 2、字符串转数组 #方法一 str_x avfg st_list list(str_x) #使用list()#方法二 list_s…...

Linux 查看运行了哪些服务

1、service --status-all service --status-all输出: ● fdfs_storaged.service - LSB: FastDFS storage serverLoaded: loaded (/etc/rc.d/init.d/fdfs_storaged; bad; vendor preset: disabled)Active: active (running) since Thu 2019-03-28 09:53:35 CST; 5 years 8 mon…...

WPS EXCEL 使用 WPS宏编辑器 写32位十六进制数据转换为浮点小数的公式。

新建EXCLE文件 另存为xlsm格式的文件 先打开WPS的开发工具中的宏编辑器 宏编辑器编译环境 在工作区添加函数并编译&#xff0c;如果有错误会有弹窗提示&#xff0c;如果没有错误则不会弹 函数名字 ”HEXTOFLOAT“ 可以自己修改。 function HEXTOFLOAT(hex) { // 将十六…...

SpringMVC ——(1)

1.SpringMVC请求流程 1.1 SpringMVC请求处理流程分析 Spring MVC框架也是⼀个基于请求驱动的Web框架&#xff0c;并且使⽤了前端控制器模式&#xff08;是⽤来提供⼀个集中的请求处理机制&#xff0c;所有的请求都将由⼀个单⼀的处理程序处理来进⾏设计&#xff0c;再根据请求…...

嵌入式中防linux的通用MCU系统

​大家好,今天分享一个仿linux分层架构实现的mcu通用系统,该项目的创建方便芯片级切换以及多产品线开发。 《一个基于分层架构实现的MCU通用系统》 项目整体框图 项目亮点 分层架构,清晰高效:usal_mcu采用仿Linux的分层架构设计,将系统划分为驱动层、系统层和应用层, 每…...

Windows电脑伪关机(快速启动模式),怎么真关机

Windows电脑在关机的时候&#xff0c;进入到一个伪关机的状态&#xff0c;也就是并没有真正的关机&#xff0c;但是在一些系统更新、变更了一些设置&#xff0c;进行重启等操作也会进入到真关机状态 这种一般是开启快速启动模式&#xff0c;开启了快速启动模式功能会在关机的时…...

远程修改ESXi 6.7管理IP地址

1.启用安全Shell&#xff08;也就是EXSi可以被SSH访问的功能&#xff09; 2.使用SecureCRT SSH2连接ESXi主机&#xff0c;现在使用dcui并没有任何反应&#xff0c;在Session标签栏右键点击Disconnect。 The time and date of this login have been sent to the system logs.WA…...

DICOM医学影象应用篇——多平面重建(MPR)在DICOM医学影像中的应用详解

目录 MPR(多平面重建)概述 基本原理 具体实现 代码详解 总结 MPR(多平面重建)概述 多平面重建&#xff08;MPR, Multi-Planar Reconstruction&#xff09;是一项用于从三维医学影像数据集中生成不同平面的二维切片的技术。通常应用于CT或MRI数据集&#xff0c;MPR可以帮助医…...

chromedriver.exe编译

使用例子参考官网 ChromeDriver 使用入门 | Chrome for Developers Chrome for Testing availability 注意&#xff1a;chromedriver版本要与chromium版本号对应。 如何编译chromedriver chrome\test\chromedriver\BUILD.gn 1、ninja -C out/debug chromedriver_server…...

CVPR和其他2024顶会论文阅读(资源整理【1】)

CVPR 2024论文阅读(资源整理【1】) 一、3d 重建与建模论文1-Deformable 3D Gaussians for High-Fidelity Monocular Dynamic Scene Reconstruction论文2- 4D Gaussian Splatting for Real-Time Dynamic Scene Rendering论文3-GaussianDreamer: Fast Generation from Text to …...

封闭式论文写作--全面掌握ChatGPT-4o的写作技能,掌握提示词使用技巧、文献检索与分析方法,帮助您选定研究方向,提炼学术论文题目

在当今学术研究中&#xff0c;科研人员在撰写论文时面临诸多挑战。首先是信息量的剧增&#xff0c;科研人员需要快速消化新知识&#xff0c;筛选相关信息并清晰表达。但论文写作不仅是信息的罗列&#xff0c;还需要条理清晰、逻辑严密、语言精准&#xff0c;特别是在竞争激烈的…...

ThinkPad X250在 FreeBSD xfce4下小红点不能用、触摸板不能用以及键盘上下左右变成其它键

某一天突然发现&#xff0c;键盘的上&#xff0c;变成了PrtSc键&#xff0c;每次按上&#xff0c;就调用一次抓屏....上下左右键盘都乱了。 找了很多方法&#xff0c;发现设置键盘&#xff0c;可以解决这个问题。但是在设置多次键盘后&#xff0c;发现ThinkPad X250的小红点不…...

PowerShell install 一键部署postgres17

postgres 前言 PostgreSQL 是一个功能强大的开源对象关系数据库系统,拥有超过 35 年的积极开发经验 这为其赢得了可靠性、功能稳健性和性能的良好声誉。 通过官方文档可以找到大量描述如何安装和使用 PostgreSQL 的信息。 开源社区提供了许多有用的地方来熟悉PostgreSQL, 了…...

k8s的数据库etcd报 etcdserver: mvcc: database space exceeded的处理办法

一.问题现象 公司的k8s集群的etcd配置是默认配置&#xff0c;其磁盘配置为2GB的配额&#xff0c;目前出现了数据写入失败的情况&#xff0c;报错Error: etcdserver: mvcc: database space exceeded。 二.处理思路 当etcd的磁盘使用达到2G后&#xff0c;可能会触发维护模式&am…...

MySQL——buffer poll

为什么要有buffer poll&#xff1f; 如果没有buffer poll&#xff0c;每次读取数据的时候都是从磁盘上读的&#xff0c;这样效率是很差的的。 所以有了提高效率的方式&#xff0c;就加上了一个缓存——buffer poll 所以&#xff0c;当我们读取数据的时候就有以下的方式 当读…...

使用GO--Swagger生成文档

概述 在前后端分离的项目中&#xff0c;后端配置swagger可以很好的帮助前端人员了解后端接口参数和数据传输。go-swagger 是一个功能全面且高性能的Go语言实现工具包&#xff0c;用于处理Swagger 2.0&#xff08;即OpenAPI 2.0&#xff09;规范。它提供了丰富的工具集&#x…...

Pac4j 学习笔记

随着互联网技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;企业信息安全与身份认证系统变得越来越重要&#xff0c;而且安全认证集成方案作为保障网络安全的重要一环&#xff0c;其研究与应用也至关重要。在这种背景下&#xff0c;Pac4j 作为一种流行的身份验证库…...

什么?RayLink远程控制软件支持企业IT应用!

在当今企业IT管理中&#xff0c;远程控制工具扮演着不可或缺的角色。设想一下&#xff0c;你的团队成员分散在全球各地&#xff0c;或者员工正在远程工作&#xff0c;这时电脑突然出现问题。如果IT支持团队能够利用远程控制软件&#xff0c;比如RayLink&#xff0c;迅速远程接入…...

LeetCode Hot100 51~60

图论51. 岛屿问题52. 腐烂的橘子53. 课程表54. 前缀树55. 全排列56. 子集57. 电话号码58. 组合总和59. 括号生成60. 单词搜索 图论 51. 岛屿问题 经典洪水问题算法 class Solution { public:int numIslands(vector<vector<char>>& grid) {int nr grid.size…...

docker 启动 redis 同时设置密码,关机后会自动重启

以下是使用Docker启动Redis并设置密码&#xff0c;并配置容器自动重启的命令&#xff1a; docker run -d \--name redis \--restartalways \-p 6379:6379 \redis:latest \redis-server --requirepass "your_strong_password"详细解释&#xff1a; docker run -d&am…...

3D Gaussian Splatting代码详解(一):模型训练、数据加载

1.模型训练 训练流程&#xff1a;train.py中的training函数 这段代码实现了一个 3D 高斯模型的训练循环&#xff0c;旨在通过逐步优化模型参数&#xff0c;使其能够精确地渲染特定场景。以下是代码的详细解析&#xff1a; def training(dataset, opt, pipe, testing_iteratio…...