自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 游戏后端篇-深入了解跨服结算:幂等怎么做、消息丢了怎么补、账对不上怎么查(附完整实现)

本文深度解析跨服结算系统的六大核心设计:以“不重、不丢、可对账”为标准,强调结算作为唯一写操作的事务边界必须严格控制。通过幂等键(session_id+uid+biz_type)、本地消息表(outbox)实现可靠投递,强制使用增量更新避免乱序问题,并结合三段式投递与死信机制保障可靠性。代码层面提供完整实现,涵盖幂等、事务、补偿与对账全流程,直击线上事故根源,是一套可直接落地的高可用结算方案。

2026-11-13 15:14:59 181

原创 游戏后端篇-深入了解跨服战斗服:固定 tick 怎么跑、无状态怎么做到、快照同步怎么设计(附完整实现)

本文深入解析战斗服在实时战斗中的核心设计——固定tick循环与无状态架构。澄清“无状态”实为“不可重建状态不可持有”,强调战斗服仅存可丢弃的瞬时与会话状态。通过固定tick(推荐20Hz)确保逻辑一致性与跨设备公平性,采用逻辑时间驱动、雪崩保护与单线程房间模型保障稳定性。关键落地规则包括:数据源自快照、产出仅出结算单、消耗品延后扣减、随机数可复现。状态同步依赖快照+增量+序列号,输入保持避免“卡原地”。最后以机器人压测验证稳定性,最终实现战斗服可丢弃、可扩容、崩溃后作废补偿的高可用架构。

2026-11-12 17:19:23 167

原创 游戏后端篇-深入了解跨服路由与会话漂移:断线重连怎么把玩家送回原来那场战斗(附完整代码)

本文系统解决跨服架构中“玩家位置”管理难题,提出将位置从连接附属信息独立为可查询服务状态。通过定义连接、会话、位置三者分离的模型,设计带epoch版本号的路由表,实现原子状态迁移与顶号防护;采用三级缓存+登录即重建策略应对数据丢失;结合时间常量约束与REDIRECT自愈机制,确保重连后精准定位与状态恢复。代码可运行,强调“位置必须独立存在、写入必走CAS、重连绕过缓存”的工程铁律,为跨服战斗系统提供高可用、低延迟的位置管理方案。

2026-11-11 10:17:22 201 1

原创 游戏后端篇-深入了解跨服数据归属:租约模型怎么抢、怎么续、怎么回收(附完整代码)

本文聚焦跨服场景下玩家数据写权的唯一性保障,提出以“租约模型”替代传统分布式锁,解决跨服并发写导致的数据丢失或重复问题。通过租约的期限授权、心跳续约与过期回收机制,实现写权的自动仲裁与故障自愈。核心设计包括:基于Redis的原子化租约操作(Lua脚本)、带身份校验的释放、ZSET索引驱动的兜底回收任务,以及针对进程崩溃、网络分区等场景的五类典型坑点防御。强调“不是尽量单写,而是数据库层面禁止第二人写”,并对比结果回源模型,指出适用边界。最后提供测试方案与生产落地建议,确保系统在极端情况下仍能保持数据一致性。

2026-11-10 17:09:25 287

原创 游戏后端篇-深入了解跨服架构:为什么分区分服的游戏还要「跨服」?(三种拓扑 + 一次跨服进入的完整时序)

本文深入剖析跨服架构的核心矛盾——“人要聚,数据要分”,指出区服本质是运营单位而非技术容量单位。通过三种拓扑演进(单世界、分区分服+跨服中心、统一网关+无状态服务),强调主流方案B的合理性。核心提出“单一写入者”原则,解析跨服关键问题:租约管理、路由表维护、结算幂等。以真实场景为例,详解跨服进入时序与三大必解难题,为中后期游戏跨服设计提供可落地的架构思路与代码骨架。

2026-11-10 15:43:51 383 5

原创 扣子AI:零代码打造治愈奶奶视频工作流

