自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM 中的重要参数详解

JVM 参数是控制 Java 虚拟机运行行为、内存分配、垃圾回收策略、性能调优的核心入口。根据功能和使用场景,可将其分为五大类。

2026-02-27 08:19:40 468

原创 理解RocketMQ的消息模型

同一条消息会被同一个 Consumer Group 中的所有消费者实例都消费一次,而非默认的集群消费(Clustering)中消息只会被 Consumer Group 中的一个实例消费。生产者发送消息后,不希望消费者立即消费,而是等待指定的延迟时间后,才被消费者拉取和消费,RocketMQ 不支持任意时间精度的延迟,在4.x版本仅支持「固定等级的延迟」,在5.x版本已经支持“自定义时间的延迟消息”,不再仅限固定等级level。

2026-01-15 17:22:10 775 1

原创 RocketMQ入门——快速搭建

RocketMQ是由阿里巴巴开源的一款分布式消息中间件,2016 年捐赠给 Apache 基金会,成为 Apache 顶级项目。它基于 Java 开发,专为高并发、高可靠的分布式系统设计,在阿里内部经过了双 11 等海量流量场景的考验。

2026-01-14 17:29:48 943

原创 Redis缓存问题——一致性问题、事务、持久化

优先选择「先更新数据库,再删除缓存」(Cache Aside Pattern),满足 90% 以上的业务场景。缓存一致性无法做到 “强一致性”,大多数场景下追求 “最终一致性” 即可。避免过度设计,优先通过 “缓存短暂过期时间” 解决少量并发不一致问题,再逐步进阶。Redis 事务是一组命令的集合,Redis 会将事务中的所有命令按顺序一次性执行,在执行过程中不会被其他客户端的命令插入或打断,即事务具有 “一次性、顺序性、隔离性。

2026-01-10 17:34:31 1171

原创 Redis缓存中三大问题——穿透、击穿、雪崩

客户端请求一个缓存和数据库中都不存在的 key,由于缓存中没有数据,请求会直接穿透到数据库;而数据库中也没有对应数据,无法将结果写入缓存。最终导致所有此类请求都会直接访问数据库,造成数据库的无效负载。一个热点 key(如秒杀商品、热门新闻、首页缓存)在缓存中突然失效(过期或被淘汰),此时大量的请求同时访问这个 key,由于缓存未命中,这些请求会瞬间全部穿透到数据库,导致数据库在短时间内承受巨大的压力,甚至被压垮。大量的 key 在同一时刻同时失效,或者整个缓存服务突然宕机。

2026-01-10 17:01:00 1118

原创 Redis高级数据结构

*** 订单变更频道消息监听器*/@Component@Override// 转换消息内容// 业务处理:如更新订单状态、推送通知等System.out.println("收到频道 [" + channel + "] 的消息:" + messageContent);

2026-01-09 17:36:28 1289

原创 Redis基础数据结构

(字段少用压缩列表,字段多用哈希表),适合存储对象的多个属性,可单独操作字段(无需获取整个对象),Hash 只能对 key 设置过期时间,不能对单个 field 设置 TTL。Redis最基础的数据结构,Value可存储字符串(ASCII/UTF-8)、整数/浮点数(支持原子增减)、二进制数据(如图片、序列化对象),单个Value最大容量512MB。支持从头部(left)和尾部(right)高效添加/删除元素(时间复杂度O(1)),按索引访问元素效率较低(O(n))。

2026-01-08 21:06:00 970

原创 入门redis——让你的查询快到起飞

Redis(Remote Dictionary Server,远程字典服务器)是一款,同时支持数据持久化到磁盘,兼具缓存和数据库的双重特性。适用场景:缓存、分布式锁、限流、消息队列、排行榜、会话存储、实时计数等。

2026-01-07 12:16:17 1041

原创 SQL语句是如何在MySQL中执行的

核心逻辑:所有 SQL 语句的执行都遵循 “连接→解析→优化→执行” 的核心流程,Server 层负责逻辑处理,存储引擎层负责数据存取,分层架构保证了功能解耦和扩展性;查询 vs 更新:查询语句核心是 “读取数据”,流程更简洁;更新语句需额外处理锁、事务日志(redo/undo log)、binlog,保证数据一致性和可恢复性;关键组件连接器:连接管理的基础;分析器:保证 SQL “合法”;优化器:保证 SQL “高效”;执行器:保证 SQL “正确执行” 并与存储引擎交互;

