自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 远程MCP的调用和阿里云生态的知识库和工作流的使用

摘要:本文介绍了如何通过远程调用MCP服务整合地图功能(以高德/百度地图为例)和阿里云知识库。内容包括:1)配置MCP客户端参数和服务端JSON文件;2)Node.js环境设置;3)通过ChatClient实现地图服务调用;4)阿里云百炼平台知识库的对接方法;5)工作流配置及智能体接口开发示例,展示如何利用Spring框架实现今日菜单推荐功能。主要涉及技术栈包括Spring AI、DashScope API和云平台服务整合。

2025-10-11 21:39:12 445

原创 Tool Calling和本地MCP服务的调用

本文介绍了AI工具调用(ToolCalling)和MCP模型上下文协议。ToolCalling允许大模型通过API与外部工具交互,增强功能但不直接调用工具,而是由应用程序执行并返回结果。文章演示了如何通过SpringAI配置工具类(如获取时间),并使用ChatModel进行工具调用。随后讲解了MCP协议,它能解决多微服务调用问题,类似于统一的Type-C接口协议。文章提供了本地MCP调用的实现步骤,包括依赖配置、工具类编写和服务端设置,支持通过SSE或STDIO方式进行通信。MCP协议简化了多服务间的大模型

2025-10-11 21:33:37 1148

原创 向量化编码和RAG增强搜索

本文介绍了使用Redis 7和Spring AI框架实现文本向量化存储和RAG(检索增强生成)的技术方案。主要内容包括:1)通过Docker部署Redis 7并配置文本向量化服务;2)使用Spring AI的EmbeddingModel将文本转化为向量存入RedisStack;3)实现RAG功能解决大模型知识局限问题,包括文档索引构建、向量存储和检索流程;4)代码示例展示了控制层接口实现和重复数据处理的优化方案。该方案通过结合向量数据库和RAG技术,有效提升了AI系统的知识检索能力和回答准确性。

2025-10-08 22:07:31 940

原创 大模型文生图和语音转换的调用以及向量和向量数据库RedisStack.

本文介绍了阿里云百炼平台的AI服务功能,包括文生图API调用、语音合成和向量数据库应用。通过代码示例展示了如何利用ImageModel生成图片并返回URL,以及使用SpeechSynthesisModel实现文本转语音并保存为MP3文件。还解释了向量化的概念,将文本/音频/视频转化为数值向量进行比较,并介绍了RedisStack作为向量数据库的解决方案,用于存储和检索高维向量数据。文章提供了相关API调用和配置方法,帮助开发者快速实现AI功能集成。

2025-10-07 21:28:36 418 1

原创 ChatMemory连续对话保存和持久化

本文介绍了在SpringAIAlibaba中实现大模型对话记忆持久化的方法。由于大模型本身不存储数据,需要通过外部存储解决方案(如Redis、MySQL等)来保存对话历史。文章详细说明了使用Redis作为存储方案的实现步骤:1) 引入必要的依赖包;2) 配置Redis连接参数;3) 创建RedisChatMemoryRepository配置类;4) 使用MessageWindowChatMemory设置消息窗口上限(如10条);5) 通过Advisor机制将存储功能集成到ChatClient中。最终实现对话

2025-10-07 21:14:00 524

原创 大模型提示词的四大角色,提示词模板和格式化输出

摘要:提示词是大模型交互的关键工具,DeepSeek API将其分为四大角色:System(设定AI边界)、User(用户提问)、Assistant(AI响应)和Tool(外部服务桥接)。提示词模板通过结构化设计提升复用性,如故事生成示例所示,采用占位符实现动态内容输出。文中还展示了Java流式响应实现和Record类格式化输出,体现提示词在优化AI交互效率和输出规范化方面的重要作用。(149字)

2025-10-06 21:57:53 391

原创 ollama的下载以及Spring AI Alibaba的ChatModel和ChatClient的流式输出和在idea的实现

本文介绍了ollama本地大模型部署与Spring AI集成方案。通过ollama可在本地运行大模型(如7B约8G),默认端口11434。文章详细讲解了Spring AI中ChatModel和ChatClient的配置与区别,展示了两者的API调用方式,并重点介绍了流式输出技术,通过Flux实现SSE推流,提升长文本响应体验。最后提供了多模型调用方案,演示了如何配置和使用不同大模型(如DeepSeek和QWEN)的ChatClient实现。