十分钟让你学会使用国内 coze 平台通过工作流的方式,从而快速生成抖音爆火视频

2026-07-02 16:28:45 985 5

原创 LangChain+FastAPI打造全能AI助手

本文介绍了基于LangChain和FastAPI构建的智能体服务框架,整合工具调用、知识检索、记忆管理和提示词模板四大核心模块。系统支持计算器、网页搜索、天气查询等工具调用,基于ChromaDB的RAG知识检索,会话级别的记忆管理,以及7种场景化提示词模板。文章详细阐述了各模块的技术实现,包括分层记忆结构设计、文档分块与向量化存储流程、工具调用机制(function calling)以及流式对话处理。该框架通过ReAct模式实现"思考-行动-观察"循环,支持同步和SSE流式响应,适用于构

2026-06-25 13:46:15 309

原创 SpringBootWeb 篇-深入了解 ThreadLocal 存在内存泄漏问题

ThreadLocal的内存泄漏问题及解决方案。ThreadLocal为每个线程提供独立存储空间,其Map结构采用弱引用key以减少泄漏风险,但仍需手动remove清理。在线程池环境下,线程复用会导致ThreadLocalMap持续存在,若不及时清理将引发内存泄漏;而普通线程执行完毕后,ThreadLocalMap会随线程销毁自动回收。文章建议:1)使用后必须remove();2)静态ThreadLocal实例需特别关注;

2025-09-06 21:02:02 4086 36

原创 Web 毕设篇-适合练手的 Spring Boot Web 毕业设计项目:智驿AI系统(前后端源码 + 数据库 sql 脚本)

开发工具:IDEA、VScode服务器:Tomcat, JDK 17项目构建:maven数据库:mysql 8.0系统用户前台和管理后台两部分,项目采用前后端分离前端技术:vue3 + elementUI服务端技术:springboot + mybatis + redis + mysql

2025-06-10 21:55:16 6111 74

原创 SpringAI 大模型应用开发篇-纯 Prompt 开发(舔狗模拟器)、Function Calling(智能客服)、RAG (知识库 ChatPDF)

本文介绍了大模型应用开发的四种主要技术框架:1. 纯Prompt模式:通过精心设计的提示词工程实现应用功能,详解了指令优化、任务拆解、输出格式控制等核心策略,以及防范提示注入、越狱攻击等安全措施。2. Function Calling模式:结合大模型与传统应用能力,通过定义工具函数实现业务逻辑,以智能客服案例展示了课程推荐与预约系统的完整实现流程。3. RAG模式(检索增强生成):通过向量模型将知识库内容向量化存储,实现专业知识的检索与回答,包含PDF文档处理、向量数据库应用等技术细节。

2025-05-24 19:11:17 5168 66

原创 SpringAI 大模型应用开发篇-SpringAI 项目的新手入门知识

SpringAI是一个基于Spring框架的AI开发工具,专为Java开发者设计,能够与Spring生态无缝集成。与基于Python的LangChain相比,SpringAI更适合使用Spring框架的Java项目。使用SpringAI需要JDK17和SpringBoot 3.x版本,而LangChain4j则支持JDK8。大模型应用开发通过API接口与模型交互,企业可以选择使用开放API、云平台部署或本地部署大模型。SpringAI的配置包括在pom.xml中添加依赖。

2025-05-22 17:59:06 16731 62

原创 Java 面试篇-SSM 框架专题(什么是 AOP?Spring 中事务时如何实现的?事务失效的场景?Spring 中循环引用怎么解决?Springboot 的自动配置原理?Spring 常见注解?)

AOP,即面向切面编程,在 Spring 中用于将那些与业务无关但对多个对象产生影响的公共行为和逻辑抽取出来,实现公共模块复用,降低耦合。常见的应用场景包括公共日志保存和事务处理。

2025-02-10 16:16:59 7983 70

原创 Java 面试篇-MySQL 专题(如何定位慢查询、如何分析 SQL 语句、索引底层数据结构、什么是聚簇索引?什么是非聚簇索引?知道什么是回表查询?什么是覆盖索引?事务的特性、并发事务带来的问题?)

