自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 认识回调函数

注:这里由消费者决定执行业务的时机,这个时机指的是整个生产逻辑的时机,而不是调用回调函数的时机,所以与回调机制的控制反转是不冲突的。

2025-04-16 11:12:08 394

原创 langchain4j:Tool的使用

在langchain4j中,支持function calling的模型可以使用自定义参数或MCP服务调用函数实现Agent功能 描述:存放LLM模型请求中的tools中的函数信息,用于LLM模型理解并根据信息决定是否使用function calling功能以及根据信息构建函数的参数。如上图所示,ToolSpecifications工具类接收含有回调函数的类或直接接收回调函数,并通过反射获取@Tool、@P等注解的信息,并转化为ToolSpecification信息,以便后续传递给LLM

2025-04-15 23:16:36 735

原创 langchain4j使用中遇到的疑惑与分析

[SystemMessage { text = "你是一个聊天助手,语言应尽量避免冗长机械,并遵循以下设定:无" }]:[SystemMessage { text = "你是一个聊天助手,语言应尽量避免冗长机械,并遵循以下设定:无" }, UserMessage { name = null contents = [TextContent { text = "我喜欢" }] }]上述为在自定义的记忆存储中增删查方法的日志记录,memoryKey是传入的键memoryId。

2025-04-06 20:36:17 752

原创 langchain4j:NativeRAG的调用流程

方法将文本转化对应的向量(并创建embedding对象,此对象内部既存储了对应的向量,还提供了L2归一化向量的方法)。方法,将embedding的vector对象(向量)和Textsegment的文本以及元数据一同存入对应的数据库中。对象,该对象包含userMessage被嵌入模型解析后得到的。存储完成后,每当有问题请求时,检索器会根据。和相关参数(如最大结果数,最小相似度,过滤条件),而后,调用嵌入存储的。,计算存储向量和query向量的。对象,并调用嵌入模型的。方法得到文档列表后,

2025-04-06 20:34:14 300

原创 Java基础概念

Java在包装类和工具类中提供了许多将字符串转化为其他类型的方法,例如Integer.parseInt()可以将字符串转为int类型,Double中也提供了parseDouble()将字符串类型转换为浮点类型。1、对应的字节数:1字节(byte、boolean),2字节(short、char)、4字节(int、float)、8字节(long、double)当目标类型大于原类型时,Java会自动将原类型转化为目标类型,如int转为long,float转为double。时,可能会导致数据丢失。

2025-03-29 18:42:32 642

原创 二分算法总结与通俗性理解

范围:左右都不可到达(初始左右不包含答案),一般L为最小范围-1,R为最大范围+1。不同的二分写法结束条件也不同,由结束条件可推导出二分结束时L与R的等效关系(可用可不用)范围:左包含右不可到达,一般L为最小范围,R为最大范围+1。范围:左右都包含答案,一般L为最小范围,R为最大范围。若边界没有确定好,有可能会。

2025-03-11 18:14:05 250

原创 重构API,用GPT_Sovits“偷走“你的声音!

GPT_Sovits是一款开源的TTS语音合成模型,允许用一段短音频进行快速音色克隆,也可以本地部署进行自己调试并构建特色推理模型,目前已经更新到v3

2025-03-09 22:49:25 350

原创 配合源码详解springMVC

.MVC(model-view-controller):MVC是一种软件架构的分离思想,这种架构模式将应用分为三个部分:模型(Model)、View(视图)、控制器(Controller)。这种分离使代码变得清晰、易于维护。模型层:业务逻辑层+数据库访问层,模型其实就是数据,是经过业务处理后的数据库数据,是用于视图层(如JSP)渲染的数据。视图层:负责通过html、css代码渲染数据并展示(数据通常依据于模型),使其成为对用户友好的界面。控制器层:负责协调模型和视图,也就是将不同的模型给不同的视

2025-03-07 11:12:20 1122

原创 个人项目VChat开发日记 2025/2/28

过去开发HTTP服务时习惯使用ThreadLocal在登录时存储用户的id、权限等信息,但在netty框架中,为了防止NIO模型中线程在处理事件时阻塞造成无法连接,连接事件和读写事件是分别用两个线程池处理的,且一个线程同时处理多个事件(轮询EventLoop事件队列),处理时并不会释放回线程池,所以ThreadLocal中的数据必然会无法一直使用。:离线缓存消息,由于websocket的实时性,未连接的用户是无法接收消息的,而在上线时又应该主动推送离线时的消息。

2025-02-15 01:41:01 252

原创 epoll机制

