自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RabbitMQ:Fanout、Direct、Topic 交换机、队列声明与消息转换器

RabbitMQ 中,1. 接收生产者(Publisher)发送的消息2. 根据交换机类型和绑定规则,将消息路由到一个或多个队列FanoutExchange 的特点总结不关心 routingKey将消息 广播 给所有与之绑定的队列每个队列都会收到一份完整的消息副本FanoutExchange = 广播模型(多队列复制)Fanout负责广播消息到所有绑定队列,适合事件通知和配置刷新场景;Direct实现精确路由,消息仅发送到匹配 RoutingKey 的队列,适合日志分级、业务指令分发;Topic。

2025-12-21 18:57:22 790

原创 RabbitMQ:AMQP 原理、Spring AMQP 实战与 Work Queue 模型

Spring AMQP 是 Spring 官方基于 AMQP 协议提供的一套消息中间件解决方案,用于简化 AMQP 在 Spring 应用中的使用。Spring AMQP 并不是一个消息队列,而是一个对 AMQP 协议的 Java 抽象与封装定义了 AMQP 的核心抽象接口(Message、Exchange、Queue、Template 等)与具体消息中间件实现解耦spring-amqp 的默认实现基于 RabbitMQ Java Client负责与 RabbitMQ 服务端进行真正的网络通信。

2025-12-18 18:07:53 1386

原创 RabbitMQ: 同步异步解析、安装与控制台实践

异步调用是指:调用方发送请求后不等待处理结果,立即返回,由系统在后台异步完成后续处理。在分布式系统中,异步调用通常是基于消息通知的方式实现的。MQ(消息队列)是实现异步通信的核心中间件,在异步调用中充当 Broker 角色。在分布式系统和微服务架构中,消息队列(MQ)是实现系统解耦、异步处理、削峰填谷的重要基础组件。目前主流的 MQ 产品主要包括,此外还有逐渐被淘汰的ActiveMQ。不同 MQ 的设计目标和适用场景差异较大,因此在技术选型时,需要结合业务特点进行选择。对比维度。

2025-12-18 18:07:39 934

原创 Redis:缓存击穿、穿透、雪崩问题

某个热点 Key 过期的瞬间,大量并发请求同时打到数据库,导致数据库压力瞬间飙升,甚至被打崩。

2025-12-12 19:32:26 1314

原创 Redis:高级数据结构与进阶特性(Bitmaps、HyperLogLog、GEO、Pub/Sub、Stream、Lua、Module)

可以实现 Redis 原生不支持的数据结构,如全文索引、图、JSON 等。

2025-12-12 15:11:00 953

原创 Redis:数据结构与基础操作(String、List、Hash、Set、Sorted Set)

String 是 Redis 中最基础、最常用的数据结构。它是二进制安全的,也就是说可以存储任意类型的数据,例如:普通字符串整数、浮点数图片(Base64 编码后)JSON / 序列化对象 / 二进制内容。

2025-12-11 21:01:03 1237

原创 Redis:GUI 客户端(Redis Insight / Tiny RDM)、基础操作、Spring Boot 连接实现

Bean// 使用 String 序列化 key这里使用 String 序列化,方便在 Redis 中查看数据。

2025-12-11 16:59:12 1097 1

原创 Redis:安装、主从复制、Sentinel 哨兵、Cluster 集群

本文梳理了 Redis 在不同业务规模下的典型部署方式,包括安装、主从复制、Sentinel 哨兵机制以及 Cluster 集群架构。随着业务对高可用性与可扩展性的要求不断提升,Redis 的部署也呈现出由简单到复杂、由单节点到分布式的演进路径。单机模式 是 Redis 的基础形态,部署简单,但不具备容错能力。主从复制 提供数据冗余与读写分离机制,但仍然无法解决主节点故障带来的服务不可用风险。Sentinel 哨兵 在主从架构基础上引入自动故障转移能力,实现了高可用部署,是生产环境常用方案。

2025-12-10 17:06:45 1202 1

原创 MySQL :锁机制、InnoDB 架构与 MVCC 解析

