自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 从“信口开河”到“有据可查”:RAG如何成为大模型的“理性之锚”

摘要: RAG(检索增强生成)是一种通过检索外部知识库来提升AI生成内容准确性的框架,有效解决了大语言模型“幻觉”问题。其核心流程包括检索相关文档、整合信息生成答案,确保回答有据可查且实时更新。RAG在医疗、金融等专业领域尤为重要,支持动态知识库更新和答案溯源。技术演进从基础检索到模块化设计,融合多跳检索、提示工程等优化手段,并面临检索质量、上下文长度等挑战。未来方向包括与微调结合、多模态处理及自主代理系统,推动AI向更可靠的“知识连接者”进化。

2025-12-23 18:44:56 608

原创 解放生产力利器:n8n,让自动化成为每个人的超能力

n8n:开源工作流自动化利器 n8n是一款开源可视化工作流自动化工具,通过节点式编辑器连接200+应用服务,无需编码即可构建复杂自动化流程。其核心优势包括:开源可自托管保障数据安全;直观的拖放界面降低使用门槛;支持条件分支、循环处理等高级逻辑;覆盖办公、开发、电商等多场景集成。典型应用如智能客户跟进(自动处理注册邮件、CRM录入、消息通知)和跨行业违规分析(AI驱动的内容审核流水线)。相比商业工具,n8n兼具灵活性与可控性,使自动化不再是技术团队专属能力。

2025-12-23 15:55:30 831

原创 AI Agent 的记忆进化:从“金鱼脑”到“思维图书馆”

AI记忆技术的演进与突破 摘要:本文系统阐述了AI记忆能力的三次重大进化。早期AI系统采用无状态设计,存在严重的记忆断裂问题。第一波突破来自RNN和LSTM架构,实现了有限的短期记忆。2017年Transformer架构的革命性创新,通过注意力机制使AI具备上下文理解能力。最新的第三波技术将AI与外部记忆系统结合,通过向量数据库实现语义检索,建立了包含工作记忆、情景记忆等多层次的记忆体系。这些突破正在推动AI从简单工具向具有持续学习能力的智能伙伴转变,同时也提出了如何平衡记忆能力与伦理安全的重要议题。(14

2025-12-22 11:56:29 669

原创 AI Agent 基础知识-入门理解

在当今科技浪潮中,人工智能(AI)深度融入生活与工作的背后,AI Agent(智能体)是支撑从对话助手到自主任务程序的核心概念——它不是单纯的聊天工具,而是能像数字员工一样接任务、拆步骤、执行动作的自动化实体,只要任务可拆解为操作流程,就能被 AI Agent 接管。理解目标:借助架构中的「Memory(记忆系统)」,调取任务相关的历史信息、规则偏好等,精准get用户或系统的需求;制定步骤:靠「Reflect(自我反思)」模块完成——它会规划任务的执行流程,还能在过程中评估合理性、调整策略。

2025-12-17 16:09:59 302

原创 GO学习2:基本数据类型 与 转换

本文系统介绍了Go语言中的基本数据类型及其转换方法。主要内容包括:整型的分类、特殊整型及不同长度转换;浮点型的精度问题和科学计数法表示;布尔型的特点和限制;字符串的转义、多行表示及常用操作;字符类型byte和rune的区别;以及各种基本数据类型之间的相互转换方法,特别是数值型与字符串之间的转换。文章还指出Go语言中数值类型与布尔型无法直接转换的限制,并提供了处理数据类型转换时的注意事项和实用技巧。

2025-09-30 17:09:12 887 2

原创 详解Golang中的go mod以及Golang包

本文介绍了Golang中的包管理和使用。主要内容包括:1) 包的三种类型(系统内置包、自定义包和第三方包);2) Go1.11后引入的gomod包管理工具及其常用命令;3) 自定义包的创建规则和导入方式;4) init()函数的特性和执行顺序;5) 第三方包的使用流程,包括查找、安装和依赖管理。文中重点说明了如何通过gomod管理项目依赖,以及如何定义和使用自定义包,同时介绍了匿名导入和包别名等实用技巧。

