【研究生复试】计算机软件工程人工智能研究生复试——资料整理(速记版)——数据库

1、JAVA
2、计算机网络
3、计算机体系结构
4、数据库
5、计算机租场原理
6、软件工程
7、大数据
8、英文 自我介绍

4. 数据库

1. B+树相对于B树的区别及优势

  • B树中有重复元素,B树没有重复元素
  • B树种每个节点都存储了key和data,B+树内节点去掉了其中指向数据(data record)的指针,使得每个节点中可以存放更多的key,意味着树的高度可以被压缩
  • B+树的叶子节点是链表形式,可以更方便的进行顺序遍历。而B树相邻的元素可能在内存中不相 邻,所以缓存命中性没有B+树好。
  • B+树查找更稳定,都是从根节点到叶节点
  • 在这里插入图片描述

2、聚簇索引和非聚簇索引

聚簇索引(一级索引):

将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据物理有序,叶子节点保存了数据
在这里插入图片描述

mysql中聚簇索引的设定: 聚簇索引默认是主键,如果表中没有定义主键,InnoDB 会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB 会隐式定义一个主键来作为聚簇索引。
InnoDB 只聚集在同一个页面中的记录。包含相邻健值的页面可能相距甚远。

非聚簇索引(辅助索引、二级索引):

将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置
叶子节点保存的是id(主键),然后回表(二次查找)
在这里插入图片描述
在这里插入图片描述

  • undo log
    回滚操作而诞生的机制,当出现错误时,根据undo log进行回滚。
    在这里插入图片描述

undo:增删改 update delete insert
undo Log两大类:
新增操作,事务提交后可以直接删除
update和delete,配合mvcc使用
在这里插入图片描述
在这里插入图片描述

  • undo log和redo log的区别
    redo log解决的是系统崩溃的问题,当是一个事务提交后,只进行了一半操作,可以使用redo log日志
    重做。所以,事务提交后,先写redo log(应该是先写undo log),然后再执行相应的操。
    只有在日志记录全部都安全落盘,然后在最后写上“Commit Record”后,表示所有的操作记录我都写完啦。

undo log:
redo log太慢,没有写完redo log, 数据库是不能写的。
即使事务提交前磁盘 I/O 有足够空闲、即使某个事务修改的数据量非常庞大,占用大量的内存缓冲,无论何种理由,都决不允许在事务提交之前就开始修改磁盘上的数据,万一系统崩溃了,数据出差谁负责呀?
这就需要引入Undo Log(回滚日志),在偷摸写入数据之前,必须先在Undo Log中记录都写入了什么数据,改了什么地方,到时候事务回滚了,就按照Undo Log日志,一条条恢复到原来的样子,就像没有改过一样。
Undo Log还有一个作用,就是实现多个行版本控制(MVCC),当读取的某一行被其他事务锁定时,它可以从 Undo Log 中获取该行记录以前的数据是什么,从而提供该行版本信息,让用户读取。

4、 MVCC部分

多版本并发控制。避免并发操作出现问题,使得数据一致。
可以实现读已提交(解决脏读)和可重复读(解决脏读和不可重复读),但是mvcc不能解决幻读,需要用锁机制解决。
使用undo log和readview来解决

  • 实现读已提交:
    每个select都创建一个readview
  • 实现可重复读:
    一个事务种的第一个select创建readview,之后的select不再创建
    查找undo log种的版本(四步):

innodb种会记录未提交事务的id,从小到大。

  • 判断该版本是否为当前事务创建
  • 判断是否比最小的小
  • 判断是否比最大(max_trx_id)的大
  • 。。。。

5、主从复制

主:负责写
从:负责读
数据如何同步的?
在这里插入图片描述

数据延时问题解决:
主服务器:先写binlog,再同步过去,发送等待slave的ACK回应,再写数据。

6、 分库分表

  • 水平拆分
  • 垂直拆分
    插数据流程:先找库,再找表。
    奇数偶数分库,取余操作分表。

7、sql执行过程s

在这里插入图片描述

8、 锁

  • S锁,共享锁,读锁
    select user from table where id < 10 lock in share mode;
  • X锁,排他锁,写锁
    select from table for update;

锁没有mvcc效率高。
意向共享锁(IS)
意向排他锁(IX)
意向锁用来判断是否加锁了。

死锁

myisam没有死锁

9、 - 索引失效

在这里插入图片描述