指向epoll_event结构体数组(epoll事件数组)的指针,该数组用于存储就绪队 列中的事件,:EPOLL_CYL_ADD、EPOLL_CYL_DEL、EPOLL_CYL_MOD,分别对应红黑树的增删。通过回调机制发现已触发的epoll事件,后添加到就绪队列中,实现对事件的监听。:超时时间,小于0:一直等待,等于0:立即返回,大于0:等待超时时间后返回。:增删改红黑树上的epoll事件(子节点上存储的事件):小于0:出错,等于0:超时,大于0:返回就绪事件个数。

2025-02-05 15:59:02 390

原创 v-for,v-if,v-show

因此,v-if适用于运行时状态很少改变的场景,而v-show适用于频繁切换的场景。v-if 与v-show都用于状态判断是否渲染。v-if和v-show。

2025-02-01 22:56:23 135

原创 线程池淘汰策略-线程异常

当task.run()方法出现异常时,会被最内层的try-catch捕获并进入传入了ex参数的afterExecute方法,而afterExecute方法是可以自定义实现的,所以会执行你定义的行为;:突然完成,也就是任务异常被中断,默认为true(发生了异常),当任务正常完成时会执行comletedAbruptly = false(没有异常)finally代码块中执行线程退出方法,当传入的completeAbruptly为true时调用addworker()方法添加一个线程。

2025-02-01 00:01:46 207

原创 线程池淘汰策略-线程池关闭

shutdown()方法:将线程池状态设为shutdown,并中断线程shutdownNow()方法:将线程池状态设为stop,并中断线程。

2025-01-31 23:29:47 127

原创 线程池的execute和submit方法

execute无返回值,submit会返回一个Future对象,submit节省了用FutureTask调用Callable的过程,并返回了FutureTask。execute方法接收Runnable类型的参数,而submit方法接收Callable类型的参数。execute方法中子线程出现的异常无法被主线程捕获到,而submit方法则会将异常暂时储存起来。因此execute也可以拿到返回值,将上述的futureTask作为参数即可。

2025-01-31 23:00:33 120

原创 线程池淘汰策略-线程正常执行完毕

在线程池中,核心线程相当于长期员工,需要一直存在,而线程数大于核心线程数时,必然会出现临时工,在空闲时被清除以防浪费线程资源,剩下的线程即作为新的核心线程继续工作。

2025-01-26 18:07:49 857

原创 关于引入依赖无效(含BOOT-INF目录的jar包)的问题

1. 可执行性使用 spring-boot-maven-plugin 的 JAR 包:这种 JAR 包是可执行的,包含了一个内嵌的容器(如 Tomcat),可以直接通过 java -jar 命令启动应用。不使用插件的 JAR 包:这种 JAR 包通常是普通的库文件,不能直接运行。它们通常用于作为依赖库被其他项目引用。2. 依赖管理使用 spring-boot-maven-plugin 的 JAR 包:这种 JAR 包会将所有依赖项打包到一个单独的 JAR 文件中,形成一个“胖 JAR”(fat JAR)

2024-11-18 17:39:44 590

原创 打破双亲委派机制

由于委派机制会先委派给父类加载器,因此当一个类被父类加载器加载后,即使该类被更新了,自定义类加载器也无法重新加载此类(与类加载冲突有相似之处),从而阻止了自定义类的动态更新。通过继承ClassLoader类并重写其loadClass方法,可以实现自定义的类加载器。在重写loadClass方法时,可以修改双亲委派逻辑,从而打破双亲委派机制。例如,在Tomcat中,为了支持多个Web应用程序之间的类隔离(每个类加载器都有自己的命名空间,用于存放各自的全限定类名),Tomcat使用了自定义的类加载器。

2024-11-11 21:49:55 459

原创 类的加载、连接与初始化

类的生命周期共分为加载、连接、初始化三个阶段。

2024-11-11 14:57:36 273

原创 类的双亲委派机制

loadClass()方法中查询类是否被加载并调用parent的loadClass()方法的逻辑实现了向上委托查询loadClass()方法中当parent的loadClass()方法返回为null时调用自身的findClass()方法尝试加载并返回对象(递归:对象为空时自身loadClass()方法返回为null,再由子类加载器获取并判断)实现了向下委托加载。

2024-11-11 09:52:10 424

原创 初识jvm——i=i++的深入解析

显而易见: 前置自增操作先执行了自增(数组中的值+1),而后将数组中的值加载到栈中,所以栈中的值为1,赋值操作后数组中的值仍为1。接下来进行赋值操作(语句6):将栈中的值(0)存储到数组中(此时对应的值为1),于是数组中对应的值被。由字节码可知:语句0和1实现了变量的初始赋值(此时数组中对应的值为0),而由于后置自增是。在语句10中,数组中对应的值被加载到栈中,最后被打印输出,所以最后输出i=0。,所以值0被先加载到了栈中(语句2)。这时,由于自增操作(语句3)是。,所以此时数组中对应的值为。

2024-11-05 15:14:16 413

空空如也

空空如也

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

TA关注的人

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