- 博客(28)
- 收藏
- 关注
原创 基于定时器中断的多任务轮询架构
在每次定时器中断中轮询任务列表,依次判断任务是否存在,若任务执行倒计时不为0,则接着检查任务运行标志,若任务执行标志为FLASE,即任务倒计时没有到并且任务未标记执行未FLASE的情况下,则对任务的倒计时进行减减。直到再次轮询到这个任务的执行倒计时为0的时候,将任务执行标志位置为1,并重装任务倒计时,任务标志位用于之后的任务调度函数执行各任务。scheduler.h:任务调度器的相关操作定义:任务注册,任务卸载,调度器初始化,调度器开关,调度器回调,调度器任务;调用任务函数,实现任务到任务列表中。
2026-04-09 13:09:24
90
原创 使用ZLMRTCClient.j实现webRtc流播放
封装好组件后,搞写一个 Demo 页面来测试功能。这个项目里使用了 Ant Design Vue 组件库,提供了地址输入、参数控制和日志展示功能。现代浏览器(尤其是 Chrome)对带音频的视频自动播放有严格限制。WebRTC 连接如果不正确关闭,会占用大量网络端口和内存。为了在项目中复用播放逻辑,我们首先封装一个。生命周期钩子,在组件销毁前强制调用。
2026-04-09 13:08:33
17
原创 Spring-AI 与 Solon-AI 深度对比分析报告
能力维度Spring AISolon AIReAct 推理⚠️ 需手动实现✅ 原生支持多 Agent 协作❌ 需 Alibaba 扩展✅ 原生 TeamAgent协作协议需自定义✅ 6 种预置协议任务拆解需 Alibaba JManus✅ 内置 Supervisor(提供 SolonCode、SolonClaw 作示例参考)角色定义需手动配置✅ 声明式定义可视化调试Alibaba 支持需自行实现工作流编排需 Alibaba Graph✅ 原生 Ai FlowRAG 环节。
2026-04-08 13:40:00
267
原创 Claude Code通关手册(一):转角遇到爱,真香体验
但别因此放弃,下一篇文章我会教你怎么配置权限,让它该问的问、不该问的自动通过。没有初始化时,它不知道你的项目是 Python 还是 Node.js,不知道你的代码规范是 Airbnb 还是 Google Style,也不知道你希望它如何命名变量。但Claude Code更进一步——你告诉它"使用策略模式重构这段代码",它会自动找到需要修改的文件、创建新的组件、修改配置、甚至运行一下看看有没有报错。这跟你带一个新同事是完全不同的体验——你只需要写一次"新人入职手册",以后它每天上班都带着这份手册来。
2026-04-08 13:39:04
319
原创 渐进式披露:如何用少即是多的理念改进 AI 产品的人机交互
不要一次性把所有信息和选项都展示给用户,而是根据用户的操作和需求,逐步展示必要的内容。这个原则特别适合 AI 产品,因为 AI 交互天然就是渐进式的——用户说一点,AI 理解一点,然后补充一点,再理解更多。就像人与人之间的交流一样,总得慢慢来,毕竟谁也不能一见面就把心掏出来不是?分步引导:把复杂任务拆成小步,每步只请求必要信息智能补全:利用历史上下文和项目知识自动补全信息即时反馈:每个操作都有清晰的视觉反馈和状态提示容错机制:允许用户撤销、重置,避免错误造成不可逆损失输入多样化。
2026-04-07 13:28:39
329
原创 为什么说Rust是对自闭症谱系人士友好的编程语言?
程序员圈子里,Rust常常以学习路线陡峭而闻名。forfor看着和别的编程语言没啥区别,对吧?但实际上,去掉官方的语法糖,for循环语句的完整代码是这样的——其实是一个迭代器。在for循环语句这个例子中,你可以理解为将C/C++里面的手动for循环()给自动化了。的其他使用场景的例子:这个例子就引入了第二个学习路线陡峭的原因——这大概是Rust初学者和Rust编译器搏斗的头等原因。就比如👆这个案例,如果你是学其他编程语言的,恐怕根本无法理解“为什么nums赋值给sum之后,nums。
2026-04-07 13:27:28
302
原创 lil_tea c++ 2023 style guide
检测出错的方式非常简单, 在你认为可能出错的一行语句后输出调试, 输出的可以是任何你喜欢的东西. 可以在分号后直接写, 也可以换行后写, 但一定是在后面写.但管道是个奇怪的东西, 管道的含义是先构造出一个全集, 然后用淘汰赛的方式选出你需要的集合. 我觉得这非常不明确, 不如直接构造出想要的集合.使用 tab 可以让你的代码在不同的 ide 里可以按照不同人的喜好来缩进, 而使用空格会导致所有人看到的都是按照你的喜好进行的缩进.
2026-04-06 13:30:48
365
原创 dplyr和tidyr用法
tidyverse是一套数据分析套件包,它极大地简化和拓展了使用R语言进行数据分析的操作,涵盖了数据导入、数据处理和可视化等多方面的功能。dplyr和tidyr是tidyverse的重要组成部分,前者主要用于数据的处理,后者则主要用于数据的格式调整。两者的主要处理的对象是data.frame(及衍生的data.table和tibble),这是一种用于存储高度结构化数据的对象。你可以将data.frame视作一张表格,其每一行为一个条目,每一列为一项属性。同一列中的所有数据类型一致,而同一行则不一定。
2026-04-06 13:30:12
326
原创 starlette - 轻量级ASGI Web框架
starlette是一个轻量级、高性能的ASGI框架,用于构建异步Web服务。快速创建API和Web应用处理异步请求和响应提供WebSocket支持。
2026-04-05 14:21:03
23
原创 EF Core 慢查询排查实战:TagWith、OpenTelemetry、执行计划,30 分钟定位性能瓶颈
EF Core 慢查询排查,不能每次都盯着 LINQ 本身看。用TagWith把 SQL 和业务场景绑定起来用把耗时、TraceId、SQL 标签统一上报用执行计划确认瓶颈到底在扫描、回表还是排序。
2026-04-05 14:19:48
183
原创 快速搭建你的数据智能分析 Agent
Agent 侧 k-LLMmeans n_clusters=15~20 LLM 仅对质心调用 与样本量无关。聚类结果写回 ClickHouse cluster_id + cluster_summary。向量表 work_order_embeddings embedding + HNSW索引。向量写入 ClickHouse work_order_embeddings 表 支持增量。宽表 wide_work_order_table 工单名 + 总结 + 聊天记录。k-LLMmeans 聚类引擎。
2026-04-04 14:39:20
211
原创 线程与进程的区别与联系:操作系统入门详解(含 Python 示例)
如果把计算机的操作系统比作一个大型工厂进程:就是工厂里的一个个独立车间。每个车间有自己专属的生产资源(比如机器、原材料),车间之间相互隔离,不会共用资源,一个车间出问题不会直接影响其他车间。线程:是车间里的工人。同一个车间(进程)里的多个工人(线程)共享车间的所有资源(机器、原材料),他们协同完成车间的生产任务,工人之间沟通成本低,但一旦某个工人操作失误,可能会影响整个车间的运行。进程是操作系统进行资源分配和调度的基本单位。
2026-04-04 14:38:43
326
原创 SequenceInputStream的源码和Vector.class的一些函数说明(windows操作系统,JDK8)
Vector 与 ArrayList 一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写 Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问 ArrayList慢。那么,SequenceInputStream对象中Vector集合的容量是2,如果此时执行SequenceInputStream.class::read()函数。下面这个例子就恰当的使用SequenceInputStream的read()函数;
2026-04-03 15:03:44
366
原创 linux设备驱动阻塞IO应用 _
将之前通过 add_wait_queue 添加的等待队列项从等待队列中移除;该宏创建一个 wait_queue_entry 类型的变量,并将指定的进程描述符 tsk (当前进程为 current )与该队列项关联,同时设置默认的唤醒函数。.private = current, // 指向等待的进程 task_struct。/* 阻塞写等待队列头 *//* 字符设备 */
2026-04-03 15:03:08
286
原创 python-langchain框架(1-8-2 缓存机制——验证缓存的效果)
这个时长已超过人类对“流畅交互”的心理阈值(200毫秒),用户会明显感知到“卡顿”和“等待焦虑”。而启用缓存后,相同问题的后续请求直接从本地数据库读取结果,响应时间骤降至10毫秒以内——这种“无感秒回”的体验,让用户感觉系统始终在线、反应迅捷,极大提升了产品专业度和信任感。回答: 太阳系中最大的行星是**木星**。回答: 太阳系中最大的行星是**木星**。将重复调用 3 次(第1次无缓存,后续应命中缓存)测试问题: "太阳系哪个行星最大?1. **体积与质量** ...1. **体积与质量** ...
2026-04-02 15:39:01
155
原创 揭开 C#中的异步/等待:隐藏状态机
原始方法被转换为一个存根(stub)方法:它在栈上创建状态机实例,初始化并启动它。而你的主要代码逻辑则被移动到状态机的MoveNext()方法中,通过状态值和switch语句实现执行点的跳转。特别重要的是:如果异步方法同步完成(所有等待的操作已经完成),状态机将保留在栈上,不会发生堆分配。该构造会追踪代码中的各种操作和状态,比如当代码达到等待表达式时放弃执行,以及在后台作业完成时恢复执行。在编译时,编译器会将该方法重写为状态机结构体,并生成一个存根方法替换原始方法签名。
2026-04-02 15:38:22
172
原创 PCI9x5x驱动移植支持PCI9054在win7下使用1
PCI9656与PCI9054在基地址、中断以及DMA操作方面的定义完全一样,只有其它一些没用到的功能定义不同,所以稍加改动就可以使用示例程序中的寄存器头文件。
2026-04-01 15:37:04
182
原创 基于Kotlin的国产开源播放器DKVideoPlayer
Android工程引用DKVideoPlayer在线库时,需要修改以下两个配置:1、打开模块级别的build.gradle,给dependencies节点补充下面几行配置,表示引入3.3.7版本的DKVideoPlayer库:2、打开App模块的src/main/AndroidManifest.xml,给manifest节点补充下面几行权限配置,表示声明悬浮窗、存储空间和网络等权限:二、直接导入DKVideoPlayer源码DKVideoPlayer的源码已经适配Android Studi
2026-04-01 15:36:12
42
原创 速度与激情:Android Python + CameraX 零拷贝实时推理指南
(MLJ/Flux 发展中)?(原生多级并行)?(ggplot2)?(pandas 主导)?(Table 支持一般)?(Flux/Lux 快速发展)?微分方程/科学计算?
2026-03-30 15:53:43
298
原创 JVM内存与GC机制全景深度剖析:从对象诞生到垃圾回收的完整生命周期
其底层数据存储在对象存储中(S3、COS、OSS、ceph),在用户和对象存储层中加一个中间层,作为文件系统层,负责将文件系统与对象存储的操作进行翻译转换,从而实现POSIX兼容。在介绍之前,首先需要理清楚文件系统与对象存储的区别是什么,文件系统对接对象存储需要做哪些工作,之后才考虑性能的优化与可靠性的优化。操作接口:基于RESTful API(HTTP),主要操作是PUT(上传/覆盖),GET(下载),DELETE(删除),HEAD(获取元数据),不支持seek或部分写入。无法修改对象的中间部分。
2026-03-30 15:46:53
143
原创 MCP 爆火背后:是技术革命,还是精心包装的“新瓶旧酒”?
Spring Boot 4.0 于 2025 年 11 月正式发布,基于 Spring Framework 7.0,全面支持 Java 25(含虚拟线程优化),是一个里程碑式的大版本更新。配置类迁移适配:针对 Spring Boot 4 中移动的配置类(如 Caching 、Thymeleaf 、WebMvc 、FreeMarker 和 Mustache )提供了全面的识别支持。除了新功能,本次 EAP 还包含了大量的 Bug 修复和性能优化,涵盖了从核心平台、UI、文件系统到各种语言的方方面面。
2026-03-29 17:18:59
171
原创 JVM内存与GC机制全景深度剖析:从对象诞生到垃圾回收的完整生命周期
其底层数据存储在对象存储中(S3、COS、OSS、ceph),在用户和对象存储层中加一个中间层,作为文件系统层,负责将文件系统与对象存储的操作进行翻译转换,从而实现POSIX兼容。在介绍之前,首先需要理清楚文件系统与对象存储的区别是什么,文件系统对接对象存储需要做哪些工作,之后才考虑性能的优化与可靠性的优化。操作接口:基于RESTful API(HTTP),主要操作是PUT(上传/覆盖),GET(下载),DELETE(删除),HEAD(获取元数据),不支持seek或部分写入。无法修改对象的中间部分。
2026-03-29 17:17:20
240
原创 搞定多模态微调只需一杯咖啡的时间?FC DevPod + Llama-Factory 极速实战
在实际使用中该控件主要用于整型或浮点的计数显示,与普通的LineEdit组件不同,该组件可以在前后增加特殊符号并提供了上下幅度的调整按钮,灵活性更强。接下来将用一个简单的案例展示如何使用 QSpinBox组件,该组件有两个版本:QSpinBox用于展示单精度浮点数,而QDoubleSpinBox() 则可以展示精度更高的数值,需要注意的是,该组件有两个特殊参数,当使用setPrefix() 时可以指定在前方加入特殊符号,而使用 setSuffix() 时则可以在后方追加特殊符号,我们就可以后方追加为例。
2026-03-28 19:26:53
228
原创 搞定多模态微调只需一杯咖啡的时间?FC DevPod + Llama-Factory 极速实战
在实际使用中该控件主要用于整型或浮点的计数显示,与普通的LineEdit组件不同,该组件可以在前后增加特殊符号并提供了上下幅度的调整按钮,灵活性更强。接下来将用一个简单的案例展示如何使用 QSpinBox组件,该组件有两个版本:QSpinBox用于展示单精度浮点数,而QDoubleSpinBox() 则可以展示精度更高的数值,需要注意的是,该组件有两个特殊参数,当使用setPrefix() 时可以指定在前方加入特殊符号,而使用 setSuffix() 时则可以在后方追加特殊符号,我们就可以后方追加为例。
2026-03-28 19:21:41
201
原创 混合编排工作流
Kite 是一个高效的轻量级 ORM 框架,基于 Kotlin 编写,开箱即用,内置分页查询、增删改查等常用功能,支持多表操作。Kite 是一个功能强大、易于使用的 ORM 框架,它通过全自动映射和简洁的 API,大大简化了数据库操作的开发工作。支持自定义 SQL:在需要时,可以编写自定义 SQL 语句,满足复杂查询需求,还可以像写代码一样写流程控制语句。Kotlin/Java 双语言支持:既可以在 Kotlin 项目中使用,也可以在 Java 项目中无缝集成。测试 Mapper 接口。
2026-03-27 13:33:51
187
原创 告别臃肿:为什么 Drizzle ORM 是 TypeScript 后端的未来?
需要传入一个关键参数,BluetoothGattCallback是一个抽象类,在进行具体实现时,需要继承这个抽象类实现所有的抽象回调方法,如果把BluetoothGatt比作电话,BluetoothGattCallback更像是一个听筒。BluetoothGatt 是Android与ble外设通信的桥梁和控制中心,是ble客户端的抽象,并不是设备本身,而是与设备建立连接后获取的一个通信句柄。低功耗蓝牙是4.0版本起支持的蓝牙协议,主要特点是低功耗,传输速度快,传输数据量小的特点。
2026-03-27 13:33:10
292
原创 串联控制环路仿真解析
使用 UseProcess(workflow) 时,内部调用 BuildInMemory(),并按 ProcessId:Version 将 ProcessEntity 缓存到内存中,不产生数据库写入,适合单元测试、Demo、嵌入式场景;Workflow 代码定义流程结构,支持 Start、Task、ServiceTask、RagService、LlmService、Agent、Parallels、Branch、End 等。流程:开始 → 校验订单 → 计算金额 → 通知结果 → 结束。
2026-03-26 23:24:30
326
原创 vivo Celeborn PB级Shuffle优化处理实践
从基础的Button、TextBox、CheckBox,到复杂的DataGrid、TreeView、NavigationView,甚至还有特色控件如支持9种画笔类型的InkCanvas、ColorPicker、MediaElement。它保留了WPF开发者熟悉的编程模型,同时用DirectX 12替换了老旧的MilCore渲染层,用Source Generator替代了运行时反射,用.NET 10的最新特性提升了开发体验。87个以上的控件、完整的动画和效果系统、灵活的标记语言。这些足以证明其野心。
2026-03-26 23:23:48
268
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