- 博客(22)
- 收藏
- 关注
原创 数据库的脏读、不可重复读、幻读分别是什么?
脏读:一个事务读取到了另一个事务未提交的数据,未提交的数据最终回滚,导致第一个事务读取到的数据是不一致的不可重复读:在同一个事务中,读取同一个数据两次,但由于其他事务的提交,导致读取到的数据不一致。比如事务A读取了数据,事务B对数据进行了修改并提交,导致事务A再次读取到的数据不一致幻读:在同一个事务中,执行相同的查询结果,查询的结果集由于其他事务的插入而发生变化。例如:事务A查询某条件的记录,事务B插入了新记录并提交,导致事务A再次查询获得不一样的记录数量。
2025-10-18 17:49:19
167
原创 HashMap底层原理,HashMap和HashTable区别
1.线程是否安全:HashMap是线程不安全的,HashTable是线程安全的,其中的方法是Synchronized,在多线程并发的情况下,可以直接使用HashTable,但是使用HashMap时必须自己增加同步处理。a.整个链表没有与当前key相同,则加入到链表最后,判断当前链表个数是否超过8,再判断table大小是否>=64,4.数据初始化和扩容机制:HashMap默认16,要求HashMap的底层数组容量要为2的整数次幂,Hashtable默认11,不要求一定为2的整数次幂。i.没有,则直接添加。
2025-10-18 17:48:24
172
原创 docker拉取Elasticsearch和Kibana
(如果本地不存在,命名为my-es,配置如下:9200(HTTP API)和9300(集群通信)。(设置为单节点模式)。后台运行(-d参数)。验证 ES 是否正常:访问,应返回 JSON 格式的版本信息。
2025-06-18 16:01:55
458
原创 Redis 五种数据结构
Redis 提供了五种主要数据结构:String(字符串)、List(列表)、Hash(哈希)、Set(集合)和 Sorted Set(有序集合)。在 Spring Boot 中,可以通过或来操作这些数据结构。
2025-06-18 15:38:02
483
原创 MyBatis-Plus 常用条件构造方法
MyBatis-Plus 提供了强大的条件构造器 Wrapper,用于构建复杂的查询条件。这是一些使用service查询的例子。HAVING (SQL语句)
2025-06-09 16:21:25
426
原创 Invalid bean definition with name ‘xxxMapper‘ defined in file
在SpringBoot v3.4.4的项目中整合Mybatis-plus后,启动项目时报了错Invalid bean definition with name 'xxxMapper' defined in file。
2025-05-20 22:05:01
2019
1
原创 Bean 生命周期、Spring作用域、Bean 扩展点与Spring事务详解
Spring AOP代理要求目标方法必须是public。:通常无状态(但注意注入的Service是否安全)MyISAM引擎不支持事务(需改用InnoDB)当需要每次使用新对象时(如购物车、计数器):毕业典礼(Spring提供的初始化):起名字(知道自己的Bean ID)数据库引擎不支持(如MyISAM):火化(Spring提供的销毁)(属性注入):相当于"喂奶"(正常提供服务(业务方法被调用)(实例化):相当于"怀孕"(:认识工厂(知道谁管理自己)方法,利用动态代理管理事务。同类内方法调用(未经过代理)
2025-04-05 20:49:57
1542
原创 常见的垃圾回收算法
GC类型触发条件频率停顿时间新生代GC(Minor GC)Eden区满高短老年代GC(Major GC)老年代满/空间担保失败中长老年代GC(Full GC)整个堆或元空间不足低很长。
2025-04-04 14:53:28
1633
原创 Java并发安全集合详解
CopyOnWriteArrayList:写时复制,适合读多写少ConcurrentHashMap:分段锁(JDK7)或CAS+synchronized(JDK8+)ConcurrentSkipListMap:跳表实现的有序MapConcurrentSkipListSet:基于跳表的SetBlockingQueue家族::数组实现的有界队列:链表实现的可选有界队列:带优先级的无界队列:不存储元素的特殊队列Vector通过在所有公共方法上添加关键字实现线程安全:2. 特点分析 锁粒度:对象级别
2025-04-04 14:07:45
884
原创 Java锁机制深度解析
理解这些锁机制和优化策略,有助于开发出更高性能的并发程序。JIT编译器通过逃逸分析,去除不可能存在共享资源竞争的锁。使用CAS操作将Mark Word指向线程栈中的锁记录。在大多数场景下已成为不错的选择,但特殊需求仍需要。:简单同步场景,JDK6后性能已大幅优化。线程在升级为重量级锁前先自旋尝试获取锁。:避免线程阻塞带来的内核态切换。:消除无竞争情况下的同步开销。将相邻的多个同步块合并为一个。未获取锁的线程进入阻塞状态。:开销最大但能保证强同步。:减少线程阻塞切换的开销。减少频繁加锁解锁的开销。
2025-04-04 13:50:06
736
原创 MySQL查询与更新语句内部执行过程详解
遵循WAL原则(Write-Ahead Logging)应用change buffer优化(非唯一二级索引)对扫描到的行加临键锁(Next-Key Lock)使用缓冲池(buffer pool)减少磁盘IO。Commit阶段:binlog刷盘后标记事务完成。记录物理修改(redo log buffer)超时控制(wait_timeout参数)生成执行计划(EXPLAIN可查看)生成解析树(parse tree)标记为脏页(dirty page)创建ReadView(MVCC)以SQL语句为key缓存结果。
2025-04-03 19:47:33
747
原创 数据库锁机制全面解析
通过理解这些锁机制和死锁原理,可以更好地设计和优化数据库应用,提高并发性能同时避免死锁问题。没有意向锁时,要判断表是否可以加表锁,需要扫描所有行检查是否有行锁,效率极低。当其他事务尝试加表锁时,只需检查表上的意向锁即可判断冲突。事务要加行共享锁前,先加意向共享锁(IS)到表上。事务要加行排他锁前,先加意向排他锁(IX)到表上。:快速判断表上是否有行锁,避免全表扫描检查行锁。阻止其他事务获取排他锁,但允许获取共享锁。多个事务可以同时获取同一资源的共享锁。独占锁,获取后其他事务不能获取任何锁。
2025-04-03 19:39:16
836
原创 Mysql的三范式?反范式?Mysql中的笛卡尔积(为什么要小表驱动大表)
定义故意违反范式规则,通过增加冗余数据来提高查询性能适用场景读密集的应用报表分析系统需要极高查询性能的场景定义:两个表连接时,没有指定连接条件或连接条件无效,导致结果集是两表行数的乘积示例-- 显式笛卡尔积(无ON条件)-- 隐式笛卡尔积(无效连接条件)
2025-04-03 09:35:09
771
原创 MySQL的DDL和DML
定义和管理数据库对象(如表、视图、索引等)的结构用于创建、修改、删除数据库对象自动提交,不能回滚主要操作对象是数据库和表的结构。
2025-04-03 09:06:46
565
原创 JDBC和Mybatis
JDBC(Java Database Connectivity)是:Java平台的一部分一组用于数据库访问的接口和类基于X/Open SQL CLI(调用级接口)标准数据库厂商提供具体实现(驱动)半ORM框架:不像Hibernate完全屏蔽SQL,MyBatis让开发者可以灵活控制SQLSQL与代码分离:SQL写在XML或注解中,与Java代码解耦轻量级框架:核心jar包只有几百KB,学习曲线平缓MyBatis作为半自动化ORM框架,在SQL灵活性和开发效率之间取得了良好平衡。它:让开发者能。
2025-04-03 08:37:42
898
原创 浏览器输入一个网址后,看到返回结构,都经历了哪些流程
1. 输入URL → 2. DNS查询 → 3. TCP连接 → 4. TLS握手(HTTPS) → 5. HTTP请求 →6. 服务器处理 → 7. HTTP响应 → 8. 浏览器渲染 → 9. 加载资源 → 10. 执行JS。
2025-04-02 20:16:55
974
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