自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 【MySQL】理解MySQL的双重缓冲机制:Buffer Pool与Redo Log的协同之道

值得注意的是,Redo Log的环形缓冲区设计需要与Buffer Pool协同工作——当日志空间循环覆写时,必须确保被覆盖日志对应的脏页已完成刷盘,才能避免恢复时的数据丢失风险。当注意到Redo Log和Buffer Pool都采用"先写内存再刷盘"的设计时,一个自然的问题浮现:既然两者都需要维护内存数据并定期持久化,为何需要双重缓冲机制?二者的默契配合既维持了内存操作的高性能,又通过顺序日志写入规避了频繁随机刷盘的开销,最终在性能与可靠性之间达成了精妙的平衡。其次,频繁的I/O操作会加剧磁盘损耗。

2025-04-03 17:02:12 287

原创 【分布式事务】三阶段提交和二阶段提交的区别

预备阶段的作用是降低失败概率,确保在超时或网络异常时,参与者可以基于预备阶段的结果自行决定提交或回滚,减少阻塞时间。2PC中,协调者必须收到所有参与者的明确“成功”消息后,才会通知提交;3PC通过增加预备阶段(PreCommit),让参与者先进行自检,确保自己能成功执行后续操作。如果直接增加默认提交,可能会导致部分参与者提交成功,而异常参与者回滚,造成数据不一致。3PC并没有根本解决2PC的问题,但通过预备阶段优化了系统的可用性和健壮性。2PC的目标是强一致性,默认提交会破坏这一目标。

2025-03-22 00:19:33 232

原创 【数据库】三层B+树存储数据量问题

假设主键类型为bigint,占用8Byte,指针可以设置为占用6Byte,总共16Byte。这样就可以算出一个非叶子节点大概可以存放16KByte/14Byte=1024个“主键+指针”的组合。这里我们假设我们的一行数据大小是1K,那么我们一个叶子节点就可以存16KByte/1KByte=16条(行)数据。三层那么就是 1024 * 1024 * 16 = 16777216。三层总数 = 非叶子节点(根) * 非叶子节点 * 叶子节点。两层总数 = 非叶子节点(根) * 叶子节点。使用溢出页进行保存。

2025-03-17 15:57:35 332

原创 【并发编程】synchronized 的底层原理

在Java中,关键字用于在多个线程之间确保共享资源的同步访问。其背后的实现涉及复杂的锁优化机制,如偏向锁、轻量级锁和重量级锁(也称作膨胀锁)。我们将简要介绍这些概念及其底层实现。

2025-03-17 15:39:13 350

原创 【加密】常用加密算法

【代码】【加密】常用加密算法。

2025-03-17 14:19:52 101

原创 【分布式事务】分布式事务解决方案

在分布式系统中,一次业务处理可能需要多个应用来实现,比如用户发送一次下单请求,就涉及到订单系统创建订单、库存系统减库存,而对于一次下单,订单创建与减库存应该是要同时成功或同时失败的,但在分布式系统中,如果不做处理,就很有可能出现订单创建成功,但是减库存失败,那么解决这类问题,就需要用到分布式事务。

2025-03-17 13:47:36 393

原创 【网络协议】基于UDP的可靠协议:KCP

TCP是为流量设计的(每秒内可以传输多少KB的数据),讲究的是充分利用带宽。而 KCP是为流速设计的(单个数据包从一端发送到一端需要多少时间),以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的传输速度。TCP信道是一条流速很慢,但每秒流量很大的大运河,而KCP是水流湍急的小激流。

2025-03-17 13:41:19 612

原创 【CPU】CPU多级缓存和MESI一致性协议

此时,L1 Cache 容量不足以存储所有相关的数据,因此 L2 Cache 提供了一个次优的存储位置,允许 CPU 更快地访问这些数据,而不必回到远程的 RAM。L3 Cache 的设计主要用于减少核心之间的数据交换延迟和内存访问冲突,因此它通常被设计为多个核心共享的结构。尽管 L3 Cache 的大小比 L1 和 L2 Cache 更大,但它的访问速度相对较慢,延迟可以达到数十到上百个时钟周期。然而,它仍比访问主内存快得多,尤其是在多核处理器中,每个核心都可以通过 L3 Cache 更高效地共享数据。

