自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 业务代码真的会有这么多坑?三个真实场景告诉你答案

业务代码看似简单,实则暗藏风险。事务失效、浮点数计算金额、无限重试等“小错误”在规模放大后可能引发严重事故。问题常因测试环境理想、故障延迟暴露而难以发现。真正可靠的代码需考虑异常、并发、重复与补偿,通过幂等设计、合理事务边界、精确数据类型和有界重试机制保障系统稳定。

2026-11-10 17:11:26 31

原创 09丨Redis 切片集群:数据增多后如何扩展?

当单机Redis面临内存、持久化或恢复瓶颈时,应权衡纵向扩展(增大资源)与横向扩展(分片)。Redis Cluster通过固定16384个哈希槽实现键到主分片的两级映射,降低拓扑管理成本。哈希标签可确保相关键同槽,支持原子操作,但需避免热点。客户端通过CLUSTER SHARDS获取拓扑,响应MOVED永久重定向,ASK仅临时迁移中使用。扩容缩容涉及槽迁移,经典渐进式依赖ASK,而Redis 8.4+支持原子槽迁移,减少中间状态。集群高可用依赖从节点故障转移,但异步复制可能导致数据丢失,需合理配置并监控。

2026-10-09 11:23:17 256

原创 08丨Redis 哨兵集群:哨兵故障后还能完成切换吗?

Sentinel 集群通过多节点协同实现高可用,解决单点故障与误判问题。其核心机制依赖 quorum(客观下线门槛)与 多数派投票(故障转移授权),确保仅在多数存活且共识达成时才切换主库。各 Sentinel 通过 __sentinel__:hello 发现同伴、传播拓扑,并基于配置纪元选举执行者。生产推荐部署 3 或 5 个 Sentinel,跨故障域分布,保持配置一致,保障网络可达性。客户端应主动查询新主地址,结合幂等性与重试策略应对切换。最终,稳定运行需兼顾部署、安全与监控。

2026-10-09 11:21:40 116

原创 07丨Redis 哨兵机制:主库故障后,如何恢复服务?

Redis Sentinel 通过监控、故障检测与自动切换,实现主从复制的高可用。它不提供代理功能,而是负责故障转移、服务发现与配置更新。核心机制包括主观/客观下线判断、多数派授权选举、基于优先级与复制偏移量的新主库选择,以及重配复制关系。客户端需配合 Sentinel-aware 连接池,动态获取主库地址并处理切换中断。虽能减少人工干预,但无法避免写中断或数据丢失,关键配置需结合网络与业务需求权衡。

2026-10-09 11:20:08 114

原创 06丨Redis 数据同步:主从库如何实现数据一致?

Redis 主从复制通过异步方式实现数据冗余,提供读扩展与高可用,但仅保证有序的最终一致性。主库写入后立即响应,从库异步追同步,存在延迟。全量同步需生成RDB并传输,Redis 8+ 支持双通道优化;断线后可部分重同步,依赖复制ID、偏移量与积压缓冲区。三类缓冲区(积压、输出、全量暂存)功能各异,不可混淆。合理配置repl-backlog-size需基于峰值速率与容忍断线时间估算,确保故障恢复能力。

2026-10-09 11:18:20 335

原创 05丨Redis 内存快照:宕机后,如何实现快速恢复?

RDB 通过快照保存某一时刻的数据集,恢复时直接加载内存对象,显著缩短启动时间,但存在数据丢失窗口。其核心机制依赖写时复制(COW),在 BGSAVE 期间可处理写请求,但频繁快照会引发 fork 延迟、磁盘压力与内存开销。现代 Redis 采用混合持久化(如多部件 AOF),结合 RDB 快速加载与 AOF 精细增量,兼顾恢复效率与数据一致性。真正耗时取决于基线大小、日志长度及系统资源,而非单纯“RDB 快、AOF 慢”。

2026-10-09 11:16:08 403

原创 Redis AOF 日志:宕机了,如何避免数据丢失?