2025-10-04 13:04:43 1007 4

原创 Spring AI Alibaba

摘要:SpringAIAlibaba是基于SpringAI框架深度集成阿里云百炼平台的Java AI开发框架,支持多种大模型调用。相比SpringAI和LangChain4j,它提供了更丰富的智能体开发功能、向量数据库支持和提示词管理。使用前需获取阿里百炼API Key和模型信息,通过Maven引入相关依赖后即可快速集成。框架提供ChatModel接口实现对话交互,支持流式输出,并可通过简单配置切换不同大模型。该框架简化了Java AI应用开发流程,是阿里云生态下的AI开发最佳实践方案。

2025-10-02 21:09:45 1073

原创 阻塞 IO为什么叫BIO,非阻塞IO为什么叫NIO,异步IO为什么叫AIO

文章摘要: IO操作分为文件IO和网络IO,按操作方式可分为同步IO(需等待完成)和异步IO(立即返回回调);按内核处理方式分为阻塞IO(线程挂起等待)和非阻塞IO(轮询检查)。Java中的三种IO模型:BIO(阻塞式)、NIO(非阻塞/多路复用)和AIO(异步回调)。BIO采用"一连接一线程"模式,NIO通过Selector实现单线程管理多通道,AIO则由系统完成IO后回调通知。三种模型分别适用于不同并发场景,从同步阻塞到完全异步递进演进。

2025-09-13 21:27:30 1004

原创 Rabbit MQ进阶

Rabbit MQ进阶介绍

2025-08-20 18:42:29 1067

原创 RabbitMQ 基础

Rabbit MQ基础介绍

2025-08-20 18:28:13 1102

原创 Seata

Seata的简单使用,以及AT情况下的二阶提交协议的流程

2025-08-12 00:03:04 989

原创 Gateway

Gateway的基本情况

2025-08-11 23:58:27 741

原创 Sentinel

详细的介绍Sentinel

2025-08-08 22:16:31 858

原创 OpenFeign

一篇文章搞懂OpenFeign

2025-08-07 21:10:25 629

原创 Nacos

Nacos配置中心与开发环境配置的关系解析:Nacos通过命名空间(Namespace)实现环境隔离,分组(Group)区分微服务,数据集(Data-id)管理具体配置。配置加载遵循"后载入优先"原则,可通过spring.profiles.active切换环境。开发中需注意:1.创建命名空间对应各环境(dev/test/prod);2.按微服务分组管理配置;3.通过spring.config.import动态加载配置;4.使用@RefreshScope实现配置热更新。配置优先级规则:后导

2025-08-06 19:50:50 521

原创 大模型开发

AI(人工智能)是使机器具备类人思考和解决问题能力的技术,其核心是Transformer神经网络模型(如GPT)。大模型应用结合传统编程实现记忆等复杂功能,应用开发技术包括Prompt问答、微调、Agent调用和RAG(外挂知识库),适用于客服、医疗、办公自动化等场景。AI通过数据训练掌握语言规律,处理模糊性问题,与传统程序互补形成强大应用。

2025-07-23 22:43:34 2102

原创 Spring介绍以及IOC和AOP的实现

摘要:Spring框架是一个轻量级的开源Java框架,基于控制反转(IoC)和面向切面编程(AOP)两大核心技术。它通过IoC容器管理对象生命周期,使用DI实现松耦合;通过AOP实现日志、事务等横切关注点的分离。Spring包含核心容器、数据访问、WebMVC等多个模块,支持JDK动态代理和CGLIB两种代理方式。开发时只需定义切面类、切入点表达式和通知类型(@Before/@Around等)即可实现AOP功能,有效解耦业务代码与通用功能。Spring自2004年发布以来,已成为Java企业应用开发的事实标

2025-07-18 22:02:55 1694 1

原创 缓存三兄弟和布隆过滤器

摘要:缓存问题三兄弟(穿透、击穿、雪崩)及其解决方案是系统优化的关键。缓存穿透采用布隆过滤器拦截非法请求或缓存空对象;缓存击穿通过分布式锁或逻辑过期时间解决热点Key失效问题;缓存雪崩则采用随机过期时间、集群部署和熔断降级等策略。布隆过滤器作为空间效率高的数据结构,通过多哈希映射实现高效存在性判断,虽存在误判率,但在缓存防护、数据去重等场景表现优异。理解其原理、应用场景及与哈希表的区别对系统设计至关重要。

