自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

chools、一个破敲代码的,感谢收看。

个人学习经验和观点分享。仅供参考

  • 博客(38)
  • 收藏
  • 关注

原创 RAG高级知识 - 什么是混合检索策略?什么是大模型幻觉?有哪些高级RAG架构?一篇文章带你快速搞懂!

本文探讨了AI领域的混合检索策略、大模型幻觉问题及RAG应用评估方法。混合检索策略包括并行、级联和动态混合三种方式,针对不同查询需求灵活选择。大模型幻觉表现为事实性、逻辑性和自洽性错误,可通过RAG引入外部知识源、提示工程优化等方法减轻。RAG应用评估关注检索质量(召回率、精确率等)和生成质量(事实准确性等)。文章还介绍了四种高级RAG架构:自纠错RAG、自省式RAG、检索树RAG和多智能体RAG系统,分别解决不同场景下的信息检索与生成问题。

2026-04-16 13:33:33 102

原创 什么是RAG?RAG的工作原理?结合Spring AI中的RAG,一篇文章告诉你!

RAG(检索增强生成)是一种结合信息检索与AI生成的技术架构,通过外部知识库解决大模型的知识时效性和幻觉问题。其核心流程包括:文档收集切割、向量转换存储、文档过滤检索、查询增强生成四个阶段。关键技术涉及Embedding模型将文本转为向量,向量数据库实现高效相似性搜索,以及混合检索策略优化结果。SpringAI框架提供了完整的ETL流程支持和向量存储接口,开发者可通过DocumentReader、Transformer、Writer等组件实现知识库构建,最终生成基于真实资料的高质量回答。该技术显著提升了AI

2026-04-15 15:33:03 342

原创 Java后端拥抱AI开发之个人学习路线 - - Spring AI【第四期】(Tool + MCP)

文章介绍了两种AI模型增强技术:ToolCalling和MCP协议。ToolCalling允许大语言模型通过函数调用与外部工具交互,详细说明了其工作流程和Java实现案例。MCP协议则标准化了模型与数据源的连接方式,阐述了其CS架构组成,并提供了本地和远程(如百度地图API)两种实现方案。两种技术都能扩展AI模型能力,使其从被动应答升级为主动调用工具。文章包含具体的代码示例和配置说明,为开发者提供了实用参考。

2026-04-07 18:39:13 349

原创 Java后端拥抱AI开发之个人学习路线 - - Spring AI【第三期】(向量数据库 + RAG检索增强生成)

本文介绍了向量化和向量数据库的核心概念与应用。主要内容包括:1)文本向量化嵌入模型的工作原理,将文本转换为向量数组以捕捉语义信息;2)向量数据库的特性和优势,支持高效相似性搜索而非精确匹配;3)RedisStack作为增强版向量数据库的功能扩展;4)RAG(检索增强生成)技术原理及实现案例,通过结合向量数据库和大语言模型解决LLM知识更新和幻觉问题。文章提供了SpringAI集成RedisStack实现文本向量化存储检索的完整代码示例,以及基于RAG的运维知识问答系统开发实践。

2026-04-03 11:52:00 418

原创 Java后端拥抱AI开发之个人学习路线 - - Spring AI【第二期】

本文介绍了AI交互中的Prompt概念及其四大角色(USER、ASSISTANT、SYSTEM、TOOL),详细说明了提示词模板和格式化输出的实现方法。重点阐述了ChatMemory机制如何通过Redis实现对话持久化,包括配置步骤和核心代码实现。文章还展示了MessageWindowChatMemory的消息窗口管理功能,以及如何通过ChatMemoryAdvisor维护对话上下文,最终实现基于用户ID的连续对话存储方案。

2026-04-02 15:44:43 268

原创 Java后端拥抱AI开发之个人学习路线 - - Spring AI【第一期】

本文介绍了Ollama工具的本地大模型部署方法及其在微服务中的应用。Ollama作为类似Docker的大模型管理工具,可通过简单命令部署各类LLM模型。在项目对接方面,详细比较了ChatClient和ChatModel两种API的差异,ChatClient提供更简便的Fluent API,而ChatModel则更灵活但需要更多编码。文章还探讨了SSE流式输出技术及其应用场景,包括两种实现方式,并提出了通过定义不同Bean实现多模型共存的解决方案。这些技术可显著提升大模型应用的开发效率和用户体验。

2026-04-01 11:52:28 389

原创 一篇文章带你搞懂Java“设计模式”! - - 超长文(涵盖23种)万字总结!【汇总篇】

