首页天道酬勤mysql是前端还是后端(java程序员任务图)

mysql是前端还是后端(java程序员任务图)

admin 12-04 01:54 418次浏览

00-1010据说是阿里P8高级架构师总结的一个Java核心knowledge.pdf,涵盖的内容非常广泛,包括Java核心基础、Java多线程、高并发、Spring、微服务、Netty和RPC、Zookeeper、Kafka、RabbitMQ、Habitat、设计模式、负载均衡、分布式缓存、Hadoop、Spark、Storm、云计算等。

另外附上100G学习面试视频文档~

如何获取:在【跟随转发】后,私信我,回复关键词【资源】,无需套路即可免费获取~

以下是部分资源目录和内容截图:

再重要一点,如何获取:在【跟随转发】后,私信我,回复关键词【资源】,无需任何套路即可免费获取~

00-1010

分享阿里 P8 高级架构师吐血总结的 《Java 核心知识体系面试资料.pdf》

整理了一些与Mysql数据库相关的流程图/示意图,做了笔记,一起学习。

1.mysql主从复制示意图

mysql的主从复制原理是大厂后端的高频面试题,所以了解mysql的主从复制原理是非常必要的。

简单地说,主从复制的原理是一个三部曲,如下:

主数据库中有一个漂亮的小熊猫-log二进制文件,记录了所有添加、删除和修改的Sql语句。(标致小熊猫日志线程)从数据库复制主数据库中标致小熊猫-日志文件的sql语句。(io线程)从数据库的中继日志重做日志文件中再次执行这些sql语句。(Sql执行线程)如下图所示:

上图的主从副本分为五个步骤:

第一步:主库的更新事件(更新、插入、删除)写入标致小熊猫日志。

步骤2:从从库启动连接,并连接到主库。

第三步:此时主库创建一个标致熊猫日志转储线程,将标致熊猫日志的内容发送给从库。

第四步:从库启动后,创建一个I/O线程,从主库中读取标致小熊猫日志的内容,写入中继日志。

第五步:还将创建一个SQL线程,从中继日志中读取内容,从Exec_Master_Log_Pos位置执行读取的更新事件,并将更新后的内容写入从机的db中。

2.Mysql逻辑架构图

如果你能在脑海中建立一个MySql组件如何协同工作的架构图,将有助于你深入了解MySql服务器。

Mysql逻辑架构图主要分为三层:

1)第一层负责连接处理、授权认证、安全等。

每个客户端连接在服务器进程中都有一个线程,服务器维护一个线程池,所以不需要为每个新连接创建或销毁线程。当客户端连接到Mysql服务器时,服务器通过用户名和密码或SSL证书对其进行身份验证。一旦客户端成功连接,服务器将继续验证客户端是否有权执行特定的查询。2)第二层负责SQL的编译和优化。

这一层包括查询解析、分析、优化、缓存和所有内置功能。对于SELECT语句,在解析查询之前,服务器会先检查查询缓存,如果能在其中找到对应的查询结果,则直接返回查询结果,无需查询解析和优化。跨存储引擎的所有功能都在此级别实现:存储过程,

触发器,视图。

3)第三层是存储引擎。

存储引擎负责在MySQL中存储数据、提取数据。存储引擎通过API与上层进行通信,这些API屏蔽了不同存储引擎之间的差异,使得这些差异对上层查询过程透明。存储引擎不会去解析SQL,不同存储引擎之间也不会相互通信,而只是简单地响应上层服务器的请求。

3.InnoDb 逻辑存储结构图

从InnoDb 存储引擎的逻辑存储结构看,所有数据都被逻辑地存放在一个空间中,称之为表空间(tablespace)。表空间又由段(segment),区(extent),页(page)组成。页在一些文档中有时候也称为块(block)。 InnoDb 逻辑存储结构图如下:

表空间(tablespace)

表空间是Innodb存储引擎逻辑的最高层,所有的数据都存放在表空间中。默认情况下,Innodb存储引擎有一个共享表空间ibdata1,即所有数据都存放在这个表空间中内。如果启用了innodb_file_per_table参数,需要注意的是每张表的表空间内存放的只是数据、索引、和插入缓冲Bitmap,其他类的数据,比如回滚(undo)信息、插入缓冲检索页、系统事物信息,二次写缓冲等还是放在原来的共享表内的。

段(segment)

表空间由段组成,常见的段有数据段、索引段、回滚段等。InnoDB存储引擎表是索引组织的,因此数据即索引,索引即数据。数据段即为B+树的叶子结点,索引段即为B+树的非索引结点。在InnoDB存储引擎中对段的管理都是由引擎自身所完成,DBA不能也没必要对其进行控制。

区(extent)