2025-09-15 11:12:15 961 1

原创 DataGrip使用指南

本文介绍了JetBrains开发的数据库管理工具DataGrip,重点讲解其核心优势和使用方法。优势包括:1)支持MySQL、PostgreSQL等主流数据库及多种NoSQL数据库,提供统一操作体验;2)强大的结果集处理功能,支持多种视图展示和直接编辑数据。使用方法部分详细演示了:1)中文插件安装步骤;2)MySQL和PostgreSQL的连接配置流程,包括创建数据源、测试连接、选择数据库架构等操作。最后简要说明了如何新建查询控制台执行SQL语句。

2025-09-05 15:43:02 1604

原创 班车系统流程跟进

本文介绍了班车系统的项目流程和实例操作。系统概念部分阐述了迭代开发、项目定义、上线工单流程(包括小车/紧急更新和独立车两种模式),以及灰度发布策略和测试环境配置。实例操作展示了视频检测功能的具体实现过程:从代码修改、迭代创建、测试部署到灰度验证,通过数据库查询确认打卡视频未被创建检测任务。整个流程体现了从开发测试到灰度发布的完整闭环,确保变更安全可控。

2025-09-04 11:49:09 798

原创 Go学习1:常量、变量的命名

本文介绍了Go语言的基础使用和变量/常量相关知识点。主要内容包括:1)Go语言安装与环境配置;2)变量声明与初始化方式(var、短变量声明法、匿名变量);3)常量的定义与iota计数器使用;4)命名规范与代码风格要求。特别说明了Go语言从1.11版本开始支持gomod管理项目,不再需要在GOPATH下创建项目,且详细对比了print/println/printf的区别。文章还提供了变量作用域、类型推导、多重赋值等实用技巧,适合Go语言初学者快速掌握基础语法。

2025-08-31 16:28:05 684

原创 erpc框架流程学习

本文介绍了RPC(远程过程调用)的基本概念,通过泡茶的比喻形象说明其工作原理:程序A调用程序B的服务,无需关注底层通信细节。重点讲解了嵌入式RPC系统eRPC的特点及开发流程:1. 安装Go语言环境并配置相关变量;2. 使用erpc脚手架创建项目;3. 通过protobuf定义接口规范;4. 自动生成代码并实现业务逻辑。文章还详细说明了.proto文件的作用,包括定义服务接口、数据结构和自动生成通信代码,使开发人员能专注于业务逻辑实现。整个流程体现了RPC技术"隐藏通信细节,专注业务功能&quot

2025-08-29 17:24:43 769

原创 <一文超全!!> -- MySQL

MySQL数据库核心知识摘要 本文系统介绍了MySQL数据库的核心概念与技术要点: 数据库演进:从早期卡片机、纸质账簿到现代数据库系统,重点对比了Access、SQL Server等小型数据库,指出MySQL因开源免费且经受阿里双11高流量考验而被广泛采用。 存储引擎:详细解析MyISAM与InnoDB的区别,包括事务支持、锁机制(表锁vs行锁)、崩溃恢复等特性,强调5.5版本后InnoDB成为默认引擎。 索引机制:深入讲解B+树索引结构、聚簇/非聚簇索引差异,覆盖索引原理及避免回表的方法,列举10种导致索

2025-07-21 21:00:42 1198 2

原创 MySQL中explain关键字你知道多少?

会知道,先是从SC表中取出一行数据,然后再S表查找匹配的数据,我们观察,SC中取出cid和S表中的id比较,毫无疑问因为id是S表中的主键(不重复),所以只能出现一个id与cid的值相同。所以是满足条件 S 表的。表示当SQL中有一个地方需要对一些数据进行排序的时候,优化器找不到能够使用的索引,所以只能使用外部的索引排序,外部排序就不断的在磁盘和内存中交换数据,这样就摆脱不了很多次磁盘IO,以至于SQL执行的效率很低。但是,由于索引的底层是B+Tree实现的,他的叶子节点本来就是有序的,这样的查询效率高。