2025-07-16 19:24:28 586

原创 乐观锁的介绍

摘要:乐观锁是一种高效的并发控制机制,通过版本号/时间戳实现数据一致性检查,适用于低冲突、高并发场景。核心流程包括读取数据、修改并提交更新时验证版本号,冲突时支持自动重试(3-5次为宜)、用户介入或业务合并三种处理策略。需注意避免ABA问题,在分布式系统中结合全局唯一版本号,控制事务时长以减少冲突。其优势在于无锁设计带来的高吞吐,但需合理设置重试次数并处理版本回绕风险,最终确保数据正确性。

2025-07-16 19:19:59 283

原创 HashMap详解

一篇文章搞懂HashMap部分核心知识点

2025-07-15 19:23:07 1284

原创 如何设计多个非重复键值对要存储HashMap的初始化以及常见的HashMap方法源码解析

摘要:本文详细解析了HashMap的关键操作和优化策略。删除操作(remove)通过遍历链表或红黑树定位元素后删除,当红黑树节点数小于6时会转为链表。查找操作(get)先检查桶的首节点,再处理冲突节点(树或链表)。遍历推荐使用entrySet()方式,效率最高。初始化容量建议设为(元素个数/0.75)+1,可减少扩容次数,权衡内存换取性能。HashMap会自动将初始容量调整为2的幂次方,扩容阈值为容量×负载因子(默认0.75)。

2025-07-15 19:13:03 738

原创 HashMap中哈希值的计算方法和扩容机制

本文剖析了HashMap的哈希计算和扩容机制。哈希计算方法将key的hashCode高16位与低16位异或,以均匀分布哈希值。HashMap默认负载因子为0.75,当元素超过阈值时会扩容为原数组的2倍。扩容时采用巧妙的重哈希策略:通过判断新增bit位是0或1,决定元素留在原位置或迁移到"原位置+旧容量"位置。这种设计避免了完全重算哈希值,同时保证冲突节点均匀分散。当链表长度达到8且数组未达64时会先扩容,超过64则转为红黑树;节点数低于6时又会转回链表。优化扩容策略对提升HashMap性

2025-07-15 19:07:11 1086

原创 HashMap的长度为什么要是2的n次幂以及HashMap的继承关系(元码解析)

摘要:HashMap在Java集合框架中采用2的幂次方作为默认容量(16),主要因为hash&(length-1)的位运算能高效替代取模运算,减少哈希冲突。当数组长度为2的幂时,哈希值低位充分参与运算,索引分布更均匀;若长度非2的幂,会导致索引范围压缩,增大碰撞概率。此外,HashMap存在继承父类AbstractMap又实现Map接口的设计失误,由于不影响功能而未修正。这些设计体现了Java在哈希表实现中对性能优化和兼容性的权衡。(149字)

2025-07-14 22:14:39 331

原创 HashMap的put过程以及hashMap的简单介绍

本文介绍了HashMap的基本原理和实现机制。HashMap采用数组+链表+红黑树(JDK1.8后)的数据结构,键值允许为null但键唯一。主要特点包括:初始容量16(JDK8后首次put时创建),哈希冲突时通过equals比较处理,当链表长度超过8且数组长度大于64时转换为红黑树以提高查询效率。扩容机制为双倍增长,临界值为容量乘以加载因子(默认0.75)。put操作包含空数组检测、哈希计算、冲突处理(覆盖或新增节点)、树化判断等步骤,完整展现了HashMap的核心运作流程。

2025-07-14 22:07:38 439

原创 JVM的垃圾回收算法和多种GC算法

摘要:JVM垃圾回收(GC)主要作用于新生区、养老区和元空间,其中新生区回收最为频繁。GC分为轻GC和重GC两种类型。常用的GC算法包括:复制算法(适用于新生区,无内存碎片但空间利用率低)、标记清除算法(空间利用率高但会产生碎片)和标记压缩算法(优化后的标记清除)。不同算法各有优劣,需根据场景选择:年轻代使用复制算法,老年代采用标记清除压缩算法。GC参数如MaxTenuringThreshold可调整对象进入养老区的阈值。(147字)