Redis 的 AOF 通过记录可重放的写操作实现数据持久化,解决内存数据丢失问题。它仅保存影响数据集的命令,使用 RESP 编码,并分四层确保数据落盘:内存、AOF 缓冲区、操作系统页缓存、磁盘。通过 appendfsync 策略(always/everysec/no)权衡性能与耐久性。为减少文件体积和恢复时间,Redis 支持 AOF 重写,从 Redis 7 起采用多部件模型(BASE + INCR + manifest),提升效率并降低阻塞。尽管重写由子进程执行,但 fork 和写时复制仍可能引发短

2026-10-08 14:23:25 267

原创 Redis 高性能 I/O 模型:为什么单线程 Redis 能那么快?

Redis 虽被称为“单线程”,实则核心命令串行执行,但整体架构已引入 I/O 线程、后台线程与子进程,分别处理网络读写、持久化及内存释放等任务。其高性能源于内存访问、优化数据结构、非阻塞 I/O 多路复用与短命令设计,使单线程在高并发下仍能高效服务大量连接。

2026-10-08 13:32:00 300

原创 Redis 数据结构:快速的 Redis 有哪些慢操作?

Redis 快不等于每条命令都快。实际耗时受数据结构操作、响应处理及内存管理共同影响。尽管 Key 查找平均为 O(1),但 Value 内部操作(如遍历大集合)可能带来显著延迟。不同逻辑类型采用多种内部编码(如 listpack、skiplist、Compact Hash),编码选择影响性能与内存。全量操作(如 HGETALL、SMEMBERS)易引发阻塞,应避免在生产环境使用。理解两层数据结构(全局字典 + Value 内部结构)是判断命令成本的关键。

2026-10-08 10:52:55 675

原创 Redis 基本架构:一个键值数据库包含什么?

本文从应用与系统双视角解析键值数据库架构,以 Redis 为例,阐明数据模型(Key-Value)与操作接口如何定义功能边界,进而通过访问框架、索引模块、操作模块与存储模块协同实现高效数据管理。重点揭示:键值定位依赖哈希索引,结构化操作影响性能,持久化策略权衡延迟与可靠性,且命令延迟由数据规模与操作复杂度决定,而非仅取决于查找速度。

2026-10-08 10:03:19 321

原创 Redis:从两大维度和三大主线建立知识体系

本文以应用与系统双维度,结合高性能、高可靠、高可扩展三大主线,系统梳理 Redis 6.0 及以后版本的核心机制。应用层涵盖缓存、数据结构与集群三类场景,强调一致性、淘汰策略与分片设计;系统层从网络、处理、内存到存储逐层解析请求链路,突出单线程模型、I/O 多路复用、内存编码优化与 RDB/AOF 持久化特性。重点剖析慢命令、BigKey、持久化抖动等性能风险,以及主从复制、数据丢失窗口等可靠性挑战,为 Redis 实践提供统一认知框架。

2026-10-08 09:21:28 595

原创 一个链接背后:DeepSeek 对话分享“接着聊”背后的技术思考

摘要: DeepSeek的对话分享功能通过“快照+副本化继承”技术实现可延续的对话体验。用户分享时,系统冻结会话生成独立快照并分配唯一标识;访问者查看静态快照后,点击“继续聊”会触发后台克隆快照内容至全新会话,实现无缝衔接的交互。这种设计既保护原始数据隐私,又支持协作扩展,适用于代码片段、文档批注等场景,体现了状态管理与用户体验的巧妙平衡。核心优势包括隐私安全、简单可靠,但也存在存储冗余和上下文长度限制的权衡。

2026-05-07 15:41:54 1300

原创 Java中使用正则表达式核心解析

正则表达式是Java开发中高频使用的字符串处理工具,但底层依赖NFA引擎,不当使用易引发回溯问题。文章首先解析正则表达式基础元字符分类,对比DFA和NFA引擎特性,指出Java采用NFA引擎导致回溯风险。通过典型代码示例演示回溯机制,分析贪婪模式、懒惰模式和独占模式三种匹配方式的性能差异,强调"能独占就独占"的优化原则。最后指出String.split()等常用方法隐含正则陷阱,提供预编译Pattern和改用indexOf等优化方案,帮助开发者规避CPU飙升问题。全文兼顾原理讲解与实战优

2026-04-01 11:43:34 586

原创 深入理解 Java String:从底层原理到高性能优化实战

