自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 下线 MyBatis 二级缓存后,如何用 Spring Cache + Redis 构建安全可靠的缓存体系?

在高并发场景下,MyBatis二级缓存存在跨节点不一致、缓存穿透等问题。本文提出改用Spring Cache + Redis构建缓存体系的解决方案,详细介绍了核心配置和一致性实践。通过RedisCacheConfig实现安全的JSON序列化、事务感知和防穿透机制,并在UserService中演示了缓存与DB的强一致性操作,特别是乐观锁场景下的正确处理方式。方案经过半年生产验证,有效解决了MyBatis二级缓存的痛点,同时保证了系统性能和可靠性。

2025-12-04 22:41:36 774

原创 为什么 MyBatis 原生二级缓存“难以修复”?

单体应用并非高并发的“原罪”,真正的瓶颈常在于“无状态化缺失 + 数据一致性粗放 + 异常处理失控”。它假设你只有一个应用实例,假设你所有写操作都走同一个 Mapper,假设你数据几乎不变——而这些,在真实高并发系统中,一条都不成立。,需要缓存时,主动选择 Redis + 显式生命周期管理。,想着“开箱即用,省事又快”。“二级缓存可能很危险,除非你使用分布式缓存,否则不要在多服务器环境中启用。但我们忽略了——因为“它太简单了”,简单到让人误以为“开箱即安全”。于是,缓存不仅没提升体验,反而成了。

2025-12-03 20:07:55 427

原创 讲下 MyBatis 原理?

一启二解三封装,两会两执一桥接;缓存插件要慎用,单体也能扛高并发!关注我,从零开始构建可观测、可降级、可修复的高并发系统。—— 旷野说 · Spring Boot 开发者速查手册 + 高并发系统设计认知指南定位:用最小改动,做最大韧性。拒绝盲目微服务,专注无状态化 + 数据一致性 + 异常闭环。

2025-12-03 19:24:47 915

原创 如何用 Redpanda + 本地事务,实现“发消息 + 写 DB” 的强一致性!

摘要: 文章探讨了如何利用Redpanda和本地事务表实现"发消息+写DB"的强一致性。传统同步调用方式存在消息丢失或重复的风险,作者提出采用本地事务表+定时扫表任务的方案,将消息与业务数据写入同一数据库事务,通过独立任务扫描未发送消息并重试发送。该方案结合Redpanda的幂等生产者和消费端幂等处理,确保"至少发一次"和"最多处理一次"的可靠性。文章强调高并发系统的韧性往往源于简单可靠的设计,而非复杂前沿技术,并总结了实现强一致性的关键口诀。

2025-11-30 21:09:47 924

原创 那年夏天,我们的“巨无霸”单体差点压垮整个平台

摘要: 文章以高并发场景下的单体架构优化为核心,通过实战案例揭示:盲目拆微服务并非性能瓶颈的解决方案。作者通过引入Redpanda消息队列,将同步调用改为异步处理(主流程耗时从500ms降至50ms),并强调异常处理三原则(死信队列兜底、幂等消费、监控告警)。指出高并发优化的本质在于代码层面的异步解耦、状态管理和异常控制,而非架构形式。最后提出"先稳微观再谈拆微"的渐进式演进策略,为Spring Boot开发者提供兼容Kafka协议的高性能中间件实践方案。(149字)

2025-11-30 20:59:10 661

原创 用 Redis + Lua 守住打赏原子性:我在单体系统中的微观实践(续)

摘要: 在C端高并发打赏场景中,Redis Lua脚本成为保障原子操作的关键防线。本文通过实战案例,详解如何用Spring Boot+Redisson高效集成Lua脚本:从IDEA语法检查、Maven预校验到原子扣款实现,构建"防重-扣款-日志"一体化方案。重点解决脚本管理、主从同步、降级兜底等生产级问题,并给出"慢日志监控+嵌入式测试"的调试方案,最终提炼出血泪总结的Redis Lua实践口诀。在高并发系统中,微观层面的脚本健壮性往往比架构设计更能决定系统稳定性。

2025-11-30 20:09:26 683