可以在 MySQL 的系统配置文件中开启慢查询日志,并设置 SQL 执行时间超过多少就记录到日志文件中,比如说项目设置的是 2 秒,超过这个时间的 SQL 就会记录在日志文件中,我们就可以在日志文件中找到执行慢的 SQL 语句。在使用索引时,遵循索引创建原则,确保索引字段是查询频繁的,使用复合索引覆盖 SQL 返回值,避免在索引上进行运算或类型转换,以及控制索引数量。非聚簇索引则是数据与索引分开存储,B+ 树的叶子节点保存的是主键值,可以有多个非聚簇索引,通常可以自定义的索引都是非聚簇索引。

2025-02-09 11:18:42 7468 49

原创 Java 面试篇-Redis 专题(Redis 常见的面试专题:缓存击穿、缓存雪崩、缓存穿透、什么是布隆过滤器、什么是延时双删、持久化的方式、Redis 分布式锁、I/O 多路复用等等)

缓存穿透是指查询一个一定不存在的数据,由于存储层查不到数据,因此不写入到缓存中,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 DB 挂掉。这种情况大概率是遭到了攻击。解决方案的话,一般来说有两种:第一种是缓存空对象;第二种是使用布隆过滤器来解决。布隆过滤器主要是用来检索一个元素是否在一个集合中。当时使用的是 Redisson 实现的布隆过滤器。它的底层原理是,先是初始化一个比较大的数组,里面存放的是二进制 0 或 1。

2025-02-07 11:20:41 8783 71

原创 博客之星2024年度-技术总结:技术探险家小板的一年的征程

欢迎来到 2024 年的技术回顾之旅!这一年,我就像一位勇敢的探险家,在技术的广袤世界中穿梭,从数据库的深渊到微服务的云端,从消息队列的迷宫到分布式事务的挑战。这趟旅程充满了惊喜和发现,也伴随着无数次深夜的“啊哈”时刻。今天,就让我们一起回味这段激动人心的技术冒险吧! 想象一下,我们正站在一个神秘的魔法森林前——这就是关系型数据库的世界。在这个充满魔力的地方,每一片树叶都代表着一条记录,每一棵大树都是一个表。而我们的任务是掌握这片森林的秘密,让数据如溪流般顺畅流动。

2025-01-21 21:33:47 2239 73

原创 微服务篇-深入了解 XXL-JOB 分布式任务调度的具体使用(XXL-JOB 的工作流程、框架搭建)

具体是通过 JobHandler 来确定任务逻辑,指定 @XxlJob("demoJobHandler") 注解中的 demoJobHandler 来确定。启动服务之后,访问 "localhost:8080/xxl-job-admin",默认端口号是 8080 ,默认的登录账号。定义一个逻辑任务,使用 @XxlJob("demoJobHandler") 注解,使用该注解标记到方法上,且。port:表示当前执行器的端口,主要作用是:给调用中心发送信息给执行器所用到的端口号。

2024-12-25 17:04:30 5084 117

原创 微服务篇-深入了解 MinIO 文件服务器(你还在使用阿里云 0SS 对象存储图片服务?教你使用 MinIO 文件服务器:实现从部署到具体使用)

