- 博客(34)
- 收藏
- 关注
原创 算法分析、异步生成实现高并发场景下的优惠券兑换码方案
本文基于GitHub项目code-forge,设计了一套高效、安全的优惠券兑换码生成与校验系统。通过自增ID结合Base32编码,确保兑换码长度≤10位且可读性强;利用BitMap实现高并发下重兑校验,降低数据库压力;引入多组加权签名与异或混淆算法,有效防止爆刷和规律猜测。整体方案兼顾唯一性、可扩展性与安全性,支持超10亿兑换码生成,适用于大规模促销场景。
2026-10-23 18:16:41
156
原创 从 Redis 到 Redisson,分布式锁原理与实战全解析
分布式锁用于解决集群环境下多JVM实例的资源竞争问题。基于Redis实现的分布式锁需满足互斥性与可访问性。通过SET key value NX EX命令保证加锁原子性,避免死锁;结合过期时间、锁标识校验及Lua脚本确保释放安全,解决误删问题。针对重入、重试、主从一致性等挑战,可采用Redisson提供的可重入锁、看门狗机制、红锁算法等方案。其封装完善,支持自动续期、消息驱动唤醒,显著降低开发复杂度,是生产环境推荐的分布式锁实现方式。
2026-10-23 18:12:44
235
原创 Java 中 == 与 equals 的底层原理:从数据类型到 JVM 内存与 GC
本文系统梳理了Java中==与equals()的比较机制:基本类型用==比值,引用类型用==比地址,equals()未重写时也比地址,重写后比内容。结合JVM内存结构(栈、堆、方法区等),解释了变量存储方式及自动装箱/拆箱原理。重点说明了Integer缓存机制(-128~127)对==结果的影响,并简述了垃圾回收(GC)与JVM调优基础。
2026-10-21 12:13:35
295
原创 JVM锁的事务边界问题及解决方案
乐观锁通过版本检查避免并发冲突,如UPDATE ... WHERE issue_num = 9;悲观锁则通过锁机制独占资源,如synchronized。锁与事务边界需合理安排:事务应在锁前开启、锁后提交。解决方法一为自注入代理,但存在循环依赖与可读性差问题;推荐拆分服务或使用AspectJ暴露代理对象,通过AopContext.currentProxy()调用事务方法,确保事务生效且代码清晰。
2026-10-21 12:11:10
390
原创 ThreadLocal及其内存泄漏问题深度解析
ThreadLocal通过线程隔离实现数据独立,其底层使用ThreadLocalMap(基于数组+线性探测的哈希表)存储数据。每个线程持有独立的Map,以ThreadLocal为弱引用键、业务对象为强引用值。键设为弱引用可避免内存泄漏,但需手动调用remove()清除value,防止因强引用链导致的内存泄漏。相比synchronized的互斥锁机制,ThreadLocal以空间换时间,实现并行访问,从根本上规避死锁。核心设计:弱键强值 + 自动清理 + 手动释放。
2026-09-27 20:00:44
372
原创 彻底搞懂Spring三级缓存:从二级到三级,差的不止是一层缓存
本文系统阐述Spring IoC与DI原理,重点解析循环依赖问题及三级缓存机制。IoC通过容器管理对象创建与生命周期,实现解耦;DI完成属性注入。二级缓存可解决普通循环依赖,但无法处理AOP场景下的代理对象一致性问题。三级缓存引入工厂对象(ObjectFactory),在早期暴露时生成代理实例,确保循环依赖中注入的是代理对象,保障AOP生效。核心结论:三级缓存是支持AOP下循环依赖的关键,其本质在于延迟生成代理对象,保证依赖注入的一致性。
2026-09-27 16:51:33
259
原创 代理模式与@Transactional失效场景详解
代理模式通过在不修改原始代码的前提下,在方法调用前后动态增强功能,解决事务管理、日志记录、权限校验等需求。静态代理需手动编写代理类,扩展性差;动态代理(JDK基于接口,CGLIB基于继承)可自动生成代理对象,提升灵活性。Spring AOP 利用动态代理实现 @Transactional 等切面功能,但事务失效常见于 this 调用、final 方法或异常被捕获等情况。核心在于:必须通过代理对象调用方法,才能触发增强逻辑。
2026-09-26 20:46:17
282
原创 Redis缓存击穿、穿透、雪崩详解
缓存击穿、穿透与雪崩是高并发场景下常见问题。击穿因热点key失效引发,可用互斥锁、逻辑过期或本地缓存应对;穿透由不存在的key导致,可通过布隆过滤器、空值缓存及参数校验防护;雪崩源于大量key同时失效或Redis宕机,宜采用随机过期时间、永不过期策略、集群高可用及限流降级。三者核心区别在于影响范围与触发机制,需结合业务选择合适方案,保障系统稳定。
2026-09-26 15:42:10
853
原创 MySQL索引核心机制与应用
MySQL使用B+树作为索引结构,因其树高低、磁盘IO少,且支持高效范围查询。聚集索引存储数据与索引一体,二级索引需回表查询,可通过覆盖索引避免。联合索引遵循最左前缀匹配原则,提升查询效率。合理创建索引(如联合索引、前缀索引),避免头部模糊查询、列运算等导致的索引失效,是优化SQL性能的关键。索引非越多越好,应权衡存储与维护成本,结合慢查询日志与EXPLAIN分析精准建索引。
2026-09-25 23:01:05
713
原创 vmware虚拟机Name or service not known异常解决方案
因误操作导致VMware虚拟机网络异常,无法ping通百度且无法远程连接。经排查发现VMware NAT与DHCP服务未运行。通过停止相关服务,使用“虚拟网络编辑器”还原默认设置,重启服务后问题解决,虚拟机网络恢复正常,可成功ping通外网并实现远程连接。
2026-09-23 15:00:41
142
原创 RabbitMQ常见问题解决方法
本文系统阐述了RabbitMQ生产者与MQ端的可靠性保障机制。生产者通过重试机制提升网络异常下的发送成功率,但需注意阻塞问题;借助发布确认(Confirm)和消息退回(Return)机制,可精准感知消息投递状态,确保高可靠场景下的消息不丢失。在MQ端,通过交换机、队列及消息三级持久化,结合Lazy Queue模式降低内存压力,实现数据持久与性能平衡。建议关键业务开启异步确认与持久化,兼顾可靠性与系统性能。
2026-09-23 14:34:56
268
原创 RabbitMQ概念汇总
本文介绍了异步调用的优势及基于消息队列(MQ)的实现方案,重点讲解RabbitMQ的安装、架构与核心组件:生产者(Publisher)、交换机(Exchange)、队列(Queue)和消费者(Consumer)。通过Docker快速部署RabbitMQ,并配置管理界面与消息接口。详细说明了Fanout、Direct、Topic和Headers四种交换机类型及其路由规则,强调队列需绑定交换机才能接收消息。同时介绍虚拟主机(Virtual Host)实现数据隔离,不同vhost间资源独立,确保系统安全与灵活性。
2026-09-21 18:18:20
96
原创 分布式事务及其解决方案
本文介绍了分布式事务的背景与挑战,以商场下单为例说明多服务协同需保证事务一致性。基于此,引入阿里巴巴开源的Seata解决方案,阐述其核心角色(TC、TM、RM)及部署流程。重点对比了Seata的XA模式(强一致、锁资源)与AT模式(最终一致、基于快照回滚),并详细演示了微服务集成Seata的步骤:依赖引入、配置管理、undo_log表创建及@GlobalTransactional注解使用。最终总结二者在一致性、性能与实现机制上的差异,为分布式系统事务管理提供实用参考。
2026-09-21 10:05:55
352
原创 MySQL、PostgreSQL、Oracle的主要区别
本文总结了MySQL、PostgreSQL与Oracle在Java后端开发中常见的15项SQL语法差异,涵盖自增主键、分页查询、时间函数、字符串处理、空值处理、字段修改、批量插入及JSON操作等核心场景。主要区别包括:自增用AUTO_INCREMENT(MySQL)、SERIAL(PostgreSQL)或GENERATED BY DEFAULT(Oracle);分页语法各异,Oracle旧版用ROWNUM,新版支持OFFSET/FETCH;日期格式化使用DATE_FORMAT(MySQL)、TO_CHAR(
2026-09-20 11:19:43
73
原创 SpringAI集成与多模型支持的实现
SpringAI将大模型调用抽象为统一的Java API,简化了HTTP/JSON交互,通过ChatClient封装模型能力,实现RAG、Tool Calling等AI功能。结合BOM版本管理与Starter依赖,可便捷接入DeepSeek、智谱等多模型。通过ChatClientRegistry注册多模型客户端,支持按Agent配置动态选择模型,使大模型成为可复用的组件化能力,显著提升Agent开发效率。
2026-09-20 11:17:49
53
原创 手写一个最小的Agent
本文通过分析DeepSeek模型的单轮与多轮对话请求响应流程,揭示了大模型调用的核心机制:基于messages实现上下文记忆。结合工具调用(tools)与tool_choice: "auto",展示了模型如何通过决策(生成工具调用)与Agent系统协作执行真实任务,形成“目标-状态-交互-推进”的最小Agent闭环。整个过程体现了模型负责推理、系统负责执行、messages记录全过程的协作模式,为理解AI Agent的本质提供了实践基础。
2026-09-17 21:08:40
123
原创 Agent基础概念汇总
本文系统梳理了AI核心技术体系:大语言模型(LLM)擅长文本理解与生成;多模态模型扩展至图像、音频等跨模态处理;向量模型通过语义向量实现高效相似性检索,支撑搜索、推荐与RAG。RAG通过“检索增强生成”弥补模型知识滞后与幻觉问题。Agent作为目标驱动的自主系统,依托Agent Loop实现思考-执行循环,并通过Tool Calling调用外部工具,结合MCP统一接口标准实现模型与工具无缝协同。Skill封装任务流程,Harness提供环境交互能力,共同构建可落地的智能体系统。
2026-09-17 14:12:20
517
原创 Windows使用Docker Desktop安装pgvector
在Windows上部署pgvector可借助Docker简化流程。通过Docker Desktop(启用WSL2)拉取官方镜像pgvector/pgvector:pg17,映射端口至5433并创建容器。启动后,使用DBeaver连接数据库,执行CREATE EXTENSION IF NOT EXISTS vector;启用扩展。最后通过创建向量表、插入数据并进行相似度检索测试,验证pgvector功能正常,实现开箱即用的向量数据库环境。
2026-09-09 13:00:29
154
原创 relation “gs_package” does not exist解决办法
用navicat17导出postgres数据库的结构和数据的时候,报错 relation “gs_package” does not exist导致无法导出。
2026-08-24 22:17:35
317
原创 脚本驱动二进制包部署模式下的jar包增量更新方法
本文总结了传统Java项目采用脚本驱动二进制包部署时的jar包增量更新方法。通过对比四种主流部署模式,指出该方案适合私有化交付等传统场景。具体步骤包括:使用Maven打包→定位target目录→按日期排序识别最新jar→备份生产环境jar→替换更新jar→重启应用。同时提供了回退操作指南,只需用备份jar覆盖即可。该方法适用于需要局部更新的老系统维护,但需注意重启生效且不适合云原生环境。
2026-08-24 22:14:51
203
原创 tomcat项目在linux上的更新(替换class文件版)
本文介绍了在生产环境无法直接替换JAR包时,通过手动替换.class文件进行增量部署的方法。主要内容包括:1)备份并替换JSP文件;2)更新config配置文件;3)解压JAR包替换特定.class文件后重新打包;4)重启Tomcat服务。该方案解决了由于安全限制无法同步完整代码的问题,提供了临时部署方案,并强调操作前需做好备份以便回滚。部署步骤覆盖了Web应用常见的JSP、配置文件和Java类文件的更新场景。
2026-08-19 18:17:49
165
原创 MySQL数据库变更:DDL、DML、事务提交与回滚完整流程
文章摘要:本文总结了在Linux服务器上直接操作MySQL数据库的规范流程,包括DDL(数据定义语言)和DML(数据操作语言)操作。DDL部分详细说明了添加字段的步骤:检查字段不存在→执行ALTER TABLE→验证表结构→提供回滚方案。DML部分则介绍了插入数据的流程:检查数据不存在→开启事务执行INSERT→验证数据量→决定提交或回滚。特别强调DDL和DML要分开执行,并注意不同MySQL版本对ALTER语句的限制。该流程适用于没有可视化工具时通过命令行安全地进行数据库操作。
2026-08-18 22:08:57
186
原创 配置防火墙规则解决zookeeper漏洞
【摘要】针对ZooKeeper未授权访问漏洞,提供了三种解决方案:1)添加认证用户并设置ACL权限;2)使用密文设置ACL;3)通过防火墙配置IP白名单。基于最小影响原则,选择方案三实施。操作步骤包括:备份现有iptables规则、创建自定义链ZK2181、配置白名单IP范围(含本地和授权服务器)、设置DROP默认策略,并通过nc命令验证规则有效性。为确保持久化,执行iptables规则保存并启用开机自启。文末提供完整回滚方案,包括规则恢复或链删除操作。该方案在保证业务连续性的同时,有效限制了2181端口的
2026-08-10 17:01:33
216
原创 Linux 系统 ActiveMQ 5.15.8 升级到 5.15.16
ActiveMQ存在一个远程命令执行漏洞,攻击者可以通过默认的61616服务端口利用该漏洞执行恶意命令,导致服务器失陷。受影响版本: Apache ActiveMQ < 5.18.3 Apache ActiveMQ < 5.17.6 Apache ActiveMQ < 5.16.7 Apache ActiveMQ < 5.15.16服务器原有jdk是1.8,原有activemq是5.15.8,秉承最小改动原则升级为5.15.16。
2026-08-06 16:43:08
158
原创 Netty:从 BIO / NIO / AIO 到高性能网络框架
本文摘要: Java网络编程IO模型主要分为BIO、NIO和AIO三种。BIO是同步阻塞模型,简单但性能差;NIO采用多路复用技术,性能优异但编程复杂;AIO理论异步非阻塞但实际应用有限。Netty是基于NIO的高性能网络框架,通过Reactor线程模型、Pipeline机制等解决了NIO的复杂性,广泛应用于各类分布式系统。由于Linux对AIO支持不完善,Netty选择基于NIO进行优化,成为当前主流的网络通信解决方案。四种模型各有特点,开发者需根据实际场景选择最合适的方案。
2026-01-19 15:13:13
1079
原创 Windows全局快捷键
Windows系统提供了三种高效窗口管理快捷键:Win+Tab打开任务视图,以缩略图形式展示所有窗口和虚拟桌面;Alt+Tab快速切换最近使用的窗口;Win+D一键显示/恢复桌面。这些组合键通过可视化界面和循环切换机制,大幅提升了多窗口操作的便利性,让用户能快速定位和管理多个工作窗口。
2026-01-17 16:40:13
498
原创 Modbus协议概述及报文解析
Modbus协议是工业自动化领域广泛应用的通信协议,由Modicon公司(现施耐德电气)开发。其核心功能是规范工业设备间的数据交互方式,确保设备间通信的标准化。协议包含三种形式:Modbus RTU(基于RS-485)、Modbus TCP(基于以太网)和已淘汰的Modbus ASCII。Modbus采用主从架构,通过功能码定义操作类型,数据存储在16位寄存器中,支持多种数据类型转换(如short、float等)。RTU版本使用CRC校验,TCP版本则利用TCP协议确保可靠性。该协议既可作为应用层协议,也能
2026-01-17 16:21:47
1130
原创 Docker的使用
本文系统介绍 Docker 技术及其价值,阐述其通过容器化解决传统部署环境依赖强、繁琐易错等痛点,实现高效平滑交付。内容涵盖快速入门,以 MySQL 为例演示跨平台优势,并详解常用命令、数据卷映射、Dockerfile 构建及网络配置。最后结合 Java 与前端项目实战,说明容器化部署流程,并介绍通过 Docker Compose 实现多容器一键编排与管理,有效降低微服务架构的部署复杂度。
2025-12-29 13:34:24
1019
原创 CentOS7上Docker的安装
本文介绍了在CentOS7.9系统上通过安装包方式部署Docker的完整流程。首先卸载旧版本Docker组件,然后下载并解压Docker25.0.5安装包,将二进制文件复制到系统路径。接着配置systemd服务并设置开机自启,最后通过运行hello-world容器验证安装成功。该方法解决了CentOS7官方镜像源不可用的问题,提供了一种可靠的Docker安装方案。
2025-12-28 00:48:36
516
原创 VMware配置MobarXterm SSH客户端
本文介绍了MobarXterm的安装与配置方法:首先下载安装免费版,通过SSH连接虚拟机;其次配置默认编辑器为VSCode,设置鼠标右键粘贴功能;最后调整SSH参数并关闭不必要的X-Server服务。这些设置优化了终端操作体验,提高了工作效率。
2025-12-28 00:18:04
495
原创 CentOS7的安装
本文详细介绍了在VMware Workstation Pro 17中创建和安装CentOS 7虚拟机的完整流程。主要内容包括:1)创建虚拟机的基本配置步骤,建议分配4核CPU和8GB内存;2)CentOS 7安装过程,涵盖语言选择、磁盘分区、网络配置(建议设置静态IP)和root密码设置;3)安装后的网络测试方法;4)创建虚拟机快照的重要性和操作步骤,建议安装完成后立即创建快照以便后续恢复。该教程提供了从零开始搭建CentOS虚拟机的完整指导,特别强调了网络配置和系统备份等关键环节。
2025-12-27 21:43:44
752
原创 MybatisPlus快速入门
本文介绍了MybatisPlus的基本使用方法和常见注解。首先说明了引入依赖的注意事项,MybatisPlus可替代Mybatis原有依赖。其次详细讲解了Mapper接口需要继承BaseMapper并指定泛型实体类。然后重点介绍了四个核心注解:@TableName用于指定表名,@TableId用于配置主键(包含IdType类型说明),@TableField用于映射普通字段,最后提供了配置示例。全文简洁明了地概括了MybatisPlus的基本配置步骤和常用注解功能。
2025-12-27 20:15:03
173
原创 VS Code 安装时不显示安装路径选项的原因与解决办法
VSCode安装时不显示路径选项是因为使用了User Installer(用户版),其默认安装在用户目录且无法更改。要自定义安装路径,需下载System Installer(系统版),安装时会显示路径选择界面。解决方法:在官网下载页面选择System Installer版本进行安装即可实现路径自定义。
2025-12-15 20:40:43
2818
3
原创 word自带word转pdf功能
本文介绍了将Word文件转换为PDF的6个简单步骤:1)打开Word文件;2)点击"文件"选项;3)选择"另存为"功能;4)选择保存位置(如桌面);5)将保存类型更改为PDF格式;6)点击保存完成转换。转换成功后,系统会自动生成PDF文件并保存在指定位置。整个过程操作简单,仅需几个点击即可实现格式转换。
2025-08-01 11:32:23
550
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