自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 DPDK、TC 和 XDP:Linux 高性能网络到底在优化什么

把 DPDK、TC 和 XDP 放到一条网络路径里面,其实就比较容易理解了。NICDriverXDPskbTCSocketNICTC主要是在 Linux 网络协议栈中对流量进行控制和处理。XDP是在数据包刚进入 Driver 附近时进行非常早期的处理,尽量避免不必要的协议栈开销。DPDK则进一步绕开 Linux 内核网络协议栈,让用户态程序直接处理数据包。让数据包尽可能少走没有必要的路径。只不过它们选择的位置不同。继续使用 Linux 网络协议栈在协议栈里面做处理在进入完整协议栈之前。

2026-10-17 18:52:25 269

原创 NUMA 基础:从 CPU、内存到 Node 的整体理解

在看 Linux 性能优化、数据库调优或者多线程程序时,经常会看到 NUMA、NUMA Node、Local Memory、Remote Memory 这些概念。如果只是普通 PC,这些东西平时很难直接感受到。但在双路服务器或者几十核、上百核的机器上,NUMA 对程序性能的影响会比较明显。

2026-10-17 18:40:39 122

原创 《Act More, Decide Less:Agent 开始学会少做决策》

论文《Act More, Decide Less》提出Action Chunking策略,通过让LLM一次性生成多个连续动作(如“打开冰箱→拿苹果→关冰箱”),减少不必要的决策轮次。为解决执行中环境变化导致的错误传播问题,作者引入Skill结构作为天然的Chunk边界信号,训练模型学会在合适时机暂停重新判断。该方法名为SPACE,实验显示其在ALFWorld上仅需3.7次决策(对比GiGPO的15.9次),成功率提升至99.2%,同时减少约78.9%的LLM调用。核心启示在于:并非所有动作都需要重新推理,应

2026-09-14 22:58:47 247

原创 05. Linux内核喂饭版教程

taint可以理解为:内核被非标准或不可信模块污染了状态。比如你加载一个闭源模块、强制加载不匹配模块,内核会标记 taint。当前内核状态不再是纯净状态后续排查 kernel panic 时可信度下降可以避免许可证不明导致的 taint warning,并允许模块使用部分 GPL-only 符号。

2026-06-25 16:47:13 207

原创 04. Linux内核喂饭版教程

注册的退出函数,并释放模块资源。在性能监控项目里,加载 CPU/softirq 采集模块时,会在初始化阶段注册字符设备和采集缓冲区;加载时内核会检查模块格式、解析符号依赖,把模块代码放进内核地址空间,然后调用。表示当前没有其他模块或设备正在使用它,一般可以卸载。,内核会先检查模块引用计数,如果没有被使用,就调用。,它们对应模块加载、卸载、查看和内核日志观察。如果模块和当前内核版本不匹配,加载时可能失败。如果两个版本明显不匹配,就可能加载失败。如果返回非 0,表示加载失败。说明模块当前引用次数不为 0。

2026-06-25 16:04:20 178

原创 03. Linux内核喂饭版教程

这一节解决一个问题:资料里也把 Makefile、动态加载、 编译作为 Linux 内核模块入门的核心内容。假设我们有一个最小模块目录: 就是上一节的代码:现在问题是:怎么把它变成:2. 最小 Makefile先看完整 Makefile:注意:这是很多人第一次写 Makefile 最容易错的地方。这句最关键。它的意思是:最后会生成:这里你容易疑惑:因为 Kbuild 的规则是:你告诉 Kbuild:Kbuild 会自动去找对应的:然后编译。这句表示: 会输出当前内核版本,比如:可

2026-06-25 15:53:31 224

原创 0. Linux内核喂饭版教程

这一节目标很简单:资料里的核心点是:内核模块是 文件,通过 动态加载进内核,通过 卸载;模块没有 ,而是靠 / 注册入口和出口。先看完整代码:你现在不要纠结怎么编译,Makefile 下一节讲。这一节只看:代码结构和加载流程。它表达的是:所以这个模块本身没有业务功能,只是验证:3. 逐行解释3.1 这是写内核模块必须要用的头文件之一。它提供这些东西:也就是:目前你只需要记住:它提供一些内核基础函数,比如:用户态打印用:内核态打印用:注意:这是模块加载函数。当你执行:

2026-06-25 14:52:56 216

原创 01. 速通Linux内核喂饭版教程

加载时内核会解析模块、完成符号链接,然后调用初始化函数;在我的性能监控项目里,内核模块主要用于采集 CPU 和 softirq 这类高频内核指标,并通过字符设备和。项目里用内核模块把 CPU / softirq 这类高频内核指标暴露给用户态 Worker,Worker 通过字符设备和 mmap 读取,减少频繁 read 和数据拷贝开销。Linux 内核模块是一种运行时扩展内核功能的机制,编译后通常是。暴露给用户态 Worker,减少频繁系统调用和数据拷贝。告诉内核加载和卸载时该调用哪个函数。

2026-06-25 13:48:55 453

原创 07. 从零带你学习Linux内核:软硬中断

我的项目里 Worker 会采集 softirq 指标,并结合网络吞吐、PPS、CPU softirq 时间和 load,一起判断服务器网络处理压力。你的项目资料里也明确:Worker 端有 CPU、内存、磁盘、网络、eBPF、用户态监控等多个采集模块,并且 softirq 可以通过内核模块暴露给用户态,最终统一聚合成。网卡收到包后会触发硬中断,硬中断里做少量处理,后续收包和协议栈处理会交给。增长会很快,CPU 也可能花更多时间处理 softirq,所以 softirq 高经常说明网络包处理压力大。

2026-06-23 17:12:58 586

原创 06.从零带你学习Linux内核:/proc

这一节讲网络监控。你前面学的是磁盘累计值,也是类似思路:它里面很多字段是,不是当前速率。

2026-06-23 16:23:41 206

原创 05.从零带你学习Linux内核:/proc

这一节讲磁盘 I/O。现在和/proc/stat更像:它里面很多字段也是,所以要两次采样做差。

2026-06-23 14:56:21 171

原创 04. 从零带你学习Linux内核:/proc

MemFree这也是 Linux 内存监控里最容易被问的点。

2026-06-23 14:01:02 202

原创 03. 从零带你学习Linux内核:proc

你之前学的/proc/stat是算 CPU 使用率;现在的是看系统负载压力。两者相关,但不是一个东西。

2026-06-23 00:40:00 217

原创 02. 从零带你学习 Linux 内核 :/proc