MinIO 是一个高性能的对象存储服务器,专门设计用来处理大规模的非结构化数据。它提供与 Amazon S3(简单存储服务)兼容的 API,使得开发人员和运维团队能够轻松实现数据存储和管理。以下是 MinIO 的一些关键特点和概述: 1)高性能:MinIO 具有极高的吞吐量,能够支持大规模的并发请求,适用于需要快速处理大量数据的应用场景,如机器学习和数据分析等。 2)易于部署:MinIO 可以在多种环境中部署,包括本地服务器、虚拟机、容器(如 Docker和 Kubernetes

2024-12-24 10:07:07 4481 67

原创 Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:教室信息管理系统(前后端源码 + 数据库 sql 脚本)

(1)用户信息管理:添加、修改、删除、查询等功能。(2)角色信息管理:添加、修改、删除、查询等功能。(1) 角色信息管理:添加、修改、删除、分配权限等功能。(1) 教室设施信息:添加、修改、删除、查询等功能。(1)教室使用记录:添加、修改、删除、查询等功能。(1) 教室管理:添加、修改、删除、查询等功能。(1) 教师管理:添加、修改、删除、查询等功能。(1) 课程管理:添加、修改、删除、查询等功能。(1) 设施管理:添加、修改、删除、查询等功能。(1) 课程安排:添加、修改、删除、查询等功能。

2024-12-17 15:15:36 12646 114

原创 Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:药品进销存信息管理系统(前后端源码 + 数据库 sql 脚本)

(1)用户信息管理:添加、修改、删除、查询等功能。(2)角色信息管理:添加、修改、删除、查询等功能。(1) 角色信息管理:添加、修改、删除、分配权限等功能。(1) 供应商信息管理:添加、修改、删除、查询等功能。(1) 采购登记管理:添加、修改、删除、查询等功能。(1) 销售记录管理:添加、修改、删除、查询等功能。(1) 退货记录管理:添加、修改、删除、查询等功能。(1) 库存变动管理:添加、修改、删除、查询等功能。(1) 药品管理:添加、修改、删除、查询等功能。对药品进行采购、销售、调整都会进行记录。

2024-12-15 20:32:36 9656 77

原创 微服务篇-深入了解 Elasticsearch DSL 查询和 RestClient 查询、数据聚合(Bucket 聚合、带条件聚合、Metric 聚合)

导入了大量数据到 Elasticsearch 中,实现了数据的存储。不过查询数据时依然采用的是根据 id 查询,而非模糊搜索。 所以来研究下 Elasticsearch 的数据搜索功能。Elasticsearch 提供了基于 JSON 的 DSL(Domain Specific Language)语句来定义查询条件,其 JavaAPI 就是在组织 DSL 条件。举个例子: 查询所有数据: 以最简单的无条件查询为例,无条件查询的类型是:match_all

2024-12-11 15:09:19 4751 85

原创 微服务篇-深入了解索引库与文档 CRUD 操作、使用 RestCliet API 操作索引库与文档 CRUD(Java 客户端连接 Elasticsearch 服务端)

微服务篇-深入了解索引库与文档 CRUD 操作、使用 RestCliet API 操作索引库与文档 CRUD(Java 客户端连接 Elasticsearch 服务端)Index 就类似数据库表,Mapping 映射就类似表的结构。要向 es 中存储数据,必须先创建 Index 和 Mapping 。

2024-12-09 15:05:01 8289 90

原创 微服务篇-深入了解 Elasticsearch 基础概念、Elasticsearch 倒排索引、IK 分词器(拓展词典)

数据库模糊查询随着表数据量的增多,查询性能的下降会非常明显,而搜索引擎的性能则不会随着数据增多而下降太多。目前仅 10 万不到的数据量差距就如此明显,如果数据量达到百万、千万、甚至上亿级别,这个性能差距会非常夸张。其次,功能单一数据库的模糊搜索功能单一,匹配条件非常苛刻,必须恰好包含用户搜索的关键字。而在搜索引擎中,用户输入出现个别错字,或者用拼音搜索、同义词搜索都能正确匹配到数据。

2024-12-08 15:32:29 4102 60

原创 微服务篇-深入了解 XA 模式与 AT 模式、分布式事务(部署 TC 服务、微服务集成 Seata )

GlobalTransactional 注解就是在标记事务的起点,将来 TM 就会基于这个方法判断全局事务范围,初始化全局事务。首先,要在配置文件中指定要采用的分布式事务模式。Processing)标准,XA 规范描述了全局的 TM 与局部的 RM 之间的接口,几乎所有主流的数据库。册一下分支事务,属于哪个全局,然后才能去执行业务 sql,sql 执行完后,但是 XA 规范规定 sql。每一个分支事务就是传统的单体事务,都可以满足 ACID 特性,但全局事务跨越多个服务,