2025-12-29 17:40:05 656

原创 InnoDB对于MVCC的实现

隐藏字段:标记数据版本和版本链指针;undo-log:存储历史版本,形成版本链;ReadView:根据隔离级别生成快照,通过可见性算法判断数据版本是否可见;隔离级别差异:RC 每次 SELECT 生成 ReadView(不可重复读),RR 仅第一次生成(可重复读);防幻读:RR 下 MVCC 保证读一致性,Next-key Lock 阻止写操作修改范围数据,两者结合彻底解决幻读。

2025-12-28 18:37:27 682

原创 MySQL三大重要日志详解

Redo Log:InnoDB 物理日志,通过控制刷盘时机,保障事务持久性,是崩溃恢复的核心;Binlog:服务器层逻辑日志,支持三种记录格式,主从复制 / 数据恢复的核心,与 redo log 配合通过「两阶段提交」保证一致性;Undo Log:InnoDB 逻辑日志,支撑事务回滚和 MVCC,是读不加锁的关键,生命周期随事务版本访问情况动态回收;

2025-12-26 11:52:48 911

原创 MySQL索引详解

哈希算法(又称散列算法)是一种将任意长度的输入(键 / 数据)映射为固定长度输出的函数,输出结果称为「哈希值(Hash Value)」或「散列值」。输入:可以是字符串、数字、文件等任意数据(哈希算法中称为「键(Key)」);输出:固定长度的二进制 / 十进制值(如 MD5 输出 128 位,MySQL 中 Hash 索引的哈希值通常为整型);核心目标:通过哈希值快速定位数据,将「无序的键」转化为「可直接寻址的索引」。直观示例# 简单哈希函数:取字符串ASCII码之和模10# 输入输出示例。

2025-12-25 11:42:09 1003

原创 MySQL高性能优化合集

明确业务核心实体:梳理核心业务对象(如用户、订单、商品)及实体间关系(一对一、一对多、多对多),避免冗余实体;定义数据生命周期:明确数据的留存策略(如订单数据保留 3 年、日志数据保留 6 个月),为后续分区 / 归档做准备;确认性能指标:明确 QPS、读写比例、数据量预估(如单表峰值数据量、年增长数据量),提前规划分库分表 / 索引策略。QPS = 系统每秒能够处理的请求(Query / Request)数量。

2025-12-24 21:19:03 1746 1

原创 探秘数据库——MySQL基础(四)

作用于整个 MySQL 实例的锁,加锁后,整个实例只允许读,不允许任何写。直接锁住整张表,任何对该表的并发访问都要受限。意向锁是表级锁,用于声明“事务将要在表中某些行上加什么类型的锁”。允许多个事务可以读,但是禁止写。排他锁是独占锁的,且禁止其他任何的读写。元数据锁是用于保护表结构的一致性的锁。自增锁(AUTO-INC Lock)是 InnoDB 在生成列值时使用的一种“表级内部锁”,用于保证自增值分配的正确性和唯一性。自增锁的作用范围是“整张表的自增计数器”,而不是某一行数据。

2025-12-24 10:30:27 832

原创 探秘数据库——MySQL基础(三)

隔离级别中文名称脏读不可重复读幻读InnoDB 实现原理读未提交✅✅✅直接读取最新数据(无快照,无锁)读已提交❌✅✅每次 SELECT 生成新快照(MVCC),普通读为快照读可重复读❌❌❌(InnoDB 解决)事务启动时生成一次快照(MVCC)+ Next-Key 锁(防止幻读)串行化❌❌❌对所有读取的行加共享锁,事务串行。

2025-12-23 10:17:14 769

原创 探秘数据库——MySQL基础(二)

索引是存储引擎用于快速查找数据的一种数据结构,它基于表中的一个或多个字段构建,存储了字段值与数据行物理地址的映射关系。当执行查询时,数据库先通过索引找到数据的物理位置,再读取数据行,大幅减少磁盘 IO 操作。

2025-12-22 15:12:16 786

