面试击穿mysql

Mysql三大范式:

 第一范式(1NF):

        不符合第一范式的典型情况是在一个字段中存放多种不同类型的详细信息。例如,在商品表中,若将商品名称、价格和类型都存储在同一个字段中,会带来诸多弊端。首先,在进行查询操作时,由于数据混杂在一起,要提取特定信息会变得十分困难。其次,进行数据修改也会非常复杂,容易出错且难以保证数据的一致性。第一范式要求将这些不同类型的数据进行拆分,提取出来后放在不同的字段中,确保每个字段都是不可分割的原子数据项,以便于数据的管理和操作。

 第二范式(2NF):

      在满足第一范式的基础上,第二范式要求数据库表中的每一个非主属性都完全依赖于主键。当第一范式中存放的商品数据有很多重复时,我们可以给每一列字段添加一个合适的主键来区分这些重复的商品。例如,如果商品表中有商品编号、商品名称、价格、类型等字段,商品编号可以作为主键,确保商品名称、价格和类型等非主属性完全依赖于商品编号这个主键。这样可以避免数据的冗余和不一致性,提高数据的完整性和准确性。

 第三范式(3NF):

        在满足第二范式的基础上,以商品表为例,将商品的类型等重复数据可以提取出来,生成另一个专门的商品类型表。这个新表可以设置一个主键,比如类型编号,然后在商品表中使用这个类型编号来代替商品表中的商品类型字段。这样可以进一步减少数据冗余,提高数据的一致性和可维护性。

 反范式设计:

         反范式设计是一种违反第三范式的设计方式,它将商品中常用的属性放在商品表中,以牺牲一定的内存空间来换取查询速度,减少连接表查询的开销。在某些特定场景下,这种设计是有意义的。比如,当对商品表的查询操作非常频繁,而连接其他表进行查询会导致性能严重下降时,可以考虑将一些经常一起查询的属性进行反范式设计,存储在商品表中。然而,需要注意的是,反范式设计会增加数据冗余,可能会带来数据一致性的问题。因此,在进行反范式设计时,需要谨慎考虑,并采取适当的措施来确保数据的一致性,比如定期进行数据清理和同步等操作。

二 Mysql的执行原理

   连接器: 身份认证和权限相关(登录 MySQL 的时候)。
• 查询缓存: 执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。
• 分析器: 没有命中缓存的话,SQL 语句就会经过分析器,分析器说白了就是要先看你的 SQL 语句要干嘛,再检查你的 SQL 语句语法是否正确。
• 优化器: 按照 MySQL 认为最优的方案去执行。
• 执行器: 执行语句,然后从存储引擎返回数据。 执行语句之前会先判断是否有权限,如果没有权限的话,就会报错。
• 插件式存储引擎:主要负责数据的存储和读取,采用的是插件式架构,支持 InnoDB、MyISAM、Memory 等多种存储引擎。

