【数据库】面经总结

本文详细总结了MySQL数据库面试中的关键知识点,包括事务的ACID特性、事务并发控制、隔离级别、B树与B+树原理、索引类型与优化、存储引擎对比、锁机制、数据库优化方法等内容,深入探讨了MySQL为何查询速度快的原因以及如何进一步优化数据库性能。
摘要由CSDN通过智能技术生成

1. 事务的特性ACID

原子性:要么全部执行成功,要么不执行,只有其中一个指令失败,就重来
一致性:对于整个数据的完整性保持稳定
隔离性:多个并发事务之间要隔离
持久性:当事务正确完成后,对于数据的改变是永久性的

2. 事务并发可能出现的情况

脏读:一事务读到了另一个未提交事务修改过的数据。若不提交读到的数据不存在
不可重复读:不同时刻读到数据不一致
幻读:读到的数据第二次比第一次多。

3. 隔离级别

读未提交:可读到未提交的数据
读已提交:只能读到已经提交的内容,避免了脏读
可重复读:当事务启动时,不允许修改,避免了脏读和不可重复读
可串行化:事务一个个排队执行(效率低,开销大)

4. 二叉树、平衡二叉树、B树,B+树?

二叉树:左子树的孩子节点比自己小,右子树的孩子节点比自己大
平衡二叉树:两子树高度差小于等于1
B树:多路平衡查找树,每个节点可以存储多个
B+树:只有叶子节点存储数据,构成有序列表,非叶子节点存储关键索引

5. MySQL索引原理:

是存储引擎用于快速找到记录的一种数据结构——B+树

  1. B+树节点存储的是索引,在单个节点存储容量有限的情况下,单节点也能存储大量索引,使得整个 B+树高度降低,减少了磁盘 IO。
  2. B+树的叶子节点是真正数据存储的地方,叶子节点用了链表连接起来,这个链表本身就是有序的,在数据范围查找时,更具备效率。

因此 Mysql 的索引用的就是 B+树,B+树在查找效率、范围查找中都有着非常不错的性能。

6. 最左前缀匹配

建立联合索引时,最左优先;检索数据时,从联合索引最左边开始匹配。
在索引时会先对第一个字段排序,再依次对第二第三。。

7. Tree索引和Hash索引的区别

  1. 等值查询,hash索引更好;范围查询只有树索引可以
  2. Hash索引不能利用索引排序,以及范围查询,不支持最左前缀匹配原则
  3. 关键字检索效率平均,在有大量重复键时hash索引效率极低

8. MySQL索引调优

  1. and/or条件相连,命中索引从而加快速度
  2. like的前导模糊查询不能使用索引
  3. union,in,or都能命中时建议用in
  4. 负向条件查询不能用索引
  5. 范围列可以用索引
  6. 联合索引最左前缀原则

9. 事务的实现原理(redo+undo)

Redo log:重做日志,为了性能不会把每次修改都同步到磁盘里,而是会先存到缓冲池中,然后使用后台线程去做缓冲池和磁盘之间的同步,
Undo log:回滚日志,发生错误时才可以回滚
锁技术+MVCC
锁技术:读写锁(读锁:共享锁/写锁:排它锁)
MVCC基础:多版本并发控制,通过每行记录的后面两个隐藏列来实现,依赖undo log+read view.
undo log:记录数据的多个版本数据,read view:判断当前版本可见性

10. mysql存储引擎

myisam,innodb

  1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务
  2. InnoDB支持外键,而MyISAM不支持。
  3. InnoDB是聚集索引的B+树主键索引的叶子节点就是数据文件,辅助索引的叶子节点是主键的值;而MyISAM是非聚集索引的B+树主键索引和辅助索引的叶子节点都是数据文件的地址指针。
  4. InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快(注意不能加有任何WHERE条件)
  5. Innodb不支持全文索引,而MyISAM支持全文索引,
  6. MyISAM表格可以被压缩后进行查询操作
  7. InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁
  8. InnoDB表必须有唯一索引,否则生产一个隐藏列Row_id当默认主键,而Myisam可以没有
  9. Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI Innodb:frm是表定义文件,ibd是数据文件 Myisam:frm是表定义文件,myd是数据文件,myi是索引文件
  10. MyISAM为某个字段添加索引时,会生成对应字段的索引树,该字段的索引树的叶子节点记录了对应数据的物理地址,然后拿着这个物理地址去数据文件里定位到具体的数据记录。
    InnoDB加索引,会建立索引 B+树,节点里存的是KEY,叶子节点存储的数据的是主键 KEY。拿到KEY 后,InnoDB 会去主键索引树里根据 KEY 查找到对应的数据。