原创 从单体扛百万并发:我在社交打赏系统中的微观优化实战

本文分享了单体架构应对高并发场景的优化实战经验。作者通过社交打赏系统案例,指出高并发瓶颈往往源于微观设计缺陷,而非架构形态。核心优化策略包括:1)使用Redis+Lua实现原子操作,解决并发扣减问题;2)异步化处理DB操作,解耦核心路径;3)建立对账机制保障最终一致性;4)精细化异常处理和容器选型。实践表明,通过这四大微观优化,单体应用可稳定支撑百万级并发,相比盲目拆分微服务更具性价比。文章强调高并发优化应始于微观层面的精准控制,而非架构层面的过度设计。

2025-11-30 19:36:25 574

原创 交友电商平台踩过的坑:高并发抢限量礼物,事务与缓存如何共舞

摘要: 本文以高并发电商平台中的“七夕限量情书”抢购活动为例,剖析了传统事务锁(SELECT ... FOR UPDATE)在高并发场景下的性能瓶颈,以及单纯依赖Redis缓存导致的超发问题。作者提出一套纵深防御体系:通过Redis Lua脚本实现原子预扣、异步消息队列削峰落库、MySQL唯一索引兜底及定时对账补偿,最终实现120,000+ QPS下零超发。关键经验包括:避免串行化锁,缓存操作必须原子化,异步与同步结合,并通过依赖管理规避版本冲突。技术口诀“缓存扛,Lua保;异步落,索引兜;对账在,心不慌”

2025-11-30 19:21:33 557

原创 面试官问:maven 版本冲突管理的原理是什么,一句话描述下?

Maven版本冲突管理机制基于三个核心原则:依赖调解、最近优先和显式覆盖。当出现多个版本依赖时,Maven会优先选择依赖路径最短的版本(最近优先),若路径深度相同则先声明者胜。开发者可以通过显式声明依赖或使用dependencyManagement统一版本来强制指定版本。最佳实践包括定期检查依赖树、锁定关键依赖版本以及避免使用版本范围。理解这些规则有助于主动控制依赖版本,确保项目构建的稳定性。

2025-11-29 21:07:05 760

原创 一张图看懂:Spring Boot 如何处理请求?Java 21 虚拟线程又带来了什么?

本文介绍了Spring Boot默认使用Spring Web MVC和嵌入式Tomcat的技术栈,并重点讲解了Java 21虚拟线程如何提升Spring Boot性能。文章详细阐述了虚拟线程的三大优势(轻量、挂起、复用),提供了在Spring Boot中启用虚拟线程的配置方法,并给出三种典型应用场景的解决方案。通过对比传统线程模型与虚拟线程模型的差异,指出Spring Web MVC+虚拟线程是简单且高性能的选择。最后总结出"Spring Boot虚拟线程三三三"口诀,为开发者提供清晰的

2025-11-29 21:00:07 879

原创 SSO、账号密码和短信验证码我都要-Spring Security 的认证多源登录简记

本文介绍了如何基于Spring Security实现多认证源登录的统一管理。作者通过产品需求引入短信验证码登录的场景,剖析了Spring Security的核心认证机制,提出通过ProviderManager实现多认证源路由的解决方案。文章详细阐述了认证流程的设计哲学,包括类型驱动、职责分离和统一入口三大原则,并给出实战三步法:定义专属Token、实现Provider和统一调用入口。最后提炼出"认、分、统"三字经,强调通过插件化方式应对认证方式的变化,保持系统的灵活性和安全性。

2025-11-29 20:42:55 574

原创 一个开发者对 Spring Security 拦截机制的深度追问(续)

本文针对Spring Security中常见的403异常问题,提出了一套系统化的解决方案。通过四步调试法:1)开启DEBUG日志查看安全决策过程;2)自定义异常处理器返回结构化错误信息;3)开发环境临时放行异常查看完整堆栈;4)快速判断拦截层级(Filter或AOP)。文章还总结了"调试403的黄金五步法"口诀,帮助开发者将神秘的403异常转化为可追踪、可解释的普通bug,使Spring Security的安全机制变得透明可控。这套方法既保证了生产环境的友好响应,又提供了开发环境的高效调

