java八股文--数据库
数据库
- 1.索引的基本原理
- 2.聚簇和非聚簇索引的区别
- 3.mysql索引的数据结构以及各自的优劣
- 4.索引的设计原则
- 5.事务的基本特性和隔离级别
- 6.mysql主从同步原理
- 7.简述MyISAM和InnoDB的区别
- 8.简述mysql中索引类型及对数据库性能的影响
- 9.Explain语句结果中各个字段分别表示什么
- 10.索引覆盖是什么
- 11.最左前缀原则是什么
- 12.Innodb是如何实现事务的
- 13.B树和B+树的区别,为什么myesql使用B+树
- 14.mysql慢查询该如何优化
- 15.数据库设计三范式
- 16.左连接、右连接、笛卡尔积、全连接和内连接的区别
- 17.SQL约束有哪几种
- 18.事务的特性
- 19.事务的隔离级别
- 20.索引的优缺点,什么时候使用索引,什么时候不能使用索引
- 21.什么是数据库连接池 为什么需要数据库连接池
- 22.B+树
- 23.聚集索引和非聚集索引的区别
- 24.为什么推荐使用整形自增的主键而不是用UUID
1.索引的基本原理
索引用来快速的寻找那些具有特定值的记录,如果没有索引,一般来说执行查询时遍历整张表索引的原理:就是把无序的数据变成有序的查询(1)把创建了索引的列的内容进行排序
(2)对排序结果生成倒排表
(3)在倒排表内容上拼上数据地址链
(4)在查询的时候,先拿到倒排表内容,再取出数据地址链,从而拿到数据
2.聚簇和非聚簇索引的区别
都是B+树的数据结构(1)聚簇索引:将数据存储与索引放到一块,并且是按照一定顺序组织的,找到索引也就找到了数据,数据的物理存放顺序与索引顺序一致。(2)非聚簇索引:叶子节点不存储数据,存储的是数据行地址,也就是根据索引查找到数据行的位置再取磁盘查找数据数据。
3.mysql索引的数据结构以及各自的优劣
4.索引的设计原则
查询更快、占用空间更小
5.事务的基本特性和隔离级别
基本特性:
(1)原子性:一个事务中的操作要么全部成功,要么全部失败
(2)一致性:数据库总是从一个一致性的状态转换到另外一个一致性的状态
(3)隔离性:一个事务的修改在最终提交之前,对其他事务是不可见的
(4)持久性:一个事务一旦提交,所做的修改就会永久的保存到数据库中隔离级别:
(1)读未提交:可能会读到其他事务未提交的数据,也叫做脏读
(2)读已提交:解决了脏读,但是没有解决不可重复读,也就是两次读取的结果不一致
(3)可重复读:解决了不可重复读,但是没有解决幻影读。这是mysql的默认隔离级别
(4)串行:一般是不会使用的,因为他会给每行数据都加锁,会导致大量的超时和锁竞争问题脏读:某个事务已更新一份数据,但是还未提交,另一个事务在此时读取了同一份数据,由于某些原因,前一个事务进行了RollBack操作,则后一个事务读取到的数据就是不正确的不可重复读:在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据
6.mysql主从同步原理
7.简述MyISAM和InnoDB的区别
8.简述mysql中索引类型及对数据库性能的影响
(1)普通索引:允许被索引的数据列包含重复的值(2)唯一索引:可以保证数据记录的唯一性(3)主键索引:是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录(4)联合索引:索引可以覆盖多个数据列(5)全文索引:通过建立倒排索引,可以极大的提升索引效率,解决判断字段是否包含的问题,是目前搜索引擎使用的一种关键技术对数据库性能的影响:
(1)索引可以极大的提高数据的查询速度
(2)通过使用索引,可以在查询过程中,使用优化隐藏器,提高系统的性能
(3)但是会降低插入、更新、删除表的速度,因为在执行这些写操作时,还要操作索引文件
9.Explain语句结果中各个字段分别表示什么
10.索引覆盖是什么
索引覆盖就是在一个SQL执行时,可以利用索引来快速查找,并且此SQL所要查询的字段在当前索引对应的字段中都包含了,
那么此SQL走完索引后不用回表了,所需要的字段都在当前索引的叶子节点上存在,可以直接作为结果返回了
11.最左前缀原则是什么
12.Innodb是如何实现事务的
13.B树和B+树的区别,为什么myesql使用B+树
14.mysql慢查询该如何优化
(1)检查是否走了索引,如果没有则优化SQL利用索引(2)检查所利用的索引是否是最优索引(3)检查所查字段是否都是必须的,是否查询了过多字段,查出了多余数据(4)检查表中数据是否过多,是否应该进行分库分表了
15.数据库设计三范式
(1)第一范式:每个表都应该有主键,并且每个字段要求原子性不可再分(2)第二范式:在第一范式的基础上,所有非主键字段必须完全依赖主键,不能产生部分依赖(3)第三范式:在第二范式的基础上,所有非主键字段必须直接依赖主键,不能产生传递依赖设计范式的目的:减少数据冗余
16.左连接、右连接、笛卡尔积、全连接和内连接的区别
(1)左连接(左外连接):以左表作为基准进行查询,左表数据会全部显示出来,右表如果和左表数据不匹配则显示为null(2)右连接(右外连接):以右表作为基准进行查询,右表数据会全部显示出来,左表如果和右表数据不匹配则显示为null(3)全连接:先以左表进行左外连接,再以右表进行右外连接(4)内连接:显示表之间有连接匹配的所有行(5)笛卡尔积:也叫交叉连接
17.SQL约束有哪几种
(1)NOT NULL(非空约束):用于控制字段的内容一定不能为空(2)UNIQUE(唯一性约束):控制字段内容不能重复,一个表允许有多个Unique约束(3)PRIMARY KEY(主键约束):用于控制字段内容不能重复,但一个表只允许出现一个(4)FOREIGN KEY(外键约束):用于预防破坏表之间连接的动作,也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一
18.事务的特性
(1)原子性:事务是最小的执行单位,不允许分割。整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节(2)一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏(3)隔离性:并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的(4)持久性:在事务完成以后,该事务对数据库中数据的改变是持久的
19.事务的隔离级别
事务的隔离级别越高,并发性就越差,性能就越低(1)读未提交:事务A在事务B未提交前读取数据,如果事务B撤销了修改,那么A会读取到脏数据(2)读已提交:事务A分别在事务B提交前和提交后读取数据,出现不可重复读(3)可重复读(4)序列化
20.索引的优缺点,什么时候使用索引,什么时候不能使用索引
(1)索引最大的好处就是提高查询速度(2)缺点是更新数据时效率低,因为要同时更新索引(3)对需要频繁查询的数据建立索引,对需要频繁更改的数据不建议使用索引
21.什么是数据库连接池 为什么需要数据库连接池
(1)数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个(2)数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的(3)数据库连接是一种关键的有限的昂贵的资源,对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标
22.B+树
(1)非叶子节点不存储数据,只存储索引(冗余),可以放更多的索引(2)叶子节点包含所有索引字段(3)叶子节点用指针连接,提高区间访问的性能(4)所有的元素节点从左到右依次递增排序(5)所有索引元素不重复
23.聚集索引和非聚集索引的区别
(1)聚集索引叶子节点包含了完整的数据(InnoDB采用的聚集索引)(2)非聚集索引:索引文件和数据文件不在一起存储
24.为什么推荐使用整形自增的主键而不是用UUID
(1)查找效率高(2)占用存储空间少(3)尽量自增的原因:采用非自增插入的时候会效率低
相关文章:

java八股文--数据库
数据库1.索引的基本原理2.聚簇和非聚簇索引的区别3.mysql索引的数据结构以及各自的优劣4.索引的设计原则5.事务的基本特性和隔离级别6.mysql主从同步原理7.简述MyISAM和InnoDB的区别8.简述mysql中索引类型及对数据库性能的影响9.Explain语句结果中各个字段分别表示什么10.索引覆…...
vue中名词解释
No名称略写作用应用场景其他1 单页面应用 (Single-page application) SPA 1,控制整个页面 2,抓取更新数据 3,无需加载,进行页面切换 丰富的交互,复杂的业务逻辑的web前端一般要求后端提供api数据…...

基于Java+SSM+Vue的旅游资源网站设计与实现【源码(完整源码请私聊)+论文+演示视频+包运行成功】
博主介绍:专注于Java技术领域和毕业项目实战 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 Java项目精品实战案例(200套) 目录 一、效果演示 二、…...

用于人工智能研究的开源Python微电网模拟器pymgrid(入门篇)
pymgrid是一个开源Python库,用于模拟微型电网的三级控制,允许用户创建或自行选择的微电网。并可以使用自定义的算法或pymgrid中包含的控制算法之一来控制这些微电网(基于规则的控制和模型预测控制)。 pymgrid还提供了与OpenAI Gy…...

运算放大器:电压比较器、电压跟随器、同相比例放大器
目录一、单限电压比较器二、滞回电压比较器三、窗口电压比较器四、正点原子直流电机驱动器电路分析实战1、电压采集电路2、电流采集电路3、过流检测电路Ⅰ、采用分压后的输入电压:Ⅱ、采用理想电压源的输入电压:Ⅲ、同相输入电压采用的是非理想电压源&am…...