10、 - 数据库调优

  • 查看索引是否失效
    like %开头
    字符串没有单引号
    联合索引没有符合最左匹配原则
    使用了range方位查找
    or左右只有一个主键字段。
  • 优化数据库的结构
    使用频率低的表作为新表
    使用频率高的字段冗余为一个表
    需要联合查询的表建立中间表
  • 分解关联查询
  • 优化limit分页
    原来:select * from table limit 10000, 10
    改成:select * from table where id >= 10000 limit 10
    这样使用了主键,可以优化。

11、 - explain中的字段

  • id 查询中的序列号
  • select_type: 表示 select 查询的类型,主要是用于区分各种复杂的查询,例如: 普通查询 、 联
    合查询 、 子查询 等。
  • table:表名
  • type(重要):从上到下,最好–>最差
    system:只有一行或者空表,基本不可能存在
    const:表中只有一行记录匹配,主键或者unique索引
    eq_ref:联合查找,前面的唯一对应后面的表
    ref:匹配多行
    fulltext:全文索引,优先级很高,比普通索引优先级高
    ref_or_null:和ref类似
    index_merge
    unique_subquery
    index_subquery
    range
    index: 索引全表扫描,把索引从头到尾扫一遍。这里包含两种情况:一种是查询使用了覆盖索引,那么它只需要扫描索引就可以获得数据,这个效率要比全表扫描要快,
    All: 全表扫描,没有使用索引。
  • filtered:查出的结果/内部查询时所读的行数的百分比,100%说明大概率走了索引
  • extra(重要):distinct:在select部分使用了distinc关键字
    Using filesort:当 Extra 中有 Using filesort 时,不能通过索引顺序达到排序效果.
    Using index:“覆盖索引扫描”, 表示查询在索引树中就可查找所需数据, 不用扫描表数据文件,往往说明性能不错
    Using temporary: 查询有使用临时表, 一般出现于排序, 分组和多表 join 的情况, 查询效率不高, 建议优化.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数学实验第三版(主编:李继成 赵小艳)课后练习答案(十一)(1)(2)(3)

目录 实验十一&#xff1a;非线性方程&#xff08;组&#xff09;求解 练习一 练习二 练习三 实验十一&#xff1a;非线性方程&#xff08;组&#xff09;求解 练习一 1.求莱昂纳多方程 的解 clc;clear; p[1,2,10,-20]; roots(p)ans -1.6844 3.4313i -1.6844 - 3.4313i…

数据结构与算法:二叉树(寻找最近公共祖先、寻找后继节点、序列化和反序列化、折纸问题的板子和相关力扣题目)

最近公共祖先 第一版&#xff08;前提&#xff1a;p和q默认存在于这棵树中&#xff09; 可以层序遍历每个节点时用个HashMap存储该结点和其直接父节点的信息。然后从p开始溯源&#xff0c;将所有的父节点都添加到一个HashSet集合里。然后从q开始溯源&#xff0c;每溯源一步看…

题目:3.神奇的数组(蓝桥OJ 3000)

问题描述&#xff1a; 解题思路&#xff1a; 官方&#xff1a; 我的总结&#xff1a; 利用双指针遍历每个区间并判断是否符合条件&#xff1a;若一个区间符合条件则该区间在其左端点不变的情况下的每一个子区间都符合条件&#xff0c;相反若一个区间内左端点固定情况下有一个以…

ssm的网上招聘系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; ssm的网上招聘系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMv…

什么是位段?位段的作用是什么?他与结构体有什么关系?

目录 1.什么是位段&#xff1f; 2.位段的内存分配 判断当前机器位段的内存分配形式 1.什么是位段&#xff1f; 位段的声明和结构是类似的&#xff0c;有两个不同&#xff1a; 1.位段的成员必须是 int、unsigned int 或signed int或char 。 2.位段的成员名后边有一个冒号和…

Leetcode3010. 将数组分成最小总代价的子数组 I

Every day a Leetcode 题目来源&#xff1a;3010. 将数组分成最小总代价的子数组 I 题目描述&#xff1a; 给你一个长度为 n 的整数数组 nums 。 一个数组的代价是它的第一个元素。比方说&#xff0c;[1,2,3] 的代价是 1 &#xff0c;[3,4,1] 的代价是 3 。 你需要将 num…

C语言---指针进阶