2025-07-20 14:18:18 1130

原创 <一文超详细>消息队列以及RabbitMQ

消息队列技术解析与实践应用 本文系统介绍了消息队列的核心概念、技术实现及实践应用。主要内容包括: 消息队列基础 本质:异步通信的中间件容器 三大优势:异步提升性能、流量削峰、系统解耦 典型问题:系统可用性降低、复杂性增加、一致性问题 JMS与AMQP对比 JMS:Java专属API规范,支持点对点和发布订阅模型 AMQP:跨语言协议标准,提供五种路由机制 核心差异:协议层设计vs API规范,二进制传输vs复杂消息类型 RabbitMQ深度实践 核心组件:生产者/消费者、交换机(4种类型)、消息队列 可靠性

2025-07-19 21:00:57 1041

原创 一文带你理解ThreadLocal的原理结构

ThreadLocal是Java实现线程局部变量的核心类,通过为每个线程提供独立变量副本来实现线程隔离。其底层原理依赖Thread内部的ThreadLocalMap结构,以ThreadLocal对象为键存储变量副本。使用时需注意内存泄漏风险:当ThreadLocal对象被回收后,其对应的值仍可能被线程强引用而无法释放,尤其在复用线程的场景下。为避免泄漏,应在使用后及时调用remove()方法清理ThreadLocalMap中的键值对。文中通过代码示例展示了ThreadLocal的基本用法和清理机制。

2025-07-14 21:58:15 1320

原创 并发编程核心概念详解:进程、线程与协程的本质与差异

进程、线程与协程是计算机中的三种任务执行机制。进程是资源分配的最小单位,拥有独立内存空间;线程是任务调度的最小单位,共享进程资源但有自己的栈;协程是更轻量级的用户态线程,由程序自身控制切换,适合高并发场景。进程间通信需借助IPC机制,线程间可直接共享资源但需处理竞争问题,协程通过协作式调度实现高效执行。三者各有特点:进程隔离性强但开销大,线程轻量但会相互影响,协程高效但需主动让出控制权。开发者应根据场景选择合适的并发模型。

2025-07-14 15:19:56 1322

原创 一文了解Java四种常见的设计模式:单例、工厂、适配器、代理

本文介绍了四种常见的设计模式:1. 单例模式:包括懒汉式(双重检查锁优化)和饿汉式(静态内部类优化),确保类只有一个实例。2. 工厂模式:封装对象创建过程,提高代码可维护性和扩展性,包括简单工厂的实现与优缺点分析。3. 适配器模式:通过中间件转换不兼容接口,以媒体播放器为例展示了如何实现格式兼容。4. 代理模式:通过中介控制对象访问,以房产中介为例演示了如何在访问前后添加额外处理。这些模式分别解决了对象创建、接口适配和访问控制等问题,是提高代码质量的重要工具。

2025-07-13 19:35:30 1122

原创 Java21虚拟线程深度解析:被称为 “并发革命” 的轻量级线程到底强在哪?

Java 21引入的虚拟线程(Virtual Threads)带来并发编程革命性突破。通过餐厅经营类比,单线程模式效率低下,传统线程池存在切换开销,而虚拟线程采用"共享厨师+灵活排班"机制,仅需少量核心线程即可高效处理海量IO任务。测试显示,在16核CPU上处理1万个IO任务时:单线程耗时154秒,传统线程池1.6秒,虚拟线程仅65毫秒,性能提升2383倍。虚拟线程通过轻量级调度和IO等待时释放CPU的特性,完美解决了传统线程模型的内存开销大、切换成本高和并发能力受限等问题。

2025-07-13 17:08:50 726

原创 深入理解JVM的垃圾收集(GC)机制