本文深入解析Java中String类型的底层实现与性能优化。从经典面试题入手,详细剖析String对象的引用差异和内存模型,梳理了Java 6到JDK 21的底层结构演进历程。重点阐述了String不可变性的设计价值与常见误区,并给出三大实战优化方案:1)字符串拼接优先使用StringBuilder;2)合理运用intern()方法复用高频字符串;3)避免对唯一字符串使用intern()。通过理解String的底层机制,开发者可以有效提升应用性能,减少内存浪费。

2026-04-01 10:42:59 680

原创 性能测试后的瓶颈定位与调优:自下而上找问题,自上而下解难题

性能测试与调优是保障系统稳定运行的关键环节。摘要从基础前提、核心步骤和兜底策略三方面展开:首先强调完整性能测试报告的重要性,需覆盖接口性能、系统资源和JVM状态三大维度;其次提出"自下而上分析、自上而下优化"的方法论,详细说明操作系统、JVM和应用层的瓶颈定位技巧,以及代码、设计、算法等6大调优策略;最后指出必须设置限流熔断、智能扩容等兜底措施应对突发流量。整个调优过程强调精准定位、科学优化和守住稳定性底线,通过持续迭代来提升系统性能。

2026-03-31 18:15:03 393

原创 性能调优该何时介入?越早越好吗?

摘要:性能优化应把握合适时机,过早介入易拖慢开发进度并引入风险。开发初期应专注功能实现,只需遵循基础编码规范。系统稳定后才是调优最佳时机,通过压测和工具分析指标。上线后仍需持续监控,围绕响应时间、吞吐量、资源使用率和负载能力四大核心指标进行优化,确保系统高效稳定运行。(149字)

2026-03-31 17:51:13 171

原创 常见性能瓶颈和核心衡量指标

摘要:系统性能瓶颈通常由CPU、内存、磁盘I/O、网络、数据库等资源短板引起。CPU瓶颈表现为高使用率和负载;内存不足导致频繁GC或OOM;磁盘I/O问题体现为读写延迟;网络瓶颈引发接口超时;数据库慢查询和锁竞争是常见短板。衡量系统性能的四大指标包括响应时间、吞吐量(如QPS/TPS)、资源使用率和负载承受能力。这些指标帮助识别系统瓶颈,指导性能优化和容量规划。

2026-03-31 17:45:14 430

原创 Spring AI 流式输出底层原理解析

摘要:Spring AI流式输出技术采用"底层Reactor+上层传输"双架构模式。底层统一基于Reactor Streams实现异步数据推送,上层提供两种可选方案:传统Spring MVC+SSE方案适合快速落地,WebFlux原生流方案适合高并发场景。两种方案均通过Flux数据管道实现AI文本的分块实时传输,开发者可根据项目需求灵活选择,无需改造核心逻辑。配置上只需开启stream参数并选择对应Web栈依赖,即可实现类似ChatGPT的打字机效果。

2026-03-31 17:01:40 785

原创 Knife4j 快速入门:集Swagger2 和 OpenAPI3 为一体的增强解决方案

Knife4j快速集成指南 Knife4j是基于Swagger/OpenAPI规范的增强版接口文档工具,提供中文UI、在线调试等功能。支持SpringBoot 2/3项目,只需添加对应版本的依赖包,配置application.yml文件即可使用。通过@Tag、@Operation等注解标注接口信息,访问/doc.html即可查看美观的文档界面。相比原生Swagger,Knife4j具有更好的中文支持和交互体验,是Java项目接口文档管理的优选方案。

2026-03-27 16:37:54 361

原创 Spring AI :Spring AI的介绍

Spring AI 作为Spring官方推出的AI应用开发框架,核心价值在于“统一封装AI请求与回答全流程”,抹平不同AI厂商的底层差异,让Java/SpringBoot开发者能够以极低的成本、极高的效率,将AI能力集成到项目中。它不是AI模型本身,而是连接Spring生态与AI技术的“桥梁”,凭借零学习成本、无侵入集成、企业级特性等优势,成为Java开发者开发AI应用的首选框架。

2026-03-24 10:49:12 882

原创 Java中Optional的详解与应用