本文全面总结了Java设计模式的七大原则和23种设计模式,重点介绍了单例模式的8种实现方式。七大原则包括:单一职责、接口隔离、依赖倒置、里氏替换、开闭原则、迪米特法则和合成复用原则,这些原则指导我们编写高内聚低耦合的代码。单例模式部分详细分析了饿汉式、懒汉式、双重检查、静态内部类等实现,比较了它们的线程安全性、性能和适用场景。其中双重检查和静态内部类方式在保证线程安全的同时兼顾效率,是推荐的实际开发方案。全文通过代码示例和优缺点分析,帮助开发者深入理解设计模式的核心思想和实践应用。

2026-03-12 09:23:47 464

原创 一篇文章带你搞懂“设计模式”! - - 责任链模式(23)

责任链模式是一种行为型设计模式,它将多个处理对象连接成链,使请求沿链传递直到被处理。该模式包含抽象处理者(定义接口和设置后继者)、具体处理者(实现处理逻辑)和客户端(创建处理链)。优点在于解耦请求和处理,提高灵活性,但可能影响性能,需控制链长度。适用于多级审批、Web请求处理等场景,如请假流程、Tomcat编码处理等。调试时需注意类似递归的复杂逻辑。

2026-03-11 11:29:48 174

原创 一篇文章带你搞懂“设计模式”! - - 策略模式(22)

策略模式是一种行为设计模式,通过定义算法族并封装成独立策略类,使它们可以相互替换。该模式包含三个核心组件:环境类(Context)持有策略实例、抽象策略类(Strategy)定义接口、具体策略类(ConcreteStrategy)实现不同算法。其优势在于将变化与不变代码分离,遵循"开闭原则",避免多重条件判断,提高扩展性;但缺点是会增加类数量,且客户端需了解所有策略。该模式体现了多用组合少用继承、面向接口编程等设计原则。

2026-03-11 11:28:22 187

原创 一篇文章带你搞懂“设计模式”! - - 状态模式(21)

状态模式是一种行为设计模式,用于解决对象在不同状态下行为变化的问题。该模式通过将每个状态的行为封装到独立的具体状态类中,实现状态与行为的解耦。核心组件包括抽象状态类、具体状态类、上下文类和客户端。状态转换可通过环境类统一管理或由具体状态类负责。该模式适用于对象行为依赖状态、需要消除大量条件判断的场景,能提高代码可读性和可维护性,符合开闭原则。但状态过多会导致类数量增加。典型应用包括游戏角色状态转换、审批流程等。

2026-03-10 09:21:39 32

原创 一篇文章带你搞懂“设计模式”! - - 解释器模式(20)

解释器模式是一种用于语言解析的设计模式,通过定义文法规则并将其表示为类结构来实现表达式的解释执行。该模式包含抽象表达式、终结符表达式、非终结符表达式和环境角色,通过构建抽象语法树(AST)并递归调用interpret()方法完成解释过程。典型应用场景包括编译器、表达式计算和正则表达式处理等。虽然解释器模式能灵活扩展语言功能,但存在类膨胀、递归调试复杂和执行效率降低等问题。该模式适用于需要解释简单语法的场景,如算术表达式解析等。

2026-03-10 09:19:50 305

原创 一篇文章带你搞懂“设计模式”! - - 备忘录模式(19)

备忘录模式是一种行为型设计模式,用于在不破坏封装性的前提下保存和恢复对象状态。该模式包含三个核心角色:发起人(Originator)负责创建和恢复状态、备忘录(Memento)存储状态、管理者(Caretaker)保存备忘录对象。实现步骤包括:定义内部备忘录类、提供创建/恢复方法、管理者保存备忘录、客户端调用保存/恢复操作。该模式适用于需要"后悔"功能的场景(如撤销操作、游戏存档、事务回滚等),能有效封装状态保存细节,但需注意内存消耗问题,可与原型模式配合优化资源使用。

2026-03-06 16:25:21 185

原创 一篇文章带你搞懂“设计模式”! - - 中介者模式(18)

摘要:中介者模式是一种行为型设计模式,通过引入中介对象来封装对象间的交互,将网状结构转为星型结构实现解耦。该模式包含中介者(Mediator)和同事类(Colleague)两类角色,MVC中的Controller就是典型应用。其优点在于降低对象间依赖,但需注意避免中介者过度复杂化。适用于对象引用关系复杂、需要复用对象或封装多类行为的场景,能有效简化系统结构,但过度使用可能导致中介者成为系统瓶颈。