2025-11-29 20:30:11 617

原创 一个开发者对 Spring Security 拦截机制的深度追问

摘要:Spring Security 403异常解析 本文通过作者解决一个403访问拒绝问题的经历,深入剖析了Spring Security的安全机制。当/api/v1/orders/create接口返回403但未进入Controller时,作者发现请求被Spring Security在Servlet Filter层提前拦截。关键发现包括:1) Spring Security通过FilterChainProxy封装安全过滤器链;2) URL权限(authorizeHttpRequests)和方法权限(@Pr

2025-11-29 20:16:32 1242 2

原创 MySQL 多表复杂查询终极指南:7 张表也能快如闪电!

本文针对多表复杂查询场景,提出了一套高效的"3层分层法+5句口诀"解决方案。核心思想是将复杂查询拆分为主干层、过滤层和输出层三个清晰层级,避免一次性JOIN导致性能问题。文章包含完整的7表查询实战案例,提供可直接运行的SQL模板,并给出关键索引建议。通过与传统方法的对比,展示了分层写法的优势:可读性强、中间结果可控、索引利用率高、扩展性好。最后总结为四句实用口诀,帮助开发者轻松应对跨系统数据查询需求。

2025-11-28 21:50:56 442 1

原创 Java 锁升级机制:JVM 的“内功心法”,开发者无感但必须有知!

摘要:本文深入解析Java中synchronized关键字背后的锁升级机制。JVM会根据线程竞争情况自动在无锁、偏向锁、轻量级锁和重量级锁之间进行切换,这一过程对开发者完全透明。文章通过类比和代码示例,详细说明了四种锁状态的特点、适用场景及性能影响,同时澄清常见误区,并提供实用优化建议。理解这一机制有助于开发者编写更高性能的并发代码,有效排查性能瓶颈,并与JVM形成更好的协作默契。

2025-11-28 21:40:03 770

原创 Java 线程池:像管理餐厅一样简单!

线程池不是魔法,而是一种资源调度的艺术。理解它,就像理解如何高效运营一家餐厅——不多招人浪费钱,也不让顾客等太久。掌握这个比喻,下次面试或开发时,你就能轻松说出线程池的精髓!🍀记住:好的程序员,不光写代码,更懂得“省着用”资源。

2025-11-28 21:26:57 648

原创 一张图+一句话,记住所有 JVM 垃圾收集器!

摘要:本文以通俗易懂的方式讲解JVM垃圾收集器,将其比喻为"保洁阿姨"来帮助理解。文章概述了主流GC类型:单线程的Serial适合小型应用;并行处理的Parallel注重吞吐量;低延迟的CMS(已淘汰);分区管理的G1(JDK9+默认);以及超低延迟的ZGC/Shenandoah。通过"小用Serial,吞用Parallel,低延选CMS,平衡用G1,超快上ZGC"的口诀帮助记忆,并针对不同场景给出GC选择建议。最后强调实际调优应先使用默认G1收集器,再根据监控数据进

2025-11-28 20:58:04 594

原创 监控报警内存 90%+排查记录

本文介绍了线上服务CPU飙升问题的完整排查流程,从进程到代码行的定位方法。首先通过top命令找出高CPU进程PID,再通过ps命令定位问题线程TID,将TID转换为十六进制后,使用jstack抓取线程堆栈并搜索对应线程,最终锁定问题代码位置。文章还分析了常见CPU飙升原因(如死循环、高频I/O等),并提供了非Java应用的排查建议(如perf工具)。通过这套标准化的排查路径,开发者可以快速定位并解决线上CPU问题。

2025-11-28 20:41:53 632

原创 Java快速开发框架居然没用条件化配置

摘要:本文深入解析Spring Boot条件化配置机制,从核心的@Conditional注解入手,详细介绍了自定义条件实现方法。重点剖析了Spring Boot内置的@ConditionalOn...系列条件注解,包括@ConditionalOnProperty、@ConditionalOnClass、@ConditionalOnBean等常用注解的使用场景和实现原理。文章通过代码示例展示了如何基于环境变量、类路径、Bean存在性等条件动态控制配置加载,为构建灵活可扩展的Spring Boot应用提供了实用

2025-11-24 17:07:36 1018

原创 Redis 经典高级数据结构实战:HyperLogLog、Bitmap 与 GEO

需求推荐结构关键优势亿级 UV 统计极低内存 + 高吞吐用户签到 / 权限位Bitmap空间极致压缩 + 位运算附近的人 / 距离计算GEO开箱即用的地理查询用巧妙的算法设计,在有限资源下解决特定问题。它们不是“万能钥匙”,但在合适场景下,能让你的系统更轻、更快、更省。📚延伸阅读Data Types《Redis 设计与实现》—— 黄健宏GeoHash 算法原理:https://en.wikipedia.org/wiki/Geohash。

2025-11-15 11:09:43 698

原创 训练100B 以上参数需要多少硬件?

规模是否可行(非巨头)建议策略<70B✅ 是自建集群或云服务100B⚠️ 极难寻求云厂商合作、融资支持❌ 几乎不可能改用MoE 架构或微调现有模型务实建议除非你有数千万美元预算 + 顶级 AI 工程团队微调开源百亿模型(如 Yi-34B、Qwen-72B);使用 MoE 架构(如训练一个 8×22B MoE);聚焦垂直领域,用 30B–70B 模型 + RAG 达到类似效果。如需具体 DeepSpeed 配置模板或成本模拟工具,可进一步说明。

2025-11-14 18:32:19 622

原创 大模型微调完全指南:Full、LoRA、QLoRA、P-Tuning 等主流方法详解

微调不再是“只有大公司玩得起”的技术。借助LoRA/QLoRA + 开源框架,个人开发者也能在消费级硬件上定制专属大模型。理解不同方法的权衡,选择与资源、任务匹配的策略。本文所有方法均可在中一键实验。不妨从一个 QLoRA 任务开始,亲手打造你的第一个定制模型!延伸阅读LoRA 原论文QLoRA 论文LLaMA-Factory 官方文档作者:一名关注高效 AI 开发的工程师 | 更新于 2025 年。

2025-11-14 18:23:48 782

原创 现代数据库系统数据结构 B+Tree

摘要: B+树是B-树的优化版本,广泛应用于数据库和文件系统,支持高效范围查询和磁盘I/O访问。其核心特点包括:多路平衡搜索结构、内部节点仅存索引(不存数据)、数据全存于叶子节点,并通过双向链表连接叶子节点以提升范围查询性能。相比B-树,B+树具有更高的扇出(更矮的树)、更优的范围查询能力,且查询路径长度完全一致。在数据库中,B+树用于主键(聚簇索引)和二级索引,通过减少磁盘I/O(通常仅需3-4次访问)实现十亿级数据的毫秒级查询。尽管B+树不适合频繁主键更新,但其设计完美适配外存系统,成为现代数据库的核心

2025-11-10 15:13:39 511

原创 模块化的Agent(智能体)架构知识点有哪些

它不仅关注Agent“做什么”,更关注“为什么做”、“怎么做更好”以及“如何变得更好”。这种架构强调了Agent的“人格化”、“经验积累”、“决策制定”和“执行反馈”四个关键环节。这是一种面向“高阶智能体”的架构设计,超越了传统的“感知-决策-执行”三段式模型,加入了。这是Agent的“人设”或“角色设定”,决定了它的基本属性和行为倾向。这是Agent的“执行层”,负责将规划转化为实际操作,并观察其影响。这是Agent的“经验库”和“知识库”,支持其持续学习和长期推理。

2025-11-03 15:59:14 795

原创 电商交易系统重要概念:什么是脏读、不可重复读、幻读?

数据库并发事务会产生三类数据一致性问题:脏读(读取未提交可能回滚的数据)、不可重复读(同一事务内两次读取同一行结果不同)、幻读(范围查询结果集行数变化)。脏读通过READ COMMITTED隔离级别解决,不可重复读通过REPEATABLE READ解决,幻读需要SERIALIZABLE隔离级别或MySQL的间隙锁机制。MySQL的InnoDB引擎在REPEATABLE READ级别下通过间隙锁可避免幻读。开发建议:关键业务使用REPEATABLE READ及以上隔离级别,范围查询加锁,建立合适索引和约束。三

2025-11-03 14:55:43 685

原创 MySQL8 特性与场景优化

MySQL 8.0针对高并发业务场景进行了多项优化,包括原子DDL实现秒级表结构变更、窗口函数简化复杂分析查询、递归CTE处理树形数据、自增主键持久化确保订单号连续性等。其特性覆盖电商、金融、SaaS等业务需求,特别是实时查询、数据一致性和权限管理方面,通过降序索引、隐藏索引、直方图统计等功能显著提升性能。这些改进使MySQL 8.0成为支持业务快速迭代的理想选择,建议新系统直接采用,老系统择机升级。

2025-11-03 14:44:39 487

原创 MySQL有5种索引?

MySQL索引类型涵盖主键、唯一、普通、组合及前缀索引,按逻辑用途分类。物理结构上,InnoDB采用聚簇索引(数据与索引存储一体)和二级索引(需回表查询)。特殊场景可使用全文索引(文本搜索)或空间索引(地理数据)。索引设计应遵循主键自增、组合索引合理排序等原则,避免冗余。通过EXPLAIN分析查询性能,确保精准使用索引提升效率。

2025-11-03 14:34:48 902

原创 电商交易系统 MySQL + Java 开发实践指南

本文总结了电商交易系统的核心开发规范与常见问题解决方案。主要内容包括:1)业务优先原则,强调理解交易流程(下单-支付-发货-售后)的重要性;2)数据库设计规范,如主键使用BIGINT、金额字段使用DECIMAL等;3)事务与并发控制,演示了正确的锁使用方法;4)防幻读方案;5)支付状态一致性的最终一致性实现;6)性能优化建议;7)新人避坑清单,列出了常见错误及解决方案。文章强调"数据一致性优于性能优化"的原则,并推荐了SQL审核、慢查询监控等工具链。

