数据库方面面试

1、你知道nosql吗?你用的nosql都有哪些?

nosql:非关系型的数据库,比如Redis,Memcache,MongoDb

2、mysql索引优化

主键优化、唯一索引、外键优化、列索引、前缀索引、全文索引、空间索引、多列索引

3、mysql的优化方案

https://blog.csdn.net/liuyanqiangpk/article/details/79827239

https://blog.csdn.net/u013628152/article/details/82184809

4、什么是事务?及其特性?

事务:是一系列的数据库操作,是数据库应用的基本逻辑单位。

特性:

(1)原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。

(2)一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态

(3)隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,

(4) 持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。

简单理解:在事务里的操作,要么全部成功,要么全部失败。
 

5、数据库的主从复制和读写分离

主从复制的原理
MySQL的主从复制和读写分离两者有着紧密的联系,首先要部署主从复制,只有主从复制完成了才能在此基础上进行数据的读写分离。

读写分离的原理
简单来说,读写分离就是只在主服务器上写,只在从服务器上读。基本原理是让主数据库处理事务性查询,而从服务器处理select查询。数据库复制被用来把事务性查询导致的变更同步到从数据库中。

基于中间代理层实现:代理一般位于客户端和服务器之间,代理服务器接到客户段的请求通过判断后转发到后端数据库。

https://www.cnblogs.com/codehome/p/9356496.html

https://blog.51cto.com/13555423/2068071

6、消息队列如何实现

异步, 解耦, 削峰.

  1. 异步. A系统需要发送个请求给B系统处理,由于B系统需要查询更新数据库花费时间较长,以至于A系统要等待B系统处理完毕后再发送下个请求,造成A系统资源浪费.使用消息队列后,A系统生产完消息后直接丢进消息消息队列,就完成一次请求,继续处理下个请求.
  2. 解耦. A系统发送个数据到BCD三个系统,接口调用发送,那如果E系统也要这个数据呢?那如果C系统现在不需要了呢?现在A系统又要发送第二种数据了呢?A系统负责人濒临崩溃中。。。再来点更加崩溃的事儿,A系统要时时刻刻考虑BCDE四个系统如果挂了咋办?我要不要重发?我要不要把消息存起来?使用消息队列就能解决这个问题,A系统只负责生产数据,不需要考虑消息被哪个系统来消费.
  3. 削峰. A系统调用B系统处理数据,每天0点到11点,A系统风平浪静,每秒并发请求数量就100个。结果每次一到11点~1点,每秒并发请求数量突然会暴增到1万条。但是B系统最大的处理能力就只能是每秒钟处理1000个请求啊。。。尴尬了,系统会崩掉。。。引入消息队列,把请求数据先存入消息中间件系统中,消费系统慢慢拉取消费.

7、查询优化

参考:https://blog.csdn.net/weixin_38477351/article/details/89786763,l./

https://www.jianshu.com/p/127d27cc0e88

8、msyql的存储引擎,以及各自的区别

https://blog.csdn.net/Java_fenxiang/article/details/82870335

9、redis和memcache有什么区别

https://blog.csdn.net/klfsk/article/details/100130046

10、索引有哪些,你是如何做索引的?

https://www.cnblogs.com/xiaowenboke/p/10430670.html

11、如何分表

https://blog.csdn.net/hu_feng903/article/details/84930136

发布了72 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_39399966/article/details/104397620