2026-03-06 16:23:11 234

原创 一篇文章带你搞懂“设计模式”! - - 观察者模式(17)

观察者模式是一种行为型设计模式,通过定义对象间一对多的依赖关系实现状态变更通知。该模式包含被观察者(维护观察者列表并通知变更)和观察者(接收通知并更新)两个核心角色,支持动态添加观察者且符合开闭原则。其优势在于支持广播通信和事件驱动编程,但存在遍历通知的性能开销和观察者过多时的可读性问题。适用于需要解耦对象间通信的场景,但需权衡大规模应用时的性能影响。

2026-03-06 09:16:17 225

原创 一篇文章带你搞懂“设计模式”! - - 迭代器模式(16)

迭代器模式是一种行为型设计模式,它提供统一的接口来遍历不同类型的集合对象,而无需暴露其内部结构。该模式通过抽象聚合接口和迭代器接口实现,具体聚合类返回对应的迭代器实例。优点包括统一的遍历方法、隐藏内部实现、遵循单一职责原则;缺点是每个聚合对象都需要一个迭代器,可能产生大量迭代器对象。适用于需要展示或遍历相似对象集合的场景。

2026-03-05 17:01:05 345

原创 一篇文章带你搞懂“设计模式”! - - 访问者模式(15)

访问者模式是一种行为设计模式,它通过将数据结构与数据操作分离,在不改变数据结构的前提下定义新的操作。该模式包含访问者接口、具体访问者、元素接口、具体元素和对象结构等主要角色,适用于需要对稳定数据结构进行多种不同操作的场景。其优点包括符合单一职责原则、扩展性强、灵活性高,能统一处理报表、UI等功能;缺点是违背了依赖倒转原则,且具体元素变更困难。该模式适合数据结构稳定但功能需求频繁变化的系统。

2026-03-05 10:19:07 150

原创 一篇文章带你搞懂“设计模式”! - - 命令模式(14)

命令模式是一种行为设计模式,通过将请求封装为对象实现发送者和接收者的解耦。该模式包含四个核心角色:命令接口(Command)、具体命令(ConcreteCommand)、接收者(Receiver)和调用者(Invoker)。工作原理是调用者触发命令对象执行,而无需知道具体实现。优势在于支持撤销/重做、命令队列和动态配置行为,适用于GUI操作、事务系统等场景。典型应用包括界面按钮命令、订单撤销和任务调度等。虽然可能增加系统复杂度,但能有效分离请求发起与执行逻辑,提高系统灵活性。

2026-03-04 15:31:32 440

原创 一篇文章带你搞懂“设计模式”! - - 模板模式(13)

模板方法模式是一种行为型设计模式,在抽象类中定义算法骨架,将可变步骤延迟到子类实现。该模式通过封装不变部分、扩展可变部分实现代码复用,符合开闭原则。其核心特点包括使用钩子方法让子类选择性覆盖,以及通过final关键字保护模板方法。虽然能提高代码复用性,但会增加子类数量,且存在反向控制结构可能影响代码可读性。适用于具有相同执行流程但部分实现不同的多个子类场景,尤其适合处理重要复杂的方法。

2026-03-04 14:51:27 35

原创 一篇文章带你搞懂“设计模式”! - - 代理模式(12)

代理模式是一种结构型设计模式,通过代理对象控制对目标对象的访问,实现功能扩展。主要分为三种类型:静态代理要求代理与目标对象实现相同接口;动态代理(JDK代理)利用反射机制动态生成代理对象;Cglib代理通过生成子类实现代理,适用于无接口的目标对象。根据目标对象是否实现接口选择JDK代理或Cglib代理。代理模式有多种应用场景,如防火墙代理、缓存代理、远程代理和同步代理等,分别用于访问控制、资源缓存、远程调用和多线程同步。该模式在不修改目标对象的前提下增强功能,广泛应用于AOP编程中。

2026-03-03 17:24:22 171

原创 一篇文章带你搞懂“设计模式”! - - 享元模式(11)

享元模式是一种通过共享对象减少内存占用的设计模式,适用于处理大量相似对象的场景。它将对象分为可共享的内部状态和不可共享的外部状态,通过工厂类管理对象池。当系统需要对象时,先检查对象池中是否存在,存在则直接使用,不存在才创建新对象。该模式能显著降低内存消耗,提高系统性能,常用于数据库连接池、字符串常量池等场景。实现时需注意区分内部/外部状态,并确保外部状态不被内部状态改变。享元模式虽提升效率,但也增加了系统复杂度。