/proc/stat 是 Linux 系统中监控 CPU 使用情况的重要接口,它记录的是 CPU 自系统启动以来在各种状态下的累计时间。摘要如下: 数据格式:/proc/stat 包含 cpu(所有核心总和)和 cpu0、cpu1(各逻辑核心)的统计行,每行显示 user(用户态)、nice(低优先级)、system(内核态)、idle(空闲)、iowait(I/O等待)等状态的累计时间。 计算原理:CPU 使用率需通过两次采样差值计算: 总时间差 total_delta = (user+system+id

2026-06-23 00:09:07 185

原创 从零带你学习Linux 内核: /proc

/proc是Linux内核暴露系统运行状态的虚拟文件系统。它并非普通磁盘文件,而是内核动态生成数据的接口,用户态程序通过读写/proc下文件来获取CPU、内存、进程等实时信息。主要包含两类数据: 系统级信息:如/proc/stat(CPU统计)、/proc/meminfo(内存使用)、/proc/loadavg(系统负载) 进程级信息:/proc/[PID]/目录下的cmdline、status等文件 该机制让用户态程序无需直接访问内核内存,通过标准文件操作即可安全获取系统状态。监控项目Worker正是通过

2026-06-22 23:37:35 333

原创 Auto_AICoding_Harness:给 AI Coding 套上一层“工程安全壳”

Auto_AICoding_Harness 是一个轻量级框架工具,旨在为AI编程场景提供工程化控制。它通过脚本、模板和规则文档,将普通代码仓库接入可规划、可验证、可审核的AI Coding流程,解决复杂任务中上下文丢失、修改范围失控、验证不足等问题。项目分为core流程控制层、profile工程策略层和templates生成层,支持small和large两种任务模式,分别对应轻量控制和强控制流程。核心设计包括状态机管理、人工审批门控和上下文打包机制,确保AI修改过程可追溯、可接力。适用于C++/Linux等

2026-06-11 19:23:45 543

原创 世界模型:从“预测下一个状态”到“可交互世界模拟器”

世界模型(World Model)是智能体内部学习的环境模拟器,用于预测状态变化、评估动作后果和规划决策。它通过编码观察输入为内部状态,结合动作预测未来结果,支持智能体在行动前进行内部推演。世界模型适用于机器人、自动驾驶、游戏AI等场景,解决"后果预测"问题。典型架构包括感知编码器、状态表示、动力学模型、价值评估和规划器。经典研究如World Models、PlaNet、Dreamer和MuZero展示了不同实现路径,从潜在空间规划到仅预测关键决策信息。世界模型的核心价值在于让智能体通过内部模拟减少真实环境

2026-06-11 19:10:47 460

原创 大白话解释:Harness Engineering

Harness,直译的话是“马具”“脚手架”,但放在 AI 工程领域,我觉得用“工作制度”来理解最合适。它不是让模型变得更聪明。它是给模型搭建一套规矩,让模型的工作变得可控、可持续、可验收。任务怎么拆状态怎么记录完成怎么验收出错怎么回退而 Harness Engineering,就是专门设计和维护这套“工作制度”的工程学科。但这里有一个重要的认知:Harness Engineering 的核心动作,不是“搭建一套最优结构”,而是持续判断,哪些约束现在还需要,哪些已经可以去掉了。

2026-04-08 14:08:47 460

原创 模型上下文协议 MCP

摘要: MCP(模型上下文协议)旨在标准化大模型与外部系统的交互,解决Function Calling在工具调用中的碎片化问题。核心优势包括统一工具描述、结构化请求/响应、上下文生命周期管理及跨组件协作能力。MCP采用Host/Client/Server三层架构,通过标准化消息格式(如JSON)和错误处理机制(类似JSON-RPC 2.0),实现模型与工具服务的解耦。典型应用场景如智能数据分析助手,需权衡项目规模——小型场景可用Function Calling快速实现,而需长期治理的复杂系统更适合MCP协议

2026-04-06 21:59:35 663

原创 Skill 核心概念、原理与实践指南

《Skill 核心概念与实践指南》探讨了在AI Agent开发中如何通过Skill机制解决业务场景落地难题。文章指出,Skill作为结构化能力单元,将标准作业流程(SOP)封装为可复用的"技能包",能够显著提升Agent的稳定性、知识沉淀和模块化管理。Skill通过预定义步骤确保流程确定性,以独立文件形式存储业务知识,并支持模块化开发治理。其实现原理采用分层加载机制优化上下文窗口使用,与MCP协议协同完成工具调用。相比传统函数,Skill更强调业务流程编排与自然语言触发,是连接业务需求与

2026-04-06 01:44:34 1707

原创 509.斐波那契数

递归写法最直观,但会有大量重复计算,因此引入。用动态规划的思想,自底向上迭代计算,避免递归。记录结果,避免重复。

2025-08-21 18:22:09 307

原创 543.二叉树的直径

如果递归返回直径而不是深度,父节点就无法正确计算自己的直径。父节点的直径需要通过。

2025-08-12 22:03:48 519

原创 144.二叉树的前序遍历

需要借助额外的成员变量(全局变量)保存状态,函数的“纯粹性”降低。这道题的核心思路就是利用递归遍历的性质来依次收集节点值。要求先访问根节点,再递归访问左子树,最后访问右子树。:逻辑直观,直接利用递归函数的返回值构建结果。:只维护一个数组,避免频繁拼接,效率更高。二叉树的遍历可以用递归法来实现,为节点数,所有节点访问一次。会有额外的时间和空间开销。定义一个全局(或成员变量)

2025-08-08 16:04:24 424

原创 104.二叉树的最大深度

【代码】104.二叉树的最大深度。

2025-08-08 11:57:41 299

原创 3.无重复字符的最长子串

【代码】3.无重复字符的最长子串。

2025-07-30 16:59:16 333

原创 438.找到字符串中所有字母异位词

p.size()s。

2025-07-30 16:30:10 329

原创 567.字符串的排列

使用固定长度的滑动窗口,窗口大小为。,说明找到了一个合法的排列,返回。遍历完整个字符串都没有找到,返回。当窗口中满足字符数量与。

2025-07-30 16:27:31 233

原创 76.最小覆盖子串

每个字符最多进窗口一次、出窗口一次,因此整体为线性时间。这是滑动窗口的经典题型,我们的目标是在字符串。变量表示当前窗口中满足要求的字符种类数。在每次窗口满足条件时尝试更新最短子串长度。两个哈希表用于存储字符频率。的全部字符(包括数量)。

2025-07-29 21:37:56 413

原创 83.删除排序链表中的重复元素

避免保留多余的重复节点。最后确保链表的末尾指向。

2025-07-27 16:48:55 282

原创 26.删除有序数组中的重复项

使每个元素只出现一次,并返回去重后数组的长度。,这给我们用双指针法提供了便利。(即允许重复、但有序)的数组。

2025-07-27 16:22:53 510

原创 142.环形链表 II

【代码】142.环形链表 II。

2025-07-18 21:24:20 375

原创 876. 链表的中间节点

我们不能直接随机访问链表中间节点(不像数组可以通过下标定位),所以要使用遍历技巧。只使用了两个指针变量,空间非常节省。恰好指向链表的中间节点。

2025-07-17 20:41:43 293

原创 19.删除链表的倒数第 N 个结点

给定一个单链表,删除链表的n,并返回链表的头节点。

2025-07-17 16:02:39 316

原创 23.合并 K 个升序链表

priority_queue<类型, 容器类型, 比较函数>表示这是一个小顶堆,值小的节点优先出队。

2025-07-17 12:21:04 646

原创 86.分隔链表

遍历原链表,将节点按条件加入到两个新链表中,最后将这两个链表拼接起来,构成所需结果。

2025-07-11 12:12:10 365

原创 Shell的运行原理

Shell作为Linux系统的交互核心,通过进程隔离和命令解析保障了系统的稳定性与安全性。权限管理则通过用户角色、文件权限、默认掩码等机制,构建了灵活的多层级访问控制体系。从基础的su切换到精细化的sudo配置,再到目录粘滞位的应用,Linux权限体系在保障安全的同时兼顾了协作效率,体现了其在服务器领域的设计优势。

2025-07-04 13:13:02 1039

原创 21.合并两个有序链表

创建一个值为 -1 的哨兵节点 l3,它不会出现在最终结果中,但能让我们避免特判空链表或头节点的问题。每次比较两个链表当前节点的值,将较小的那个接到新链表末尾,然后向前移动对应链表指针。当其中一个链表遍历完后,另一个链表中剩下的节点一定是升序的,直接接在新链表后即可。l3.next 即为合并后链表的实际头节点。

2025-07-01 20:58:54 259

原创 Reactor模式

Reactor(反应堆)模式,也称为分发者模式或通知者模式,是一种将就绪事件派发给对应服务处理程序的事件设计模式。该模式通过事件分发机制,将I/O事件的就绪状态通知到对应的业务处理程序,实现了事件监听与事件处理的高效解耦。在Linux系统中,Reactor模式通常与epoll事件驱动模型相结合,形成百万级并发处理能力的底层架构。

2025-07-01 09:30:58 1036

原创 Linux常见的31种信号量

Linux系统中的信号(Signal)是一种进程间通信机制,用于通知进程发生了特定事件。信号可以由内核、其他进程或自身触发,其本质是向目标进程发送一个异步通知。在Linux信号机制中,

2025-07-01 08:54:17 1087

原创 Linux信号量

说到信号量,可能有些同学会联想到红绿灯系统——这其实是个绝妙的类比!POSIX信号量就像操作系统里的交通警察,专门管理并发执行流对共享资源的访问。它不仅能解决互斥问题,还能实现更细粒度的资源调度。和传统的System V信号量相比,POSIX信号量更轻量级,特别适合线程间的同步。比如我们常见的抢票系统、生产者消费者模型,都离不开它的身影。不过要注意,虽然名字里带着"POSIX"这个前缀,但它的底层实现不是简单的计数器操作,而是涉及到原子操作和等待队列的复杂机制。扩展思考。

2025-06-30 22:09:40 1206

网络计算器源码,包含多个文件

网络计算器源码,包含多个文件

2025-03-11

tcpserver代码

tcpserver代码

2025-03-07

空空如也

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

TA关注的人

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