2024-12-05 11:31:49 3437 98

原创 Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:智行无忧停车场管理系统(前后端源码 + 数据库 sql 脚本)

统计相关车辆的信息,使用柱状图和圆饼图来展示出来,会更加直观。用户根据正确的用户名、密码且通过正确的校验码进行登录。10.0 用户信息管理功能。4.0 车辆信息管理功能。6.0 入场登记管理功能。9.0 出场登记管理功能。5.0 停车位管理功能。2.0 用户登录功能。7.0 预约管理功能。8.0 收费规则功能。

2024-12-04 20:36:07 12814 83

原创 微服务篇-微服务保护:使用 Sentinel 来实现请求限流、线程隔离、服务熔断和 Fallback 备用方案的使用

微服务保护的方案有很多,比如:请求限流、线程隔离、服务熔断。这些方案或多或少都会导致服务的体验上略有下降,比如请求限流,降低了并发上限;线程隔离,降低了可用资源数量;服务熔断,降低了服务的完整度,部分服务变的不可用或弱可用。因此这些方案都属于服务降级的方案。但通过这些方案,服务的健壮性得到了提升。

2024-11-30 15:50:39 4019 100

原创 微服务篇-深入了解 Gateway 网关路由实现路由转发、配置管理与登录校验(使用自定义过滤器 GlobalFilter、GatewayFilter 与 RequestInterceptor 拦截器)

无论是 GatewayFilter 还是 GlobalFilter 都支持自定义,只不过编码方式、使用方式略有差别。自定义 GatewayFilter 不是直接实现 GatewayFilter,而是实现 AbstractGatewayFilterFactory。@Component@Override@Override// 获取请求// 编写过滤器逻辑System.out.println("过滤器执行了");// 放行直接在 filter 函数中编写登录校验代码。

2024-11-28 19:28:35 2800 92

原创 微服务篇-深入了解使用 RestTemplate 远程调用、Nacos 注册中心基本原理与使用、OpenFeign 的基本使用

比如刚才通过 Swagger 测试商品查询接口,而这种查询就是通过 http 请求的方式来完成的,不仅仅可以实现远程查询,还可以实现新增、删除等各种远程请求。项目的架构设计、开发模式都非常简单。在微服务中,每一个模块都是独立的,那么模块与模块之间就不能直接通过 Bean 对象注入的方式来访问不同模块的方法了,则需要通过网络来建立模块与模块之间的联系了。- 服务提供者会定期向注册中心发送请求,报告自己的健康状态(心跳请求),当注册中心长时间收不到提供者的心跳时,会认为该实例宕机,将其从服务的实例列表中剔除。

2024-11-26 21:37:51 3570 76

原创 Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:电影院后台管理系统(前后端源码 + 数据库 sql 脚本)

文章目录 1.0 项目介绍 2.0 用户登录功能 3.0 用户管理功能 4.0 影院管理功能 5.0 电影管理功能 6.0 影厅管理功能 7.0 电影排片管理功能 8.0 用户评论管理功能 9.0 用户购票功能 10.0 用户购票记录管理 开发工具:IDEA、VScode 服务器:Tomcat, JDK 17 项目构建:mave

2024-11-23 12:23:31 25393 93

原创 Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)

Docker 是一个开源平台,用于自动化应用程序的部署、扩展和管理,采用的是容器化技术。它允许开发者将应用程序及其所有依赖项打包成轻量级、可移植的容器,从而确保无论在何种环境中运行,应用程序都能够保持一致的行为。1)docker pull:拉取镜像2)docker push:推送镜像3)docker images:查看本地镜像4)docker rmi:删除指定本地镜像5)docker run:创建容器并运行容器6)docker stop:停止指定容器7)docker start:启动指定容器。

2024-11-14 18:19:35 5625 116

