Java 数据库面试题解析(下)

20. Hash索引和B+树索引的区别?【重点】

hash索引:等值查询效率高,不能排序,不能进行范围查询;

B+树索引:数据有序,适合范围查询。

21. MySQL中三种锁的级别?【了解】

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

22. B树和B+树的区别?【重点】

B树:

每个节点都存储key和data,所有节点组成这棵树。

叶节点包含的关键字和其他节点包含的关键字是不重复的。

B+树:

只有叶子节点存储数据;

有两个头指针:一个指向根节点,另一个指向关键字最小的叶节点;

中间节点不保存数据,能容纳更多节点元素;

叶子节点包含了这棵树的所有数据,所有的叶子结点使用链表相连,便于区间查找和遍历;

所有的中间节点起到索引作用。

23. 为什么说B+树比B树更适合实际应用中的文件索引和数据库索引?【了解】

B+树的磁盘读写代价更低

B+的内部结点并没有存储数据,因此其内部结点相对B树更小。如果把所有内部结点的关键字存放在同一盘块中,那么同一盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。

B+树的查询效率更加稳定

l 由于非叶节点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。

24. 聚集索引和非聚集索引区别?【重点】

聚合索引(clustered index):

聚集索引记录的排列顺序和索引的排列顺序一致,所以查询效率快,只要找到第一个索引值记录,其余就连续性的记录在物理也一样连续存放。

聚集索引对应的缺点就是修改慢, 因为为了保证表中记录的物理和索引顺序一致,在记录插入的时候,会对数据页重新排序。

非聚合索引(nonclustered index):

非聚集索引指定了表中记录的逻辑顺序,但是记录的物理顺序和索引不一定一致。

两种索引都采用B+树结构,非聚集索引的叶子层并不和实际数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中的指针方式。

非聚集索引层次多,不会造成数据重排。

根本区别:

聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致。

25. 常见的索引分类及其区别?【重点】

按索引的数据结构来划分:

Hash索引:

索引只包含哈希值与行指针,结构十分紧凑,索引速度很快;

只支持等值比较查询,不支持进行范围查询;

索引存储是无序的,所以不支持排序。

B树索引:

每个节点都存储key和data,所有节点组成这棵树。

本质上是多路平衡查找树,查找效率接近与二分查找法。

搜索有可能在非叶子结点结束。

叶节点包含的关键字和其他节点包含的关键字是不重复的。

数据是有序的,适合范围查询。

B+树索引:

是b树的一种变体,查询性能更好。

中间节点不保存数据,能容纳更多节点元素,所有的中间节点起到索引作用;

只有叶子节点存储数据,所有的叶子结点使用链表相连;

数据是有序的,适合进行范围查询;

位图索引:

就是用位图表示的索引,对列的每个键值建立一个位图。

占用的空间非常小,创建和使用非常快。

适合列的基数很少、可枚举、重复值很多的场景。

适合数据不会被经常更新的场景。

按照索引的类型划分:

唯一索引:不允许其中任何两行具有相同值的索引。

主键索引:可以认为是特殊的唯一索引,仅利用主键建立的索引。

单一索引:任何一个单一数据项建立的索引。

复合索引:多个数据列建立的索引。

聚簇索引:利用主键建立的索引,其物理存放顺序与主键顺序一致。因为数据只有一个物理存放顺序,所以一个表只有一个聚簇索引。

非聚簇索引(二级索引,辅助索引):除了聚簇索引之外,其余所有的索引都是非聚簇索引。

26. 数据库的五大范式?【了解】

第一范式:(确保每列保持原子性)所有字段值都是不可分解的原子值。

第二范式:(确保表中的每列都和主键相关)确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。

第三范式:(确保每列都和主键列直接相关,而不是间接相关)数据表中的每一列数据都和主键直接相关,而不能间接相关。

BCNF:在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖。一般一个数据库设计符合3NF或BCNF就可以了。