表锁粒度大,开销低但并发差,多用于 MyISAM 或 InnoDB 的元数据管理。

2025-11-26 20:13:14 1227

原创 MySQL:日志体系、主从复制原理与分库分表

General Log 记录所有客户端发送给 MySQL 的 SQL,包括查询、连接请求、管理命令。它是最完整、最暴力的 SQL 审计方式,但性能开销巨大,因此默认关闭。一旦开启,每条 SQL 都会写磁盘 → TPS 直接下降只建议排查问题时短暂使用使用场景价值某接口执行了什么 SQL?用于排查 ORM 框架生成 SQL判断是否有扫描、慢语句来源结合 slow log 定位性能热点安全审计/违规操作分析找出误删数据的操作者、语句来源。

2025-11-26 20:13:10 834

原创 MySQL :高性能 SQL 优化与视图/存储过程/触发器

视图(View)是一种虚拟表,本身不存储数据,其数据来自定义视图时的 SQL 查询。视图本质是 保存 SQL 的定义(query tree / 解析后的 SQL)在查询时会将视图展开(View Expansion)不是存储查询结果(除物化视图,但 MySQL 不支持)查询视图 → MySQL 将视图 SQL 替换进主查询 → 执行展开后的 SELECT-- 实际执行为:视图的作用简化复杂查询(封装 SQL)权限控制(不给表权限,只给视图权限)数据独立性(表结构改变可通过视图屏蔽)

2025-11-25 17:14:17 744

原创 MySQL :存储引擎原理、索引结构与执行计划

存储引擎是 MySQL 实现数据存储、索引、查询和更新的技术方案。CREATE TABLE 表名 (字段1 类型 [COMMENT '字段1注释'],...字段n 类型 [COMMENT '字段n注释']) ENGINE=InnoDB [COMMENT='表注释'];索引(Index)是一种能够帮助 MySQL 快速定位数据的数据结构。它类似于书籍的目录,通过有序的数据结构加速数据查找,而不需要从表头开始逐行扫描。

2025-11-25 17:14:01 802 1

原创 MySQL :从数据库定义到权限控制

名称概念说明数据(Data)数据是数据库中存储的最基本元素,是对客观事物的符号化表示。数据库(DataBase, DB)存储数据的“仓库”,内部以有组织的方式保存数据。数据库管理系统(DataBase Management System, DBMS)操纵和管理数据库的大型软件,用于创建、维护和控制数据库的访问。操作关系型数据库的标准编程语言,用于定义、查询和操作数据。-- 查询所有数据库-- 查询当前使用的数据库聚合函数用于对表中某一列的数据进行统计和汇总处理,将多行数据视为一个整体,进行纵向计算。

2025-11-15 10:35:28 1222

原创 MySQL :实用函数、约束、多表查询与事务隔离

约束是作用于数据库表中字段或表的规则,用于限制数据的输入和修改,以保证数据的准确性和完整性。(1)一对多(多对一)例如:一个客户可以有多个订单。(2)多对多例如:一个订单可以包含多个商品,一个商品也可以出现在多个订单中(通过中间表实现)。(3)一对一例如:用户表与用户详情表,一条记录对应一条扩展记录。这些关系是多表查询的基础。多表查询指在一条 SQL 中同时从两张或多张表中查询数据。

2025-11-15 10:35:24 878

原创 对象住哪里?——深入剖析 JVM 内存结构与对象分配机制

根据《Java 虚拟机规范(Java Virtual Machine Specification)》:方法区(Method Area)是 JVM 的一块逻辑内存区域,用于存放类的元数据信息,包括:类的结构定义(类名、父类、接口信息)字段与方法信息运行时常量池(Runtime Constant Pool)静态变量(Static Fields)即时编译器(JIT)编译后的代码(Code Cache)简单来说,方法区是 “类级数据的仓库”。

2025-11-07 22:00:53 2916

原创 字节码揭秘:Class 文件里的秘密与指令执行原理