算法

  1. 顺序查找法

    • 基本概念

      • 顺序查找是一种简单的查找算法。它从数据结构的一端开始,逐个检查元素,直到找到目标元素或者遍历完整个数据结构为止。

      • 例如,在一个数组[3, 7, 1, 9, 4]中查找元素9,就从第一个元素3开始,依次比较每个元素,直到找到9

    • 时间复杂度

      • 在最坏的情况下,需要遍历整个数据结构。如果数据结构中有 n 个元素,时间复杂度为。例如,要查找的元素在数组的最后一个位置或者不存在于数组中时,就需要比较 n 次。

    • 适用场景

      • 适用于数据量较小或者数据结构没有排序的情况。比如,一个无序的联系人列表,当需要查找某个联系人时,顺序查找是一种简单直接的方法。

  2. 二分查找法

    • 基本概念

      • 二分查找要求数据结构是有序的。它每次比较中间元素与目标元素的大小。如果中间元素等于目标元素,则查找成功;如果中间元素大于目标元素,则在左半部分继续查找;如果中间元素小于目标元素,则在右半部分继续查找。

      • 例如,在有序数组[1, 3, 5, 7, 9]中查找5,首先比较中间元素5(中间位置是(0 + 4)/2 = 2),就直接找到了。如果要查找4,比较中间元素5后,发现4 < 5,就在左半部分[1, 3]继续查找。

    • 时间复杂度

      • 每次查找都能将搜索区间缩小一半。对于包含 n 个元素的有序数组,时间复杂度为。这比顺序查找在效率上有很大的提升,尤其是当 n 较大时。

    • 适用场景

      • 适用于数据量较大且数据已经排序的情况,如字典中的单词查找(假设字典内容是按照字母顺序排序的)。

  3. Hash 算法

    • 基本概念

      • Hash 算法是一种将任意长度的数据映射为固定长度的哈希值(也称为散列值)的算法。这个哈希值可以作为数据的索引,用于快速存储和检索数据。

      • 例如,一个简单的哈希函数可以是将字符串中每个字符的 ASCII 码相加,然后对一个固定的数取模。假设哈希表大小为 10,对于字符串 “abc”,其 ASCII 码之和为97 + 98+ 99 = 294294 mod 10 = 4,那么这个字符串就可以存储在哈希表的索引为 4 的位置。

    • 冲突解决

      • 由于不同的数据可能会产生相同的哈希值,这就是哈希冲突。常见的解决方法有开放定址法(如线性探测、二次探测)和链地址法。在链地址法中,当发生冲突时,将具有相同哈希值的数据以链表的形式存储在同一个哈希桶中。

    • 应用场景

      • 在数据库索引、密码存储(存储密码的哈希值而不是密码本身)等领域广泛应用。比如,在数据库中通过哈希算法为用户 ID 生成索引,能够快速定位用户记录。

    • 基本概念

      • 树是一种非线性的数据结构,它由节点(Node)和边(Edge)组成。有一个根节点(Root),其余节点可以分为多个子树。树中的节点可以有零个或多个子节点。

      • 例如,一个公司的组织结构可以用树来表示,公司的 CEO 是根节点,各个部门经理是子节点,部门员工是更下一层的子节点。

    • 术语

      • 节点的度(Degree)是指节点拥有的子节点的数量。树的度是树中节点的最大度数。叶子节点(Leaf Node)是度为 0 的节点,即没有子节点的节点。

    • 遍历方式

      • 主要有前序遍历(根节点 - 左子树 - 右子树)、中序遍历(左子树 - 根节点 - 右子树)和后序遍历(左子树 - 右子树 - 根节点)。这些遍历方式在处理树结构的数据时非常重要,比如在解析表达式树等场景。

  4. 二叉树

    • 基本概念

      • 二叉树是一种特殊的树,每个节点最多有两个子节点,分别称为左子节点和右子节点。

      • 例如,二叉树可以用来表示算术表达式,其中运算符为非叶子节点,操作数为叶子节点。如表达式3 + 4 * 2可以构建成一个二叉树,根节点是+,左子节点是3,右子节点是**的左子节点是4,右子节点是2)。

    • 性质

      • 对于一棵完全二叉树(除了最后一层外,每层节点数都达到最大值,最后一层的节点都靠左排列),如果节点数为 n,其深度为。

    • 二叉树的遍历

      • 前序遍历:先访问根节点,再访问左子树,最后访问右子树。中序遍历:先访问左子树,再访问根节点,最后访问右子树。后序遍历:先访问左子树,再访问右子树,最后访问根节点。层次遍历:按照从上到下、从左到右的顺序访问节点。

  5. 多叉树

    • 基本概念

      • 多叉树是每个节点可以有多于两个子节点的树。它比二叉树更具一般性。

      • 例如,文件系统的目录结构可以用多叉树来表示,一个目录可以包含多个子目录和文件,这里的目录和文件就相当于树中的节点。

    • 应用场景

      • 在存储层次结构数据,如操作系统中的文件目录结构、XML/HTML 文档的结构解析等场景中有广泛应用。

  6. 平衡树

    • 基本概念

      • 平衡树是一种二叉树,它的左右子树的高度差被限制在一定范围内,以保证树的高度不会过高。这样可以保证查找、插入和删除等操作的时间复杂度在最坏情况下仍然能保持在对数级别。

      • 例如,AVL 树是一种平衡树,它的左右子树高度差的绝对值不超过 1。当插入或删除一个节点时,AVL 树会通过旋转操作(左旋和右旋)来调整树的结构,使其保持平衡。

    • 优势

      • 相比于普通二叉树,平衡树在最坏情况下也能提供高效的操作性能。例如,在频繁插入和删除元素的情况下,如果是普通二叉树可能会退化成链表,时间复杂度变为,而平衡树可以保持的时间复杂度。

  7. 红黑树

    • 基本概念

      • 红黑树是一种自平衡二叉查找树。它的每个节点都有一个颜色属性(红色或黑色),并且满足以下性质:根节点是黑色;每个叶子节点(NIL 节点)是黑色;如果一个节点是红色的,则它的子节点必须是黑色;从一个节点到其后代叶子节点的所有简单路径上,黑色节点的数量相同。

      • 例如,在 Linux 内核的进程调度等场景中使用红黑树来管理进程优先级队列,以保证高效的插入和删除操作。

    • 操作复杂度

      • 红黑树的插入、删除和查找操作的时间复杂度都是。它通过一系列的变色和旋转操作来保持树的平衡。

    • 与其他平衡树的比较

      • 红黑树不像 AVL 树那样严格要求左右子树的高度差,在插入和删除操作后调整平衡的操作相对简单,性能损耗相对较小,因此在很多实际场景中被广泛应用。

  8. B 树

    • 基本概念

      • B 树是一种平衡的多叉树,主要用于磁盘等外存储设备的数据组织。它的每个节点可以有多个子节点和多个关键字。一个节点中的关键字用于划分其子树的范围。

      • 例如,一个 B 树的节点可以存储多个索引值,这些索引值将数据划分为不同的区间,每个区间对应一个子树。

    • 特点

      • B 树的阶数(m)表示一个节点最多可以拥有的子节点数。在 B 树中,所有叶子节点都在同一层,这保证了树的平衡。B 树的查找、插入和删除操作的时间复杂度与树的高度有关,通常为,其中 n 是数据的个数。

    • 应用场景

      • 广泛应用于数据库索引系统,因为它能够减少磁盘 I/O 操作,提高数据存储和检索的效率。

  9. B + 树

  • 基本概念

    • B + 树是 B 树的一种变体。在 B + 树中,所有的数据都存储在叶子节点中,非叶子节点只存储索引信息。叶子节点之间通过指针相连,形成一个有序链表。

    • 例如,在数据库索引中,B + 树的非叶子节点就像是一本书的目录,只包含关键字和指向子树(下一级目录或具体内容页)的指针,而实际的数据都在叶子节点(具体内容页)中。

  • 优势

    • B + 树更适合范围查询。因为叶子节点形成了有序链表,在进行范围查询时,可以通过遍历链表高效地获取范围内的数据。在数据库系统中,对于按照某个范围查询数据(如查询年龄在 20 - 30 岁之间的用户),B + 树的效率很高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/60160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WRF-LES与PALM模型:风能资源评估、风力发电、大涡模拟、大尺度湍流涡旋、大雾预报、局地环流模拟、城市热岛效应、流场模拟

