事务特性事务特性是数据库系统中确保数据完整性和一致性的核心机制,通常用ACID四个特性来描述。
原子性(Atomicity):事务是不可分割的工作单位,事务中的操作要么全部成功,要么全部失败回滚。
一致性(Consistency):事务执行前后,数据库从一个一致状态转变为另一个一致状态。
隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务。。
持久性(Durability):事务一旦提交,其结果就是永久性的。
这些特性协同解决了数据库系统中的核心问题:其中,一致性是最终目标,而原子性、隔离性和持久性共同服务于这一目标。具体而言,原子性通过 undo log 解决“部分失败”问题;隔离性借助 MVCC 或锁机制应对“并发冲突”问题;持久性依赖 redo log 防止“数据丢失”问题,最终,一致性通过这三者的协同作用得以实现。
并发问题脏读
事务A读取了事务B未提交的修改数据,事务B随后回滚。这会造成事务A基于错误数据做出业务决策,示例如下:
1234567-- 事务ASELECT balance FROM accounts WHERE ...
本文介绍前缀树这一数据结构。首先从基本定义出发,阐述其核心特性,给出图解示例。随后通过基于数组的标准实现代码,讨论常见优化方法和变种结构。最后,与KMP字符串匹配算法进行对比分析,客观指出其优势与局限。
基本概念定义
前缀树(Trie树),又称字典树,是一种树形数据结构,专门用于高效存储和检索字符串。
核心特性
它的核心特性是利用字符串的公共前缀来减少查询时间,特别适合处理前缀匹配、自动补全、拼写检查等场景。
图解示例
以字符串集合 [“apple”, “app”, “banana”] 为例。
12345678910111213 ● / \ a b / \ p a / \ \p* p n| \ \l e* a \ \ e* n \ a*
代码实现接下来,我们通过 ...
本文旨在系统地阐述线程同步这一关键概念,并介绍一系列Java提供的用于实现线程同步的实用工具类,如 CountDownLatch、CyclicBarrier、Semaphore和 Condition等。
同时,文章中提供了相关习题,确保大家能够扎实掌握这些并发工具类的应用,巩固所学知识,提升解决实际问题的能力。
最后,本文还将带领大家深入研究上述工具类背后的源代码,剖析其实现机制和内部运作原理。
基本介绍 线程同步是指保证多个线程以有序的方式访问共享资源,避免数据竞争,即多个线程同时读、写一个内存位置,从而导致程序行为不可预测。
除了synchronized 关键字和内置的对象锁机制之外,Java 并发包(JUC, java.util.concurrent)还提供了多种高级的线程同步工具类。接下来,我们将详细介绍这些工具类。
Condition
Condition 是 Java 并发包 (java.util.concurrent.locks) 中的一个接口,它的使用方式和对象锁时一样的,通常与ReentrantLock一起使用,允许一个 ...
本文旨在介绍多线程编程中Thread、ThreadLocal以及ThreadLocalMap三者之间的关系,并进一步解析InheritableThreadLocal源码实现。在这之后,我们将分析错误的使用示例,并探讨TransmittableThreadLocal及其上下文传播机制。
ThreadLocal Thread 对象内部包含 ThreadLocalMap 类型的threadLocals字段,ThreadLocalMap类型是一个Map结构,键是ThreadLocal引用,值是线程局部变量。
其实,threadLocals字段实际是由 ThreadLocal 负责维护的,我们写入或读取线程局部变量都是通过操作 ThreadLocal 类实例。
1234567891011public class Thread implements Runnable { // threadLocals字段由ThreadLocal维护 ThreadLocal.ThreadLocalMap threadLocals = null; // thre ...
本文分享java代码下Comparator类reversed()排序的踩坑记录,而后探究相关源码,并做出总结。
假设有下面这样的用户类,此时你需要对它的列表进行排序,先按照id降序,再按照age降序。
12345678910111213141516171819202122232425/** * 用户类 */class User { private long id; private int age; public User(long id, int age) { this.id = id; this.age = age; } public long getId() { return id; } public int getAge() { return age; } @Override public String toString() { return "U ...
Apache JMeter 可用于模拟服务器、服务器组、网络或对象上的重负载,以测试其强度或分析不同负载类型下的整体性能。
本文章基于Apache JMeter 5.1.1版本,首先介绍其基本使用,而后通过内部FileToString函数和自定义函数分别演示如何在压测时使用自定义报文。
TCP压测1.创建线程组选中位于左侧TestPlan,依次点击右键,添加, 线程(用户),线程组即可创建成功。我设置的线程属性如下:
2. 增加TCP取样器选中Thread Group依次右键添加,取样器,TCP取样器。
TCP取样器有三种发送方式:
TCPClientImpl:文本数据,默认。
BinaryTCPClientImpl:传输16进制数据,指定EOL结束符。
LengthPrefixedBinaryTCPClientImpl:数据包的前2个字节为数据长度。
若要修改为传输16进制数据,应修改Jmeter下bin/jmeter.properties配置文件,并重启Jmeter。
3. 开始压测输入要发送的16进制数据,点击左侧绿色 ...