Vector - CAPL - 实时时间on *(续2)
继续继续。。。四、键盘事件这个键盘事件是我个人起的名字,为了方便与其他事件进行区分,为什么要把这一个单独拉出来说呢,因为它的用处实在是太广泛了,基本只要是使用CANoe做一些基本的自动化测试小工具,都会用到它&am…...
数据质量管理的四个阶段
然而,我们需要按照什么流程来对数据质量进行有效的管控,从而提升数据质量,释放数据价值?一般来讲,数据质量控制流程分为4个阶段:启动、执行、检查、处理。在管控过程中这4个阶段需不断循环,螺旋…...

Spring源码面试最难问题——循环依赖
前言 问:Spring 如何解决循环依赖? 答:Spring 通过提前曝光机制,利用三级缓存解决循环依赖(这原理还是挺简单的,参考:三级缓存、图解循环依赖原理) 再问:Spring 通过提前…...

【计组】RAM的深入理解
一、存储机理 RAM的实现逻辑有种,分别是触发器和电容。 SRAM(Static)DRAM(Dynamic)存储方式触发器电容破坏性读出否(触发器具有稳态,能够锁住0或1两种状态)是(电容需要…...
JavaScript 之数据交互
在前后端交互中,前端通常需要对接口返回的数据进行格式转换、遍历、循环等;通常会用到以下函数和方法: forEach()、map()遍历数组(map返回新的数组);forEach()只能使用try catah终止循环;for in…...

Python 十大开源Python库,看看你熟悉几个?
嗨害大家好鸭!我是芝士❤ 对于码农来说, 关注的永远是新近有什么流行的、 既能解决问题又好用的利器。 本文就为你盘点十大开源Python库。 1、Pipenv 第一名非它莫属, 这个工具2017年初才发布, 但它已经能够影响每个Python开发…...

不愧是阿里开发的SpringBoot实战文档:入门+基础+进阶+项目,应有尽有
SpringBoot SpringBoot毋庸置疑,在Java开发中会因为项目流量太大需要切换到SpringCloud(SpringBoot)也会极为顺利。而且现在越来越多的公司都在采用SpringBoot,对SpringBoot关注和使用的开发者也越来越多了! SpringB…...

Vue(3)-vue中的Ajax、Vuex、路由及UI组件库
课程链接 目录4.Vue中的Ajax4.1.vue脚手架配置代理4.1.1.方法一4.1.2.方法二4.2.插槽5.Vuex5.1.理解Vuex5.1.1.概念5.1.2.何时使用?5.1.3.vuex原理5.2.vuex使用5.2.1.搭建vuex环境5.2.2.基本使用5.2.3.getters的使用5.2.4.四个map方法的使用5.2.5.模块化命名空间6.路…...

jwt 学习笔记
概述 JWT,Java Web Token,通过 JSON 形式作为 Web 应用中的令牌,用于在各方之间安全地将信息作为 JSON 对象传输,在数据传输过程中还可以完成数据加密、签名等相关处理 JWT 的作用如下: 授权:一旦用户登…...

网络安全实战从 0 到 1 彻底掌握 XXE
0x01 什么是 XXE个人认为,XXE 可以归结为一句话:构造恶意 DTD介绍 XXE 之前,我先来说一下普通的 XML 注入,这个的利用面比较狭窄,如果有的话应该也是逻辑漏洞。既然能插入 XML 代码,那我们肯定不能善罢甘休…...
如何安装 Composer
下载 Composer 安装前请务必确保已经正确安装了 PHP。打开命令行窗口并执行 php -v 查看是否正确输出版本号。 打开命令行并依次执行下列命令安装最新版本的 Composer: php -r "copy(https://install.phpcomposer.com/installer, composer-setup.php);"p…...

WPF 常用控件
WPF六种常用控件:布局控件、内容控件、带标题内容控件、条目控件、带标题条目控件和特殊内容控件(如:TextBox,TextBlock,Image等)。实例链接:WPF常用控件实例Window(窗体)Winodw窗体派生自ContentControl,有一个Content属性,里面可…...

河南工程学院蓝桥培训(2.21)
1,金币 461. 金币 - AcWing题库 #include <iostream> using namespace std; int n,a,ans,s; int main(){cin>>n;while(n--){if(a0)as;anss,a--;}cout<<ans;return 0; }...

新人使用Git获取远程仓库项目
前言 这篇git技术篇非常的简单基础,写它的原因很简单,因为现在很多的年轻人都很浮躁,刚入门就想学最牛x的,看不起基础的一些技术,比如说git操作、Linux基础命令,编程基础啥的。我身边有很多这样的年轻人&a…...

理解信号的
在日常生活中我们也经常面临许多的信号,手机通知、过红绿灯。。。这些信号在没有发生之前我们就知道这种信号产生我们需要干什么,那Linux里信号产生后,又怎么知道要做什么呢? -- 那当然是由程序员自己去设置啊 由于我们的用户空间…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...

Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...