2026-03-03 15:42:21 1325

原创 一篇文章带你搞懂“设计模式”! - - 外观模式(10)

外观模式(Facade)为复杂子系统提供统一接口,简化客户端调用。它通过Facade类统一调度子系统功能,屏蔽内部细节,降低耦合度。该模式优点包括:简化客户端使用、提高子系统可维护性、便于分层设计,特别适用于遗留系统改造。但需注意避免过度使用,应根据系统分层和维护需求合理选择直接调用或外观模式。关键是以系统层次清晰、易于维护为目标。

2026-03-02 16:33:25 236

原创 一篇文章带你搞懂“设计模式”! - - 组合模式(9)

组合模式是一种结构型设计模式,用于处理树形结构对象。它将对象组合成树状层次结构,使客户端能一致地处理单个对象和组合对象。核心组件包括抽象Component接口、Leaf叶子节点和Composite组合节点。该模式简化了客户端操作,支持扩展复杂层次结构,适用于文件系统、组织结构等树形数据场景。优点是提供统一访问方式,但要求对象间差异不能过大。典型应用包括需要递归处理组件的情况。

2026-03-02 16:06:03 475

原创 一篇文章带你搞懂“设计模式”! - - 装饰者模式(8)

装饰者模式是一种动态扩展对象功能的设计模式,它通过组合和委托的方式比继承更具弹性。该模式包含抽象构件、具体构件、抽象装饰和具体装饰四种角色,允许在运行时为对象添加新行为。装饰者模式的特点是可以在不修改原有对象的情况下添加功能,支持多个装饰器堆叠使用,且装饰后的对象仍保持原有接口。典型案例包括咖啡调料添加和Java的IO流处理。该模式的优点在于灵活扩展功能,但过度使用可能导致系统复杂度增加。

2026-02-28 16:46:57 294

原创 一篇文章带你搞懂“设计模式”! - - 桥接模式(7)

桥接模式是一种结构型设计模式,通过将抽象与实现分离到不同类层次中,使两者能够独立变化。该模式基于最小设计原则,利用封装、聚合和继承实现职责分离。主要优点包括提高系统灵活性、可扩展性,符合开闭原则和合成复用原则,同时能减少子类数量。但会增加设计复杂度,要求开发者识别两个独立变化维度(抽象与实现),适用范围有一定局限性。典型应用场景是替代多层继承方案,降低系统维护成本。

2026-02-28 15:43:17 385

原创 一篇文章带你搞懂“设计模式”! - - 适配器模式(6)

适配器模式是一种结构型设计模式,用于解决接口不兼容问题。它通过转换接口使原本无法协同工作的类能够一起工作,主要分为类适配器(继承源类)、对象适配器(组合源对象)和接口适配器(选择性实现接口)三种类型。该模式的优点包括解耦、扩展性强和复用性高,但会增加类数量,且在接口差异过大时实现较复杂。适配器模式的核心价值在于不修改原有代码的情况下实现接口兼容。

2026-02-27 17:29:23 398

原创 一篇文章带你搞懂“设计模式”! - - 建造者模式(5)

设计模式:建造者模式是一种对象创建型模式,将复杂对象的构建过程抽象化,通过分离产品与构建过程实现灵活创建。该模式包含产品、抽象建造者、具体建造者和指挥者四个角色,具有解耦创建过程、支持精细化控制、便于扩展等优点。与抽象工厂模式相比,建造者模式更注重分步构建过程。其局限性在于适用于组成相似的产品,差异性大的产品不适用。该模式符合开闭原则,但复杂产品可能导致建造者类过多。

2026-02-27 16:02:51 403

原创 一篇文章带你搞懂“设计模式”! - - 原型模式(4)

摘要:原型模式是一种创建型设计模式,通过克隆已有对象来创建新对象,避免重复初始化。它包含原型接口、具体原型类和客户端三个角色,通过实现Cloneable接口实现浅拷贝。浅拷贝只复制基本数据类型和引用地址,而深拷贝需要递归复制所有引用对象。实现深拷贝可通过重写clone方法或对象序列化(推荐)。该模式适用于创建复杂对象,能动态获取对象运行时状态,但需要为每个类实现克隆方法,可能违反开闭原则。

2026-02-26 17:28:58 462

原创 一篇文章带你搞懂“设计模式”! - - 工厂模式(3)