2025-07-12 21:22:45 453

原创 堆内存的详细结构以及java中内存溢出和排查方式

本文介绍了三种主流JVM(HotSpot、JRockit、IBM J9)的基本特性,重点分析了堆内存结构及其优化策略。堆内存分为新生代、老年代和元空间(取代永久代),各自采用不同的GC算法。文章通过代码示例演示了内存溢出(OOM)的模拟和排查方法,包括使用JProfiler工具分析dump文件。还讲解了JVM内存参数调优技巧,如设置初始/最大堆内存(-Xms/-Xmx)和打印GC日志(-XX:+PrintGCDetails)。最后通过实例展示了如何快速定位OOM问题,为JVM性能优化提供了实用指导。

2025-07-12 20:12:28 1297

原创 深入理解栈和java栈溢出以及实例对象创建时内存的变化(图解)

摘要:本文介绍了栈的特点和运作原理,重点分析了栈溢出(StackOverflowError)的形成原因。通过Java代码示例演示了方法递归调用导致的栈溢出情况。文章详细讲解栈帧结构及其包含的各类信息,包括方法索引、输入输出参数、本地变量等。同时阐述了栈、堆、方法区的交互模型和各自功能:栈负责方法执行时的临时数据,堆存储对象实例,方法区保存类元数据。最后以一个People类实例化的完整过程,展示了对象在内存中的创建和访问机制,说明栈如何通过地址引用访问堆中的对象实例。

2025-07-12 13:53:01 445

原创 java底层的native和沙箱安全机制

沙箱安全机制是一种隔离程序运行环境的技术,通过资源隔离、权限控制和行为监控来限制潜在恶意代码的危害。其核心是将不可信代码限制在受控环境中运行,防止其对系统关键资源(如文件系统、网络)的非法访问。典型应用包括浏览器隔离网页脚本、移动应用数据保护及软件开发测试。此外,文章还简要提及Java中的native关键字原理,说明其通过JNI调用底层C/C++库,以及JVM内存结构中程序计数器和方法区的作用,强调方法区作为线程共享区域存储类信息、常量等数据。

2025-07-11 22:26:55 1076

原创 JAVA程序的类加载器的底层和双亲委派机制的原理

文章摘要:Java类加载器采用层级结构(Bootstrap、Platform/Extension、Application和自定义加载器),通过双亲委派机制确保类加载的安全性和唯一性。该机制要求子加载器优先委派父加载器处理请求,父类无法完成时才自行加载。示例显示,当加载用户类时会从ApplicationLoader向上逐级委托,最终由能处理的加载器执行。这种设计有效防止核心类被篡改,并保证类的全局唯一性。Java 9后用PlatformClassLoader取代了ExtensionClassLoader,但机

2025-07-11 12:45:54 704

原创 JVM的位置和JVM的结构体系

摘要:JVM位于JRE内,介于操作系统和Java应用程序之间,实现跨平台运行。其体系结构包含类加载子系统、运行时数据区(方法区、堆、栈等)、执行引擎和本地方法接口。其中方法区和堆是垃圾回收调优的主要区域,而程序计数器、栈等不会产生垃圾。JVM通过将字节码翻译为机器指令,并借助本地方法库实现底层交互,确保Java程序高效运行。(149字)

2025-07-05 19:41:19 1202

原创 java的注解和反射

文章摘要:本文介绍了Java注解和反射机制的核心概念。注解从JDK5引入,用于程序解释,包含内置注解(@Override等)和元注解(@Target等)。反射使Java具备动态性,允许运行时获取类信息并操作对象。通过Class对象实现反射,包括对象创建、方法调用等功能。类加载过程分为加载、验证、准备、解析和初始化阶段,最终在堆内存生成Class对象。反射提高了灵活性但影响性能,需权衡使用。

2025-07-05 17:37:14 1325

原创 死锁的排查以及公平锁,非公平锁,可重入锁,自旋锁的介绍

死锁是线程相互等待对方资源导致的阻塞现象,可通过jps和jstack工具诊断。本文介绍了Java中的几种锁机制:公平锁与非公平锁的主要区别在于是否允许插队执行,ReentrantLock通过构造参数区分;可重入锁允许同一线程重复获取锁,如synchronized和ReentrantLock;自旋锁通过CAS机制实现(如AtomicReference),会循环尝试获取锁;文章通过代码示例展示了各种锁的实现方式和使用注意事项。

