- 博客(31)
- 收藏
- 关注
原创 MYSQL 存储引擎 和 日志
并且,undo-log 本身是会被删除清理的,例如 INSERT 操作,在事务提交之后就可以清除掉了;检查点触发 ,因为InnoDB 定期会执行检查点操作,将内存中的脏数据(已修改但尚未写入磁盘的数据)刷新到磁盘,并且会将相应的重做日志一同刷新,以确保数据的一致性。,当执行事务过程中出现错误或者需要执行回滚操作的话,MySQL 可以利用 undo log 将数据恢复到事务开始之前的状态。是 InnoDB 的物理日志,用于保证事务的持久性(Durability)。MySQL InnoDB 引擎使用。
2025-04-06 00:00:22
1064
2
原创 虚拟线程-解释
总的来说:平台线程也就是没有虚拟线程之前,我们一直使用的线程。当虚拟线程被阻塞或等待时,平台线程可以切换到执行另一个虚拟线程。从虚拟线程的优缺点可以知道它和平台线程的区别在哪?一个平台线程可以在不同的时间执行不同的虚拟线程(,从而高效利用资源。
2025-04-05 16:57:51
287
原创 ThreadLocal
启发式清理是一种轻量级的清理机制,旨在快速处理部分无效条目,而不是对整个哈希表进行全面清理。就是当前 key 在散列表中对应的数组下标位置,计算下标 i 最关键的就是利用。有自己的独立实现,可以简单地将它的。扩容后数组长度变为原来的 2 倍。,也就是说每个线程有一个自己的。然后遍历老的散列表,重新计算。里放值的时候,都会往自己的。为代码中放入的值(实际上。这些无效条目需要被清理,操作,证明其实还是有。的槽位,遍历完成之后,冲突则往后寻找最近的。数据都已经放入到新的。
2025-04-01 21:50:40
448
原创 设计模型:观察者模型,代理模型,责任链模型,装饰器模型
设计模式是一种解决方案,用于解决在软件设计中普遍存在的问题,我们学设计模式,是为了学习如何合理的组织我们的代码,如何解耦,如何真正的达到对修改封闭对扩展开放的效果,而不是去背诵那些类的继承模式.
2025-03-14 14:07:13
3
原创 复习 part one
大数组 Segment 可以理解为 MySQL 中的数据库,而每个数据库(Segment)中又有很多张表 HashEntry,每个 HashEntry 中又有多条数据,这些数据是用链表连接的。ConcurrentHashMap是线程安全的数组,是HashTable的替代品,同为线程安全,其性能要比HashTable更好。根据实际对象的类型来确定要调用的方法的机制。
2024-12-10 21:27:05
456
原创 一些好文推荐
了解Maven,git开发流程、版本控制了解Maven,git开发流程、版本控制步骤1 - 你从工作目录修改文件。步骤2 - 你将这些文件添加到暂存区。步骤3 - 你执行提交操作,将文件从暂存区移动。在推送操作之后,它会将更改永久存储到Git仓库中。JAVA的常用锁机制、线程池、JUC常见工具类。
2024-12-09 23:05:30
354
原创 第 6 章 Java 并发包中锁原理剖析Part two
6.3 读写锁 ReentrantReadWriteLock 的原理解决线程安全问题使用就可以,但是是独占锁,某时只有一个线程可以获取该锁,而实际中会有的场景,显然满足不了这个需求,所以应运而生。采用读写分离的策略,允许多个线程可以同时获取读锁。读写锁的内部维护了一个和一个WriteLock,它们依赖Sync实现具体功能。而Sync继承自AQS,并且也提供了公平和非公平的实现。[这里说的是非公平锁],我们知道AQS中只维护了一个state状态,而。
2024-12-08 22:30:05
1621
原创 第 6 章 Java 并发包中锁原理剖析Part one
如果锁当前没有被其他线程占用并且当前线程之前没有获取过该锁,则当前线程会获取到该锁,然后设置当前锁的拥有者为当前线程,并设置 AQS。方法类似,它的不同在于,它对中断进行响应,就是当前线程在调用该方法时,如果其他线程调用了当前线程的 interrupt。尝试释放锁,如果当前线程持有该锁,则调用该方法会让该线程对该线程持有的 AQS 状态值减 1。,同时只能有一个线程可以获取该锁,其他获取该锁的线程会被阻塞而被放入该锁的。尝试获取锁,如果当前该锁没有被其他线程持有,则当前线程获取该锁并返回。
2024-12-05 23:27:58
622
原创 Spring Bean 生命周期
销毁并不是说要立马把 Bean 给销毁掉,而是把 Bean 的销毁方法先记录下来,将来需要销毁 Bean 或者销毁容器的时候,就调用这些方法去释放 Bean 所持有的资源。属性,执行指定的 Bean 销毁方法。或者,也可以直接通过。注解标记 Bean 销毁之前执行的方法。:为 Bean 设置相关属性和依赖,例如。如果 Bean 在配置文件中的定义包含。方法或构造函数注入依赖和值、来创建 Bean 的实例。如果 Bean 实现了。:Bean 容器首先会。
2024-12-03 19:22:47
527
原创 JAVA反射机制
反射机制是 Java 语言中的一种特性,允许程序在运行时动态获取类的信息以及操作类的属性和方法。通过反射,开发者可以在不知道对象具体类型的情况下,访问其内部结构。
2024-11-29 13:05:19
525
原创 第 5 章 Java 并发包中并发 List 源码剖析
CopyOnWriteArrayList 是一个线程安全的 ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略,用来保证。首先获取独占锁以保证删除数据期间其他线程不能对 array 进行修改,然后获取数组中要被删除的元素,并把剩余的元素复制到新数组之后使用新数组替换原来的数组,最后在返回前释放锁。主线程在子线程执行完毕后使用获取的迭代器遍历数组元素,从输出结果我们知道,在子线程里面进行的操作一个都没有生效,这就是迭代器弱一致性的体现。
2024-11-27 22:37:56
1614
原创 第 4 章 Java 并发包中原子操作类原理剖析
时,在高并发下大量线程会同时去竞争更新同一个原子变量,但是由于同时只有一个线程的CAS 操作会成功,这就造成了大量线程竞争失败后,会通过无限循环不断进行自旋尝试 CAS 的操作,而这会白白浪费。提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说它的性能已经很好了,但是 JDK。用来克服在高并发下使用 AtomicLong 的缺点。是原子性递增或者递减类,其内部使用 Unsafe 来实现,的性能瓶颈是由于过多线程同时去竞争一个变量的。这里的原子操作类都使用 CAS。LongAdder 简单介绍。
2024-11-26 21:10:50
542
原创 第 3 章 Java 并发包中 ThreadLocalRandom 类原理剖析
实例里面都有一个原子性的种子变量用来记录当前的种子值, 当要生成新的随机数时需要根据当前种子计算新的种子并更新回原子变量。实例生成随机数时,当多个线程同时计算随机数来计算新的种子 时,多个线程会竞争同一个原子变量的更新操作,由于原子变量的更新是 CAS。通过让每一个线程复制一份变量,使得在每个线程对变 量进行操作时实际是操作自己本地内存里面的副本,从而避免了对共享变量进行同步。种子计算新的种子,并使用新种子更新老的种子,再根据新种子计算随机数,就不会存在。中的随机数生成也使用的是。
2024-11-25 13:51:07
1109
原创 第 2 章 并发编程的其他基础知识
内置锁是排它锁, 也就是当一个线程获取这个锁后,其他线程必须等待该线程释放锁后才能获取该锁。拿到内部锁的线程会在正常退出同步代码块或者抛出异常后或者在同步块内调用了该内置锁资源的。能和吞吐量要求的提高,出现了处理海量数据和请求的要求,这些都对高并发编程有着迫。存里面的变量复制到自己的工作空间或者叫作工作内存,线程读写变量时操作的是自己工。内存模型规定,将所有的变量都存放在主内存中,当线程使用变量时,会把主内。时,线程在写入变量时不会把值缓存在寄存器或者其他地方,而是会。
2024-11-19 23:17:10
847
原创 JAVA线程池
和其他的几个策略不同,它既不会抛弃任务,也不会抛出异常,而是将任务回退给调用者,使用调用者的线程来执行任务。提交到线程池并在执行过程中抛出异常时,如果这个异常没有在任务内被捕获,那么该异常会导致当前线程终止,并且。: 启动一个线程,等待任务,如果已达到核心线程数,这个方法返回 false,否则返回 true;如果不想丢弃任务的话,可以使用。在这种情况下,线程不会因为异常而终止,它会继续存在于线程池中,准备执行后续的任务。线程池会检测到这种线程终止,并创建一个新线程来替换它,从而保持配置的线程数不变。
2024-11-17 18:41:12
988
原创 Redis 内存管理
如果这一批过期的 key 比例超过一个比例,就会重复执行此删除流程,以更积极地清理过期 key。相应地,如果过期的 key 比例低于这个比例,就会中断这一次定期删除循环,避免做过多的工作而获得很少的内存回收。是:如果我们设置了过期时间的key 数量非常庞大的话,挨个遍历检查是非常耗时的,会严重影响性能。,此时这段内存就泄露了。如果删除操作的执行时间已经超过了阈值,就会中断这一次定期删除循环,以避免使用过多的 CPU 时间。参数即可),这样会在后台异步删除过期的 key,不会阻塞主线程的运行。
2024-11-16 15:19:07
1245
原创 乐观锁和悲观锁
是指在并发编程中,如果一个变量初次读取的时候是 A 值,它的值被改成了 B,然后又其他线程把 B 值改成了 A,而另一个早期线程在对比值时会误以为此值没有发生改变,但其实已经发生变化了,这就是 ABA 问题。时发现,操作员 B 提交的数据版本号为 1 ,数据库记录当前版本也为 2 ,不满足 “ 提交版本必须等于当前版本才能执行更新 “ 的乐观锁策略,因此,操作员 B 的提交被驳回。,其余均会失败,但失败的线程并不会被挂起,仅是被告知失败,并且允许再次尝试,当然也允许失败的线程放弃操作。
2024-11-15 15:01:38
817
原创 MySQL中 查询语句 和 更新语句 的 执行流程
话不多说,直接放出如下--->--->--->--->--->--->更新语句执行流程---->---->--->------>--->我们的 SQL 可以分为两种,一种是查询,一种是更新(增加,修改,删除)。
2024-11-13 16:47:21
1185
原创 进程-线程-协程
回到第一个例子,如果一个视频很大,我们想看个这个视频,要等视频播放器 加载、解码完整视频-->才能播放 ,这样效率很慢,我们可以想到可以一边加载解码一边播放,这样不会浪费时间空等。分配给进程的资源,绝大部分都是线程间共享的。比如内存空间的代码段,数据段,堆。“进程就是程序的实例(就像面向对象编程中的类,类是静态的,只有实例化后才运行,且同一个类可以有多个实例)”a 是个静态成员变量,它存储在进程内存空间的数据段,共享于多个线程,所以它属于线程间共享的资源。进程间是完全独立的,互不干扰。
2024-11-12 17:14:43
1110
原创 CSRF攻击和SSRF攻击
阅文集团后端笔试参考:https://tech.meituan.com/2018/10/11/fe-security-csrf.html
2024-11-09 23:36:58
884
原创 基于缓存实现分布式锁
分布式锁的几种简单实现方式分析_基于缓存实现分布式锁的实现方式有-优快云博客Redis分布式锁的实现方式、实现原理 - 知乎提示:以下是本篇文章正文内容,下面案例可供参考。
2024-11-07 22:42:46
602
原创 基于Mysql数据库实现分布式锁
分布式锁的几种简单实现方式分析_基于缓存实现分布式锁的实现方式有-优快云博客提示:以下是本篇文章正文内容,下面案例可供参考这个程序使用了一个简单的数据库锁机制来获取和释放锁。这个方法尝试获取名为lockName的锁。它首先获取当前时间作为开始时间startTime。然后进入一个循环,尝试使用 SQLINSERT语句插入一条新的记录到locks表中。如果插入成功,说明获取锁成功,方法返回true。如果插入失败(因为已经有人持有该锁),程序会检查是否已超过timeout时间。如果超时,则返回。
2024-11-06 23:39:01
1371
原创 计组 第一章习题
个人学习 仅供参考发展历程:1990年代,中国开始自主研发处理器,推出如“龙芯”等初代产品,2000年代出现更多的自主品牌,如华为的“麒麟”等,近年来,我国自主处理器技术不断被提升,特别是高性能计算机,移动设备和人工智能领域。应用情况:自主处理器广范应用于智能手机,、平板电脑等等,华为的鲲鹏处理器应用在数据计算和云计算中,自主处理器还应用在物联网与智能设备上。存储容量:计算机或者电子设备中存储数据的最大能力。通常以字节,千字节等为单位。
2024-11-05 17:59:34
269
原创 Redis和SQL事务的区别
文章目录前言 个人学习记录,仅供参考 一、redis事务是什么? 二、sql事务是什么? 三、二者区别 总结一、redis事务是什么?Redis 可以通过 MULTI,EXEC,DISCARD 和 WATCH 等命令来实现事务(transaction)功能。使用 MULTI 命令后可以输入多个命令。Redis 不会立即执行这些命令,而是将它们放到队列(FIFO)。 过程:开始事务(MULTI):命令入队(批量操作 Redis 的命令,先进先出(FIFO)的顺序执行)。
2024-11-05 17:46:18
280
原创 MyBatis报错
这通常是由于以下几个原因造成的: ###可能的原因1. **缺少 JDBC 驱动**:程序的类路径中没有包含 MySQL JDBC 驱动。2. **配置不正确**:如果你正在使用构建工具(如 Maven、Gradle),可能没有正确配置依赖。4. **IDE 配置问题**:如果使用 IDE(如 Eclipse、IntelliJ IDEA),可能需要手动将 JDBC 驱动添加到项目的构建路径。com.mysql.jdbc.Driver改成com.mysql.jc.jdbc.Driver。
2024-10-27 18:25:01
308
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人