在 Java 中,Optional是自引入的一个容器类(位于java.util包),旨在帮助开发者更优雅、安全地处理可能为null的值,从而减少臭名昭著的(NPE)。它不是一个集合,也不是为了完全替代null,而是作为一种的工具,强制调用者去处理空值的情况。

2026-03-23 17:06:42 423

原创 Spring框架中Controller与Service层职责解析

是MVC(Model-View-Controller)架构模式中非常重要的两个分层,它们职责分明,共同协作完成业务请求的处理。理解它们的区别和协作方式对于编写清晰、可维护、可测试的代码至关重要。遵循这种分层模式,能让你的代码结构更清晰,职责更明确,极大地提升项目的可维护性和可扩展性。在Java Web开发中(特别是使用Spring框架时),

2025-06-06 14:34:58 1185

原创 Mendix 中的XPath 令牌(XPath Tokens)详解

Mendix 中的 XPath 令牌(XPath Tokens) 是一种动态参数化查询技术,允许在 XPath 表达式中使用变量或上下文相关的值,提升查询灵活性。XPath 令牌以 [%TokenName%] 格式表示,运行时替换为实际值,避免硬编码并支持动态过滤。常用令牌包括 [%CurrentUser%]、[%CurrentDateTime%] 和 [%SessionVariables%] 等,适用于查询当前用户数据、动态过滤日期等场景。XPath 令牌还可结合微流参数使用,并支持通过 Java 代码扩

2025-05-17 00:15:00 609

原创 Mendix XPath:数据查询的核心技巧

在 Mendix 中,XPath 是一种用于查询领域模型中实体数据的查询语言,类似于传统数据库中的 SQL。它通过定义条件从数据库中选择特定对象,是 Mendix 应用开发中数据检索的核心工具之一。XPath 的核心作用包括数据查询、关联查询、动态过滤以及在微流中的检索。其基本语法包括基本结构、常用运算符、关联查询和参数化查询。XPath 的常见应用场景包括页面组件过滤、微流中的动态查询、关联数据查询和复杂条件组合。与 OQL 相比,XPath 更简洁,适合简单查询和页面组件的快速过滤。高级技巧包括使用函数

2025-05-16 14:38:50 889

原创 MySQL Workbench对表进行增删改查

本文详细介绍了如何使用MySQL Workbench对数据库表进行增删改查操作。首先,通过连接MySQL服务器并创建数据库,接着展示了如何创建表、删除表以及查询数据。文章还提供了插入、更新和删除数据的两种方法:使用SQL语句或通过表数据视图。此外,还介绍了如何修改表结构,包括添加、删除和修改列。通过这些步骤,用户可以轻松管理MySQL数据库中的表和数据。

2025-05-16 08:00:00 1343

原创 Mendix 连接 MySQL 数据库

Mendix默认使用内嵌数据库存储数据,但也支持连接外部MySQL数据库。连接步骤包括:在Mendix项目中配置数据库连接,选择MySQL作为数据库类型,并填写服务器地址、数据库名称、用户名、密码和端口等连接信息。配置完成后,可以通过“Run locally”按钮测试连接,成功后会显示“Connection successful”消息。启动应用后,Mendix会自动创建多张系统表,用户也可以自行创建表。这一过程使得Mendix能够灵活地使用外部数据库进行数据管理。

2025-05-15 15:41:40 525

原创 Mendix组件Microflow Timer和Community Commons的使用

Microflow Timer 是 Mendix 低代码平台中的一个组件,用于在微流中实现定时和控制流程的功能。其主要功能包括延迟执行、定时触发和流程控制,适用于需要等待一段时间后执行操作、定期轮询数据库或外部服务、实现简单调度任务等场景。配置参数包括延迟时间、重复间隔、最大重复次数和回调微流。使用 Microflow Timer 时需注意其异步特性、云端环境中的定时精度以及可能对应用性能的影响。本文通过一个示例展示了如何使用 Microflow Timer 实现页面内容自动变化,包括每三秒递增 Numbe

2025-05-15 13:43:50 1132

原创 如何下载 MySQL 驱动 JAR 包