2025-03-17 13:39:45 811

原创 【Spring】声明式事务传播机制

NESTED和REQUIRED修饰的内部方法都属于外围方法事务,如果外围方法抛出异常,这两种方法的事务都会被回滚。但是REQUIRED是加入外围方法事务,所以和外围事务同属于一个事务,一旦REQUIRED事务抛出异常被回滚,外围方法事务也将被回滚。而NESTED是外围方法的子事务,有单独的保存点,所以NESTED方法抛出异常被回滚,不会影响到外围方法的事务。但是因为NESTED是嵌套事务,所以外围方法回滚之后,作为外围方法事务的子事务也会被回滚。UserService对象本身!3、数据库不支持事务。

2025-03-17 13:37:25 315

原创 【Java】JDK1.8的ConcurrentHashMap

JDK1.8的ConcurrentHashMap通过CAS(初始化Node节点)、synchronized分段锁(仅锁链表头节点/树根节点)、链表转红黑树、多线程协助扩容等机制,在保证线程安全的同时实现高效并发更新。

2025-03-17 11:18:35 192

原创 【分库分表】MySQL分库分表

MySQL分库分表平滑扩容扩容方案,包括连续分片(范围分片)、一致性哈希分片、双倍扩容策略

2025-03-04 11:24:58 337

原创 【算法】美团2024年春招第一场笔试【技术】- Q4小美的朋友关系【反向并查集+离散化】

小美认为,在人际交往中,但是随着时间的流逝,朋友的关系也是会慢慢变淡的,最终朋友关系就淡忘了。现在初始有一些朋友关系,存在一些事件会导致两个人淡忘了他们的朋友关系。小美想知道某一时刻中,某两人是否可以通过朋友介绍互相认识?事件共有 2 种:1 u v:代表编号 u 的人和编号 v 的人淡忘了他们的朋友关系。2 u v:代表小美查询编号 u 的人和编号 v 的人是否能通过朋友介绍互相认识。

2024-04-16 15:19:37 1238 1

原创 【Java】BitMap内存实现

【代码】【Java】BitMap内存实现。

2024-03-18 23:23:52 492 1

原创 Linux系统自动化安装MYSQL

适配系统:centos 7,centos 8,centos stream 8,centos stream 9,redhat 7,redhat 8,redhat 9,almalinux 8,almalinux 9,rockylinux 8,rockylinux 9,ubuntu 18.4,ubuntu 20.4,ubuntu 22.4,debian 10,debian 11,debian 12,oraclelinux 7,oraclelinux 8,oraclelinux 9。

2024-01-21 10:07:29 535 1

原创 【MYSQL】一个关于最左匹配原则的问题