原创 探秘数据库——MySQL基础(一)

MySQL 是一款,由瑞典 MySQL AB 公司开发,后被 Sun 公司收购,最终随着 Sun 被 Oracle 公司收购而成为 Oracle 旗下的产品。它是目前全球最流行的数据库之一,广泛应用于 Web 开发、数据分析、企业级应用等场景,尤其在 LAMP(Linux + Apache + MySQL + PHP/Python/Perl)、LNMP 等开源 Web 技术栈中占据核心地位。

2025-12-19 17:05:31 1012

原创 探秘数据库——基础认识

表中的每一列都必须是原子数据,不可再分。即一个字段只能存储一个值,不能存储集合、列表等复合数据。在满足1NF的基础上,非主键字段必须完全依赖于整个主键,而非依赖于主键的某一部分。在满足2NF的基础上,非主键字段不能传递依赖于主键,即非主键字段必须直接依赖于主键,而非通过其他非主键字段间接依赖。反例(满足 2NF,不满足 3NF)学号(主键)姓名学院编号学院名称202501张三D001计算机学院202502李四D002电子工程学院202503王五D001计算机学院在满足3NF。

2025-12-19 09:08:34 1134

原创 深入理解类加载器

类加载器(ClassLoader)是 Java 虚拟机(JVM)的核心组件之一,其核心职责是实现类加载过程中的 “加载” 阶段:根据类的全限定名(如),从磁盘、网络、jar 包等数据源中查找并读取对应的.class字节码文件,将其转换为 JVM 内存中的对象(该对象是类在 JVM 中的唯一标识,后续对类的所有操作都通过这个对象进行)。类加载器仅负责加载阶段,而链接(验证、准备、解析)和初始化阶段由 JVM 自身完成;

2025-12-16 15:35:42 783

原创 理解类加载过程

而非零值。

2025-12-15 21:55:36 1417

原创 深入理解类文件结构

字节码是一种介于源代码和机器码之间的中间代码,它不是特定硬件架构的机器指令,而是一种与平台无关的、抽象的指令集,主要用于实现程序的跨平台运行。

2025-12-15 14:39:06 1102

原创 理解HotSpot虚拟机对象

(乐观锁就是,每次不加锁而是假设么有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止)采用 CAS 原子操作保证分配内存的原子性,失败则重试直到成功。,采用 “动态结构” 设计 —— 根据对象的运行时状态(如无锁、偏向锁、轻量级锁、重量级锁、GC 标记等)复用内存空间,存储不同的信息。是指对象在 Java 堆中占用的内存空间被划分的具体结构,直接影响对象的访问、GC、锁机制等核心功能。这是连接栈(存储引用)和堆(存储对象)的核心环节,其实现方式直接影响对象访问的效率。

2025-12-14 13:30:54 922

原创 JVM中的垃圾回收详解

特点说明准确性高没有引用计数的循环引用问题STW 或并发标记根据不同 GC 具体实现与现代 GC(CMS、G1、ZGC)匹配这些 GC 算法都基于 Reachability依赖 GC Root 和三色标记法不同代不同 Root可达性分析通过从 GC Roots 开始搜索引用链来判断对象是否可达,所有不可达对象会被视为垃圾。算法依赖三色标记法确保并发正确性,并通过写屏障避免“漏标”和“误标”问题。该算法不会出现引用计数循环引用的问题,是现代 JVM(G1、ZGC、Shenandoah 等)垃圾回收的基础。

2025-12-13 21:21:01 1325

原创 jvm中的直接内存

在 Java 中,直接内存不是堆内存,它属于堆外内存(Off-Heap),由操作系统管理。这就是直接内存溢出。

2025-12-09 16:25:07 933

原创 破解StringTable

延迟加载(lazy load)指的是:字符串字面量不会在类加载(Class Loading)时立即放入 StringTable,而是在该字符串首次被使用(解析到 ldc 指令时)才放入 StringTable。阶段是否把字符串放入 StringTable类加载(ClassLoader.loadClass)❌ 不会加载字符串字面量类解析、验证、准备、初始化❌ 仍然不会运行到 ldc 指令(ldc "abc")✔️ 才把"abc"放入 StringTable。

2025-12-08 17:23:52 1034