下载 MySQL 驱动 JAR 包有四种主要方式:1) 从 MySQL 官网直接下载 ZIP 包;2) 使用 Maven,在 pom.xml 中添加 mysql-connector-java 依赖;3) 使用 Gradle,在 build.gradle 中添加 implementation 'mysql:mysql-connector-java:8.0.x';4) 通过直接链接下载。官网下载步骤包括访问 MySQL 官网,选择 Connector/J,下载 Platform Independent 版本的

2025-05-14 15:08:17 3081

原创 Java数组的一些练习

大乐透(前区“35选5”+后区“12选2”),即前区在1-35之间的号码中随机选取5个,后区在1-12之间的号码中随机选取2个,组成一期的中奖号码,请用程序模拟产生一组大乐透中奖号码。先从键盘输入本组学员的人数,再从键盘输入本组学员的姓名和成绩,显示学员姓名和成绩。公司年会有一个寻找锦鲤的游戏,每一个员工随意写一个字,如果在“锦鲤”词库中有这个字,那么就奖励500元锦鲤红包,否则就没有,每人只能玩一次。用一个数组存储本组学员的姓名,先从键盘输入小组人数,再从键盘输入每一个学员的姓名,然后遍历显示。

2025-04-10 09:00:00 1056

原创 数组的常见算法二

定义排序:假设含有n个记录的序列为{R1,R2,…,Rn},其相应的关键字序列为{K1,K2,…,Kn}。将这些记录重新排序为{Ri1,Ri2,…,Rin},使得相应的关键字值满足条Ki1<=Ki2<=…<=Kin,这样的一种操作称为排序。通常来说,排序的目的是快速查找。时间复杂度:分析关键字的比较次数和记录的移动次数常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!)<O(nn空间复杂度。

2025-04-08 22:32:03 1003

原创 数组的常见算法一

本文来自尚硅谷-宋红康仅用来学习备份。

2025-04-08 22:15:51 609

原创 二维数组内存分析

本文来自尚硅谷-宋红康仅用来学习备份二维数组本质上是元素类型是一维数组的一维数组。

2025-04-07 10:00:00 451

原创 一维数组内存分析

因为第一个元素距离数组首地址间隔0个单元格。

2025-04-07 08:00:00 363

原创 IDEA的使用

例如:定义sop代表System.out.print();语句①在Live Templates中增加模板②先定义一个模板的组,这样方便管理所有自定义的代码模板③在模板组里新建模板④定义模板(以输出语句为例)Abbreviation:模板的缩略名称Description:模板的描述Template text:模板的代码片段模板应用范围。比如点击Define。选择如下:应用在java代码中。@Test$var2$其它模板2:创建多线程$var$其它模板3:冒泡排序。

2025-04-06 10:45:00 1508

原创 IntelliJ IDEA 常用快捷键一览表

IDEA的一些常用快捷键分享

2025-04-06 09:30:00 902

原创 Java 逐梦力扣之旅_[204. 计数质数]

Java 逐梦力扣之旅第204. 计数质数

2025-04-05 19:29:09 463

原创 Java三大循环结构深度解析:从入门到精通的实践指南

决策顺序判断条件是→选择方案否→后续操作1需要至少执行一次循环体?使用do-while进入下一步判断2循环次数是否明确可确定?使用for使用while3需要自动管理迭代变量?优先考虑for根据复杂度选择while优先级规则do-while的优先级最高(当必须执行一次时直接选用)for的优先级高于while(当循环次数明确时)特殊场景处理场景特征推荐结构示例集合遍历增强for需要中断/跳过迭代标准for或while使用breakcontinue循环条件依赖复杂计算while。

2025-04-05 12:17:52 1232

原创 Java switch语句全解析:支持类型、用法示例与版本演进

优先使用switch表达式(Java 14+)提升可读性,避免case穿透。

2025-03-05 22:55:11 761

原创 正则表达式工具推荐和基础讲解

转义字符需用双反斜杠(如 \\d)1214。分组编号从1开始,group(0) 表示整个匹配15。处理大量数据时注意性能,避免频繁编译 Pattern

2025-03-05 22:54:40 1060

原创 markdown文档创建表格

在Markdown中建立表格,可以在表格上方使用管道符号(|)和连字符(-)来创建表头和列。

2025-03-04 21:07:33 1422

空空如也

空空如也

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

TA关注的人

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