1.字符指针 int main() {char str1[] "hello world";char str2[] "hello world";const char* str3 "hello world.";const char* str4 "hello world.";if (str3 str4){//常量字符串在内存里面是无法修改的&#xff0c;所以没必要…

“分布式透明化”在杭州银行核心系统上线之思考

导读 随着金融行业数字化转型的需求&#xff0c;银行核心系统的升级改造成为重要议题。杭州银行成功上线以 TiDB 为底层数据库的新一代核心业务系统&#xff0c;该实践采用应用与基础设施解耦、分布式透明化的设计开发理念&#xff0c;推动银行核心系统的整体升级。 本文聚焦…

【Effective Objective - C 2.0】——读书笔记(五)

文章目录 二十九、理解引用计数三十、以ARC简化引用计数三十一、在dealloc方法中只释放引用并解除监听三十二、编写异常安全代码时留意内存管理问题三十三、以弱引用避免保留环三十四、以”自动释放池块“降低内存峰值三十五、用"僵尸对象"调试内存管理问题三十六、不…

【C语言】实现队列

目录 &#xff08;一&#xff09;队列 &#xff08;二&#xff09;头文件 &#xff08;三&#xff09; 功能实现 &#xff08;1&#xff09;初始化 &#xff08;2&#xff09; 销毁队列 &#xff08;3&#xff09; 入队 &#xff08;4&#xff09;出队 &#xff08;5&a…

论文阅读:四足机器人对抗运动先验学习稳健和敏捷的行走

论文&#xff1a;Learning Robust and Agile Legged Locomotion Using Adversarial Motion Priors 进一步学习&#xff1a;AMP&#xff0c;baseline方法&#xff0c;TO 摘要&#xff1a; 介绍了一种新颖的系统&#xff0c;通过使用对抗性运动先验 (AMP) 使四足机器人在复杂地…

luigi,一个好用的 Python 数据管道库!

🏷️个人主页:鼠鼠我捏,要死了捏的主页 🏷️付费专栏:Python专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 前言 大家好,今天为大家分享一个超级厉害的 Python 库 - luigi。 Github地址:https://github.com/spotify/luigi 在大数据时代,处理海量数据已经成…

NVIDIA 刚刚揭秘了他们的最新大作——Eos,一台跻身全球十强的超级计算机

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

android获取sha1

1.cmd在控制台获取 切换到Android Studio\jre\bin目录下执行keytool -list -v -keystore 签名文件路径例如&#xff1a; 2.也可以在android studio中获取 在Terminal中输入命令&#xff1a;keytool -list -v -keystore 签名文件路径获取 获取到的sha1如下&#xff1a;

ubuntu屏幕小的解决办法

1. 安装vmware tools , 再点自适应客户机 执行里面的vmware-install.pl这个文件 &#xff1a;sudo ./vmware-install.pl 执行不了可以放到家目录&#xff0c;我放在了/home/book 里面 最后点这个自适应客户机 然后我这里点不了是因为我点了控制台视图和拉伸客户机&#xff0c…

ClickHouse--07--Integration 系列表引擎

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Integration 系列表引擎1 HDFS1.1 语法1.2 示例&#xff1a; 2 MySQL2.1 语法2.2 示例&#xff1a; 3 Kafka3.1 语法3.2 示例&#xff1a;3.3 数据持久化方法 Integ…

Leetcode 94.二叉树的中序遍历

题目 给定一个二叉树的根节点 root &#xff0c;返回 它的中序 遍历 。 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2] 进阶: 递归算法很简单&#xff0c;你可以通过迭代算法完成吗&#xff1f; 递归遍历 递归遍历就是一个很简单的中序遍历 /*** Definitio…

LEETCODE 69. x 的平方根

class Solution { public:int mySqrt(int x) {int left0;int rightx;int midleft(right-left)/2;int ans-1;while(left<right){midleft(right-left)/2;if((long long)mid*mid<x){ansmid;leftmid1;}else{rightmid-1;}}return ans;} };*(long long)

GPT SOVITS项目 一分钟克隆 (文字输出)

步骤流程&#xff1a;&#xff08;首先使用UVR 提取人声文件&#xff0c;然后按下面步骤进行&#xff09; 注意这里提交的音频是参考的音频

【简写MyBatis】01-简单映射器

前言 新开一个坑&#xff0c;为了学习一下MyBatis的源码&#xff0c;写代码是次要的&#xff0c;主要为了吸收一下其中的思想和手法。 目的 关联对象接口和映射类的问题&#xff0c;把 DAO 接口使用代理类&#xff0c;包装映射操作。 知识点 动态代理简单工厂模式Invocati…
最新文章