原创 MybatisPlus 篇-MybatisPlus 依赖引入与基础使用(核心功能的使用、BaseMapper 接口中方法的使用、IService 接口中方法的使用、分页插件、代码自动生成等等扩展功能)

在日常开发中应该能发现,单表的 CRUD 功能代码重复度很高,也没有什么难度。而这部分代码量往往比较大,开发起来比较费时。因此,目前企业中都会使用一些组件来简化或省略单表的 CRUD 开发工作。目前在国内使用较多的一个组件就是 MybatisPlus。MyBatis-Plus 🚀 为简化开发而生为了简化单表 CRUD,MybatisPlus 提供了一个基础的 BaseMapper 基类,其中已经实现了单表的 CRUD:@MapperBaseMapper 实现的方法:测试://首先引入依赖。

2024-11-12 17:40:23 6070 94

原创 RabbitMQ 篇-深入了解延迟消息、MQ 可靠性(生产者可靠性、MQ 可靠性、消费者可靠性)

如果消息的延迟时间设置较长,可能会导致堆积的延迟消息非常多,会带来较大的 CPU 开销,同时延迟消息的时间会存在误差。不过 SpringAMQP 提供的重试机制时阻塞式的重试,也就是说多次重试等待的过程中,当前线程式被阻塞的。该插件的原理是设计了一种支持延迟消息功能的交换机,当消息投递到交换机后可以暂存一定时间,到期后再投递到队列中。当重试失败之后,不会直接将消息丢失而是交给专门接收失败信息的交换机,再由专门的消费者进行消费,比如说监听到队列中有接收失败的信息,将其写入日志中等等处理的方法。

2024-11-10 10:24:56 9758 93

原创 RabbitMQ 篇-深入了解 RabbitMQ 安装以及 SpringAMQP 的基础使用(声明队列和交换机、发送接收消息、配置 JSON 消息转化器)

但是在实际开发时,队列和交换机是程序员定义的,将来项目上线,又要交给运维去创建,那么程序员就需要把程序中运行的所有队列和交换机都写下来,交给运维,在这个过程中是是很容易出错的。默认情况下,消息是平均分配每个消费者,并没有考虑到消费者的处理能力,没有充分利用每一个消费者的能力,这样显然是有问题的。Work queues,任务模型,简单来说就是让多个消费者绑定到一个队列,共同消费队列中的消息,如果直接将消息发送到队列中,则队列每一个消息只能被处理一次,每一个消息都不能被多个消费者同时消费。

2024-11-08 17:04:00 7500 77

原创 Spring Security 框架篇-深入了解 Spring Security 的授权核心功能(RBAC 权限模型、自定义异常处理器、校验权限方法)

如果其他类频繁的调用 getAuthorities() 方法来获取权限信息,就会重复的进行封装 GrantedAuthority 实体类,因此,当 authorities 不为 Null,说明之前已经被调用 getAuthorities() 方法来获取权限信息,现在直接可以从 authorities 实体获取权限信息即可。Spring Security 为我们提供了基于注解的权限控制方案,可以使用注解去指定访问对应的资源所需的权限,需要手动开启,在 SecurityConfig 配置类上开启预授权功能。

2024-11-05 09:06:44 7505 116

原创 若依框架篇-若依集成 X-File-Storage 框架(实现图片上传阿里云 OSS 服务器)、EasyExcel 框架(实现 Excel 数据批量导入功能)

阿里云对象存储 OSS(Object Storage Service),是一款海量、安全、低成本、高可靠的云存储服务。使用 OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件。使用了阿里云 OSS 对象存储服务之后,我们的项目当中如果涉及到文件上传这样的业务,在前端进行文件上传并请求到服务端时,在服务器本地磁盘当中就不需要再来存储文件了。我们直接将接收到的文件上传到 oss,由 oss 帮我们存储和管理,同时阿里云的 oss 存储服务还保障了我们所存储内容的安全可靠。

2024-10-22 12:02:05 10203 130

