- 博客(16)
- 问答 (1)
- 收藏
- 关注
原创 MySQL 事务与锁
本文系统讲解了数据库事务的ACID特性及其实现原理。首先详细解析了原子性、持久性、隔离性和一致性的概念及实现机制,重点介绍了WAL技术、Redo/Undo日志在保证事务特性中的作用。其次分析了事务并发控制的发展历程,从排队处理到MVCC多版本控制的演进过程。然后深入探讨了四种事务隔离级别及其解决的问题,比较了不同级别的优缺点。最后全面介绍了MySQL的锁机制,包括行锁、表锁、乐观锁、悲观锁的实现原理和应用场景,并提供了死锁分析和解决方案。全文通过技术原理与实例相结合的方式,完整呈现了数据库事务处理的核心机制
2025-12-23 19:46:01
873
原创 Volatile 底层原理探究与单例线程不安全根因
volatile关键字通过内存屏障机制实现线程安全,主要作用包括:保证64位变量(long/double)的原子性写入、确保内存可见性和禁止指令重排序。其实现原理是在写操作前后插入StoreStore和StoreLoad屏障,在读操作后插入LoadLoad+LoadStore屏障。volatile还能解决DCL单例模式中的构造方法溢出问题,防止对象未完全初始化就被引用。JSR-133内存模型增强后,volatile进一步保证了对64位变量读操作的原子性,严格遵守happen-before规则。
2025-12-22 23:05:52
795
原创 内存重排序
本文探讨了内存重排序对多线程程序的影响及解决方案。主要分为三类重排序:编译器重排序、CPU指令重排序和CPU内存重排序,其中内存重排序是导致内存可见性问题的主因。文章通过案例展示了即使指令顺序正确,由于StoreBuffer延迟写入仍可能出现意外结果。为解决此问题,介绍了内存屏障的概念,包括LoadLoad、StoreStore等四种基本类型。Java通过volatile、synchronized和Unsafe类提供的内存屏障函数来保证线程安全。重点阐述了happen-before规则,它定义了跨线程操作的
2025-12-22 19:08:40
955
原创 JVM 内存模型-内存可见性
摘要:CPU多级缓存架构(L1、L2、L3)通过MESI协议保证核心间缓存一致性,但StoreBuffer等优化机制导致计算单元与L1缓存间存在异步操作,引发内存可见性问题。从操作系统视角看,每个逻辑CPU的缓存与主内存非完全同步,这对应到JVM内存模型中表现为工作内存与主内存的差异。缓存一致性协议虽解决同步问题,但性能优化措施反而成为可见性问题的根源。(149字)
2025-12-19 14:42:23
259
原创 揭秘 MySQL 三大日志:Undo、Redo、Binlog
MySQL日志系统解析:UndoLog、RedoLog与Binlog MySQL通过三种核心日志机制确保数据安全与一致性:UndoLog用于事务回滚,记录数据修改前的状态,支持事务原子性和MVCC;RedoLog实现事务持久性,记录物理页修改,采用循环写入机制确保故障恢复;Binlog是服务层二进制日志,提供主从复制和数据恢复功能,支持STATEMENT/ROW/MIXED三种记录模式。三种日志在功能、存储方式和应用场景上各有侧重:UndoLog和RedoLog属于InnoDB引擎层,分别处理事务回滚和崩溃
2025-12-19 09:46:56
1012
1
原创 Java 静态代理
Java静态代理通过组合方式实现代理模式,在Client和RealService之间插入ProxyService类。代理类与被代理类实现相同接口,持有被代理对象引用,可在调用前后添加增强逻辑(如日志、校验等)。虽然简单直观,但静态代理存在代码入侵、只能代理特定类等局限性,因此框架中通常采用动态代理实现更灵活的代理功能。
2025-12-18 13:58:32
275
原创 MySQL MHA 高可用集群搭建
# 1.**环境软件版本**| **环境** | **软件 版本** | || -------------------- | ------------- | ---- || 虚拟机&VMware Fusion | 11 Pro | || 服务器&CentOS | 7.9 | || 数据库&Mysql | 5.7.28 | |# ...
2021-04-23 15:19:29
143
原创 用 iterator遍历HashMap学习与记录
两种方式: 1. Iterator it = param.keySet().iterator(); LinkedHashMap paramwhile(it.hasNext()){ String key =(String)it.next();//获取key值 addList.add(param.get(key));//value值 key
2015-01-23 09:35:06
541
原创 select * from (select * from tablename) 不可以 问题解决
sql基本语法 select column from table 所以 应写成 select * from (select * from tablename) as newtablename
2015-01-20 15:49:38
2037
原创 java xStream解析xml文件
xStream解析xml文件xml文件如下: 280101 XXXXXXXXXXXXXXX 1.1.1.1引擎ip--> XXXXXXXXX
2014-08-22 15:07:30
573
原创 Ant的使用
首先下载apache-ant-1.9.4-bin.tar.gz 和aspectj-DEVELOPMENT-20130612103400.jar
2014-05-12 11:27:55
635
原创 Hibernate双向N-N关联
package com.chaohua.Bean;public class Address { private Integer addressId; public Integer getAddressId() {return addressId;}public void setAddressId(Integer addressId) {this.ad
2014-05-06 17:02:06
465
原创 单链表的建立
package com.huachao;public class LinkedListNode {private int data;private LinkedListNode link;public LinkedListNode getLink() {return link;}public void setLink(LinkedListNode link) {
2014-04-30 16:13:34
490
原创 java链接数据库步骤
连接数据库的步骤:1. 打开连接2. 创建语句集:普通的语句集,预定义语句集Statement stat = conn.createStatement();PreparedStatement priceUpdateStmt = conn.prepareStatement("带问号的SQL语句");priceUpdateStmt.setString(1, in.n
2014-04-30 16:01:46
560
原创 oracle的sqldeveloper在ubuntu上以图标显示且双击能运行
终端进入/usr/share/applications, 新建文件 gedit SqlDeveloper.desktop 添加如下内容:[Desktop Entry]Name=SQLDeveloperComment=SQLDeveloper Exec=/home/chaohua/app/chaohua/product/11.2.0/dbhome_1/sqlde
2014-04-30 15:42:58
794
空空如也
如何获取http体 不带参数载体的
2015-11-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