2025-11-03 14:25:37 1072

原创 Unkey 技术栈分析报告

Unkey是一个现代化的API密钥管理系统,采用微服务架构设计,核心组件包括数据存储层(MySQL、ClickHouse、Redis)、应用服务层(Node.js/Go微服务)、编排工作流(Restate)和可观测性栈(OpenTelemetry)。系统支持多租户、TLS安全通信和云原生部署,采用读写分离策略,MySQL处理事务,ClickHouse负责分析。开发环境通过Docker Compose实现一键启动,模拟云服务功能。该架构适合构建高可用、可扩展的SaaS平台,但生产环境需优化密钥管理、数据库分区

2025-10-25 13:21:08 790

原创 【2025 RuoYi-Cloud-Plus】技术栈汇总

总依赖项(不含 BOM 内部):约45+ 个独立 artifactStarter 类:≥15 个(Spring Boot 风格自动配置)APT(编译期处理器):5 个(Lombok、MapStruct、Therapi、Config Processor)国产组件占比:极高(Sa-Token、Hutool、MyBatis-Plus、SnailJob、Warm-Flow、ip2region、sms4j、Easy-ES 等)许可证:全部为等宽松开源协议(项目本身为 MIT)如需生成Excel 表格。

2025-10-24 20:30:27 777