原创 JVM内存结构之共享线程区

它基于“分代收集理论”,将堆划分为年轻代和老年代,针对不同区域对象的特点采用不同的回收策略(复制 vs 整理/清除)。它使用“可达性分析算法”来精确地判断对象生死,从一组确定的GC Roots出发,遍历整个对象图。其核心流程是“标记-清除/复制/整理”,不同的垃圾回收器(如Serial, Parallel, CMS, G1, ZGC)是这些基础算法在不同权衡下的工程实现。为了实现高效并发,它引入了卡表、安全点等一系列精妙的机制来减少STW停顿时间。

2025-11-26 17:56:51 1084

原创 JVM内存结构之私有线程区

当线程处于执行 native 方法或线程刚创建未开始执行 Java 代码时,PC 的值可能是未定义的。

2025-11-22 16:25:20 761

原创 Spring学习:Bean的生命周期回调方法

配置调用初始化方法,由程序员来进行配置调用销毁的回调方法。

2025-11-20 10:22:17 418

原创 JVM初识

组件全称主要目的包含关系面向用户JVM执行Java 字节码,实现跨平台。JRE 的核心部分开发者 & 用户(间接使用)JRE运行Java 程序。= JVM + 核心类库普通用户JDK开发Java 程序。= JRE + 开发工具Java 开发者。

2025-11-19 21:04:26 1026

原创 Maven速通

Maven是一款为Java项目管理构建、依赖管理的工具(软件)、使用Mavenue可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。

2025-11-17 15:32:52 913

原创 jeecgboot框架前端修改总结

围绕 Jeecgboot 框架前端开发中的核心需求,详细拆解了 “按钮修改” 和 “弹窗定制” 两类高频场景的实现逻辑,核心思路可归纳为 “接口封装 - 组件开发 - 列表集成 - 权限配置” 四步流程。在按钮修改场景中,针对 “点击即完成业务” 和 “点击触发弹窗后完成业务” 两种情况,均遵循 “先在接口文件定义 API 路径与请求函数,再在列表组件导入接口、实现业务逻辑、配置按钮与权限” 的统一范式,确保操作流程标准化、可复用。

2025-11-11 11:16:30 868 1

原创 jeecgboot框架主从表

通过上述的设置之后,主从表便已经绑定了,可以根据你自己项目的要求,主表可以绑定多个子表。绑定完成之后,再次进入主表页面,可以发现多了一栏绑定的子表,就证明绑定成功。点击设置好的主表,点击更多,点击功能测试,便可以预览效果。还需要注意,在主表中可以设置主题模板,我将根据不同的主题模板进行展示。需要注意的是,子表需要添加一个额外的外键与主表进行绑定,在我的举例中,外键为指定表id对应主表的id字段。创建子表时,表类型选择附表,关系根据表对应的关系选择即可,序号必填,按照顺填即可。首先,表的类型一定选择主表。

2025-10-30 15:06:18 511

原创 jeecgboot框架中自定义按钮

可定义表单初始值、下拉选项列表、接口返回 / 提交的数据结构类型(如接口返回的字段类型、表单字段的类型约束)。起到 “数据标准化” 和 “类型校验” 的作用,提升代码的可维护性和健壮性。在BasicModal组件中,使用 Vue 的插槽(#footer<a-button @click="handleCancel">取消</a-button><a-button type="primary" @click="handleSave('暂存')">暂存</a-button>

2025-10-23 11:47:55 737

原创 Spring学习:Spring声明式事务

数据库连接池是一种管理数据库连接的技术,它通过缓存和重复利用连接,减少了应用程序与数据库交互时的连接创建和关闭开销,提高了效率。连接池还能控制连接数量,有效管理系统资源。

2025-08-20 15:16:32 1062 1

原创 Spring学习:SpringAOP面向切面编程

SpringAOP的底层原理就是通过动态代理来实现的,动态代理又是从静态代理演变而来的,动态代理是为了解决静态代理中代理类需要自己声明和一个代理类只能代理一个类型这两个弊端。动态代理可通过JDK动态代理和CGLIB动态代理两种方式实现,两种方式在实现和效率上有一定的区别。

2025-08-18 15:10:31 838 1

空空如也

空空如也

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

TA关注的人

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