摘要:工厂模式是创建型设计模式,分为三种实现方式。简单工厂模式通过一个工厂类集中创建对象,实现客户端与具体类的解耦,但违反开闭原则。工厂方法模式将实例化推迟到子类,符合开闭原则但可能造成类膨胀。抽象工厂模式通过工厂簇管理相关对象创建,整合了前两种模式的优点,更利于维护和扩展。三种模式各有利弊,适用于不同场景,简单工厂适合简单对象创建,工厂方法适合单一产品族,抽象工厂适合多产品族场景。

2026-02-26 16:37:58 585

原创 一篇文章带你搞懂“设计模式”! - - 单例模式(2)

单例模式确保类在系统中只有一个实例,并提供全局访问点。常见实现方式包括:1)饿汉式(静态常量/代码块),类加载时即创建实例,简单但可能浪费内存;2)懒汉式(线程不安全/同步方法/同步代码块),延迟加载但存在线程安全问题;3)双重检查锁定,线程安全且高效;4)静态内部类,利用类加载机制保证线程安全;5)枚举,天然防止多线程和反序列化问题。推荐使用双重检查、静态内部类或枚举方式。单例模式适用于频繁创建销毁的对象、重量级资源对象等场景,能有效节省系统资源并提高性能。使用时需注意避免直接new实例,而应通过指定方法

2026-02-25 16:59:10 482

原创 一篇文章带你搞懂“设计模式”! - - 七大原则(1)

设计模式的七大原则旨在提升代码质量,包括单一职责、接口隔离、依赖倒置、里氏替换、开闭原则、迪米特法则和合成复用原则。这些原则强调模块化设计、低耦合、高内聚,提倡通过抽象和接口编程来增强扩展性和维护性。其中,开闭原则是核心,要求对扩展开放而对修改关闭;迪米特法则注重最小化对象间的依赖;合成复用原则则优先使用组合而非继承。遵循这些原则能有效提高代码的可读性、可重用性和可维护性。

2026-02-25 16:27:55 521

原创 JVM - 垃圾清除阶段(垃圾收集算法)

本文介绍了垃圾回收中的垃圾清除阶段及其主要算法。垃圾清除阶段是在区分存活对象和死亡对象后,释放无用对象内存空间的过程。主要算法包括:1)标记-清除算法,简单但会产生内存碎片;2)复制算法,高效但需要双倍内存;3)标记-压缩算法,适合老年代但效率较低;4)分代收集算法,根据对象生命周期采用不同算法;5)增量收集算法,减少停顿但增加总体成本;6)分区算法,通过划分堆空间控制停顿时间。文章指出没有最优算法,应根据具体场景选择最合适的方案。

2025-12-20 14:29:58 814

原创 快慢指针的原理及其应用

本文介绍了快慢指针算法及其应用。快慢指针使用两个指针,快指针以两倍速度移动,慢指针以正常速度移动。主要应用包括:1)查找链表中间位置;2)判断链表是否有环。文章提供了两种应用的Java代码实现,并指出快慢指针还可用于寻找环的起始点等更多场景。

2025-12-19 20:26:15 682

原创 力扣 500 和为 K 的子数组

力扣 的500 和为 K 的子数组;个人使用了前缀和来解决。

2025-12-12 20:50:15 276

原创 @AutoWired报错一直找不到问题在哪?那可能是这个问题!

使用feign远程调用出现了@AutoWired的爆红,结果发现是很低级的失误。

2025-12-11 22:33:55 358

原创 力扣 3.无重复字符的最长子串

力扣 3.无重复字符的最长子串,滑动窗口。

2025-12-11 19:55:52 378

原创 力扣 42 接雨水

力扣 42 接雨水

2025-12-09 09:17:42 976

原创 力扣 15. 三数之和

思路解题过程复杂度CodeJavai++) {j++) {

2025-12-07 21:21:54 404

原创 将阿里云短息服务替换成邮箱短息

本文介绍了使用邮箱替代阿里云短信服务发送验证码的实现方法。首先通过引入Spring Boot Mail依赖和配置163邮箱SMTP服务,然后创建Controller处理发送请求。Service层实现了生成随机验证码、设置5分钟过期时间(使用Redis存储)以及发送邮件的功能。该方法避免了阿里云短信服务的复杂注册流程和费用问题,为开发者提供了一种简单可靠的验证码发送方案。文中详细展示了从依赖配置到代码实现的完整过程,并说明可根据需求移除Redis相关功能。

2025-12-07 13:46:43 459

空空如也

空空如也

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

TA关注的人

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