u4 magic;// 魔数 0xCAFEBABE// 次版本号// 主版本号// 常量池大小// 常量池// 类的访问标志// 当前类索引// 父类索引// 实现接口数量// 接口表// 字段数量// 字段表// 方法数量// 方法表// 属性数量// 属性表在 .class 文件中,常量池(Constant Pool) 是信息最密集、也最关键的部分。它记录了一个类中所有需要被引用的常量与符号信息,包括:类名、父类名、接口名方法名、字段名。

2025-11-07 11:27:40 829

原创 Java 程序到底是怎么跑起来的?——深入理解 JVM 架构与执行原理

JVM,全称 Java Virtual Machine(Java 虚拟机),是一个运行在计算机上的程序,用来执行 Java 字节码(.class 文件)。JVM 本质上是一个进程,而不是单纯的内存空间。当你运行 Java 程序时,实际上是启动了 JVM 进程,它负责在运行时将字节码转换为机器码,并管理程序的执行环境。阶段JVM 所在位置说明程序启动前磁盘上(如 Windows 的 java.exe、Linux 的 java、动态库 libjvm.so 等)

2025-11-05 20:55:07 855

原创 JVM 执行引擎:字节码是如何被执行的

组成部分作用特点程序计数器记录当前执行指令地址每线程独立Java 栈管理方法调用栈帧入栈 / 出栈局部变量表存储参数和局部变量槽位可复用操作数栈存放中间计算结果LIFO 结构帧数据区保存上下文信息含动态连接 / 异常表栈帧重叠优化调用性能节省内存、减少拷贝JVM 执行引擎以线程私有的栈结构为核心,通过程序计数器精确定位字节码指令,依靠局部变量表与操作数栈完成数据存储与运算处理,并借助帧数据区维护方法上下文信息,同时利用栈帧重叠机制优化调用性能。

2025-10-30 12:31:47 1732 1

原创 什么是栈?深入理解 JVM 中的栈结构

栈(Stack) 是一种受限的线性数据结构,只能在一端(称为 栈顶(Top))进行插入和删除操作。它遵循 后进先出(LIFO, Last In First Out) 的原则 —— 后放进去的元素先被取出。可以把它想象成“叠盘子”的场景:把盘子一个个叠上去 → 压栈(push)取盘子时只能从最上面拿 → 弹栈(pop)这就是栈的直观模型。栈(Stack)是一种遵循“后进先出”(LIFO)原则的线性数据结构,只能在一端进行插入和删除操作,常用来保存临时数据和控制程序执行流程。

2025-10-24 12:04:03 1383

原创 Spring、Spring MVC、Spring Boot 有何不同?

Spring 是整个体系的基础框架,提供了 IoC(控制反转)和 AOP(面向切面编程)等核心机制,用于管理对象、依赖和事务,是所有模块运行的地基;Spring MVC 建立在 Spring 之上,专注于 Web 层开发,通过 DispatcherServlet 实现请求分发、控制逻辑与视图渲染分离,让 Web 开发结构化、清晰;而 Spring Boot 则是在两者的基础上进行整合与封装,提供自动配置、起步依赖和内嵌服务器,大幅减少配置工作,使得开发者无需关心底层细节即可快速构建和运行应用。

2025-10-23 16:54:13 892

原创 什么是递归?

通过函数调用自身,将复杂问题逐步分解为更小的子问题,在达到终止条件后,通过调用栈逐层回溯,合并子问题的解,最终得到整体结果。掌握递归的关键在于: 明确终止条件、 缩小问题规模、正确传递返回值。

2025-10-14 22:00:36 1127

原创 什么是 Maven?关于 Maven 的命令、依赖传递、聚合与继承

假设有两个模块:A 模块B 模块-- A 的 pom.xml -->A 依赖 B 时,必须确保 B 先被安装到本地仓库(mvn install),否则 A 会找不到该依赖。我把 demo_web1 项目当作A模块,hello 项目当作B模块此时:然后 install hello再去 demo_web1 里面添加 hello 的依赖:此时依赖就传递过来了。

2025-10-07 16:18:17 1047