原创 若依框架篇-若依框架搭建具体过程、后端源代码分析、功能详解(权限控制、数据字典、定时任务、代码生成、表单构建、接口测试)

若依(RuoYi)框架是一个基于 Java 的开源企业级快速开发框架,主要用于构建信息管理系统。它结合了多种前端和后端技术,提供了高效的开发工具。用到的技术栈: 1)后端:采用了 Spring Boot、MyBatis、Redis 等流行技术。 2)前端:使用 Vue3 框架,结合 ElementPlus 组件库,提供了现代化的用户界面。模块化设计: 若依框架采用了模块化设计,支持多种功能模块的集成和扩展,如用户管理、角色管理、菜单管理等 RuoYi-

2024-10-16 19:22:57 29723 125

原创 工具篇-完整的 Git 项目管理工具教程(在命令框中使用 Git、在 IDEA 中使用 Git)

深入了解 git 在命令框中使用、在 IDEA 环境中使用、解决分支冲突

2024-10-12 20:30:14 7465 60

原创 MySQL 篇-深入了解 InnoDB 引擎的逻辑存储结构、架构、事务原理、MVCC 原理分析(RC 级别、RR 级别)

需要注意的是,此时修改之后的数据页在缓冲区中,是根据一定的时间才将脏数据页刷新到磁盘中,而不是数据修改完之后马上刷新的,也不是提交事务完之后马上提交的。2)Change Buffer:更改缓冲区(针对于非唯一的二级索引页),在执行 MDL 语句时,如果这些数据 Page 没有在 Buffer Pool 中,不会直接操作磁盘,而会将数据变更存放到更改缓冲区 Change Buffer 中,在未来数据被读取时,再将数据合并恢复到 Buffer Pool 中,再将合并后的数据刷新到磁盘中。

2024-10-11 10:46:24 18303 100

原创 MySQL 篇-深入了解 MySQL 锁的机制(表锁、意向锁、行锁、间隙锁、临键锁等)

对于一张表进行数据的增删改的时候,会自动加上 shared_write 锁,而进行查询的时候,会自动加上 share_read 锁,对于 shared_write 与 shared_read 都是兼容的。可以发现,在 3 加上了临键锁,将 3 的行数据锁上,还把 3 之前的全部间隙锁上,再有 3 的行锁,将 3 的行数据锁上,再接着将 3 - 7 之间的全部间隙锁上。此时锁的类型为间隙锁,将 id 为 8 - 10 之间的空隙锁起来了,而 id 为 8 和 10 的行数据不会被锁起来,锁的只是间隙。

2024-10-10 10:06:40 2364 82

原创 MySQL 篇-深入了解视图、SQL 优化(主键优化、order by 优化、group by 优化、update 优化等)

在对数据进行修改的时候,条件中的字段是存在索引且没有失效的时候,则会对索引进行加锁,也就是说其他线程再来对该行数据进行修改的时候会阻塞等待,直到锁被释放。只不过,在视图中进行增删改查的操作之前,可以对条件进行检查,满足条件就可以在表中操作数据,需要注意的是,实际是对表中的数据进行操作,视图只是映射基表中的数据。但是,对于多个字段的排序的方式不同,就需要在创建索引的时候,分别指定的排序方式,否则在查询的时候,没有对应的索引排序方式,就会走全表查询,使用 using filesore 的方式,效率较低。

2024-10-08 10:15:09 8208 94

原创 MySQL 篇-深入了解存储引擎、索引(InnoDB 索引结构 B+Tree、索引使用规则)

索引是帮助 MySQL 高效获取数据的有序的数据结构。在数据之外,数据系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用指向数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。索引的优缺点:优点:1)提高数据检索的效率,降低数据库的 IO 成本。2)通过索引列对数据进行排序,降低数据排序的成本,降低 CPU 的消耗。缺点:1)索引列也是要占用空间的。

2024-10-06 19:50:43 4333 77

空空如也

空空如也

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

TA关注的人

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