2025-07-04 12:24:39 406

原创 CAS的底层和ABA问题

摘要:CAS(Compare-And-Swap)是一种原子操作,通过比较内存值与预期值来决定是否更新。文中通过AtomicInteger的compareAndSet方法演示了CAS机制,并分析了其底层Unsafe类的实现原理。同时指出CAS存在ABA问题(值被修改后恢复原值导致检测失效),并通过AtomicStampedReference引入版本号机制来解决该问题。最后提醒注意Integer缓存范围(-128~127)可能带来的对象复用问题。

2025-07-04 12:20:00 718

原创 Volatile解决指令重排和单例模式

指令重排是程序执行过程中的重要优化手段,涉及编译器优化、指令并行和内存系统三个层面。处理器在执行时会考虑数据依赖性,但多线程环境下仍可能出现意外结果(如x=2,y=1)。使用volatile关键字可以防止指令重排,通过内存屏障保证可见性但不保证原子性。单例模式实现中,饿汉式可能浪费资源,而懒汉式在多线程环境下需注意指令重排问题。典型的双重检测锁实现需要对实例变量加volatile修饰,避免new操作(包含内存分配、初始化和引用赋值三个步骤)被重排序导致线程安全问题。

2025-07-04 12:14:16 459

原创 Volatile关键字的特点以及JMM意义

Java中的volatile关键字是轻量级同步机制,主要提供可见性和禁止指令重排功能,但不保证原子性。JMM(Java内存模型)定义了主内存与工作内存的交互规则,包括8种同步操作:lock/unlock、read/load、use/assign、store/write。volatile能确保变量修改立即可见,如示例1所示;但在多线程累加场景(示例2)会出现原子性问题。此时可使用原子类(如AtomicInteger)替代volatile来解决,避免使用重量级锁。这些机制共同保障了Java多线程环境下的数据一致

2025-07-03 22:15:58 706

原创 异步回调Future

摘要:CompletableFuture是Java中实现异步回调的重要工具。文章展示了两种使用方式:无返回值的runAsync()和有返回值的supplyAsync()。当任务成功时返回1024,失败时捕获异常返回233。通过whenComplete()处理结果和异常,exceptionally()处理错误情况。这种异步机制适用于需要返回状态码(如成功200/失败500)的场景,实现非阻塞编程。代码示例演示了异步回调的核心用法,包括线程休眠、异常处理和结果获取。

2025-07-03 13:00:00 340

原创 idea怎么实现ForkJoin

摘要:分支合并(ForkJoin)是一种将任务拆分为多个子任务并行执行,最后汇总结果的编程模式。其核心特点是工作窃取机制,空闲线程可以窃取其他线程队列中的任务。使用时需继承RecursiveTask(有返回值)或RecursiveAction(无返回值),重写compute方法实现任务拆分逻辑。示例展示了计算大数求和的实现,通过设置临界值优化性能。相比线程池,ForkJoinPool提供submit(异步)和execute(同步)两种提交方式。补充说明Java8的Stream并行流(parallel())也

2025-07-02 17:51:52 489

原创 Stream流式计算

本文介绍了Java中Stream流式计算的使用方法,通过一个用户数据处理案例展示了流式编程的优势。示例代码演示了如何利用Stream的filter、map、sorted等操作链式组合实现:筛选ID为偶数、年龄大于23的用户,将用户名转为大写并按字母倒序排序,最终只输出一个结果。这种流式处理方式不仅简化了代码结构,还提高了数据处理效率。文章强调Stream流式计算是Java开发中需要重点掌握的核心技能,配合Lambda表达式和函数式接口能显著提升代码质量和开发效率。

2025-07-02 15:47:01 395

原创 四大函数式接口

Java函数式编程接口示例:1) Function接口实现参数转换;2) Predicate接口进行条件判断;3) Consumer接口处理输入无返回值;4) Supplier接口提供输出无参数。每个示例都展示了传统匿名类和Lambda表达式两种实现方式。这些接口简化了函数式编程,通过Lambda表达式使代码更简洁。

2025-07-02 08:00:00 190

空空如也

空空如也

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

TA关注的人

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