原创 什么是Maven?关于 Maven 的坐标、依赖管理与 Web 项目构建

JSP 文件通常是用 UTF-8 保存的,而 Tomcat 默认使用 ISO-8859-1 来解析和输出 JSP 内容,两边不匹配,就会出现乱码。在传统的 Java Web 项目中,当我们访问 http://localhost:8080/demo_web1/在 src/main/java/com/ma/servlet/ 下新建 HelloServlet.java。此时,我们在浏览器里访问: http://localhost:8080/demo-web1/hello。

2025-10-07 16:18:12 1646 3

原创 什么是Maven?关于 Maven 的标准化结构、配置与项目创建

Maven 是一个基于 Java 的项目管理与构建工具。它不仅可以定义项目的结构与依赖,还能通过统一的方式实现自动化构建,是现代 Java 项目开发中不可或缺的基础工具。Maven 主要提供以下三方面的能力1.提供标准化的项目结构(约定大于配置)在没有 Maven 之前,不同的开发工具、团队往往会使用不同的项目目录结构,导致新成员接手项目时常常需要重新熟悉结构,增加了协作成本。Maven 通过一套标准的目录结构约定,让所有项目遵循统一的规范。

2025-10-07 16:18:08 1346 1

原创 什么是Java反射机制?

反射(Reflection)是 Java 提供的一种在运行时动态获取类的信息,并能直接操作类的属性、方法和构造器的机制。普通调用:在编译期就已经确定要调用哪个类、哪个方法。反射调用:程序可以在运行时,通过字符串(类名、方法名)去加载类,并调用其中的方法或访问属性。Java 中反射的核心类位于 java.lang.reflect 包下,主要包括:Class: 表示类的字节码对象。Method: 表示类的方法。Field: 表示类的成员变量。Constructor: 表示类的构造方法。

2025-10-02 22:48:14 1002

原创 什么是AOP?

示例:日志切面@Aspect@Component// 切点:匹配 UserService 中的所有方法// 前置通知System.out.println("执行方法: " + joinPoint.getSignature().getName());// 后置通知System.out.println("方法执行结束");// 返回通知System.out.println("方法返回值: " + result);// 异常通知。

2025-09-28 22:03:51 1196

原创 什么是UUID?

UUID(Universally Unique Identifier,全局唯一标识符)是一种128 位的标识符,通常以36 个字符(包含 4 个中划线)表示,例如:去掉中划线后为 32 个字符:UUID 作为一种全球唯一标识符,不依赖数据库即可快速生成,非常适合分布式系统;它避免了自增 ID 在多节点环境下的冲突问题,但同时也带来了存储空间占用大、索引性能差等缺点。在实际应用中,如果业务侧更看重唯一性与分布式扩展性,可以选择 UUID;如果更强调存储与查询性能,则自增 ID 或雪花算法等方案可能更合适。

2025-09-28 10:02:35 1250

原创 什么是BIO,NIO和AIO?

模型BIONIOAIOIO 特性阻塞非阻塞异步非阻塞线程模型1 连接 1 线程1 线程多连接事件回调,无需占线程编程难度简单中等较高性能低高更高应用场景小型应用高并发服务器超大规模并发、推送系统Java 的 BIO、NIO 和 AIO 展示了 IO 模型的发展路径:BIO 模型简单直观,但受限于“一连接一线程”的方式,性能低;NIO 通过 Selector 实现单线程管理多连接,成为高并发场景的主流选择;

2025-09-19 11:28:23 1395

原创 Spring 声明式事务

编程式事务:在代码中手动管理事务,如 beginTransaction()、commit()、rollback()。声明式事务:只需通过注解或配置声明事务边界,由 Spring AOP 自动处理事务逻辑。Spring 推荐使用声明式事务,更简洁、可维护性更高。1.在 Service 层使用 @Transactional。2.对于查询操作使用 readOnly = true,提高性能。3.对于大事务,要合理设置 timeout,避免锁等待过长。

2025-09-15 21:30:13 1200