本文介绍了垃圾收集(GC)的基本概念和实现原理。主要内容包括:1.垃圾判定方法:引用计数法(存在循环引用问题)和可达性分析(通过GC Roots判断对象是否存活);2.分代收集理论:将堆内存分为新生代(存活时间短)和老年代(存活时间长),采用不同回收策略;3.三种垃圾回收算法:标记-清除(简单但有碎片)、标记-复制(适合新生代)、标记-整理(适合老年代);4.Stop The World现象:垃圾回收时必须暂停用户线程,这对系统性能有重要影响。文章阐述了垃圾收集的关键问题和解决方案,为理解JVM内存管理机制

2025-07-11 18:08:35 997

原创 源码角度解析 --- HashMap 的 get 和 put 流程

本文深入分析了Java HashMap的get和put操作实现原理。HashMap采用数组+链表+红黑树结构,JDK8后引入红黑树优化性能。get操作通过hash计算索引,在桶中查找元素,涉及链表遍历或红黑树查询。put操作包含hash计算、冲突处理(链表/红黑树插入)和扩容机制。其中,当链表长度超过8且数组长度≥64时会转换为红黑树。文章从源码角度详细解析了key定位、冲突解决、树化条件等核心机制,揭示了HashMap高效实现键值存储的技术细节。

2025-07-09 21:00:37 861

原创 源码角度构建学习‘128陷阱‘

Java自动装箱机制中,Integer.valueOf()方法会缓存-128到127之间的整数对象。当数值在这个范围内时,直接返回缓存对象,超出范围则创建新对象。示例代码比较127和128时,前者因缓存返回同一对象(==比较为true),后者创建新对象(==比较为false)。建议使用equals()方法比较数值,该方法会实际比较int值而非对象引用。可通过JVM参数调整缓存上限,但默认范围是-128到127。

2025-07-09 16:13:45 319

原创 MybatisPlus(SpringBoot版)学习第八讲:多数据源 & MybatisX插件

适用于多种场景:纯粹多库、 读写分离、 一主多从、 混合模式等两个库:也可能是两个不同的库(一个MySQL,一个ORACAL库)目前我们就来模拟一个纯粹多库的一个场景,其他场景类似场景说明:我们创建两个库,分别为: mybatis_plus(以前的库不动)与mybatis_plus_1 (新建),将mybatis_plus库的product表移动到mybatis_plus_1库,这样每个库一张表,通过一个测试用例 分别获取用户数据与商品数据,如果获取到说明多库模拟成功。

2025-03-31 09:38:47 486

原创 逆向工程(Mybatis形式 & MybatisPlus形式)

把pom.xml 有关于Mybatis整合逆向工程的,mybatisSpringBoot依赖全部注释掉。正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。默认为false,就是把jdbc里面的基本数据类型是否进行成长。然后这个工具类会报错,因为没有那个依赖了。这个类就是MyBatis逆向工程的类,这个类需要一个集合.因为他的父工程里没有这个依赖,所以我们需要加个版本号。只是生成了最简单的,最后逻辑的实现就是反向拿取。加载所有的配置,也就是那个文件。包的后缀,false就行。

2025-03-31 09:10:05 1884

原创 MybatisPlus(SpringBoot版)学习第七讲:通用枚举

一、通用枚举表中的有些字段值是固定的,例如性别(男或女),此时我们可以使用MyBatis-Plus的通用枚举 来实现。

2025-03-30 17:28:14 281

原创 MybatisPlus(SpringBoot版)学习第六讲:插件(分页插件&乐观锁)

*** 根据年龄查询用户列表,分页显示* @param page 分页对象 ,xml中可以从里面进行取值 ,传递参数 Page 即自动分页 ,必须放在第一位* @param age 年龄注意!!分页的插件不要删掉,他是分页功能的前提。

2025-03-27 18:57:02 448

原创 MybatisPlus(SpringBoot版)学习第五讲:条件构造器和常用接口