专题一、背景 1、流体力学简介 2、计算流体力学简介 3、应用场景举例 专题二、计算机基础与编程入门 1、计算机基础与编程入门 2、计算机基本概念和操作系统讲解 3、Linux基础命令与操作 专题三、科学计算与数据处理基础 1、NumPy基础&#xff1a;数组操作与科学计算 …

excel功能

统计excel中每个名字出现的次数 在Excel中统计每个名字出现的次数&#xff0c;您可以使用COUNTIF函数或数据透视表。以下是两种方法的详细步骤&#xff1a; 方法一&#xff1a;使用COUNTIF函数 准备数据&#xff1a;确保您的姓名列表位于一个连续的单元格区域&#xff0c;例如…

单体架构 IM 系统之长轮询方案设计

在上一篇技术短文&#xff08;单体架构 IM 系统之核心业务功能实现&#xff09;中&#xff0c;我们讨论了 “信箱模型” 在单体架构 IM 系统中的应用&#xff0c;“信箱模型” 见下图。 客户端 A 将 “信件” 投入到客户端 B 的 “信箱” 中&#xff0c;然后客户端 B 去自己的 …

量化交易系统开发-实时行情自动化交易-3.4.2.Okex行情交易数据

19年创业做过一年的量化交易但没有成功&#xff0c;作为交易系统的开发人员积累了一些经验&#xff0c;最近想重新研究交易系统&#xff0c;一边整理一边写出来一些思考供大家参考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下来聊聊基于Okex交易所API获取行情数…

【网络安全 | 漏洞挖掘】我如何通过路径遍历实现账户接管

未经许可,不得转载。 文章目录 不久前,我发现了一个我在高中时非常常用的知名应用程序,它在Intigriti上是一个私有程序,本文称之为REDACTED。 我开始参与REDACTED的漏洞赏金计划,这个应用程序在我开始进行黑客攻击之前我已经非常熟悉了。最初我并没有抱太高的期望。 我首…

webpack loader全解析,从入门到精通(10)

webpack 的核心功能是分析出各种模块的依赖关系&#xff0c;然后形成资源列表&#xff0c;最终打包生成到指定的文件中。更多复杂的功能需要借助 webpack loaders 和 plugins 来完成。 1. 什么是 Loader Loader 本质上是一个函数&#xff0c;它的作用是将某个源码字符串转换成…

数据库基础(12) . 自定义函数

在 MySQL 中&#xff0c;你可以创建自定义函数来扩展其内置功能。自定义函数可以通过编写存储过程或函数来实现。这里我们将重点介绍如何创建自定义函数&#xff0c;并给出一些示例。 创建自定义函数的基本语法 创建自定义函数的基本语法如下&#xff1a; CREATE FUNCTION f…