原创 什么是Node.js?

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。换句话说,它不是一门语言,也不是框架,而是一种让 JavaScript 脱离浏览器、运行在服务器端的工具。官方定义:Node.js 是一个基于 V8 引擎的、事件驱动的、非阻塞 I/O 的 JavaScript 运行环境。通俗解释:有了 Node.js,你就可以用 JavaScript 写服务器程序,比如搭建一个 Web 服务、处理网络请求、读写文件。// 引入 http 模块// 创建服务器\n');})

2025-09-12 09:29:38 983

原创 JeecgBoot 操作栏权限以及修改

auth的值是一个字符串,通常是'模块名:菜单名:按钮名'的格式(如代码中的'jieshouzhibiaodaiban:a_jieshouzhibiaodaiban:receivework'),这个字符串对应着系统中定义的一个具体权限点。如果用户的权限集合中包含auth属性指定的标识,那么这个操作按钮(“接受/驳回”)会显示出来。在JeecgBoot当中,操作栏的内容是编辑和更多,但是当我们想要实现修改自己的内容时,应该怎么操作呢?同样的方式得到另外一个按钮,此时接受指标待办表里就出现了相关的两个按钮。

2025-09-09 17:06:40 762

原创 什么是SPI机制?

SPI(服务提供者接口)是JDK 内置的一种服务发现机制。API(应用程序接口):告诉“使用者”能做什么。SPI(服务提供者接口):告诉“实现者”应该怎么扩展。它的本质就是:接口在框架中定义,具体实现由第三方提供,运行时通过配置和 ServiceLoader 自动发现实现。SPI 是JDK 提供的一种内置插件发现机制。接口 + 实现类 + 配置文件 + ServiceLoader。JDBC、日志框架、Spring Boot、Dubbo 等都广泛使用了 SPI。

2025-08-22 09:09:51 1152

原创 什么是 Spring?

在spring的文档中是这样描述的:The term "Spring" means different things in different contexts. It can be used to refer to the Spring Framework project itself, which is where it all started. Over time, other Spring projects have been built on top of the Spring Framework

2025-08-18 21:55:43 1022

原创 Tomcat 基础解析:从概念到运行原理

Tomcat 是 由 Apache 软件基金会开发和维护的开源 Web 服务器与 Servlet 容器。它的全名是 Apache Tomcat,本质上是一个运行 Java Web 应用的中间件。接收浏览器请求(监听端口、解析 HTTP 报文)执行 Java 后端代码返回响应(HTML 页面、JSON 数据等)可以把 Tomcat 理解为Java Web 应用的“运行引擎”。Servlet 是运行在服务器端的 Java 类,用于接收请求、处理业务逻辑、返回数据或页面。

2025-08-15 09:31:30 922 2

原创 Java Socket 编程实战:实现双向通信、多线程与心跳机制

Socket(套接字)是计算机网络中用于进程间通信的一种机制,它充当应用层与传输层之间的接口,使得两个不同主机上的程序能够进行数据交互。本文介绍了 Socket 的基本原理、通信流程以及基于 Java 的 TCP 编程实践。通过示例代码,我们实现了客户端与服务端的双向通信,支持消息发送、心跳机制与断线重连。Socket 是构建网络程序的基础工具,理解它的工作方式,有助于我们开发出更加稳定可靠的通信系统。至此,Java Socket 实现双向通信、多线程与心跳机制就完成了。

2025-08-06 15:50:37 1118 4

原创 JDBC 入门攻略:七步掌握数据库连接与增删改查实战

JDBC(Java Database Connectivity)是 Java 中用于连接和操作关系型数据库的一套 API(应用程序编程接口)。其实可以说JDBC是 Java 提供的一座桥梁,用来让 Java 程序“听得懂”数据库的语言。它就像你和数据库之间的翻译官,帮你把 Java 代码翻译成 SQL,让数据库知道你要干什么,比如新增用户、修改数据或删除记录。形象记忆就是Java 程序 ↔ JDBC ↔ 数据库。

2025-08-02 11:18:03 1032 4

空空如也

空空如也

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

TA关注的人

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