- 博客(60)
- 收藏
- 关注
原创 物联网 基于netty入门与线程模型探秘简述
理解 Netty 的核心组件(Channel、ChannelHandler、ChannelPipeline),掌握其高性能的 Reactor 线程模型,并通过一个完整的 Echo 示例快速入门。每个 EventLoop 内部有一个 Selector 和任务队列,一个 EventLoop 服务于多个 Channel,保证同一 Channel 的事件串行执行。WorkerGroup:负责已连接的读写 I/O 及业务处理(通常业务 Handler 可再异步执行)
2026-05-14 21:19:40
54
原创 物联网 Protobuf入门+梳理
它被设计为独立于编程语言,也独立于操作系统。这就意味着你可以用一种语言(比如 Java)定义一个数据结构和编码消息,然后用完全另一种语言(比如 Python 或 Go)来读取和解析它,而不会有任何障碍。使用 Buf 等工具:更专业的 Protobuf 管理工具,可以 lint、格式化、自动生成多语言代码。将 .proto 文件放在独立目录(如 proto/),并用 Git 统一管理。就是将传统的model.java文件,改变为proto文件。执行下面脚本,解析proto文件,生成python代码。
2026-05-12 22:28:01
315
原创 物联网 Protobuf文本协议入门
Protobuf(Protocol Buffers)是Google开发的高效、跨语言的序列化框架,相比JSON/XML等文本协议,Protobuf在性能、空间占用和跨语言支持方面具有显著优势。
2026-05-11 21:47:00
202
原创 物联网 MQTT简易版Broker,基于spring-boot socket
【代码】物联网 MQTT简易版Broker,基于spring-boot socket。
2026-05-10 11:42:00
113
原创 物联网 MQTT订阅性能优势
服务端必须明确知道设备的 IP 和端口,并且设备往往需要有一个固定或可访问的公网 IP(或通过反向连接、内网穿透辅助)。每次推送都是直接建立 Socket 连接到那个 IP 的设备。服务端必须维护一张“设备 → IP”的映射表,设备位置变了就得更新。服务端不需要知道硬件设备的 IP 地址,也不需要关心设备在哪个网络、有没有换 IP。设备主动告诉 Broker “我想订阅某个主题”,之后所有发往该主题的消息,Broker 都会自动转发给它。服务端只管往主题上发指令,设备自己“认领”消息。
2026-05-10 09:19:23
259
原创 物联网 MQTT协议和本地socket区别
MQTT Broker 是在普通 Socket 之上实现了完整的 MQTT 协议,让你获得了发布/订阅、QoS、遗嘱消息、保留消息等高级特性,而不必自己从零实现这些复杂逻辑。发布/订阅模式让硬件开发者只需关心自己的数据主题,而不用处理设备间直接寻址、在线状态、消息缓存等底层细节,显著降低物联网系统的复杂度。硬件设备(传感器、执行器、网关、智能家电等)与云端或边缘平台通信时,发布/订阅模式天然适配“多对多、动态、低耦合”的通信需求。添加新设备时,只需让新设备订阅相关主题,无需修改其他设备。
2026-05-08 21:38:22
282
原创 物联网 MQTT协议
它诞生于1999年,最初用于石油管道的卫星通信(带宽极低、延迟极高),后来在物联网(IoT)领域大放异彩,现已成为物联网最主流的通信协议之一。如三一重工通过MQTT监控设备,故障预测准确率达90%,并用于压力、流量等远程监测。用于城市大脑等大型数据平台,整合环境、交通、能源等各类数据。连接车辆与云平台,实现车辆数据的实时上报、远程控制和导航更新等车内车载通信。海量设备(智能音箱、控制中枢、APP)通过MQTT进行无缝通信和交互控制。连接传感器监测土壤温湿度、光照等数据,实现精准灌溉和农业自动化管理。
2026-05-07 20:41:33
196
原创 python window下面uv安装和使用
而uv是更现代的、Rust编写的“一体化Python项目管理器”,旨在解决pip在性能和功能上的诸多局限(集成了项目创建、依赖锁定、Python版本管理、虚拟环境管理、脚本运行等多种功能)uv add requests(它会自动将依赖添加到pyproject.toml,并生成/更新精确锁定所有依赖版本的uv.lock文件)无需关心环境是否激活,直接运行uv run main.py(uv会自动识别并使用项目关联的虚拟环境)pip是专注的、Python官方的“包安装工具”
2026-05-05 20:56:57
255
原创 python venv 虚拟环境的创建
venv 是 Python 3.3+ 自带的虚拟环境工具,可以为每个项目创建独立的 Python 运行环境,避免不同项目之间依赖包冲突。Python 3.3 及以上,venv已作为标准库内置,无需任何额外步骤。根据惯例被命名为项目目录下的 .venv 或 venv。
2026-05-04 22:30:04
56
原创 pnpm 入门和安装
文件夹中,像是为每个项目都单独购买一份仓库里已有的图纸。而 pnpm 采用了一种更巧妙的方式:它只在一个名为“仓库”(store)的全局地方存放一份图纸,各个项目都通过一种“快捷方式”(即硬链接和符号链接)来引用它。pnpm 会根据 package.json 生成高效的 node_modules 结构并创建 pnpm-lock.yaml 文件。删除现有项目中的 node_modules 文件夹和 package-lock.json 文件。npm 将每个依赖的副本直接复制到项目的。
2026-04-29 21:37:04
369
原创 spring-ai 第十二mcp server调用入门(http协议)
(MCP) 是一个标准化协议,使 AI 模型能够以结构化的方式与外部工具和资源进行交互。想象它是一个在你的 AI 模型和现实世界之间的桥梁 - 允许它们通过一致的接口访问数据库、API、文件系统和其他外部服务。它支持多种传输机制,以在不同的环境中提供灵活性。启动后,MCP Server 会在 http://localhost:8083/mcp 端点提供服务。cmd 命令 执行 npx @modelcontextprotocol/inspector。
2026-04-19 22:46:24
216
原创 spring-ai 第十一mcp server调用入门(stdio协议)
(MCP) 是一个标准化协议,使 AI 模型能够以结构化的方式与外部工具和资源进行交互。想象它是一个在你的 AI 模型和现实世界之间的桥梁 - 允许它们通过一致的接口访问数据库、API、文件系统和其他外部服务。它支持多种传输机制,以在不同的环境中提供灵活性。这种架构天然将开发者分为两个群体:AI 应用开发者专注于编排多服务器、集成 AI 模型和打造用户体验;MCP Server 开发者专注于将特定服务能力标准化暴露。切到项目 target/目录下执行。
2026-04-16 21:43:05
205
原创 spring-ai 第十tool调用
从外部来源检索信息(弥补本地模型的不足,通过外网获取信息进行推理组织),eg: 检索最新的新闻文章。工具调用(也称为函数调用)是AI应用中的常见模式,允许模型与一组API或工具互动,增强其功能。完整链路(llm->通过关键字匹配优先执行tool进行数据库查询,再通过llm进行优化)代码中重点 tool 关键字,如果匹配不到会直接跳过tool,直接llm。执行一个动作,例如调用一个API或执行一个命令,eg:填写网页上的表单。llm 选择 (model: glm-4-plus)
2026-04-14 21:22:40
242
原创 Hermes 适合小白手把手操作集成飞书
hermes pairing approve feishu 7547RMY4 (将这行命令进行执行)hermes gateway setup (开始配置)[注意其中用户是 飞书用户id]hermes gateway restart (改变配置之后进行重启)hermes gateway status (检查状态)hermes gateway start (启动)上述配置完成之后,会进行确认。
2026-04-13 16:48:57
486
原创 spring-ai 第九模型介绍-聊天记录
大型语言模型(LLMs)是无状态的,这意味着它们不会保留之前交互的信息。为了解决这个问题,Spring AI 提供了聊天记忆功能,使您能够存储和检索在与 LLM 的多次交互中的信息。官方文档明确指出,ChatMemory 不适合存储完整历史,如需保存所有记录,应考虑使用 Spring Data 等其他方案。如果您需要维护所有消息交换的完整记录,您应该考虑使用其他方法,例如依赖于Spring Data以高效地存储和检索完整的聊天历史记录。存储层负责将消息存储在持久化存储中,例如数据库或文件系统。
2026-04-12 21:30:43
210
原创 spring-ai 第八模型介绍-图像模型
prompt=一个泰迪狗漫画。这些模型专门用于图像生成,允许开发人员在不同的图像相关模型之间切换,同时只需进行最少的代码更改。
2026-04-10 17:36:58
269
原创 spring-ai 第六模型介绍-聊天模型
利用了预训练的语言模型,例如 GPT(生成型预训练变换器),以在自然语言中生成类似人类的响应。通过输入封装的辅助类 Prompt 和输出处理的辅助类 ChatResponse。
2026-04-08 16:27:51
87
原创 spring-ai 第五模型介绍
模型api(提供一个通用的API接口,下游适配不同模型)向量存储api(像jdbc一样,切换不同的向量存储模型)一个统一的API接口,提供多种模型能力。
2026-04-07 17:32:57
35
原创 spring-ai 第四多模态API
多模态是指模型同时理解和处理来自各种来源的信息的能力,包括文本、图像、音频和其他数据格式(目前新的模型支持多模态),OpenAI的GPT-4o、Google的Vertex AI Gemini 1.5、Anthropic的Claude3,以及开源的Llama3.2。用户消息的content字段主要用于文本输入,而可选的media字段允许添加一个或多个不同模态的附加内容,如图像、音频和视频。MimeType指定模态类型。能以极简代码同时调用文本、图像、音频等多模态大模型,大幅降低多模态 AI 应用的开发门槛。
2026-04-06 16:37:56
208
原创 spring-ai 第三结构化输出
快速将AI模型的结果转换为数据类型,例如JSON、XML或Java类,以便可以传递给其他应用程序函数和方法。LLM生成结构化输出的能力对于下游应用非常重要。
2026-04-05 16:54:29
77
原创 spring-ai 第二提示词介绍
本文介绍了Spring-AI框架中提示词(Prompt)的使用方法。提示词已从简单字符串发展为结构化模板,包含USER(用户输入)、ASSISTANT(AI回应)、SYSTEM(系统指令)和TOOL(工具调用)四种角色。通过PromptTemplate类可创建结构化提示,示例展示了如何构建SystemPromptTemplate实例并渲染提示词。文章还介绍了加载外部提示词模板的方法,以及集成智谱AI模型的具体步骤,包括依赖配置和API密钥设置。最后提供了测试接口地址,帮助开发者快速验证提示词功能。
2026-04-04 14:58:24
587
原创 spring-ai 第一步集成入门
允许您注册自己的服务作为工具,将大型语言模型连接到外部系统的API,@Tool-注释的方法提供。模型、提示、提示模板、embedding、token(=钱)、结构输出。Spring AI 目前支持将输入和输出处理为语言、图像和音频的模型。一个ETL(提取、转换和加载)管道。
2026-04-03 21:37:49
55
原创 使用jstack排查死锁,面试考点
是 JDK 自带的命令行工具,用于生成 Java 进程的线程快照(thread dump)。通过分析线程快照,可以快速定位死锁问题。找出相互等待锁的线程对,即线程 A 持有锁 L1 等待锁 L2,线程 B 持有锁 L2 等待锁 L1。首先,找到目标 Java 进程的 PID(进程 ID)。通过以上步骤,可以快速定位并解决 Java 应用中的死锁问题。:在某些环境下(如容器),可能需要使用。如果应用因死锁导致无响应,可以添加。记录下应用进程的 PID,例如。以下是一个简单的死锁代码及使用。
2026-04-01 16:25:53
238
原创 HashSet、LinkedHashSet、TreeSet 区别与使用场景
通过以上对比,你可以根据实际业务需求(是否需要顺序、是否需要排序、性能要求)来选择合适的。接口的实现类,它们都不允许存储重复元素。但它们底层的实现机制不同,导致在。
2026-03-30 16:48:02
366
原创 HashMap 底层原理(面试精简版)
“HashMap 的 get 流程?” → 计算 hash → 定位桶 → 遍历链表/红黑树,用。比较 key 返回 value。
2026-03-28 17:55:30
205
原创 为什么禁止在for循环里使用拼接字符串
下面我会从字符串的不可变性、编译期优化、循环中的具体问题以及替代方案等方面详细解释。如果循环次数很少(例如固定 3~5 次),或者拼接的字符串是编译期常量,那么。通过遵循这一原则,你可以写出更高效、更健壮的 Java 代码。中,这种优化无法跨迭代生效。对象,其中包含拼接后的结果,而原来的字符串对象保持不变。这意味着一旦创建,它的内容就不能被改变。场景,它仍然无法避免重复创建中间对象,因此。对象,并进行拼接,导致大量临时对象产生。优化,使得简单拼接的性能有所提升。,避免在不知情的情况下写出性能陷阱。
2026-03-27 16:36:39
370
原创 Java 异常处理最佳实践,别再乱用 try-catch
不仅会让代码变得臃肿难读,还可能掩盖潜在的问题。确保代码中的异常分支被测试覆盖,尤其是自定义异常和资源关闭逻辑。优雅的异常处理,能让你的系统在出错时依然可控、可追溯、可恢复。在实际开发中,异常处理往往是被忽视但又极其重要的一环。异常处理的性能开销较大,且会破坏代码可读性。捕获异常后什么都不做,是最危险的行为。(如 ID、参数值),方便定位问题。,帮助你写出更优雅、更健壮的代码。的资源(如流、连接),优先使用。,它会自动关闭资源,避免资源泄漏。中关闭,容易遗漏或出错。)统一处理异常,避免到处。
2026-03-26 17:40:46
381
原创 String 为什么不可变?面试必问
当创建一个字符串字面量时,JVM 会先检查池中是否存在相同内容的字符串,如果存在则返回引用,否则创建新对象放入池中。被设计为不可变类(immutable),即一旦创建,其值就不能被修改。这是 Java 语言设计中的一个经典决策,背后涉及性能、安全、并发等多方面考虑。如果字符串可变,攻击者可能通过反射等手段修改字符串内容,造成安全隐患。如果字符串可变,那么一个引用修改了字符串内容,会导致池中其他引用指向的值也被改变,产生不可预知的错误。如果字符串可变,恶意代码可能修改正在加载的类名,破坏类加载器的安全机制。
2026-03-25 18:23:56
256
原创 Java8新特性最实用的5个
则作为 Lambda 的补充,让代码更简洁。熟练运用这 5 个特性,是写出优雅、健壮且符合业界规范的 Java 代码的基础。Java 8 引入了全新的日期时间 API,基于。Java 8 的发布是 Java 历史上的一次重大革新,至今仍是绝大多数企业级应用的主流版本。它是 Lambda 表达式的一种简化写法。这是 Java 8 的灵魂。它让你能够将函数作为参数传递,告别了冗长的匿名内部类。它通过显式的 API 强制开发者思考“变量可能为空”的情况。用于处理集合数据的利器,支持链式编程和并行计算。
2026-03-24 14:08:13
298
原创 spring ai 集成 demo
允许您注册自己的服务作为工具,将大型语言模型连接到外部系统的API,@Tool-注释的方法提供。模型、提示、提示模板、embedding、token(=钱)、结构输出。Spring AI 目前支持将输入和输出处理为语言、图像和音频的模型。基于spring ai 构建聊天demo。一个ETL(提取、转换和加载)管道。
2026-03-18 21:55:58
184
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