- 博客(109)
- 收藏
- 关注
原创 主从复制简介
binlog即binary log,二进制日志文件,记录了数据库所有的DDL和DML等数据库更新事件的语句。它以事件形式记录并保存在二进制文件中,通过这些信息,可以再现数据更新操作的全过程。数据恢复:如果mysql数据库意外停止,可以通过二进制日志文件来查看用户执行了哪些操作,可以根据二进制日志文件中的记录来恢复数据库服务器。数据复制:由于日志的延续性和时效性,master把它的二进制日志传递给slaves来达到master-slave数据一致的目的。因此mysql数据库的数据备份、主备、主主、主从。
2025-02-12 10:04:59
722
原创 多版本并发控制:MVCC的作用和基本原理
多个事务对同一行记录进行更新会产品多个历史快照,这些历史快照保存在undo log里。如果一个事务想要查询这个行记录,怎么判断读取哪个版本的记录呢?这个时候就可以用上Readview了,它解决了多事务场景下的可见性的问题。Readview就是事务在使用MVCC机制进行快照读操作时产生的读视图。当事务启动时,会生成数据库系统当前的一个快照,Innodb为每个事务构造了一个数组,用来记录并维护系统当前未提交事务的ID。
2025-01-22 09:39:33
824
原创 【Innodb行锁类型介绍:记录锁、间隙锁、临键锁、插入意向锁】
mysql服务器层没有实现行锁机制,。优点:锁定粒度小,发生锁冲突概率低,可以实现的并发度高。锁的开销比较大,加锁比较慢,容易出现死锁情况。Innodb和MyISAM最大的不同点有2个:支持事务、支持行级锁。
2025-01-11 16:32:24
412
原创 【数据库事务锁的类型:读锁/写锁、悲观锁/乐观锁、表锁/页锁/行锁】
第一次读的时候获取当前版本值,更新的时候指定版本号(old_version_value)进行更新,只有当其他事务没有更新过时,这条语句才会更新成功。此时事务2如果想对该表加一个表级别排他锁的话,发现已经有一个表级别意向排他锁了,此时就会阻塞。而如果没有意向排他锁的话,事务2要对表加表级别的排他锁的话,数据库就需要对该表的每一页、每一行都查看是否有对应的页锁和行锁,这样太耗时了。但是意向锁和普通表级别的共享锁/排他锁不兼容,除了2个都是读的情况:即意向共享锁和表级别共享锁是兼容的。(read lock)和。
2025-01-04 14:03:23
820
原创 Mysql数据库Redo日志和Undo日志的理解
即使此时数据库系统崩溃了,数据库重启的时候,系统也能从redo日志中将刚刚那次事务的变更刷入到磁盘中。:有时候仅仅更新了数据库中某一行的某一列的一个字段,但是事务提交的时候需要刷新一个完整页(16KB)到磁盘上。:一个事务可能包含很多语句,对应的数据不一定在磁盘相邻的页上,当把数据从buffer pool刷入到磁盘上时,需要进行很多的。比如执行insert之前,会写一条delete的语句到undo日志中,一旦事务回滚,则会执行这条delete语句。,即先写入到顺序IO的redo日志上,再写入到数据磁盘上。
2024-12-26 10:31:50
1041
原创 【数据库事务的ACID特性和四种隔离级别】
原子性是指事务是一个不可分割的工作单位,要么全部提交,要么全部回滚。举例:A账户给B账户转账100元。至少有2个步骤,A账户减100元,B账户增加100元。这2个动作要么全部执行成功,要不全部回滚。不存在其他情况。:一致性是指事务执行前后,事务从一个合法性状态变换到另一个合法性状态。这个合法性状态是语义上的,不是语法上的,语义上合理和复合业务预期即可。举例:A账户给B账户转账100元。由于各种原因,最终A账户减了100元,但是B账户没变,此时不满足一致性。
2024-12-13 12:23:08
602
原创 【数据库三大范式和反范式】
范式()是数据库设计时遵循的一种规范,不同的规范要求遵循不同的范式。范式可以。目前关系型数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、 第四范式(4NF)和 第五范式(5NF,又称完美范式)。一般说来,数据库只需满足第三范式(3NF)就行了。
2024-12-04 12:58:01
369
原创 leetcode算法题总结
非递归写法用一个队列保存当前层的节点,遍历的时候注意提前记下当前层的节点个数,遍历的时候只处理当前层的节点,下一层的节点继续进入队列。代码量很小,有点像智力题,抓住关键点(既然是连续序列且求最大和,判断下要不要取前面的子序列和就行了)就很容易做出来。三数之和的升级版,还是考察队双指针的理解,同时也考察处理复杂业务代码的能力(业务逻辑比三数之和更复杂了)。一道动态规划的典型题目,代码量不大,既考察智力又考察动态规划,非常适合作为面试题目。动态规划、逻辑挺绕的。考察的是递归写法,以及对二维数组边界的判断。
2024-07-04 12:51:06
581
1
原创 线上问题:新需求放量后频繁发生old gc
因此又回去看了下这个接口的相关代码,该接口返回的sku vo的个数虽然非常多,有1w+,但是sku vo单个对象并不大,该对象中只有5个long类型的字段和一个string类型的字段。因此推测是因为打印日志时存在大对象,导致了old gc。看了下异常类型,主要是dubbo接口服务超时,或者消费者超时(超过3s未响应),联想到上面出现的old gc,因此准备通过处理掉old gc来解决大量异常报错问题。随后开始继续放量,直至放量到100%,也没有再出现old gc了,且老年代的内存也维持在了300M左右。
2024-03-07 12:46:44
1090
原创 线上问题:所有用户页面无法打开
结合当时出现的大量young gc和多次full gc,推测是进入工作时间(11点)后,请求都转发到对应几台服务器上,开始出现大量young gc,导致young gc运行时间增加。2.1 由于出现了linda告警,所以马上到linda平台查看了接口监控信息,发现从上午11点07分开始,接口最大RT达到了30秒。下午又看了下上午linda接口的监控信息,发现该接口的另外2个服务的RT平均都在2秒左右,没有出现本服务平均最大RT30秒的情况。2)95线RT:昨天平均40秒 --> 今天平均6秒。
2023-10-17 12:40:04
351
原创 分布式事务常见解决方案整理:二阶段、三阶段、TCC、MQ+本地事务+消息校对
分布式事务常见解决方案整理:二阶段、三阶段、TCC、MQ+本地事务+消息校对
2022-10-06 14:58:58
1814
原创 编程题-算法-中等-leetcode-739. 每日温度
看到题目,可以想到用一个双向队列来记录对应的温度和下标值。然后遍历温度temperatures,当遍历的温度值(temp)比队首元素的温度(firstTempInQue)高,则可以得到队首元素的结果。方式二是不借助自定义的类Node,而是将队列里保存对应温度的下标值,通过下标来进行判断,当然原理其实和方式一基本一致。理解了方式一的话,方式二也就很好理解了。如果当前温度值(temp)比队首元素的温度(firstTempInQue)低,则将其放到队首。方式一比较好理解,自定义类Node和队列,进行解答。
2022-10-02 13:48:53
425
原创 Spring核心问题回顾3:spring的事务传播机制、事务失效的情况、对ioc的理解
spring的事务传播机制、事务失效的情况、对ioc的理解
2022-08-21 12:07:41
632
原创 Spring核心问题回顾1:ioc容器创建的大致过程、bean的生命周期、解决循环依赖为什么需要三级缓存
ioc容器创建的大致过程、bean的生命周期、解决循环依赖为什么需要三级缓存
2022-08-21 11:33:25
476
原创 Mysql高级篇学习总结14:子查询优化、排序优化、GROUP BY优化、分页查询优化
子查询优化、排序优化、GROUP BY优化、分页查询优化
2022-07-30 15:03:11
1139
原创 Mysql高级篇学习总结7:Mysql数据结构-Hash索引、AVL树、B树、B+树的对比
Mysql数据结构-Hash索引、AVL树、B树、B+树的对比
2022-06-25 17:21:35
671
原创 Java基础:原子引用的ABA问题
Java基础:原子引用的ABA问题1、ABA问题1、通过原子引用代码验证ABA问题2、通过带时间戳的原子引用解决ABA问题1、ABA问题问:谈一下原子类AtomicInteger的ABA问题?是否知道什么是原子更新引用?如何解决ABA问题答:1、CAS会导致“ABA问题”。CAS算法实现的一个重要前提,是取出内存中某时刻的数据,然后比较并交换。在多线程情况下,就存在取出数据后,该数据被其他线程修改的情况。1)比如线程1从主内存中取出的数据是A,然后进行一些业务操作(比如需要5s),最后并准备将该
2022-05-06 09:02:17
1429
原创 Java基础:CAS详解
Java基础:CAS详解1、CAS详解1.1 理解AtomicInteger类的compareAndSet方法1.2 理解AtomicInteger类的getAndIncrement方法1.3 使用AtomicInteger类替代n++的分析2、CAS的缺点问:知道CAS么?是如何实现的?答:CAS的全称是Compare and swap,它是一条CPU并发原语。它的功能是判断内存某个位置的值是否是预期值,如果是就更改为最新的值,这个过程是原子的。CAS并发原语体现在JAVA语言就是sun.mis
2022-05-04 17:22:46
1593
原创 Java基础:volatile详解
Java基础:volatile1、volatile保证可见性1.1、JMM模型的引入1.2、volatile保证可见性的代码验证1.2.1、无可见性代码验证1.2.1、volatile保证可见性验证2、volatile不保证原子性问:请谈谈你对volatile的理解?答:volatile是Java虚拟机提供的轻量级的同步机制,它有3个特性:1)保证可见性2)不保证原子性3)禁止指令重排刚学完java基础,如果有人问你什么是volatile?它有什么作用的话,相信一定非常懵逼…可能看了答案,也完
2022-05-03 20:35:26
37960
29
原创 Spring注解驱动开发学习总结21:Spring容器创建 - 创建bean的详细步骤
Spring注解驱动开发学习总结21:Spring容器创建 - 创建bean的详细步骤1、分析11步中的finishBeanFactoryInitialization方法分析11.2中的doGetBean方法分析11.2.3中的createBean方法分析11.2.3.2中的doCreateBean方法2、分析12步中的finishBeanFactoryInitialization方法3、小结回顾前3篇文章:1、Spring注解驱动开发学习总结18:Spring容器创建 - beanFactory创建和
2022-04-23 20:11:07
742
原创 Spring注解驱动开发学习总结20:Spring容器创建 - 注册bean后置处理器、初始化事件派发器、注册监听器
Spring注解驱动开发学习总结20:Spring容器创建 - 注册bean后置处理器、初始化事件派发器、注册监听器1、查看Spring容器的refresh方法分析registerBeanPostProcessors方法分析initMessageSource方法分析initApplicationEventMulticaster方法分析onRefresh方法分析registerListeners方法2、 小结回顾前2篇文章:1、Spring注解驱动开发学习总结18:Spring容器创建 - beanFac
2022-04-22 09:12:02
572
原创 Spring注解驱动开发学习总结19:Spring容器创建 - beanFactory后置处理器的操作步骤
Spring注解驱动开发学习总结19:Spring容器创建 - beanFactory后置处理器的操作步骤1、查看Spring容器的refresh方法分析步骤5中的invokeBeanFactoryPostProcessors方法2、小结回顾前1篇文章:1、Spring注解驱动开发学习总结18:Spring容器创建 - beanFactory创建和预准备工作步骤分析了Spring容器refresh方法的:1)刷新前的容器准备:prepareRefresh();2)刷新内置的bean工厂:obtai
2022-04-21 09:03:59
457
原创 Spring注解驱动开发学习总结18:Spring容器创建 - beanFactory创建和预准备工作步骤
Spring注解驱动开发学习总结18:Spring容器创建 - beanFactory创建和预准备工作步骤1、beanFactory创建和预准备工作步骤2、小结在之前的文章:Spring注解驱动开发学习总结11:AOP功能使用中构建了一个数学计算器的业务类(MathCalculator),该业务类添加了一个除法方法(div)。然后给div方法添加AOP的通知方法:前置通知(@Before)、后置通知(@After)、返回通知(@AfterReturning)、异常通知(@AfterThrowing)。
2022-04-20 08:55:11
694
原创 Spring注解驱动开发学习总结17:AOP原理总结
Spring注解驱动开发学习总结17:AOP原理总结1、AOP原理总结1.1 @EnableAspectJAutoProxy注解作用分析1.2 AnnotationAwareAspectJAutoProxyCreator后置处理器的调用步骤1.3 AOP通知方法的调用步骤回顾前面5篇关于AOP文章的内容1、Spring注解驱动开发学习总结11:AOP功能使用构建了一个数学计算器的业务类(MathCalculator),该业务类添加了一个除法方法(div)。然后给div方法添加AOP的通知方法:前置通
2022-04-14 20:37:42
774
原创 Spring注解驱动开发学习总结16:AOP原理 - AOP通知方法执行的步骤
Spring注解驱动开发学习总结16:AOP原理 - AOP通知方法执行的步骤1、方法栈调用分析1.1 分析AOP通知方法的调用步骤2、小结回顾下前4篇AOP原理分析的内容:1、Spring注解驱动开发学习总结12:AOP原理 - @EnableAspectJAutoProxy注解作用分析分析了配置类上添加@EnableAspectJAutoProxy注解,最终会给容器中注册了一个id为internalAutoProxyCreator,类型为AnnotationAwareAspectJAutoProx
2022-04-14 14:05:52
1003
原创 Spring注解驱动开发学习总结15:AOP原理 - AnnotationAwareAspectJAutoProxyCreator后置处理器返回代理对象的步骤
Spring注解驱动开发学习总结15:AOP原理 - AnnotationAwareAspectJAutoProxyCreator后置处理器返回AOP代理对象的步骤1、方法栈调用分析1.1 分析applyBeanPostProcessorsBeforeInstantiation方法1.2 分析applyBeanPostProcessorsAfterInitialization方法1.3 分析AnnotationAwareAspectJAutoProxyCreator后置处理器返回代理对象的步骤2 小结2.1
2022-04-11 21:25:43
830
原创 Spring注解驱动开发学习总结14:AOP原理 - AnnotationAwareAspectJAutoProxyCreator后置处理器的调用步骤
Spring注解驱动开发学习总结14:AOP原理 - AnnotationAwareAspectJAutoProxyCreator后置处理器的调用步骤1、AnnotationAwareAspectJAutoProxyCreator后置处理器的调用步骤1.1 查看方法栈调用信息1.2 方法栈调用分析1.3 本文小结1.3.1 @EnableAspectJAutoProxy注解作用分析1.3.2 AnnotationAwareAspectJAutoProxyCreator后置处理器的调用步骤回顾下前两篇AOP
2022-04-09 14:31:31
795
原创 Spring注解驱动开发学习总结13:AOP原理 - AnnotationAwareAspectJAutoProxyCreator后置处理器注入容器的步骤
Spring注解驱动开发学习总结12:AOP原理 - 后置处理器注入ioc容器的步骤分析1、注册AnnotationAwareAspectJAutoProxyCreator1.1 查看调用栈1.2 方法栈调用分析1.3 小结1.3.1 上篇博文小结1.3.2 后置处理器注入ioc容器步骤分析小结上一篇博文中,已经分析了配置类上添加@EnableAspectJAutoProxy注解,最终会给容器中注册了一个id为internalAutoProxyCreator,类型为AnnotationAwareAspec
2022-04-05 14:48:11
784
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人