web——sqliabs靶场——第一关

今天开始搞这个靶场&#xff0c;从小白开始一点点学习,加油&#xff01;&#xff01;&#xff01;&#xff01; 1.搭建靶场 注意点&#xff1a;1.php的版本问题&#xff0c;要用老版本 2.小p要先改数据库的密码&#xff0c;否则一直显示链接不上数据库 2.第一道题&#xff0…

Linux基础—网络设置

linux系统的网络设置 1、网络的基本设置 2、dhcp和ftp 3、nfs共享文件共享系统和ssh远程连接 4、dns解析 5、pxe自动装机&#xff08;centos&#xff09; 网络的基本设置 查看网络接口信息: ipaddr/ip a 简略的查看网络接口信息 ifconfig 表示只显示当前活跃的设备 ifc…

Vue 3 中,ref 和 reactive的区别

在 Vue 3 中&#xff0c;ref 和 reactive 是两种用于创建响应式数据的方法。它们有一些关键的区别和适用场景。以下是它们的主要区别&#xff1a; ref 用途&#xff1a; ref 主要用于处理基本数据类型&#xff08;如字符串、数字、布尔值等&#xff09;以及需要单独响应的复杂…

thinkphp自定义命令行+宝塔面板Shell脚本实现定时任务

参考 ThinkPHP宝塔运营环境实现定时任务_宝塔linux面板 thinkphp 定时任务怎么配置-CSDN博客 thinkphp自定义命令行宝塔Shell脚本实现定时任务_宝塔定时执行shell脚本命令-CSDN博客 未实操&#xff0c;如果实操结合上面两个案例

ST-GCN模型实现花样滑冰动作分类

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

android studio 配置过程

Android studio版本&#xff1a;Android Studio Ladybug | 2024.2.1 windows 10 x64 关键问题解决方法&#xff1a; 1.设置代理&#xff1a; 退出首次配置&#xff0c;进入ide&#xff08;必要时新建工程&#xff09;然后&#xff1a; 然后重启ide 等待下载完成。 代理地…

关于分治法左右区间单调遍历应该如何设计

阅读以下文章&#xff0c;首先至少要求通过一道分治法的题目或听过一道该类型的讲解。 对于分治的题目&#xff0c;想必你应该知道&#xff0c;通常我们是对于一个区间拆分两个部分&#xff0c;而最小子问题通常是只包含一个元素的区间数组。为了后续方便处理更大范围的区间&am…

【软件测试】敏捷模型(Scrum模型)和V模型、W模型

敏捷模型 前面的那些模型以前非常流行&#xff0c;但现在开发人员在使用的时候会遇到各种问题。主要困难包括在项目开发期间处理来自客户的变更请求&#xff0c;以及合并这些变更所需要的高成本和时间。 在实际工作中&#xff0c;一款产品的功能是不断在变化的 所以为了克服这…

Tomcat(11) 什么是Context?如何在Tomcat中配置Context?

在Tomcat中&#xff0c;Context是一个非常重要的组件&#xff0c;它代表了运行在Tomcat服务器上的一个独立的Web应用程序。每个Context组件通常对应一个特定的Web应用&#xff0c;如一个WAR文件或一个目录&#xff0c;它包含了该Web应用的所有资源和配置。 什么是Context&…

大数据新视界 -- 大数据大厂之 Impala 性能优化:数据加载策略如何决定分析速度(上)(15/30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

vue2 自动化部署 shell 脚本

需求场景&#xff1a;在云平台中进行开发时&#xff0c;由于无法连接外网&#xff0c;在部署前端项目时&#xff0c;是通过本地打包再上传到服务器的方式进行部署的。基于这种部署场景&#xff0c;通过 shell 脚本进行部署流程优化&#xff0c;具体如下&#xff1a; 1、服务器…

掌握核密度图:精准描绘不同年龄段的血糖分布

在医学研究中&#xff0c;数据的可视化是理解复杂信息和做出科学决策的关键。今天&#xff0c;我们将深入探讨一种强大的数据可视化工具——核密度图&#xff08;Kernel Density Plot&#xff0c;简称KDE&#xff09;&#xff0c;并通过Python代码实例&#xff0c;展示如何基于…

实验室信息管理系统源码,医院LIS系统源码,C/S结构,C#语言开发,适合上项目。

实验室信息管理系统源码&#xff0c;医院LIS系统源码&#xff0c;三甲以下医院需求都能满足。 LIS系统即实验室信息管理系统。LIS系统能实现临床检验信息化&#xff0c;检验科信息管理自动化。其主要功能是将检验科的实验仪器传出的检验数据经数据分析后&#xff0c;自动生成打…