原创 Spring Boot 1.x、2.x 3.x区别汇总

摘要:Spring Boot 1.x、2.x和3.x是三个主要版本,分别基于Spring Framework 4.x、5.x和6.x,支持Java 6-8、8-19和17+。1.x简化配置,2.x引入响应式编程和云原生支持,3.x强制要求Java 17+,迁移到Jakarta EE,支持GraalVM原生镜像和虚拟线程。新项目推荐3.x,2.x仅维护旧系统,1.x已淘汰。3.x代表云原生和现代化方向,是Spring生态的未来。

2025-10-24 18:21:34 1394 1

原创 Nacos 开启 debu 日志

logging:level:

2025-10-12 21:54:26 132

原创 Android Studio Narwhal 3 特性

Android Studio Narwhal 3(2025.1.3)带来多项重要更新:1. AI编程助手AgentMode稳定化,支持智能补全和错误修复;2. K2编译器升级,代码分析速度提升376%;3. 测试流程优化,Canary版可直接进入RC阶段;4. 默认集成Gemini 2.5 Pro模型,支持AI辅助开发;5. 优化A构建流程,解决资源压缩兼容性问题;6. 提供AndroidX一键迁移工具。此次更新显著提升开发效率和工具稳定性。

2025-10-03 00:23:35 489