区是由连续页组成的空间,在任何情况下每个区的大小都为1MB。为了保证区中页的连续性,InnoDB存储引擎一次从磁盘申请4~5个区。默认情况下,InnoDB存储引擎页的大小为16KB,一个区中一共64个连续的区。

页(page)

页是InnoDB磁盘管理的最小单位。在InnoDB存储引擎中,默认每个页的大小为16KB。从InnoDB1.2.x版本开始,可以通过参数innodb_page_size将页的大小设置为4K,8K,16K。InnoDB存储引擎中,常见的页类型有:数据页,undo页,系统页,事务数据页,插入缓冲位图页,插入缓冲空闲列表页等。

4.Innodb页结构相关示意图

Innodb页结构单体图

InnoDB数据页由以下7部分组成,如图所示:

其中File Header、Page Header、File Trailer的大小是固定的,分别为38,56,8字节,这些空间用来标记该页的一些信息,如Checksum,数据页所在B+树索引的层数等。User Records、Free Space、Page Directory这些部分为实际的行记录存储空间,因此大小是动态的。

下边我们用表格的方式来大致描述一下这7个部分:

记录在页中的存储流程图

每当我们插入一条记录,都会从Free Space部分,也就是尚未使用的存储空间中申请一个记录大小的空间划分到User Records部分,当Free Space部分的空间全部被User Records部分替代掉之后,也就意味着这个页使用完了,如果还有新的记录插入的话,就需要去申请新的页了,这个过程的图示如下:

不同Innodb页构成的数据结构图

一张表中可以有成千上万条记录,一个页只有16KB,所以可能需要好多页来存放数据。不同页其实构成了一条双向链表,File Header是InnoDB页的第一部分,它的FIL_PAGE_PREV和FIL_PAGE_NEXT就分别代表本页的上一个和下一个页的页号,即链表的上一个以及下一个节点指针。

5.Innodb索引结构图

我们先看一份数据表样本,假设Col1是主键,如下:

B+树聚集索引结构图

聚集索引就是以主键创建的索引聚集索引在叶子节点存储的是表中的数据

非聚集索引结构图

假设索引列为Col3,索引结构图如下:

非聚集索引就是以非主键创建的索引非聚集索引在叶子节点存储的是主键和索引列使用非聚集索引查询出数据时,拿到叶子上的主键再去查到想要查找的数据。(拿到主键再查找这个过程叫做回表)假设所查询的列,刚好都是索引对应的列,不用再回表查,那么这个索引列,就叫覆盖索引。

InnoDB 锁类型思维导图

加锁机制

乐观锁与悲观锁是两种并发控制的思想,可用于解决丢失更新问题。

乐观锁

每次去取数据,都很乐观,觉得不会出现并发问题。因此,访问、处理数据每次都不上锁。但是在更新的时候,再根据版本号或时间戳判断是否有冲突,有则处理,无则提交事务。

悲观锁

每次去取数据,很悲观,都觉得会被别人修改,会有并发问题。因此,访问、处理数据前就加排他锁。在整个数据处理过程中锁定数据,事务提交或回滚后才释放锁.

锁粒度

表锁: 开销小,加锁快;锁定力度大,发生锁冲突概率高,并发度最低;不会出现死锁。行锁: 开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高。页锁: 开销和加锁速度介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般

兼容性

共享锁:

又称读锁(S锁)。一个事务获取了共享锁,其他事务可以获取共享锁,不能获取排他锁,其他事务可以进行读操作,不能进行写操作。SELECT ... LOCK IN SHARE MODE 显示加共享锁。

排他锁:

又称写锁(X锁)。如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。SELECT ... FOR UPDATE 显示添加排他锁。

锁模式

记录锁: 在行相应的索引记录上的锁,锁定一个行记录gap锁: 是在索引记录间歇上的锁,锁定一个区间next-key锁: 是记录锁和在此索引记录之前的gap上的锁的结合,锁定行记录+区间。意向锁 是为了支持多种粒度锁同时存在;

作者:Jay_huaxiao

汇总在vue中写jsx的方式如何制作flash动画vue.js中this.$emit怎么使用iOS设置View阴影效果连接java程序到京东实战操作(笔记+视频教程链接地址)【容器实例Cube】在Cube中使用UFS:需要在UFS产品页面购买UFS实例并设置好挂载点数据方舟怎么收费UDataArkSwiftUI-如何添加Scenekit场景DeepRust匹配:有更好的方法吗?C#小知识之有趣的类型静态构造器UCDN违规事件处理说明 云分发 UCDN雷士灯具管理系统
java程序员任务图(数据库怎么与后端) mysql用户名和密码在哪看(mysql修改用户密码)
相关内容