- 博客(343)
- 收藏
- 关注
原创 Maven随笔
Maven 是 Apache 旗下的一个开源项目,是一款用于管理和构建项目的工具,它基于项目对象模型(Project Object Model,简称: POM) 的概念,通过一小段描述信息来管理项目的构建、报告和文档。
2024-11-03 00:08:26
1663
原创 Linux命令
比如,简单的ls命令就有:-a -A -b -c -C -d -D -f -F -g -G -h -H -i -I -k -l -L -m -n -N -o -p -q -Q -r-R -s -S -t -T -u -U -v -w -x -X -1等选项,可以发现选项是极其多的。通常情况下是采用“[n1[n2]]”操作参数的格式。为Linux中的文本编辑器,vim是vi的加强版,不仅能编辑文本而且还具有 shell 程序编辑的功能,可以用不同颜色的字体来辨别语法的正确性,极大方便了程序设计和编辑性;
2024-11-01 02:17:27
1141
原创 Git 总结
希望本文可以更好的帮助你在工作中更加有效的使用Git。另外附上一张包含常用 Git 命令大全的表格(来源Chat,不一定准确)。命令名称描述用法示例其他相关信息git init初始化一个新的 Git 仓库git init在当前目录创建一个新仓库git clone克隆一个远程仓库到本地git add将文件添加到暂存区git add .git commit提交暂存区中的更改到仓库添加 -a 参数可以跳过暂存区直接提交所有更改git status显示工作目录和暂存区的状态git status。
2024-10-14 00:11:23
1853
1
原创 ARP 协议详情
只要确定了 IP 地址,就可以向目标地址发送 IP 包。然而,在数据链路层中,进行实际通信时有必要了解每个 IP 地址所对应的 MAC 地址。
2026-01-04 23:54:16
1066
原创 IPv6 详解
现在的 IPv6 网络中所使用的格式为,n=48,m=16,128-n-m=64,即前 64 位为网络标识,后 64 位为主机标识。此外,由于 IPv6 实现了即插即用的功能,因此在没有 DHCP 服务器的环境中,也能实现 IP 地址的自动获取,如下图所示。如果将 IPv6 的地址像 IPv4 的地址一样用十进制数表示,是 16 个数的序列(IPv4 是 4 个数的序列)。而在有路由器的网络环境中,可以从路由器获得 IPv6 地址的前面部分,后面部分则由 MAC 地址进行设置。
2025-12-28 22:24:55
1151
原创 PPP 协议
PPP(Point-to-Point Protocol)是指点对点协议,即一对一连接计算机的协议。PPP 属于 OSI 参考模型的第 2 层,即数据链路层的协议。PPP 不像以太网和 FDDI 等数据链路,后两者不仅与 OSI 参考模型的数据链路层有关,还与第 1 层的物理层有关。具体来讲,以太网使用同轴电缆或双绞线电缆,还定义了使用何种电子信号表示帧中的 0 和 1。与之相比,PPP 属于纯粹的数据链路层协议,与物理层没有任何关系。换句话说,仅有 PPP 无法实现通信,还需要有物理层的支持。
2025-12-21 17:12:55
923
原创 以太网帧格式
巨型帧适用于在高速线路中发送和接收大量数据,这是因为相较于标准以太网帧,在单次传输的数据量有所增加的同时,巨型帧可以减少以太网首部的处理次数,从而降低协议开销。从协议类型对照表中可以看出,当协议类型字段的值为 01500(05DC)时,表示 IEEE802.3 以太网的长度。协议类型字段中存放的是协议编号,该编号表示数据部分包含的是哪种协议的数据,即以太网的再上一层网络协议的类型。一般的以太网帧中表示协议类型的字段,在 IEEE802.3 以太网帧中却表示帧的长度。
2025-11-02 16:41:21
1108
原创 TCP 首部格式
下图展示了的格式,相较于 UDP,TCP 首部结构复杂得多,因为它需要支持面向连接、可靠传输、流量控制、拥塞控制等多种机制。与 UDP 不同,TCP 首部中没有表示包长度和数据长度的字段。我们可以通过 IP 层获知 TCP 的包长度,进而由 TCP 的包长度可知数据的长度。
2025-10-27 00:35:55
1200
原创 UDP 首部
下图展示了 UDP 首部的格式。UDP 数据报由首部和数据部分组成,其中首部位于数据部分之前。UDP 首部包含以下四个字段:源端口号、目标端口号、包长度和校验和。
2025-10-14 19:45:00
1831
原创 SpringAI指标监控
为什么 Spring AI 应用需要可观测性?构建可观测的 Spring AI 翻译应用。可以看到调用次数,总耗时和模型等具体信息。随便查看监控 AI 下某一指标的具体信息。,目前依赖最新版本为 3.5.5。配置聊天对话模型并创建接口。中查看 AI 相关信息。
2025-10-06 19:41:36
559
原创 IPV4首部
为此,对于那些还未正式使用的版本号就会被标上号码,进而在实验的过程中选择一个最佳的产物进行标准化。不过,因为要按照要求在该字段中发送数据,相应的控制机制会异常复杂,或是一但设置错误,就没有实际效果了等原因,所以 TOS 字段难以投入使用。不过,由于有 IP 分片处理,因此从 IP 的上层看,不论底层采用何种数据链路,都认为能够以 IP 包的最大长度传输数据。IPV4 的版本号为 4,因此在这个字段上的值是“4”。IP 首部结构如下,了解 IP 首部的详细信息即可对 IP 所具有的功能有一个详细的把握。
2025-10-03 18:59:08
845
2
原创 SpringAI模型评估
前瞻建议评测与生成用不同模型。文档也强调“选择最合适的评估模型,它不一定与生成模型相同”。这能显著降低自我偏倚。评估模型的选择与成本控制分离评审与生成:评审模型可以更小、更快(如 minicheck、等),达到“快速 + 足够稳定”的平衡。本地化优先:用 Ollama 跑评审模型,结合 Testcontainers,无需外网 即可在 CI 上跑评估(要注意 runner 的算力与镜像缓存)。去随机:评估时把温度调低(0~0.2),避免判定波动。
2025-09-01 23:15:00
1112
原创 SpringAI集成MCP
可以自己尝试实现(销毁原来的 Stdio、建立新的 Stdio,不推荐),由于多个用户存在 Stdio 可能会造成并发竞争因此不推荐。以使用百度地图提供的 MCP 服务为例,演示如何使用 Stdio 的方式调用公用的 MCP Server。系统提示词,由调用方传递用户数据:可以将用户信息传递到工具中,但是可以随意去查询其他用户的数据,不可取。在使用其他开发者提供好的 MCP 服务时,仅仅引入 MCP 的客户端依赖即可。首先,对 MCP 进行配置,Stdio 的配置方式有两种。
2025-08-18 23:13:18
2026
1
原创 MCP协议
MCP(Model Context Protocol,模型上下文协议),旨在为大语言模型(LLM)提供统一的、 标准化的方式与外部数据源和工具之间进行通信。从本质上来说,MCP 是一种技术协议,一种智能体 Agent 开发过程中共同约定的一种规范。这就好比秦始皇的书同文、车同轨,在统一的规范下,大家的协作效率就能大幅提高,最终提升智能体 Agent 的开发效率。传统AI集成的问题:这种为每个数据源构建独立连接的方式,可以被视为一个 M*N 问题。问题。
2025-08-18 22:29:11
1221
原创 SpringAI实现Reread(Advisor)
Advisor 是 SpringAI 基于 AOP 机制实现与大模型对话过程的增强、拦截、修改等功能的关键组件。所有的增强通知都需要实现 Advisor 接口。Advisor:顶级接口,继承了 Ordered,可以定义拦截器(Advisor)的顺序。ChatClientRequest:表示由 ChatClient 处理的请求,最终用于构建要发送到 LLM 的Prompt。ChatClientResponse:表示由 ChatClient 返回的响应。
2025-08-11 22:03:54
1077
原创 SpringBoot 发送邮件
邮件功能虽非核心业务,但在注册验证、通知提醒、工单系统等系统中却非常关键。良好的邮件架构不仅能提升用户体验,也能让系统具备更强的扩展性和稳定性。添加邮件日志记录、异步发送等能力,可继续在此基础上构建更完善的邮件服务模块。
2025-07-28 23:07:25
1085
2
原创 PostgreSQL并发控制
PostgreSQL 通过多版本并发控制(MVCC)机制,为开发者提供了高效的并发访问管理工具。MVCC 的核心理念是为每个 SQL 语句提供一个数据快照,使其在执行期间看到的数据始终一致,从而避免由于并发事务修改数据而产生的不一致问题。与传统数据库依赖加锁不同,MVCC 避免了读写之间的冲突:查询不会阻塞写操作,写操作也不会阻塞查询,即使在可序列化快照隔离(SSI)这种最高级别的事务隔离中,这种读写无冲突的特性也依然保持。
2025-07-27 22:00:31
1328
原创 SpringAI之多模态
多模态是指表达或感知事物的方式,例如视觉、听觉、嗅觉。对应的信息传递媒介可以是不同类型的数据,如文本、图像、声音、视频等。多模态就是从多个模态表达或感知事物。大部分情况与大模型交互都是基于普通文本输入,只有需要解析图片等其他类型数据时才会用到多模态模型。deepseekqwen-plus等模型都是纯文本模型,在 Ollama 和百炼平台,也能找到很多多模态模型。以 Ollama 为例,在搜索时点击 Vision,就能找到支持图像识别的模型:在阿里云百炼平台也一样:阿里云百炼平台的。
2025-07-24 00:31:03
762
原创 SpringAI之RAG
要解决大模型的知识限制问题,其实并不复杂。解决的思路就是给大模型外挂一个知识库,可以是专业领域知识,也可以是企业私有的数据。不过,知识库不能简单的直接拼接在提示词中。因为通常知识库数据量都是非常大的,而大模型的上下文是有大小限制的。那怎么办?思路很简单,庞大的知识库中与用户问题相关的其实并不多。所以,我们需要想办法从庞大的知识库中找到与用户问题相关的一小部分,组装成提示词,发送给大模型就可以了。那么问题来了,该如何从知识库中找到与用户问题相关的内容呢?
2025-07-23 00:25:15
1223
原创 No qualifying bean of type ‘org.springframework.ai.embedding.EmbeddingModel‘ available: expected sin
但它在容器中找到了 两个符合条件的实现(ollamaEmbeddingModel 和 openAiEmbeddingModel),它不知道用哪个,导致报错。而后引入 Redis 作为向量数据库时,会让 Spring 自动注入一个 EmbeddingModel 类型的 Bean(给 Redis 使用)。但是 RedisVectorStore 却能找到 Ollama 的向量模型,咱也不知道这算不算 Bug。翻译过来就是 Bean 不唯一,找到了两个 Bean 对象,不知道注入哪一个。
2025-07-20 23:44:15
489
原创 Spring AI开发智能客服(Tool calling)
由于 AI 擅长的是非结构化数据的分析,如果需求中包含严格的逻辑校验或需要读写数据库,纯 Prompt 模式就难以实现了。(也叫作)是人工智能应用中的一种常见模式,它允许模型与一组 API 或工具进行交互,从而增强其功能。主要用于从外部来源(数据库、Web 服务、文件等)检索信息回答原本无法回答的问题,或用于在软件系统中采取行动、比如发送电子邮箱、在数据库中创建新记录等。接下来通过一个智能客服的案例来演示。根据条件筛选和查询课程查询校区列表新增试听预约单声明式地使用 Tool 注解;
2025-07-18 22:30:00
1472
3
原创 Spring AI之Prompt开发
模型开发有四种模式,其中一种就是纯 Prompt 模式,只要我们设定好 System 提示词,就能让大模型实现很强大的功能。接下来就看看如何才能写好提示词。
2025-07-17 20:45:00
1652
1
原创 Spring AI快速入门
SpringAI整合了全球(主要是国外)的大多数大模型,而且对于大模型开发的三种技术架构都有比较好的封装和支持,开发起来非常方便。不同的模型能够接收的输入类型、输出类型不一定相同,SpringAI 根据模型的输入和输出类型不同对模型进行了分类:大模型应用开发大多数情况下使用的都是基于对话模型(Chat Model),也就是输出结果为自然语言或代码的模型。
2025-07-16 23:21:22
1637
2
原创 LangChain4j 开发
市场上主流的 Java 调用大模型的工具库有两种:LangChain4j 是一个 面向 Java 的开源框架,用于构建 基于大语言模型(LLMs) 的应用程序。它是 LangChain(Python 生态中非常流行的 LLM 应用框架)的 Java 实现,旨在让 Java 开发者能够轻松地集成和使用各种 LLM 服务,快速开发 智能聊天机器人、智能搜索、文档问答、Agent系统 等 AI 驱动的应用。官网文档:https://docs.langchain4j.dev/。引入依赖(JDK17 及以上):构建
2025-07-13 22:38:49
2072
4
原创 LangChain4j实现RAG知识库原理
首先我们需要把最新的数据或者专业的数据存储到文档中,接下来借助于文本分割器把一个大的文档分割成一个一个小的文本片段,然后这些小的文本片段要使用一种专门的大模型:向量模型,之前我们介绍大模型的时候有讲过,不同的大模型擅长的领域不一样,有擅长文本处理的、有擅长图片处理的,其中就有一种大模型擅长文本向量化。由于大模型训练完毕后,随着时间的推移产生的新数据大模型是无法感知的,而且训练大模型的时候一般使用的都是通用的训练数据,有关专业领域的知识,大模型也是不知道的。一旦外挂了知识库后,整个工作流程会发生一些变化。
2025-07-13 01:24:48
967
原创 PostgreSQL表操作
如果要更新物化视图,可以采用触发器的形式,当原表中的数据被写后,可以通过触发器执行同步物化视图的操作。在语句级别的触发器以及INSERT操作,这个变量是null。当对标进行 insert,update,delete,truncate 操作时,会触发表的 Trigger(看触发器的创建时指定的事件)相比之前的普通视图,物化视图就不需要每次都查询复杂SQL,每次查询的都是真实的物理存储地址中的一份数据(表)。在存储数据时,数据肯定要落到磁盘上,基于构建的tablespace,指定数据存放在磁盘上的物理地址。
2025-07-05 21:47:34
1129
原创 Python的Asyncio模块
Task 继承 Future,Task对象内部 await 结果的处理是基于 Future 对象来的。await + 可等待的对象(协程对象、future 对象、Task 对象 -> IO 等待)官网解释:“Future” 是一种特殊的低级可等待对象,它表示异步操作的最终结果。,fastAPI、Django 快的原因,比 js 事件循环快,小于 go。的方式创建Task对象,这样可以让协程加入事件循环中等待被调度执行。事件循环的替代方案,第三方方案,在一定程度上提高事件循环的效率。
2025-07-02 10:44:43
1239
原创 Npcap与Pcap4J
Npcap 是用于 Windows 操作系统的数据包捕获和网络分析的架构,由软件库和网络驱动程序组成。大多数网络应用程序通过广泛使用的操作系统原语(例如 Socket 套接字)访问网络。通过这种方式访问网络上的数据非常容易,因为操作系统会处理底层细节(例如协议处理、数据包重组等),并提供类似于读写文件的熟悉接口。然而,有时这种“简单的方法”并不适合,因为有些应用程序需要直接访问网络上的数据包。也就是说,它们需要访问网络上的“原始”数据,而无需操作系统介入协议处理。
2025-06-29 16:15:28
1324
原创 Activiti 补充
手动任务定义了一个 BPM 引擎外部的任务,它用来模拟由某人完成的工作,引擎不需要知道,也没有系统或 UI 接口。思考如下需求,当有一个任务希望他超期自动办理,此时就需要知晓任务的过期时间,此功能其他类型的任务也具有。之前使用的一直是用户任务,activiti 还支持其他类型的流程任务,会用户任务即可,其它用处不大。对于引擎来说,手动任务时作为一个传递活动来处理的,从流程还行到达它里面的那一刻,就会自动继续流程。结束事件:标记流程或子流程的结束,可以是普通结束,也可以是错误结束、消息结束、信号结束。
2025-06-25 22:28:46
1174
原创 TCP/IP 网络模型
TCP/IP 网络通常是由上到下分成 4 层,分别是应用层,传输层,网络层和网络接口层。网络接口层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什么本质的区分,可以统称为数据包。
2025-06-25 22:18:33
1044
原创 Activiti整合Spring(Boot)
依赖如下:2 添加整合的配置文件添加一个 Spring 的配置文件,并在其中完成 Activiti 的整合操作:databaseSchemaUpdate 的取值注意:通过方法的执行我们能够发现相关的表结构在数据库中完成了创建,说明 Activiti 和 Spring 的整合成功。Activiti7 发布正式版本之后,它和 SpringBoot 2.x 已经完全整合开发了依赖如下:2 修改配置文件配置文件即参数说明:3 整合SpringSecurity因为 Activiti7 和 Spring
2025-06-22 18:42:50
1256
原创 Activiti 进阶
流程实例(ProcessInstance)代表流程定义的一次执行过程。一个流程实例包括了所有的运行节点,我们可以利用这个对象来了解当前流程实例的进度等信息。例如:用户或者程序按照流程定义的内容发起了一个流程,这个就是一个流程实例。流程变量在 activiti 中是一个非常重要的角色,流程运转有时需要靠流程变量,业务系统和 activiti 结合时少不了流程变量,流程变量就是 activiti 在管理工作流时根据管理需要而设置的变量。
2025-06-22 01:34:27
301
原创 Activiti初识
工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。一个软件系统中具有工作流的功能,我们把它称为工作流系统,一个系统中工作流的功能是什么?就是对系统的业务流程进行自动化管理,所以工作流是建立在业务流程的基础上,所以一个软件的系统核心根本上还是系统的业务流程,工作流只是协助进行业务流程管理。即使没有工作流业务系统也可以开发运行,只不过有了工作流可以更好的
2025-06-14 12:24:20
1181
原创 PostgreSQL数据类型
PostgreSQL 的数据类型系统是其强大灵活的基础之一,既覆盖传统 SQL 标准,也支持现代开发需求如 JSON、数组、范围、网络等。合理选择数据类型,不仅可以提升系统表达力和执行效率,还能提升数据一致性和开发体验。在实际设计表结构时,应结合业务需求、数据特点、未来可扩展性,选择合适的数据类型,不应该选择过于复杂的类型,相反,应该越简单越好(数值、字符、日期)。
2025-05-03 19:43:01
1494
2
原创 PostgreSQL初试
PostgreSQL 是一个功能强大、开源的对象-关系型数据库系统,以其可靠性、数据完整性、可扩展性而著称,底层使用 C 语言实现。它采用与 Linux 内核相同的开源协议 ——BSD 协议。这一协议非常宽松,与 MIT 协议类似,允许你在遵守基础条款的前提下进行二次开发,甚至将其商业化并收费。自 1986 年起由加州大学伯克利分校开始开发,PostgreSQL 目前在全球范围拥有活跃的社区和商业支持。PostgreSQL 最初的前身是名为 Ingres 的数据库系统。
2025-05-02 01:08:15
1081
1
原创 SkyWalking链路追踪
随着系统设计变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、分布式数据库、分布式缓存等,使得后台服务构成了一种复杂的分布式网络。往往前端的一个请求需要经过多个微服务、跨越多个数据中心才能最终获取到结果,如下图并且随着业务的不断扩张,服务之间互相调用会越来越复杂,这个庞大的分布式系统调用网络可能会变的如下图所示:那随之而来的就是我们将会面临的诸多困扰:问题定位:当某一个服务节点出现问题导致整个调用失败,无法快速清晰地定位问题服务。
2025-04-22 12:40:30
1608
原创 ELK日志系统
ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一个搜索和分析引擎;Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。Elastic Stack 是 ELK Stack 的更新换代产品。
2025-04-19 12:35:47
1107
原创 RocketMQ5.0环境搭建
RocketMQ5.0为了更好地拥抱云原生,引入了全新的弹性无状态代理模式,将当前的Broker职责进行拆分,对于客户端协议适配、权限管理、消费管理等计算逻辑进行抽离,独立无状态的代理角色提供服务,Broker则继续专注于存储能力的持续优化。这套模式可以更好地实现在云环境的资源弹性调度。Master与 Slave 的对应关系通过指定相同的BrokerName,不同的Brokerld 来定义,Brokerld为0表示Master,非0表示Slave,Master也可以部署多个。
2025-04-14 06:00:00
1054
原创 分布式文件存储系统FastDFS
FastDFS是余庆(国人,淘宝)开发的一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。FastDFS是一个轻量级的开源分布式文件系统。
2025-04-09 18:24:25
1540
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