Wrapper: 条件构造抽象类,最顶端父类: 用于查询条件封装,生成 sql 的 where 条件: 查询条件封装: Update 条件封装: 使用Lambda 语法:用于Lambda语法使用的查询Wrapper: Lambda 更新封装Wrapperctrl+h。

2025-03-27 18:50:15 716

原创 MybatisPlus(SpringBoot版)学习第四讲:常用注解

①同样以用户 ID 为例,假如我们一开始就规划了 10 个数据库表,可以简单地用 user_id % 10 的值来表示数据所属的数据库表编号, ID 为 985 的用户放到编号为 5 的子表中, ID 为 10086 的用户放到编号为 6 的子表中。因为是自动递增的,所以删除一条数据在增加,ID是后面的,会导致一个表里数据多,一个表少。首先是一个符号位, 1bit标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负 数是1,所以id一般是正数,最高位是0。

2025-03-27 17:31:18 1279

原创 MyBatisPlus(SpringBoot版)学习第三讲:通用Service

说明:通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,泛型 T 为任意实体对象建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承Mybatis-Plus 提供的基类(如果父类的方法满足不了实际,就创建自己的service)官网地址:A3。

2025-03-23 21:05:54 1541

原创 整理使用Spring、SpringBoot测试的四种注解方式

目录1. JUnit纯单元测试代码解释2. Spring测试框架和JUnit结合(XMl配置)代码解释3. Spring测试框架与JUnit结合(注解配置)代码解释4. Spring Boot集成测试代码解释 JUnit 是 Java 开发中常用的单元测试框架。当对普通 Java 类进行单元测试且不依赖 Spring 容器时,可直接使用 JUnit 的 注解。单元测试重点在于验证单个类或方法的功能,要尽量减少对外部依赖的使用。代码解释 注解标记了 方法,表明这是一个测试方法。

2025-03-23 09:52:46 1111

原创 MyBatisPlus(SpringBoot版)学习第二讲:基本CRUD

这是因为MyBatis-Plus在实现插入数据时,会默认基于。这里的foreach是lamda表达式的遍历语句。接口的一个方法,用于获取分页查询结果中的数据记录集合。中都已得到了实现,我们可以直接使用,接口如。是一个参数,表示集合中的每个元素。最终执行的结果,所获取的id为。

2025-03-23 09:08:34 972

原创 MyBatis-Plus(SpringBoot版)学习第一讲:简介&入门案例

(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。Mybatis-Plus提供了通用的Mapper和Service,可以在不编写任何SQL语句的前提下,快速的实现单表的增删改查(CURD),批量,逻辑删除,分页等操作。只要把MyBatis-Plus的特性到优秀插件,以及多数据源的配置进行详细讲解。愿景我们的愿景是成为 MyBatis 最好的搭档,就像魂斗罗中的 1P、2P,基友搭配,效率翻倍。

2025-03-22 22:04:16 1695

原创 SpringBoot第四站(2):整合MyBatis注解版 & 整合MyBatis配置文件

这个 MybatisConfig 配置类的主要作用是对 MyBatis 进行定制化配置,具体来说,它开启了 MyBatis 的下划线命名到驼峰命名的自动映射功能。<configuration> 元素里通常会包含数据库连接环境配置,映射器配置信息。MyBatis 获取到数据库自动生成的主键值后,会把这个值赋给 Java 对象的。的大部分配置,但对于一些复杂的配置,如自定义插件、拦截器等,还是需要使用。我们同样可以在mybatis的接口上不加@Mapper注解,通过。或者通过 Java 代码来配置。

2025-03-20 16:19:00 883

原创 SpringBoot第四站(1):数据层开发: 配置数据源,整合jdbcTemplate

statViewServlet方法的主要作用是配置并注册 Druid 监控页面的 Servlet,为访问 Druid 监控页面设置登录用户名、密码、允许访问的 IP 地址和拒绝访问的 IP 地址等参数。传统的方式是在对象内部创建依赖对象,而依赖注入则是将依赖对象的创建和管理交给外部容器,由容器将依赖对象注入到需要的对象中。常用的依赖注入的方式有构造函数的方法和通过setter方法注入,这里明显使用的是构造函数的方法注入依赖。是 Spring 提供的一个类,用于在 Spring 应用中注册 Servlet。

2025-03-20 16:00:07 1117

原创 springboot第三站(1) web开发引入

使用SpringBoot;1)、创建SpringBoot应用,选中我们需要的模块;2)、SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来3)、自己编写业务代码;自动配置原理?这个场景SpringBoot帮我们配置了什么?能不能修改?能修改哪些配置?能不能扩展?xxx。

