集度
1、mysql数据库插入过程
① 执行器先根据where条件查询修改的数据放入内存中,如果数据在内存中,直接返回给执行器,如果不存在,根据条件去磁盘中读取。
② 执行器获取返回的数据先进行数据的修改,得到新行数据,再调用引擎接口写入这行数据。
③ 写入过程,先更新内存,更新操作记录redo log,这时redo log处于 prepare状态。随时可以提交。
④ 然后执行器,将binlog日志写入磁盘
⑤ 最后执行器提交事务,刚刚redo log日志标记为已提交,此时返回更新完成。
⑥ 根据配置的磁盘写入策略,定时写入磁盘中。
2、mysql 各种日志作用及原理
binlog
redo log
undo log
error log
slow query log:慢sql日志
relay log 中继日志
3、binlog的格式
二进制日志,它记录了数据库的所有改变,并以二进制的形式保存到磁盘中。它可以用来查看数据库的变更历史,数据库增量备份,恢复,Mysql主从复制。从5.7.22版本开始,Mysql默认的格式由STATEMENT改为了ROW。
基于SQL语句的复制(Statement)
每一条会修改数据的sql都会记录到binlog中。
优点:不需要记录每一行的变化,减少了binlog的日志量,节约了IO,提高了性能。
缺点:由于记录的只是执行语句,为了这些语句能在slave上正确运行,因此还必须记录每条语句在执行的时候的一些相关信息,以保证所有语句能在slave得到和在master端执行时候相同 的结果。另外mysql 的复制,像一些特定函数功能,slave可与master上要保持一致会有很多相关问题。
基于行的复制(Row)
优点:binlog可以不记录执行sql语句的上下文相关信息,仅记录那一条数据(每个字段)被修改成了什么样子。所以row level的日志会非常清楚的记录每一行数据的变化细节,而且不会出现某些特定情况下,存储过程,函数,触发器无法被复制的过程。
缺点:所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容。
新版本的MySQL中对row level模式也被做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时候就会以statement模式来记录,如果sql语句确实就是update或者delete等修改数据的语句,那么还是会记录所有行的变更。
混合模式复制(Mixed)
从5.1.8版本开始,MySQL提供了Mixed格式,实际上就是Statement与Row的结合。
在Mixed模式下,一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种。
4、SpringCloud组件都用的那些?OpenFeign底层封装
本质底层封装HttpURLConnection发出的HTTP请求。另外,如果有需要,你也可以替换成第三方库,HttpClient或者OkHttp。
5、redis 大Key
拆分多个kv,分配到不同的redis服务器中。
6、ZSet为什么不用B+树
ZSet:压缩链表+跳跃表
跳跃表(SkipList)是一种能高效实现插入、删除、查找的内存数据结构,这些操作的期望复杂度都是O(logN)。
与红黑树以及其他的二分查找树相比,跳跃表的优势在于实现简单,而且在并发场景下加锁粒度更小,从而可以实现更高的并发性。
正因为这些优点,跳跃表广泛使用于KV数据库中,诸如Redis、LevelDB、HBase都把跳跃表作为一种维护有序数据集合的基础数据结构。
redis基于内存,设计是尽可能提高读写效率。插入性能搞,操作简单,无需维护B+树特征。
而B+树是mysql InnerDB引擎的数据存储结构,磁盘存储,可存储数据量更大,需减少磁盘IO,提高访问效率。B+树层数少,进而减少磁盘IO。
禹数
1、nacos系列,对比eureka
nacos源码,启动过程,nacos数据落磁盘吗?
2、sentinel相关,模式
3、redis如何自动扩容
4、redis集群方式
5、分布式锁,redis分布式锁缺陷,redissen是否解决了缺陷问题。
6、本地所。sync的锁升级过程,如果执行hashcode,是否还会进入轻量级锁。
7、seata机制 源码
8、jvm相关 GC相关
9、dubbo+zk 与 springcloud 服务之间调用区别及优缺点。
标签:总结,语句,面试题,log,记录,binlog,磁盘,日志 From: https://www.cnblogs.com/stubborn-dude/p/16548037.html