- 博客(162)
- 资源 (3)
- 收藏
- 关注
原创 [超轻量级消息队列(MQ)] Redis 不只是缓存:我用 Redis Stream 实现了一个 MQ(自定义注解方式)
Redis Stream 作为轻量级消息队列的实践 本文介绍了如何利用 Redis 5.0 引入的 Stream 数据结构实现轻量级消息队列。相比传统 MQ 方案,Redis Stream 提供了消息持久化、消费者组、ACK 确认等核心功能,同时运维成本更低。 文章详细讲解了 Redis Stream 的核心概念和关键命令: XGROUP CREATE 创建消费者组 XADD 发送消息 XREADGROUP 消费消息 XACK 确认消息 通过模拟订单支付业务场景,展示了命令的实际使用流程。最后介绍了基于 S
2026-01-08 09:15:00
47315
原创 LangChain4j+JDK1.8实测有效!这套组合让 LLM 告别 “过期答案” !SearXNG 实时搜索 + Milvus 本地知识库 + LLM推理 RAG增强全拿捏
本文介绍了一个基于Java 1.8环境的RAG(检索增强生成)系统实现方案。项目使用SpringBoot 2.6.5框架,集成LangChain4j 0.35.0进行大语言模型交互,搭配SearXNG搜索引擎和Milvus向量数据库。文章详细列出了项目所需的Maven依赖配置,包括Spring、MyBatis-Plus、MySQL、LangChain4j组件等核心库。方案支持通过Ollama部署本地模型或使用阿里云等云服务,并提供了JDK17+用户的替代方案参考链接。项目实现了检索增强的智能问答功能。
2025-11-03 09:15:00
60636
原创 做AI智能体的宝子们!Spring AI Alibaba 搭配 MySQL 存聊天回忆,流式输出真的绝,结合Function Calling增强大模型能力,建立属于你的私人Agent!
本文介绍了在SpringBoot项目中集成SpringAI和SpringAI Alibaba实现AI对话功能的方法。主要内容包括:1) 环境准备:JDK17、SpringBoot3.2.3、SpringAI相关依赖;2) 引入必要依赖,包括SpringAI Alibaba、MyBatis Plus等;3) 对比了三种LLM记忆存储方式的特点;4) 创建了MySQL记忆表chat_messages用于存储对话记录;5) 创建了对应的JPA实体类ChatMessage。该方案支持对话记忆持久化,适合生产环境使用
2025-10-17 08:45:00
61514
2
原创 递归算法(及其衍生算法:缓存,分治,回溯)
递归函数 = 终止条件 + 递归关系终止条件:当大问题被拆解成能轻松解决的小问题时,运行终止条件中的逻辑递归关系:定义如何将大问题拆解为小问题
2022-12-06 14:52:01
244629
17
原创 你好!Docker【概念+源码+保姆式教程】
文章目录一、Docker概述:1.初识Docker:2.Doker的优点:3.Docker的工作流程:二、Docker镜像:三、Docker容器:四、Dockerfile:五、Docker-Compose:1.Docker-Compose是做什么的:2.如何使用Compose:六、Dokcer常用命令:七、小名的Dokerfile实例练习八、小名的Docker-Compose实例练习一、Docker概述:1.初识Docker: 此概念引自:菜鸟教程 Docker 是一个开源的应用容器.
2021-02-13 11:50:20
275283
14
原创 Java编程思想笔记目录
祝各位 程序???? 节日快乐????写在前面: 前阵子,小名“偷偷地”发了一批文章,是小名的一些读书笔记✍,那么为什么要把笔记发出来呢,嘻嘻,当然是小名的????不太灵光啦????但是吧,小名坐地铁或者走在大街上的时候,脑袋里总是会想一些有的没的,不排除会想一些Java基础的知识,时常联系不起来,就有可能别扭一整天。所以呢,把它发出来一方面是为了和大
2020-10-24 11:05:22
230414
115
原创 LeetCode第102题&107题 二叉树的层次遍历 — 一招鲜吃遍天~
不是很理解,同样是二叉树的层次遍历问题, 102题是Medium ,107题是 Easy ???? 多年的强迫症又犯了????LeetCode第 102 题 题目(Medium):给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-...
2020-05-07 20:57:07
218358
原创 解读LeetCode第38题——逻辑怪才看得懂的题目
一道读题读到懵的题目,通过这题,我发现,我不止是算法差,语文更差!嗯!很多题不是不会!而是我没有读懂题!没错!就是这个原因!????题目:「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下: 1. 1 2. 11 3.&n...
2020-04-30 14:16:46
222218
24
原创 面试官!你又双叒叕问HashMap!
文章目录HashMap的数据结构(图解+源码分析)数组单链表HashMap如何插入数据(图解+源码分析pos)为什么初始化容量是2的倍数(源码分析)HashMap如何解决Key冲突(图解+源码分析)HashMap如何扩容(源码分析)HashMap查询与删除HashMap序列化(源码分析)总结HashMap的数据结构(图解+源码分析)HashMap快速索引数组定义:连续的内存,具有共同特性的...
2020-04-29 20:22:56
220495
69
原创 见面试官前,掏出来看看系列(三)之——JavaSE思维导图(持续更新中……)
文章目录输入输出流(Java IO)字节流字符流File 类Socket(套字节)NIO(非阻塞 IO)容器Map面向对象技术重载和覆盖的区别面向对象的特征字符串和数组字符串创建与存储的机制”==“、equals()和hashCode有什么区别String、StringBuffer、StringBuilder和StringTokenizer的区别在java中的数组length属性、length()...
2020-04-29 10:48:53
219629
20
原创 见面试官前,掏出来看看系列(二)之——数据库原理思维导图
文章目录数据库原理SQL语言数据查询语句数据操作语句(DML)数据定义语句(DDL)数据控制语句(DCL)内连接&外连接内连接(自然连接)外连接事务事务必须满足四个属性:原子性一致性隔离性(独立性)持久性存储过程存储过程&函数区别和联系范式目的:第一范式(1NF)第二范式(2NF)第三范式(3NF)鲍依斯-科得范式(BCNF)第四范式(4NF)触发器触发器&存储过程的区别D...
2020-04-28 17:36:18
219614
25
原创 用上帝视角俯瞰单点登录的前世与今生(内含两种实现方式的源码)
目录1.什么是单点登录?2.单点登录的前世与今生——前世篇(SSO)2.1.单点登录的定义是:2.2.总结成简单一句话说就是:2.3.单点登录的优点:2.4.拿去游乐园买票来讲一下单点登录的简单实现机制:2.5.单点登录的实现机制:2.6.单点登录的分类:2.7.同域SSO:2.7.1.同域SSO概念:2.7.2.同父域SSO概念:2.7.3....
2020-03-28 21:43:54
221281
54
原创 多数据源上下文在异步线程中不会自动传播:一次 CompletableFuture 排查记录
数据库查询返回 null 的异步上下文问题 问题现象 系统中配置了动态多数据源(主库 master 和英文业务库 en) 接口基于 Accept-Language 请求头自动选择数据源 查询返回 null 但数据库中存在对应数据 报错出现在 CompletableFuture 的异步查询中 根本原因 数据源上下文使用 ThreadLocal 存储,只对当前线程有效 CompletableFuture 默认使用 ForkJoinPool 执行异步任务 异步线程无法继承原线程的 ThreadLocal 上下文
2026-07-27 08:45:00
293
原创 Spring Boot SSE + Nginx 配置:解决 EventSource 不实时返回、连接超时、流式响应被缓冲问题
本文记录 Vue3 + Spring Boot 使用 SSE 时,线上经过 Nginx 后出现不实时返回和超时异常的排查过程。通过对比本地直连与线上代理链路,最终定位到 Nginx 代理缓冲和超时配置问题,并通过关闭 `proxy_buffering`、调整 `proxy_read_timeout` 解决。
2026-06-15 08:45:00
752
原创 【已解决】SourceTree拉取Github的私有仓库(SSH方式)
本文详细介绍了如何在SourceTree中配置GitHub账户并拉取私有仓库的完整流程。主要内容包括:1)通过OAuth登录GitHub账户;2)获取SourceTree生成的SSH公钥并添加到GitHub账户;3)修改SSH连接地址格式(将git@github.com替换为git@XiaoMing-GitHub);4)解析这种修改的必要性,即SourceTree使用自定义Host别名来管理多账号、多SSH密钥的场景。该教程解决了使用SourceTree拉取GitHub私有仓库时的常见连接问题,特别适合需要
2026-05-19 09:00:00
7050
原创 【编码魔法师系列_结构型7】代理模式「静态和动态代理」(Proxy Pattern)
摘要 代理模式通过引入代理对象控制对目标对象的访问,常用于简化复杂操作、增强功能或实现延迟加载。静态代理通过手动编写代理类实现,而动态代理利用反射机制动态生成代理对象。本文介绍了代理模式的概念、适用场景、优缺点,并通过静态代理和动态代理(基于InvocationHandler)两种实现方式演示了如何为网站访问添加日志功能。代理模式在Spring框架中被广泛应用于事务管理、延迟加载和安全控制等场景。
2026-04-30 12:15:00
12951
原创 事务隔离级别一看就会:用一个业务场景串联脏读、不可重复读与幻读
本文通过MySQL事务隔离级别的实验演示了数据库并发访问中的三类问题:脏读、不可重复读和幻读。实验设置商品价格修改场景,分别在读未提交、读已提交和可重复读隔离级别下观察现象。结果表明:读未提交会出现脏读;读已提交解决了脏读但存在不可重复读;可重复读解决了前两者但可能出现幻读(InnoDB引擎通过MVCC机制基本避免)。最后对比了四种隔离级别对三类问题的防范能力,其中可串行化级别能完全避免所有问题。实验采用"快照读"和"当前读"两种方式,直观展示了幻读现象的本质差异。
2026-02-09 09:15:00
36386
原创 [超轻量级延时队列(MQ)] Redis 不只是缓存:我用 Redis Stream 实现了一个延时MQ(自定义注解方式)
本文在上一篇基于 Redis Stream 实现普通 MQ 的基础上,进一步改造为延时队列。文章首先回顾了 Redis Stream 作为轻量级消息队列在持久化、消费者组、ACK 与失败恢复等方面的优势,随后指出 Stream 本身不支持延时投递的问题。为此,引入 ZSET 作为延时层,利用 score 时间戳排序存放待执行消息,通过定时扫描将到期任务重新投递到 Stream 中消费。整体架构由“ZSET 延时存储 + 定时调度器 + Stream 消费”组成,既保留了 Stream 的可靠消费能力,又实现
2026-01-12 09:15:00
44392
原创 救命!MySQL 时间列是 varchar,MyBatis-Plus 还能 1 分钟过滤过期信息?
本文介绍了如何在不修改数据库表结构的情况下,解决varchar类型时间字段无法直接进行日期比较的问题。作者通过MyBatis-Plus的apply方法结合MySQL的STR_TO_DATE函数,将字符串时间转换为日期类型后进行条件过滤。文章详细讲解了STR_TO_DATE函数的使用方法、参数说明以及apply方法的使用场景和注意事项,并展示了最终生成的SQL语句。该方案既避免了修改表结构的风险,又能精准实现需求,是一个实用的技术解决方案。
2025-08-29 08:45:00
71410
原创 告别日期计算烦恼!ChronoUnit.DAYS.between () 实现任意两个日期的精准天数差计算
文章摘要: 本文介绍了如何实现一个基于时间窗口的打卡频率限制功能。业务需求是在N天内最多允许打卡M次,需考虑跨月情况。实现方案包括:1)存储打卡记录的日期信息;2)使用ChronoUnit.DAYS.between()计算时间差,筛选出N天内的记录;3)通过计数器验证M次限制。文章还详细讲解了ChronoUnit的作用及between()方法的使用,该方法能准确计算两个日期之间的天数差。最后提供了示例场景和代码实现,帮助开发者理解时间窗口限制的业务逻辑。
2025-08-28 09:00:00
71387
原创 @RequestMapping接收文件格式的形参(方法参数)
本文介绍了SpringBoot实现多文件上传到OSS并保存文件名到数据库的方法。关键点包括:1)使用List<MultipartFile>接收多个文件;2)通过@ModelAttribute和MediaType.MULTIPART_FORM_DATA_VALUE处理表单数据;3)获取文件扩展名的工具方法;4)将文件名用逗号连接存入数据库的格式处理。示例代码展示了如何将数字列表转换为以逗号分隔的字符串,类似处理文件名列表。
2025-08-12 18:20:49
78905
原创 SearXNG docker部署+Nginx鉴权SearchXNG的API(宝塔面板)
SearXNG是一款开源的元搜索引擎,可聚合240+主流引擎结果,提供无追踪的搜索体验。本文详细介绍了如何在宝塔面板中部署SearXNG:首先克隆searxng-docker仓库,然后修改settings.yml配置文件(包括启用Bing引擎、设置密钥等),调整docker-compose.yaml的端口映射,最后通过docker compose启动服务。部署完成后可通过公网IP访问Web界面。文章还对比了SearXNG与其他搜索引擎在开源性、隐私保护、自托管等方面的优势,特别适合需要数据自主控制的用户集成
2025-08-08 11:44:18
82856
转载 sourceTree回滚代码到指定版本
使用SourceTree回滚代码到指定版本的方法:1)选中目标分支,右键需要回滚的版本选择"重置到此次提交",使用"强行合并"选项;2)找到最新版本再次右键重置,这次选择"软合并";3)最后提交系统自动生成的修改文件即可完成版本回滚。该方法通过两次不同的重置操作(强制+软合并)实现代码回退,同时保留了提交记录。
2025-08-07 10:08:33
82638
原创 这年头谁还没个CI/CD?Jenkins从GitHub私有仓库(SSH)拉代码+Docker部署SpringCloud微服务真不难!
本文介绍了Jenkins的安装配置及自动化部署流程。主要内容包括:1)Jenkins环境准备与安装(JDK17+/Maven/Docker/Git);2)GitHub私有仓库SSH密钥配置;3)Pipeline任务创建与参数化构建配置;4)Maven项目集成Docker(通过dockerfile-maven-plugin插件)实现容器化部署。文中提供了详细的图文操作指引,包括Jenkins插件安装、SSH密钥管理、分支构建配置以及Dockerfile编写规范。该方案支持多模块微服务的选择性构建和容器化部署。
2025-07-07 09:00:00
96423
原创 BigDecimal判断值相等的一些唧唧歪歪
本文探讨了在支付场景中使用BigDecimal比较金额时可能遇到的精度问题。当比较不同精度的数值(如1和1.00)时,equals()方法会因精度不同而返回false。解决方法是通过stripTrailingZeros()去除尾部零后再比较。文章还指出了使用double构造BigDecimal可能导致精度丢失的问题,推荐使用String参数的构造函数或配合setScale()方法处理。最后提醒在实际业务中需测试选择合适的解决方案。
2025-07-01 11:06:10
96874
原创 [特殊字符]救命!GitHub私库拉取失败让我精分,直到我悟出了方法三…—— Sourcetree拉取GitHub Private私有仓库
脱不下长衫的基层新时代农民工,拉取GitHub私有仓库的踩坑解药
2025-05-26 09:15:00
108708
原创 【编码魔法师系列_结构型6】享元模式(Flyweight Pattern)
创建抽象类Bike定义共享单车的内部状态isBook,其中0表示当前这辆共享单车没有被租用。租用共享单车时,同一辆共享单车,可以被多个人租用。其中内部状态是id,外部状态就是userName。因为需要分离出内部状态和外部状态使得系统更加复杂,读取外部状态使得运行时间变长。创建共享单车的工厂类,来根据id创建共享单车,并采用单例模式节省程序开销。重用相同或相似对象相同的内部状态,不能共享外部状态,提高复用性。通过工厂类租用车,其中李四还车了,所以赵五有可能还会借到1号车。字符串池,数据库池,线程池等。
2025-03-17 09:15:00
121387
原创 【编码魔法师系列_结构型4】装饰模式(Decorator Pattern)
学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。
2025-01-13 09:30:00
122776
原创 前后端分离https转http;处理 已屏蔽:(mixed-content)和 net::err_ssl_protocol_error 报错;Nginx反向代理后获取客户端真实IP一篇保姆级教程
1、Nginx处理前后端分离https转http;2、处理已屏蔽:(mixed-content)和 net::err_ssl_protocol_error 报错;3、Nginx反向代理后获取客户端真实IP
2024-10-28 14:29:36
146559
原创 【编码魔法师系列_结构型3】组合模式(Composite Pattern)
学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。
2024-10-24 16:50:20
145602
原创 【编码魔法师系列_结构型2】桥接模式(Bridge Pattern)
学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。
2024-08-14 09:15:00
166391
原创 【编码魔法师系列_结构型1】适配器模式(Adapter Pattern)
学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。
2024-05-30 09:30:00
187925
1
原创 【编码魔法师系列_结构型5】外观模式(Facade Pattern)
学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。
2024-03-14 09:00:00
197474
1
原创 【编码魔法师系列_构建型4】原型模式(Prototype Pattern)
学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。
2024-01-15 09:00:00
201136
1
原创 【编码魔法师系列_构建型1.3 】抽象工厂模式(Abstract Factory)
学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。
2023-12-04 09:00:00
204508
1
原创 【编码魔法师系列_构建型3】建造者模式(Builder Pattern)
学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。
2023-11-13 09:30:00
204976
1
原创 【编码魔法师系列_构建型2.2】单例模式「懒汉式」(Singleton Pattern)
学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。
2023-11-06 09:30:00
205006
原创 【编码魔法师系列_构建型2.1】单例模式「饿汉式」(Singleton Pattern)
学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。
2023-10-16 09:00:00
213959
原创 【编码魔法师系列_构建型1.2 】工厂方法模式(Factory Method)
学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。
2023-09-25 09:30:00
219701
RabbitMQ安装大礼包【@进阶的小名】.rar
2022-02-18
【小名自打包,全网最完整版本!】《Java编程思想》net.jar
2020-09-18
配置好的CasServer
2020-04-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