2025-03-18 20:43:28 1089

原创 SpringBoot第三站(4):配置嵌入式服务器&使用外置的Servlet容器

Servlet 监听器有多种类型,常见的有 ServletContextListener(用于监听 ServletContext 的创建和销毁)、HttpSessionListener(用于监听 HttpSession 的创建和销毁)、ServletRequestListener(用于监听 ServletRequest 的创建和销毁)等。由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件。这样,当应用启动和关闭时,

2025-03-17 09:14:24 1247

原创 SpringBoot第三站(3):整合SpringMVC

学习springmvc和springboot的自动配置我们必须对springmvc的组件足够了解,起码知道怎么用。Springmvc的组件基本都被springboot来做了自动的配置。

2025-03-17 08:58:34 956

原创 Springboot第三站(2):thymeleaf

th:id替换idth:text文本替换th:utext支持html的文本替换th:object替换对象th:value属性赋值th:onclick点击事件th:each属性赋值th:if判断条件th:unless和th:if判断相反th:href链接地址th:switch多路选择 配合th:case 使用th:caseth:switch的一个分支布局标签,定义一个代码片段,方便其它地方引用th:include布局标签,替换内容到引入的文件。

2025-03-17 08:36:36 1012

原创 Springboot学习-第二站 自动配置原理

Spring Boot在启动的时候从类路径下的META- INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;以前我们需要自己配置的东西,自动配置类都帮我们;到这里,我们发现一顿操作以后最终是加载的META-INF/spring.factories文件,那么这个文件应该去哪里找呢,我们如果使用idea的话,那么请找到project下的External Libraries中的。

2025-03-16 09:28:03 1004

原创 Springboot第一站: java开发框架与微服务

把SSM进行整合,完成了很多自动的工作,不需要去做繁琐的配置整合工作。简化Spring应用开发的一个框架;整个Spring技术栈的一个大整合;J2EE开发的一站式解决方案;优点快速创建独立运行的spring项目以及与主流框架集成使用嵌入式的Servlet容器,应用无需打成war包,内嵌Tomcat(启动类启动后端口号是8080)Starters自动依赖和版本控制(修理工,既可以修空调,又可以修电视、洗衣机,修不同设备螺丝刀用的不同,如果一个一个做,一个一个准备。

2025-03-12 10:46:59 1086

原创 IDEA创建Springboot的五种方式

所有的Springboot项目打包方式目前都是jar目前没有办法创建1.8版本,进去可以改17版本:下面将介绍IDEA21版本的创建方式(因为IDEA17版本的从阿里云官网创建有问题,所以IDEA17版本用的是三种方式<通过spring.io官网创建,从spring.io官网搭建下载压缩包,创建普通MavenJava项目后需要什么加什么>)

2025-03-09 20:27:01 6495

原创 SSM框架整合

2. 在项目启动的时候,就去加载applicationContext.xml的配置文件,在web.xml中配置ContextLoaderListener监听器(该监听器只能加载WEB-INF目录下的applicationContext.xml的配置文件)。3. 在controller中注入service对象,调用service对象的方法进行测试。1. 整合说明:SSM整合可以使用多种方式,咱们会选择XML + 注解的方式。1.目的:在controller中能成功的调用service对象中的方法。

2025-03-09 08:55:24 992

空空如也

空空如也

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

TA关注的人

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