最左原则顾名思义就是从最左边开始匹配的原则,mysql会一直向右匹配直到遇到范围查询(>、

2024-01-02 20:33:08 602

原创 【算法】链表通法

【代码】【算法】链表通法。

2023-12-27 22:58:01 461 1

原创 【设计模式】对于单例模式的理解

单例的定义:“一个类只允许创建唯一一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。

2023-12-26 22:42:14 896 1

原创 【Java】对于JDK1.8 HashMap中扩容机制的理解(深入源码)

NEW_MASK会比原来的在高位(我们暂时称为这个位为high)多一个1,对于hash1来说,hash1在high上的1就被保留了,而MASK却不能留下这个1。2次按位与计算的结果不同,所以扩容以后该key需要移动到新的插槽,并且新的插槽位置是可以提前知道的。对于hash2来说,high上本来就是0,所以2次按位与运算的结果都一样,所以扩容以后该key无需移动到新的插槽。继续观察可以发现旧容量oldCap在high上刚好为1,然后你就可以理解下面代码中对于某个old插槽来说怎么迁移key了:(e

2023-12-26 20:54:48 1296 1

原创 【Java】一个关于WeakHashMap与常量池的问题

在学习ThreadLocal源码中了解到WeakHashMap这样一个类,它的底层实现是依靠弱引用(gc的时候会被回收)自己实践的时候发现了这样一个问题:2段代码唯一不同点在于a和b是怎么定义的。思考一下这4种情况下最终打印情况是什么。

2023-12-20 16:33:54 372 1

原创 【JUC】Reentrantlock源码分析

AQS是并发容器J.U.C(java.util.concurrent)下locks包内的一个类。它实现了一个FIFO的队列。底层实现的数据结构是一个双向链表。AQS核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。AQS使用一个int成员变量来表示同步状态,通过内置的FIFO。

2023-12-19 21:45:52 876 1

原创 【Java】基于动态代理实现接口耗时计算

耗时计算写在主逻辑代码存在很强的耦合性,这里提供了一种解耦合的方式去实现,在Spring框架aop也用了这一技术。利用Proxy.newProxyInstance动态创建实现类。对于动态代理模式,Java的反射机制提供了支持。

2023-12-19 09:10:37 499 1

原创 【Java】ThreadLocal源码分析

TheadLocal底层通过Thead.currentThread获取每个thread对象的ThreadLocalMap,Set(T)方法会将Threadlocal对象本身作为key值,T作为value存入map当中。ThreadLocalMap的插槽继承了WeakReference,并调用了父类的构造方法让key变成弱引用。ThreadLocalMap底层实现为Entry数组+线性探测法,负载因子为2/3。

2023-12-18 22:56:49 496 1

原创 【MYSQL】InnoDB的锁机制详解

B事务:想获得users这张表的共享锁S,此时需要先获得users的IS(前面说过意向锁之间不会排斥所以可以直接获得),然后继续想要获得这张表的S锁,但是事务A已经获得了该表的IX,查表知S和IX互斥,B事务:想获得users这张表的共享锁,此时需要先获得users的IS(前面说过意向锁之间不会排斥所以可以直接获得),然后继续想要获得这张表的S锁,此时事务A已经获得了该表的IS,查表知S和IS相容,其中idx为普通索引,按照上表,(10,20)之间会加上间隙锁,且40会被锁住,也即[20,40]锁住。

2023-12-05 14:15:27 1417

原创 【MYSQL】InnoDB的MVCC详解

readView = {m_ids=[40,60],min_trx_id=40,max_trx_id=61,creator_trx_id=40},这个时候去读数据发现第一条数据trx_id = 60,不等于creator_trx_id,说明并不是自己修改的,并且trx_id 大于min_trx_id,小于max_trx_id,说明此数据在事务A处理的范围内,并且在活跃事务表当中有trx_id = 60,说明此时该事务并未提交,根据RC隔离级别的要求,此时第一条数据不可见。

2023-12-03 10:54:01 1257 1

原创 【算法】一道关于位运算的O(1)解法(位运算、集合论、均值不等式)

a = b;b = tmp;//取不变的高位//保留低位a &= mask;b &= mask;//不同的部分//相同的部分//加入相同的部分ax |= same;bx |= same;//有不同的部分需要分配//高位给a//从diff中移除//剩下的给bbx |= diff;ax %= mod;bx %= mod;

2023-11-24 22:56:56 460 1

原创 【Java】Java的Integer.bitCount()源码分析

已经将高4位全部设置为0,而存储16位只需要5个位(10000),在此之前最多占用了4个位,就算不抹除高8位(& 0x00ff00ff)也不影响。偶数位1的数量:(i >>> 1) & 0x55555555,偶数位右移到奇数位,原偶数位被按位与抹掉。与上面类似,而存储32位只需要6个位(100000),距离上次清理来说,还有2个位可用(一个8个)。& 0x55555555的作用:保留奇数位,去除偶数位。目的:对于每2位,存储1的数量。目的:对于每4位,存储1的数量。目的:对于每8位,存储1的数量。

2023-11-24 22:55:11 422 1

原创 【Python】爬取高校数据(名字,院校特色,所在地,性质)。可用于判断高校是否为双一流,本科/专科等分析

【代码】Python爬取高校数据(名字,院校特色,所在地,性质),可用于判断高校是否为双一流,本科/专科等分析。

2023-05-23 18:23:47 1299

原创 【算法】二叉树-L2-004 这是二叉搜索树吗?

pta题解

2023-01-10 18:52:10 454

原创 【Linux】VMware创建Linux后启动虚拟机物理机出现蓝屏的问题[已解决 win10]

蓝屏问题

2022-12-08 20:52:03 6821

原创 【算法】二分答案 CodeForce 51C Three Base Stations

二分答案

2022-10-16 13:31:40 226

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除