- 博客(88)
- 收藏
- 关注
原创 JAVA多重数组理解
本文系统讲解了Java中多维数组的核心概念与使用。首先明确多维数组本质是"数组的数组",支持锯齿结构(每行长度可不同)。详细介绍了声明初始化方法、元素访问与遍历技巧(推荐for-each循环),并分析了其内存结构特点。文章还列举了常见应用场景(矩阵操作、动态规划等),提供了深拷贝实现方案,对比了数组与链表的特性差异,最后简要提及高维数组。特别强调了实际开发中的注意事项,如边界检查、空指针处理等,为Java开发者提供了全面的多维数组使用指南。
2025-11-08 16:00:27
871
原创 对于 时间复杂度和空间复杂度分析
本文介绍了算法时间复杂度和空间复杂度的基本概念与分析步骤。时间复杂度衡量算法运行时间随输入规模增长的变化趋势,通常用大O记号表示;空间复杂度衡量算法所需内存空间的变化趋势,主要计算辅助空间使用情况。文章详细讲解了识别输入规模、分析循环和递归、简化表达式的方法,并提供了常见算法复杂度示例。对于面试场景,还总结了快速估算口诀,帮助快速判断不同算法结构的复杂度。掌握这些分析技巧,可以更有效地评估和优化算法性能。
2025-11-08 14:39:42
1130
原创 2257. 统计网格图中没有被保卫的格子数
本文提出了一种计算网格中未被警卫保卫的空格数量的算法。给定一个m×n的网格,其中包含警卫和墙壁的位置,算法通过以下步骤实现: 初始化网格并标记警卫和墙壁位置 对每个警卫,沿四个方向扩展视线,直到遇到墙壁或其他警卫 使用辅助数组记录被保卫的格子 最后统计未被标记的空格数量 算法的时间复杂度为O(m×n),空间复杂度为O(m×n)。通过模拟警卫的视线范围和障碍物阻挡机制,准确计算出安全区域的数量。示例测试验证了算法的正确性,适用于不同规模的网格问题。
2025-11-02 15:49:51
928
原创 modbus tcp 跟 modbus rtu
文章摘要: Modbus TCP和RTU是工业通信中两种主流协议,核心区别在于传输层实现:TCP基于以太网(高速、远距离、无设备数量限制),RTU基于串行总线(低成本、短距离、最多32个从站)。两者通过功能码(如01读线圈、03读保持寄存器、06写单个寄存器)操作4类寄存器(线圈/离散输入/保持/输入寄存器),实现设备控制与数据采集。RTU采用CRC16校验确保数据可靠性,典型应用如PLC读取传感器数据(温湿度)、控制水泵启停及频率设定。实际应用中需根据场景需求选择协议类型,并严格遵循寄存器映射规范。
2025-10-08 16:03:10
1154
原创 2106. 摘水果,梳理思路
文章摘要: 该问题要求在无限x轴上收集最多水果,初始位置为startPos,最多移动k步。水果位置已排序,需要通过滑动窗口和前缀和优化求解。Java解法将水果位置和数量分离,构建前缀和数组快速计算区间和。通过双指针维护有效窗口,计算从起点到窗口两端的最少步数(考虑左右往返情况),若步数≤k则更新最大水果数。示例1输出9(移动至6和8),示例2输出14(移动至4、5、6、7),示例3输出0(无法到达任何位置)。算法时间复杂度O(n),适用于大规模数据。
2025-08-03 19:17:09
771
原创 Spring AI MCP 服务端
Spring AI MCP服务器启动器为Spring Boot应用提供模型上下文协议(MCP)服务器的自动配置功能。支持同步/异步操作模式,提供STDIO、WebMVC和WebFlux三种传输层选项。通过简单依赖配置即可实现MCP服务器组件的自动装配,支持资源管理、工具调用、提示交互等多种功能。配置参数包括服务器名称、版本、指令说明、功能开关等,可通过YAML灵活调整。该启动器简化了AI服务集成,适用于命令行工具、Web应用等多种场景。
2025-08-02 16:34:34
1352
1
原创 Spring AI MCP 客户端
摘要:Spring AI MCP客户端启动器为Spring Boot应用提供MCP客户端的自动配置功能,支持同步/异步客户端实现,包含多实例管理、自动初始化、传输定制等特性。提供标准Maven依赖和WebFlux版本配置选项,支持通过YAML/JSON配置Stdio传输属性(如命令参数、环境变量)。典型应用场景包括集成智谱AI等大模型服务,通过MessageWindowChatMemory实现对话记忆功能,并支持通过SyncMcpToolCallbackProvider进行工具回调集成。配置示例展示了如何组
2025-07-26 20:10:40
1582
3
原创 Spring AI 工具调用
AI工具调用增强应用功能:本文介绍了在AI应用中使用工具调用的模式,主要包括信息检索和执行操作两类功能。通过Java代码示例展示了如何定义工具类(如DateTimeTools和CustomerTools),并利用Spring AI框架实现工具调用。文章详细讲解了工具上下文传递、直接返回结果配置以及工具执行的生命周期管理,包括框架控制和用户控制两种执行方式。通过对比使用工具前后的效果图,直观展示了工具调用对AI应用的增强作用,为开发者提供了灵活的工具集成方案。
2025-07-21 09:10:32
1159
原创 Spring AI 聊天记忆
Spring AI提供了多种聊天内存管理方案,支持内存存储和持久化存储。默认使用内存中的MessageWindowChatMemory,限制消息数量为20条。开发者可通过JdbcChatMemoryRepository实现关系型数据库持久化,支持PostgreSQL、MySQL等数据库,支持自动建表。ChatClient API通过MessageChatMemoryAdvisor等内置顾问管理对话上下文,支持按会话ID维护历史记录。示例代码展示了如何配置基于智谱AI模型的聊天客户端,实现带内存管理的对话功能
2025-07-20 11:02:07
1008
原创 Java 设计 MCP SSE 配置
本文介绍了如何基于Spring Boot框架实现Server-Sent Events (SSE)与Model Context Protocol (MCP)的集成方案。主要内容包括: 系统架构:构建实时AI交互系统,支持两种传输模式(stdio和SSE) 配置实现:通过McpServerConfig类进行灵活配置,使用@ConditionalOnProperty动态选择传输方式 核心功能: 提供标准I/O和WebFlux SSE两种传输层实现 支持MCP协议的工具调用和日志功能 通过路由绑定实现HTTP服务端
2025-07-12 18:42:03
731
原创 Java高效压缩技巧:ZipOutputStream详解
ZipOutputStream 是 Java 标准库中用于 创建 ZIP 文件 的核心类,位于 java.util.zip 包中。它允许你将多个文件或字节流写入一个 ZIP 压缩包,并支持设置压缩级别、编码方式等参数。
2025-07-06 15:08:57
797
原创 Java poi-tl 使用 word 模板 生成 word
poi-tl是一款基于Java的Word模板引擎,通过模板标签和数据模型快速生成Word文档。它支持跨平台使用,提供简单友好的API,只需准备模板文档和JSON数据即可渲染输出。主要特点包括:支持文本、图片、表格等多种元素;保留模板样式;标签可出现在文档任意位置;输出方式灵活。相比Apache POI、Freemarker等方案,poi-tl在功能性、易用性和移植性方面表现更优,是Java生态中处理Word文档的高效工具。
2025-07-06 14:17:07
1440
原创 ubuntu24.04 搭建 java 环境服务,以及mysql数据库
本文介绍了Nginx、MySQL和OpenJDK 17在Linux系统上的安装配置方法。主要内容包括:1) Nginx的安装、配置文件修改及服务管理命令;2) MySQL的安装、安全配置、远程访问权限设置及字符集修改;3) OpenJDK 17的安装步骤及版本验证。文章提供了详细的命令行操作指南和配置示例,图文并茂地展示了关键步骤的执行结果,适合需要快速部署这些服务的开发人员参考。
2025-06-05 17:01:52
780
原创 langchain llm 对话大模型 使用Funcation Call工具使用
使用Pydantic模型定义数据结构、通过LangChain和Ollama的接口与语言模型进行交互,并构造了一个能够生成特定类型笑话(敲门笑话)的系统。以下是对代码各个部分的详细解读:导入必要的库:定义数据模型:初始化语言模型:设置提示信息:执行请求并获取结果:是使用 LangChain 提供的功能,让语言模型(LLM)在生成输出时遵循指定的 结构化格式。这个结构化的格式可以是一个 Pydantic 模型,如(FinalResponse),也可以是一个 JSON Schema 字典。LangChain 的
2025-05-08 09:13:26
1143
原创 langchain 学习 制作一个简单的 llm 对话程序
使用了 langchain 的模块来构建一个翻译任务的链式处理流程。你定义了一个提示模板(ChatPromptTemplate),连接了一个本地部署的大模型(ChatOllama),并最终通过字符串输出解析器(StrOutputParser)将结果转换为字符串。当你调用 prompt_template.invoke({“language”: “italian”, “text”: “hi”}) 时,ChatPromptTemplate 会根据传入的字典替换掉模板中的占位符,生成最终的消息。
2025-05-07 09:04:34
1084
原创 langchain 简单与ollama 关联使用
使用 LangChain 中的 OllamaEmbeddings 类来初始化一个本地运行的嵌入模型(embedding model)的实例。这个模型可以将文本数据转换为向量表示(即 embeddings),常用于语义搜索、相似性匹配、RAG(Retrieval-Augmented Generation)等场景。如上面 一样通过 text 提问获取到 以保存的 向量化 数据通过 ollama 的llm 提问生成对应回答,一个简易的问答知识流程。“k”: 表示每次检索返回几个最相似的文档块(默认是 4)
2025-04-29 11:06:00
1279
原创 python flask 项目部署
在 Windows 上使用 Waitress 部署 Flask 应用是一个不错的选择,因为 Waitress 是一个纯 Python 编写的 WSGI 服务器,它兼容 Windows 系统。以下是具体步骤来帮助你在 Windows 上通过 Waitress 部署 Flask 应用。
2025-04-18 11:43:11
1336
1
原创 通过 winsw 把相关服务配置windows自启动
必需 此元素指定要启动的可执行文件。它可以是绝对路径,也可以只指定可执行文件名称并让其从中进行搜索PATH(但请注意,服务通常在不同的用户帐户中运行,因此它可能与PATH您的 shell 不同。此 ID 在系统中安装的所有服务中必须是唯一的,并且应完全由字母数字字符组成。如果指定了此可选元素,则允许服务与桌面交互,例如显示新窗口和对话框。如果需要指定要为子进程设置的环境变量,可以多次指定此可选元素。请注意,此帐户没有密码,因此任何提供的密码都会被忽略。请注意,此帐户没有密码,因此任何提供的密码都会被忽略。
2025-04-18 11:37:27
1299
原创 ollama 安装方式
在本地运行 Llama 3.3、DeepSeek-R1、Phi-4、Mistral、Gemma 2 和其他模型。魔塔社区:https://www.modelscope.cn/my/overview。如果不设置环境变量,模型文件会自动保存在C盘。还是推荐官方模型, 第三方导入的 modefile 配置有点不太正常。高级系统设置 环境变量, 添加一条 models 模型存放地址。http://127.0.0.1:3000 或者服务器ip地址。可以通过 web ui 配置 ollama 进行使用。
2025-03-07 15:37:37
1246
原创 dify docker 部署方式
由于 Dify 内置了构建 LLM 应用所需的关键技术栈,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎、稳健的 Agent 框架、灵活的流程编排,并同时提供了一套易用的界面和 API。工作流通过将复杂的任务分解成较小的步骤(节点)降低系统复杂度,减少了对提示词技术和模型推理能力的依赖,提高了 LLM 应用面向复杂任务的性能,提升了系统的可解释性、稳定性和容错性。知识库添加自己的文档信息,然后通过Rerank 模型 和 Embedding 模型 导入知识库就可以了。
2025-03-07 14:21:30
4759
4
原创 xinference docker 部署方式
Xorbits Inference (Xinference) 是一个开源平台,用于简化各种 AI 模型的运行和集成。借助 Xinference,您可以使用任何开源 LLM、嵌入模型和多模态模型在云端或本地环境中运行推理,并创建强大的 AI 应用。docker dify 添加 docker 容器内ip 配置。docker 下载对应的 xinference。docker 运行,注意 路径改成自己的,
2025-03-05 13:52:40
5292
1
原创 RabbitMQ 在 Spring Boot中使用方式
与直接模式(Direct Exchange)、扇出模式(Fanout Exchange)和主题模式(Topic Exchange)不同,Headers Exchange允许你根据消息的头部属性来决定路由逻辑,而不是简单的字符串匹配。与直接模式(Direct Exchange)不同的是,主题交换机允许使用通配符来匹配消息的路由键(routing key),从而实现更加复杂的消息路由逻辑。发送消息到fanout类型的交换机时,不需要指定路由键,因为fanout交换机会忽略路由键并将消息广播给所有绑定的队列。
2025-02-10 09:04:27
3154
原创 Seata 分布式事务使用
在 Seata 中,分布式事务被分成全局事务和分支事务。全局事务是由业务发起方启动的事务,而分支事务则是指全局事务在一个服务内的局部事务。为了协调这些事务,Seata 使用了 AT(Automatic Transaction)、TCC(Try-Confirm-Cancel)、Saga 和 XA 模式等几种不同的事务模式。branch_table 是 Seata 框架中的一个重要组成部分,用于分布式事务管理。Seata 是一种开源的分布式事务解决方案,旨在提供高性能和易用性的同时保证数据的一致性。
2025-02-05 08:03:50
1667
原创 Sentinel 断路器在Spring Cloud使用
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
2025-02-03 08:37:30
1523
3
原创 nacos 配置管理、 配置热更新、 动态路由
统一配置管理可以解决多服务配置过的问题,同时该服务配置文件移交配置中心 处理信息配置 pom.xml 添加 config 和 bootstrap 的 jar 包添加 bootstrap.yaml 文件配置配置说明spring.application.name: 指定微服务的名称(cart-service),Nacos 会根据该名称加载对应的配置。spring.profiles.active: 指定当前激活的环境(dev),Nacos 会加载 cart-service-dev.yaml 配置。sp
2025-02-01 08:33:20
1551
原创 TCP 长连接和短连接
长连接是指客户端与服务器之间的连接一旦建立后,在一定时间内保持开启状态,可以用于多次数据交互。通常情况下,只有当没有新的请求或响应时,或者出现错误情况,才会关闭这个连接。短连接指的是每次客户端发起一个请求后,服务器处理完该请求并返回结果给客户端之后,立即关闭连接。下次有新的请求时再重新建立一个新的连接。
2025-01-23 10:27:10
765
原创 LiteFlow Spring boot使用方式
目前是通过java 编写组件是 LiteFlow 框架中的一个注解,用于标记类作为 LiteFlow 组件。这个注解使得被标注的类能够参与流程编排,并允许你在流程定义中引用它们。通过这种方式,你可以轻松地将业务逻辑封装进组件中,并在需要时调用这些组件来执行特定的任务。在内部可以使用@Resource注解调用其他方法普通组件用于流程往下继续执行 THEN 或者 WHEN@Slf4j@Override判断组件用于 IF AND OR 规则组装/*** 属性判断流程处理*/@Slf4j。
2025-01-23 10:25:58
1640
原创 Spring cloud 用户登录以及用户信息流转大致流程
AuthGlobalFilter 实现了 GlobalFilter 和 Ordered 接口,使其可以在所有路由之前执行。通过构造函数注入的方式引入了 AuthProperties 和 JwtTool 两个依赖项,这通常是通过 Spring 的依赖注入机制完成的。AntPathMatcher 是一个用于匹配 URL 路径模式的工具类,常用于定义哪些路径应该被放行而不需经过身份验证。路径匹配方法配置过滤器 在第几层执行@Overridereturn 0;
2025-01-07 08:54:24
1408
原创 Spring cloud 微服务 Gateway 项目中使用
Spring Cloud Gateway 是 Spring Cloud 生态系统中的一个关键组件,用于实现 API 网关功能。它基于 Spring Framework 5、Project Reactor 和 Spring Boot 2.x 构建,旨在提供一种简单且有效的方式来路由到 API 微服务,并为它们提供横切关注点(如:安全性、监控/指标、限流等)。以下是对 Spring Cloud Gateway 的详细解析。
2025-01-06 08:58:54
1429
原创 Spring boot 项目 Spring 注入 代理 并支持 代理对象使用 @Autowired 去调用其他服务
Service: 标识这是一个 Spring 管理的服务类。ApplicationContextAware: 实现该接口允许你在类中获取 ApplicationContext 对象,从而可以访问 Spring 容器中的所有 Bean。@Autowired: 注入了 AutowireCapableBeanFactory,用于自动装配新创建的代理对象。
2025-01-05 10:30:45
1153
原创 LiteFlow 流程引擎引入Spring boot项目集成pg数据库
利用LiteFlow,你可以将瀑布流式的代码,转变成以组件为核心概念的代码结构,这种结构的好处是可以任意编排,组件与组件之间是解耦的,组件可以用脚本来定义,组件之间的流转全靠规则来驱动。@LiteflowComponent 是 LiteFlow 框架中的一个注解,用于标识一个类为 LiteFlow 组件。它是一个编排式的规则引擎框架,组件编排,帮助解耦业务代码,让每一个业务片段都是一个组件。LiteFlow的脚本组件,支持众多脚本语言,完全和Java打通,你可以用脚本来实现任何逻辑。
2024-12-31 09:22:05
1601
原创 Semaphore线程管理同步机制
Semaphore(信号量)是另一种同步机制,它管理一组许可证。每个acquire()调用会获取一个许可证,如果没有可用的许可证,则阻塞直到有许可证可用;而每次调用release()会释放一个许可证,增加可用的许可证数量。因此,Semaphore可以用来限制同时访问某些资源的线程数目,确保不会超过设定的最大并发数10。信号量分为公平性和非公平性两种模式。在公平模式下,信号量会按照请求的顺序分配许可证给等待的线程;而非公平模式则可能跳过前面等待的线程,优先响应新的请求。Semaphore。
2024-12-30 09:45:59
1117
原创 CyclicBarrier线程辅助类的简单使用
当另一个线程也调用了 await() 方法并且计数器达到了阈值时,所有等待在屏障点的线程都会被唤醒,并继续执行。需要注意的是,如果某个线程在等待过程中因为中断或异常而退出,那么所有等待在屏障点的线程都将收到一个 BrokenBarrierException 异常。提供了一个构造函数来指定参与的线程数量,并且可以选择性地提供一个当最后一个线程到达屏障时要执行的动作。在这个例子中,我们创建了一个 CyclicBarrier 实例,并设置了屏障点为,意味着我们需要等待三个线程都到达屏障点。
2024-12-29 15:19:08
822
原创 CountDownLatch 线程计数器使用总结
CountDownLatch 是 Java 并发包 java.util.concurrent 中的一个同步辅助类。它允许一个或多个线程一直等待,直到其他线程完成一系列的操作。
2024-12-11 10:25:20
1181
2
原创 pg数据库 原序列对不上数据库主键id 更新序列信息
当 PostgreSQL 数据库中的序列(sequence)与表的主键 ID 不再同步时,这通常意味着序列已经落后于实际的最大 ID 值,或者在某些情况下超前。要解决这个问题,你需要更新序列以匹配当前表中最大 ID 的值。以下是解决此问题的步骤和 SQL 语句示例。
2024-12-09 11:23:35
1198
2
原创 创建简单的 PL/pgSQL 存储过程
PostgreSQL 支持多种语言编写存储过程,包括 SQL、PL/pgSQL(Procedural Language/PostgreSQL)、PL/Python、PL/Perl 等。在这个例子中,plpgsql 表示使用的是 PostgreSQL 的内置过程化语言 PL/pgSQL。如果你使用的是另一种语言(如 SQL、PL/Python、PL/Perl),则应相应地更改这里的值。在此之前版本中,你只能使用 CREATE FUNCTION 来创建过程,即使这些函数实际上并不返回任何有意义的值。
2024-12-05 17:16:13
1709
原创 Postgresql 配置数据库表添加主键自增id
在 PostgreSQL 数据库中,如果你想创建一个自增的 ID 字段,通常会使用序列(sequence)配合默认值或者使用带有自动递增特性的 SERIAL 类型。SERIAL 是一个特殊的类型,实际上是 integer 类型的一个别名,并且在创建表的时候会自动添加一个序列和默认值。这个序列会在每次插入新行并且没有明确指定该列值的时候自动递增。
2024-10-24 13:12:02
2021
1
原创 设计模式 命令模式(Command Pattern)
每个命令对象都可以记录其执行前后的状态,这样在需要撤销操作时可以恢复到之前的状态。例如,当用户点击一个按钮或选择一个菜单项时,可以创建一个命令对象来表示这个请求,然后在适当的时候执行该命令。可以将多个简单的命令组合成一个复合命令,这样就可以一次执行一系列操作。命令模式(Command Pattern)是一种行为设计模式,它把请求封装成对象,从而让你可以用不同的请求、队列或者日志来参数化其他对象。这个示例展示了命令模式的基本应用,通过将请求封装成对象,使得发送请求的对象和执行请求的对象之间松耦合。
2024-09-25 09:25:14
1515
5
原创 设计模式 策略模式(Strategy Pattern)
策略模式(Strategy Pattern)是一种行为设计模式,它使你能在运行时改变对象的行为。该模式定义了一系列的算法,并将每一个算法封装起来,使它们可以相互替换。策略模式让算法独立于使用它的客户而变化。
2024-09-24 09:07:09
1392
原创 设计模式 享元模式(Flyweight Pattern)
享元模式(Flyweight Pattern)是一种结构型设计模式,它的目的是通过共享技术来有效地支持大量细粒度的对象。享元模式可以极大地减少内存的使用,从而提高程序的性能。它特别适用于需要创建大量相似对象的场景,通过共享不变的部分来减少对象的数量和内存消耗。具体享元模式实现FlyweightInterface接口, 查看内外部状态。通过 Map 存储之前对象,获取之前的对象无需重新创建。定义 flyweight 的接口。
2024-09-18 09:01:02
999
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