第四范式:禁止主键列和非主键列一对多关系不受约束(删除同一个数据表内多对多关系)。

第五范式:是最终范式。将表分割成尽可能小的表,为了排除在表中所有的冗余。

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

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

相关文章

2024最新精华版Java面试题之spring篇

目录 一、Java面试题之spring篇 1、什么是spring? 2、你们项目中为什么使用Spring框架? 3、 Autowired和Resource关键字的区别? 4、依赖注入的方式有几种,各是什么? 5、讲一下什么是Spring容器? 6、说说你对Spring MVC的理…

Java毕业设计-基于springboot开发的私人健身与教练预约系统-毕业论文+答辩PPT(有源代码)

文章目录 前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1.开发说明2.需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、后台功能模块2.1管理员功能2.2用户功能2.3教练功能 四、毕设内容和源代码获取总结 [Java毕业设计-基于springboot…

Android 11.0 内置google tts语音包功能实现

1.前言 在11.0的系统rom产品开发中,在gms的相关项目对于文字转语音包功能不是内置功能,需要自己下载google的tts语音包,然后内置,在设置 google tts语音包apk作为默认的tts语音引擎功能,接下来分析实现这个功能 2.内置google tts语音包功能实现的核心类 frameworks/ba…

Chat GPT4.0:开启智能对话的新纪元

介绍 Chat GPT4.0是基于GPT4.0架构开发的一款强大的智能对话模型。作为人工智能领域的最新进展,Chat GPT4.0引领着智能对话技术的新纪元。本文将探讨Chat GPT4.0的创新之处以及对智能对话发展的推动作用。 Chat GPT4.0的创新之处 Chat GPT4.0在前一版本的基础上进…

c++知识点之 --引用

本质:给变量起别名 语法:数据类型 &别名 原名 特点:传引用比传值的效率高很多 注意事项: 引用必须初始化,且初始化不能为空。引用不能改变引用关系(引用的底层是指针常量(type * const …

前端 JS 经典:for-in 和 for-of 用法区别

1. for-in 对于 string, object, array 类型使用 for-in const str "qwe"; const arr ["yqcoder", "db"]; const obj {name: "yqcoder",age: 18, };for (let i in str) {console.log(i); // 0 1 2 } for (let i in arr) {console…

简单数据类型和复杂数据类型

1. 简单数据类型 null是个特例: 2. 复杂数据类型 3. 堆和栈 注意: JavaScript 中是没有堆和栈的概念的,通过堆栈的概念可以更好的理解代码的一些执行方式,便于将来学习其他语言。 4. 简单数据类型传参 总结:简单数据类型传参传…

webview_h5与原生增加权限索取行为交互(Flutter)

应各大应用市场上架要求,增加权限索取行为用户交互弹窗 详细: https://developer.huawei.com/consumer/cn/doc/app/FAQ-faq-05#h1-1698326401789-0 flutter端使用permission_handler申请权限注册一个MethodChannel,增加一个函数,提供安卓webview相机/麦克风等权限被触发时回调…

C++写入和读取结构体到二进制文件

二进制文件速度快&#xff0c;空间效率高 写入数据到二进制文件 #include<iostream> #include<fstream> using namespace std; int main() {// 定义一个结构体struct student{int id; // 学号char name[20]; // 姓名double score; // 成…

LeetCode 2369.检查数组是否存在有效划分:动态规划(DP)

【LetMeFly】2369.检查数组是否存在有效划分&#xff1a;动态规划(DP) 力扣题目链接&#xff1a;https://leetcode.cn/problems/check-if-there-is-a-valid-partition-for-the-array/ 给你一个下标从 0 开始的整数数组 nums &#xff0c;你必须将数组划分为一个或多个 连续 子…

在线ai写作,让你随时随地创作优质内容

如今的ai技术已经渗透到我们生活的方方面面。其中&#xff0c;AI写作成为了一个备受关注的领域。如今&#xff0c;我们可以利用在线ai写作在任何时间、任何地点创作出优质的内容。 传统的写作过程需要大量的时间和精力。从构思到写作再到修改&#xff0c;每一个环节都需要我们投…

Linux进程管理——top字段

目录 1.top下半部分——进程状态 2.top常用内部命令 3.top指定 ①top ②top -d 1 ③top -d 1 -p 10126 ④top -d 1 -p 10126,1 4.使用信号控制进程 1.top下半部分——进程状态 PID&#xff1a;进程号 User&#xff1a;用户 PR/NI&#xff1a;优先级 VIRT&#xff08…

Helm repo 国内镜像配置

微软 http://mirror.azure.cn/kubernetes/charts/ 阿里云 https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts/ 步骤 helm repo add stable http://mirror.azure.cn/kubernetes/charts/ helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/char…

国产软件很流氓?不,这些国产软件良心且实用,别让它们寒心

谈及国产软件&#xff0c;人们常将其与“流氓、捆绑、满屏广告”等负面词汇挂钩。但真实情况是&#xff0c;仍有许多优质国产软件在默默耕耘&#xff0c;它们既免费又实用&#xff0c;别让它们寒了心。 1、Dism Dism是一款专为Windows系统设计的管理优化神器&#xff0c;其开…

ECMAScript 6+ 新特性 ( 六 ) 模块化

2.17. 模块化 模块化是指将一个大的程序文件&#xff0c;拆分成许多小的文件&#xff0c;然后将小文件组合起来。 这样就可以更清晰和结构化的方式组织代码 模块功能主要由两个命令构成&#xff1a;export 和 import export 命令用于规定模块的对外接口 ( 公开 , 暴露) im…

PowerShell 详细介绍

PowerShell 是微软开发的一款功能强大的命令行工具和脚本语言&#xff0c;它基于 .NET Framework 构建&#xff0c;可以帮助系统管理员和开发者自动化各种系统管理和应用程序开发任务。PowerShell 提供了丰富的命令集和脚本功能&#xff0c;可以轻松地管理 Windows 操作系统、应…

呦呵,阿里云果然是良心云

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 你听说了吗?阿里云全线降价20%&#xff0c;还上了热搜。2024年一开年&#xff0c;看来阿里云杀红了眼&#xff0c;云市场即将变天。 现在续费的阿里云主机&#xff0c;续费三年和续费两年的价钱差不多&#xff0…

更先进的功能,无注意力大模型Eagle7B:基于RWKV,推理成本降低10-100 倍,另一个工具包使得大模型推理性能加速达40倍(附详细代码使用举例)

更先进的功能,无注意力大模型Eagle7B:基于RWKV,推理成本降低10-100 倍,另一个工具包使得大模型推理性能加速达40倍(附详细代码使用举例)。 在 AI 赛道中,与动辄上千亿参数的模型相比,最近,小模型开始受到大家的青睐。比如法国 AI 初创公司发布的 Mistral-7B 模型,其…

摄像头工程师说 Camera - 颜色空间 YUV 与 YCbCr 的区别与联系(4)

摄像头工程师说 Camera - 数据格式 YUV 与 YCbCr 的区别与联系&#xff08;4&#xff09; 概述 上回书咱们说到 摄像头工程师说 Camera - 数据格式 YUV 格式的存储&#xff08;3&#xff09; 本节咱们说说YUV 与 YCbCr 两种色彩空间定义的联系与区别。 相同点&#xff1a; Y…

MySQL基础(三)

文章目录 MySQL基础&#xff08;三&#xff09;1. 多表查询1.1 概述1.1.1 数据准备1.1.2 介绍1.1.3 分类 1.2 内连接1.3 外连接1.4 子查询1.4.1 介绍1.4.2 标量子查询1.4.3 列子查询1.4.4 行子查询1.4.5 表子查询 1.5 案例 2. 事务2.1 介绍2.2 操作2.3 四大特性 3. 索引3.1 介绍…