11. MySQL为什么查询速度快其实就是问B+树为什么查询速度快?

层数少,只在叶子节点存数据的特点就能极大的保证磁盘IO次数少

12.红黑树为什么快,请简述一下原因

根节点是黑色;节点是红色或黑色;所有叶子节点都是黑色,叶子节点为 NIL 节点,不储存数据;每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。);从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。

红黑树是一颗会自动调整树形态的树结构,红黑树会自动左旋右旋节点以及节点变色,调整树的形态,使其保持基本的平衡状态,也就保证了查找效率不会明显减低。从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。结果是这个树大体上是平衡的。因为操作比如插入、删除和查找某个值的最坏情况时间都要求与树的高度成比例,这个在高度上的理论上限允许红黑树在最坏情况下都是高效的。红黑树相对于AVL树来说,牺牲了部分平衡性以换取插入/删除操作时少量的旋转操作,整体来说性能要优于AVL树。

1.红黑树的应用

红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(lgn),效率非常之高。
例如,Java集合中的TreeSet和Tr

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python面经八股文是指在面试过程中经常会被问到的一些关于Python语言的基础知识问题。这些问题常常是考察面试者对Python语法、数据类型、函数库等方面的理解和应用。 第一个问题通常是问到Python的特点,比如动态语言、解释型语言等。随后可能会问到Python的命名规范,如变量名、函数名等的命名规则。 接下来可能会被问到Python的数据类型,如字符串、列表、字典和元组的特点和用法。还会询问如何进行类型转换和切片操作。 然后可能会被问到Python的函数,包括如何定义函数、函数参数的类型和默认值,以及如何调用函数和返回值等。 接着可能会被问到Python的模块和库的使用,如time、datetime、random等常用模块的函数和方法。还可能问到如何处理文件、异常等知识点。 另外,面试者还可能会被问到Python的面向对象编程的相关知识,如类和对象的概念、实例化对象、继承和多态等。 最后,可能会被问到Python的常用框架和库,如Django、Flask和NumPy等。还可能会问到如何进行数据库操作、网络编程等相关知识点。 在面试中回答这些问题需要准备充分,对Python的基础知识和常用库要熟悉,并能够清晰地表达自己的观点和经验。同时也可以结合项目经验等实际经历进行回答,展示自己的实际应用能力。 ### 回答2: Python面经八股文主要包括以下几个方面: 一、Python基础知识: 1. 数据类型:了解Python中的常见数据类型,包括字符串、列表、元组、字典等,并能灵活运用。 2. 控制结构:熟悉Python的控制结构,如条件语句、循环语句和异常处理等,并能正确使用。 3. 函数和模块:了解函数和模块的概念,在项目中能够定义并调用函数,以及导入和使用模块。 4. 文件操作:了解Python中的文件操作方法,能够对文件进行读写操作。 5. 面向对象编程:理解面向对象编程的概念,能够定义类、创建对象,并掌握继承、多态等特性。 二、Python常用库和框架: 1. Numpy:了解Numpy库的基本用法,包括数组的创建和操作,矩阵运算等。 2. Pandas:熟悉Pandas库的数据处理功能,包括数据的读取、清洗、排序、合并等。 3. Matplotlib和Seaborn:掌握Matplotlib和Seaborn库用于数据可视化的操作,能够生成各种统计图表。 4. Scikit-learn:熟悉Scikit-learn库的机器学习算法,能够进行数据预处理、特征工程和模型训练等。 三、数据库操作: 1. SQL语言:了解SQL语言的基本语法,能够编写简单的SQL查询语句,实现数据的增删改查等操作。 2. MySQL或MongoDB:了解MySQL或MongoDB数据库的基本操作,包括连接数据库、创建表、插入数据等。 3. ORM框架:熟悉Django或SQLAlchemy等ORM框架的使用,能够进行数据库的ORM操作。 四、Web开发: 1. Flask或Django:了解Flask或Django框架的基本使用方法,能够搭建简单的Web应用。 2. RESTful API:熟悉RESTful API的设计原则,能够使用Flask或Django开发和部署API接口。 3. HTML和CSS:掌握基本的HTML和CSS知识,能够进行网页布局和样式设计。 总结起来,Python面经八股文主要包括Python基础知识、常用库和框架、数据库操作以及Web开发等内容。熟练掌握这些知识点,能够在面试中展现出扎实的编程基础和项目经验,提高自己的面试竞争力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值