原创 指纹识别普及的今天,还在短信 or 密码登录么

指纹识别已成笔记本主流配置:高端机型近乎标配,中端产品快速普及。传感器多集成于电源键(如MacBook Touch ID、Windows Hello机型),兼顾安全与便捷。Windows/苹果生态深度整合指纹功能,支持系统登录、支付验证等场景。仅部分游戏本或特殊设备可能缺失该功能。建议开发者适配WebAuthn指纹登录,以匹配现代用户设备特性(尤其商务场景)。当前多数网站仍依赖传统密码,未能发挥硬件安全优势。

2025-09-02 20:59:02 197

原创 所有期货品种的金融下单必备数据文件分享一下

液化石油气,1元/吨,PG,合约价值的5%铸造铝合金,5元/吨,AD,合约价值的5%对二甲苯,2元/吨,PX,合约价值的5%焦煤,0.5元/吨,JM,合约价值的5%玉米淀粉,1元/吨,CS,合约价值的5%碳酸锂,20元/吨,LC,合约价值的5%铁矿石,0.5元/吨,I,合约价值的5%PTA,2元/吨,TA,合约价值的5%不锈钢,5元/吨,SS,合约价值的5%乙二醇,1元/吨,EG,合约价值的5%多晶硅,5元/吨,PS,合约价值的5%工业硅,5元/吨,SI,合约价值的5%

2025-07-24 16:06:52 378

原创 专有软件许可证

设计商业软件(即私有仓库存储的闭源商业软件),选择合适的许可证需兼顾‌商业利益保护、用户授权合规性及法律风险规避‌。

2025-07-05 10:26:48 846

原创 python企业级框架设计要点-staticmethod能继承不,论 python 的多态细节

方法类型父类能否调用子类实现?是否推荐用于多态?实例方法✅ 是✅ 推荐类方法✅ 是✅ 推荐静态方法❌ 否❌ 不推荐抽象方法✅ 是✅ 强烈推荐第一个参数是类本身(约定为cls),可以访问和修改类属性。没有自动传入的参数,它就是一个普通的函数,只是放在类里面。要访问类属性或子类信息?👉 用只是一个辅助函数,和类无关?👉 用需要多态?👉 用要解耦类名?👉 用简单工具函数?👉 用。

2025-07-04 17:35:38 997

原创 python魔改窗口-builtins模块,实现企业级框架的跳板

builtins")hello() # 可以直接调用,无需导入这相当于给整个 Python 环境注入了一个全局函数,任何模块都可以直接调用它。技术点描述builtins模块所有内置函数/对象的来源替换函数如printinput等,可用于日志、调试删除函数用于构建安全沙箱注入新函数类似“全局函数”,任何模块都能访问安全访问通过__dict__获取原始函数避免被覆盖。

2025-07-04 16:01:46 790

原创 用字典技术优化条件判断:更简洁的代码逻辑

替代方案:策略模式、模式匹配(Python 3.10+的match-case)这种写法虽然直观,但随着条件增多,代码会变得冗长且难以维护。适合:固定映射关系(如命令模式、状态机)✅ 代码更短:无需多层if-else。✅ 易于扩展:新增条件只需修改字典。✅ 可读性更强:逻辑清晰,一目了然。避免:复杂条件依赖(如嵌套判断)

2025-07-03 11:46:17 220

原创 当前Python打包生态的标准化

2016年,Python社区面临setup.py.flake8setup.py(2016)首次提出setup.py“我们需要一个不会执行任意代码的静态配置文件” —— PEP 518设计原则。

2025-06-27 10:57:31 410

空空如也

空空如也

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

TA关注的人

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