- 博客(82)
- 收藏
- 关注
原创 Linux 虚拟内存:页表、缺页与写时复制
本文从 C 程序中打印出的变量地址出发,介绍虚拟地址与物理地址的区别,以及页表、MMU 和 VMA 在内存管理中的作用。结合段错误、malloc 按需分配、缺页异常、物理页共享和写时拷贝等现象,逐步解释 Linux 如何通过虚拟内存机制实现地址转换、内存保护与高效的物理内存管理。
2026-11-06 09:11:21
96
原创 命令行参数、环境变量与虚拟地址空间:从 main 的形参说起
本文详解命令行参数、环境变量和虚拟地址空间。程序启动时,内核通过exec将命令行参数(argc、argv)和环境变量(envp)加载至栈顶,由main函数接收。argv以NULL结尾,envp同理,可通过environ或getenv访问。环境变量由父进程继承,通过export传递给子进程。这些数据位于进程地址空间的栈顶,按低到高顺序排列:argc、argv数组、NULL、envp数组、NULL、辅助向量及字符串内容。理解此结构有助于掌握程序启动机制与内存管理原理。
2026-11-05 12:21:59
107
1
原创 Linux 进程状态:R、S、D、T、Z 与僵尸孤儿进程
本文先介绍就绪、运行、阻塞的三态模型,再说明 Linux 内核如何把它细化为 R、S、D、T/t、X、Z 六种状态,以及这些状态之间如何相互转换;同时给出用 ps 和 /proc 查看状态的方法,并用两段代码分别制造僵尸进程和孤儿进程,解释僵尸为何会泄漏内存、孤儿由谁收养。
2026-11-04 16:45:03
207
原创 Linux 进程优先级、切换与调度
本文围绕 Linux 进程优先级、上下文切换与调度器三件事展开:从 nice、PRI、内核队列下标三套刻度的关系讲起,介绍用 ps/top/nice/renice/setpriority 查看与调整优先级的方法及其权限边界;再拆解进程切换保存、恢复的硬件现场与切换成本;最后以 Linux 2.6 的 O(1) 调度器为例,说明 runqueue、140 个优先级队列、bitmap 位图与 active/expired 双数组如何实现常数时间的任务挑选,并交代其被 CFS、EEVDF 取代的历史脉络。
2026-11-04 15:57:32
382
原创 Linux进程概念入门:程序、PCB与fork
本文主要介绍进程的基本概念。从程序的一次运行出发,介绍程序与进程的区别,以及操作系统如何通过 PCB 和 task_struct 管理进程。结合 Linux 命令和 C 语言示例,讲解 PID、PPID 与父子进程的关系,说明 fork 的返回值、执行流程,以及进程数据独立性和写时拷贝的基本原理。
2026-11-01 19:01:03
68
原创 大模型上下文窗口:Token 预算、性能瓶颈与 RAG 的关系
大模型上下文窗口是有限的Token资源,需合理分配系统指令、历史对话、RAG证据、工具信息与输出预留。因计算复杂度随长度平方增长,长上下文不等于高效使用。应结合滑动窗口、摘要、按需检索、工具精简与证据预算等策略,避免“丢失中间信息”或无效消耗。长上下文与RAG互补:前者读取,后者筛选,共同提升推理质量。关键在于主动管理预算,确保核心信息不被裁剪,实现高效、可追溯的智能交互。
2026-10-04 16:11:38
698
原创 向量数据库入门:记录结构、索引、检索与选型
普通数据库难以高效处理高维向量检索,而向量数据库专为解决此问题设计,支持向量存储、索引与近邻搜索。通过HNSW、IVF等近似近邻(ANN)算法,在保证召回率的同时显著提升查询速度。结合元数据过滤,确保检索结果在语义与业务上均合规。选型需综合考虑规模、并发、运维能力与成本,最终目标是稳定、可靠地返回正确且可访问的知识片段。
2026-10-04 16:06:54
476
原创 Embedding 向量嵌入:语义空间、相似度与模型选择
Embedding模型将文本转化为稠密向量,使语义相近的内容在向量空间中距离更近,从而实现自然语言与数学检索的桥梁。相比独热编码,稠密向量能更好表达语义关系,常通过余弦相似度、欧氏距离或点积计算相似性。选择模型需考虑语言、长度、维度与真实检索表现,且查询与文档必须使用同一模型和预处理方式。结合关键词检索与向量检索可提升效果,避免将相似度误认为正确性,重视数据质量才是关键。
2026-10-04 15:54:55
421
原创 RAG 应用链路:查询检索、提示词增强、生成与 Dify 实践
知识库建成后,用户请求经查询改写、混合检索、过滤重排、上下文组装与模型生成,形成可核查答案。关键在于每步精准:查询需自包含,检索融合向量与关键词,重排去重并压缩证据,提示词明确规则与引用规范,生成后校验来源。使用Dify等平台可快速搭建链路,调试时应追踪全流程,确保证据准确进入生成环节。RAG本质是多阶段协同的严谨处理链。
2026-10-04 15:46:21
349
1
原创 RAG 进阶:从 Naive RAG 到 GraphRAG 与 Agentic RAG
基础RAG在处理简单问答时高效,但面对复杂问题时暴露检索单一、跨文档归纳难、多源数据整合差等瓶颈。为此演化出Advanced RAG(优化检索前后)、Modular RAG(多源路由)、GraphRAG(建模实体关系)和Agentic RAG(动态规划)。选择应基于问题复杂度,优先建立Naive RAG基线,逐层引入模块并验证收益,避免为复杂而复杂。
2026-10-04 15:42:14
294
原创 RAG 文本分块:七种 Chunking 策略与选型方法
文档切块旨在平衡语义完整与检索精度,避免整篇文档导致信息冗余或超出模型输入限制。常用策略包括固定长度、按句切分、递归分块、结构感知、语义分块及大模型精切,结合内容类型(如代码、表格、FAQ)定制规则。理想Chunk应独立可读、召回准确、答案完整。实际应用中宜组合使用,以结构定边界、递归控长度、语义/大模型调优,最终通过检索效果评估优化分块参数,而非拘泥于固定数值。
2026-10-04 09:07:12
305
原创 RAG 文档解析:怎样把 PDF、Word 和扫描件变成可检索知识
文档解析是RAG系统的关键入口,远非简单读取文件。需根据类型选择解析器,处理扫描件OCR、恢复版面结构、修复表格与公式、清洗噪声,并输出带元数据的标准化记录。通过分步流水线与多维度验收,确保内容可追溯、可复核,为后续检索奠定质量基础。
2026-10-02 16:56:06
238
原创 RAG 入门:让大模型先检索,再基于证据回答
大模型虽强于理解与表达,却无法自动获取新知识或访问私有文档,易产生“幻觉”。RAG(检索增强生成)通过将事实存储于可更新的外部知识库,实现“先检索、再生成”的流程,使回答基于实时、可控的证据。它支持知识独立更新、保护隐私、提供引用溯源,并降低无依据生成风险。系统分为离线建库与在线检索两阶段:先解析文档、分块、向量化并存入数据库;提问时则通过语义搜索召回相关片段,经重排后供大模型作答。适用于企业知识库、客服支持、专业领域辅助等场景。关键在于构建可评估的最小闭环,确保答案可追溯、可验证。
2026-10-02 15:54:51
348
原创 大模型为什么会产生幻觉?常见类型、成因与治理方法
大模型幻觉指其生成看似合理却虚假或错误的内容,常见于虚构事实、事实错误及指令偏离。根源在于模型基于概率生成文本,而非事实核验。降低幻觉需多层防护:提升数据质量、采用RAG引入外部知识、优化提示词明确边界、实施自我检查,并调用计算器、搜索引擎等工具辅助。高风险场景应组合使用多种方法,构建可靠应用链路。
2026-10-01 10:46:40
495
1
原创 AI Agent 为什么重新拥抱 CLI
AI时代,命令行(CLI)因与大模型文本交互天然契合,重获青睐。其低歧义、可组合、高上下文效率的特性,使其成为Agent事实上的工具接口。相比GUI和MCP,CLI在Token消耗、可靠性与自动化能力上优势显著。大厂纷纷布局,如Google Gemini CLI、微软Copilot CLI、飞书Lark CLI等,将办公平台能力封装为可编程命令。未来,人描述目标,Agent通过CLI执行任务,形成高效、稳定的自动化闭环。
2026-10-01 09:54:05
227
原创 Agent Skill:把工作流程封装成可插拔的技能包
Skill 是为 AI Agent 量身定制的可复用能力单元,以文件夹形式封装任务流程、专业知识与工具脚本,实现按需加载、经验固化与隔离管理。通过“渐进式披露”机制,仅在需要时加载指令与资源,避免上下文拥挤,提升效率与准确性。它解决了智能体因规则混杂导致的混乱、经验难传承、修改易牵连、迁移需重教等痛点,是构建高效、可复用 AI 工作流的核心基础设施。
2026-09-26 15:36:05
358
原创 Agent 记忆系统:短期上下文、长期存储与 Mem0 实战
本文解析AI Agent记忆系统:为何大模型需外挂记忆,区分短期(上下文窗口)与长期(向量库)记忆,详解其存储、检索机制及“三层架构”优化策略。通过真实工具Mem0演示,揭示记忆如何让AI从“失忆”走向“懂你”,实现个性化、连续性服务。
2026-09-25 10:34:01
374
原创 多 Agent 与 A2A 协议:智能体如何互相通信
智能体协作面临框架不兼容、技术锁定与厂商壁垒三大困境。A2A(Agent-to-Agent Protocol)作为谷歌主导的开放通信标准,通过统一的Agent Card实现能力发现,基于HTTP/JSON-RPC构建跨平台协作网络。其核心机制涵盖发现、认证、任务执行与结果交付四阶段,支持多模态工件、消息流与状态追踪,使不同框架、厂商的智能体如“互联网时代HTTP”般无缝协同,打破智能体孤岛,推动AI团队高效协作。
2026-09-23 10:21:14
185
原创 从单 Agent 到多 Agent:Coze、千帆与 WorkBuddy 实战
本文从搭建单智能体Coze入手,对比工作流平台千帆的约束性设计,揭示单Agent在能力、上下文、容错与决策上的局限,引出多Agent协作的必要性。通过解析七种协作模式(如流水线、层级主管、去中心化辩论等),最终以腾讯WorkBuddy实战体验“内容创作天团”协同流程,展现多Agent系统在复杂任务中的高效与可控。结论:合理分工、精准协作,才是AI赋能复杂任务的关键。
2026-09-21 10:03:35
218
原创 认识 AI Agent:概念、架构、设计模式与主流框架
本文系统解析了AI Agent的核心概念与实现逻辑:从“问答模式”到“任务驱动”,强调Agent具备自主规划、工具调用与环境感知能力。其架构由LLM、规划、记忆与工具四要素构成,区别于固定流程的工作流。主流设计模式包括ReAct(思考-行动-观察循环)、Plan & Execute(先规划后执行)、Reflection(生成-反思闭环),各有优劣。实际应用中常融合多种模式,结合工作流约束与智能决策,提升任务完成效率与质量。
2026-09-18 14:19:20
325
原创 Linux基础指令:从Shell原理到权限
本文从命令行的简单输入出发,揭示Linux系统背后复杂的三层结构:Shell、内核与驱动。追溯UNIX的起源与分裂,阐明Linux作为开源内核的诞生背景及其与GNU生态的融合。详解Shell作为用户与内核的翻译层,介绍路径、pwd、ls、cd等基础命令的原理与用法,并解析文件权限与目录树设计的思想根源,帮助理解Linux为何如此设计。
2026-09-17 17:05:18
481
2
原创 Node.js 与 MCP:从 JavaScript 运行时到大模型的标准接口
大模型需通过运行环境与外部世界交互,Node.js 提供了脱离浏览器的 JavaScript 执行能力,实现前后端统一与快速开发。npm 与 npx 分别负责包管理与临时执行,为工具调用提供基础。而 MCP 协议则如 AI 的“USB-C”,以标准化接口打通模型与工具的连接,解决传统“硬编码”对接的复杂性,实现一次集成、处处可用,推动开放生态发展。
2026-09-17 15:01:04
353
1
原创 二叉树进阶算法题详解
这篇文章讲解了二叉树的6道进阶算法题,涵盖层序遍历、非递归遍历和最近公共祖先等核心问题。每道题配有题目解析、算法思路和代码实现。
2026-08-08 09:45:15
871
4
原创 C++ IO 库指南
本文系统讲解 C++ 标准 IO 库的核心知识,涵盖继承体系、流状态管理与错误恢复、输出缓冲区机制、文件文本与二进制读写、以及 string 流序列化。从原理到实战,帮你彻底搞懂 cin/cout、fstream、stringstream 的使用细节与常见陷阱。
2026-08-05 15:44:06
362
1
原创 C++类型转换完全指南
本文系统讲解了C++中的类型转换机制。首先回顾了C语言的隐式转换和显式强转,随后详细解析了C++的类型转换体系:包括内置类型与自定义类型的相互转换(通过构造函数和类型转换运算符)、四种命名强制转换(static_cast/reinterpret_cast/const_cast/dynamic_cast)的使用场景及原理。
2026-08-04 14:19:07
315
4
原创 C++哈希扩展实战
本文探讨了处理海量数据的两种高效数据结构——位图和布隆过滤器。当数据规模超出内存容量时,位图通过1bit标记整数存在状态,仅需512MB空间即可实现O(1)查询。而针对位图仅支持整型的局限,布隆过滤器通过多哈希函数扩展支持任意数据类型,以可控误判率换取空间效率。
2026-08-04 13:23:25
397
1
原创 C++继承与多态进阶
这篇文章将基于 SGI-STL 源码分析,带你深入 C++ 继承与多态的底层世界。文章会从**菱形虚拟继承的内存模型**讲到**单继承和多继承的虚函数表结构**,力求让你读完后有一种"原来如此"的通透感。
2026-08-02 22:47:17
347
5
原创 C++智能指针的使用及其原理
本文从异常安全与资源管理的角度出发,系统讲解了智能指针的设计原理与应用方法。首先通过裸指针在异常场景下导致的内存泄漏问题,引出RAII(资源获取即初始化)的核心思想,并手写简化版智能指针演示其工作机制。随后对比标准库四大智能指针:已废弃的auto_ptr(管理权转移陷阱)、独占式的unique_ptr(C++11首选)、引用计数的shared_ptr及其配套的weak_ptr(解决循环引用)。文章深入剖析了shared_ptr的引用计数实现原理、线程安全问题,并提供了智能指针的选择策略与内存泄漏防范建议。
2026-07-29 16:24:28
332
1
原创 C++异常处理完全指南
本文详细讲解了C++异常的抛出、捕获、栈展开、继承体系、重新抛出、异常安全、noexcept,最后手搓一个多模块项目的异常处理框架。
2026-07-28 23:42:32
349
5
原创 C++11:从可变参数模板到bind绑定器
本文介绍C++11三大核心特性:1) 可变参数模板通过递归展开或参数包展开方式支持任意数量参数;2) lambda表达式提供匿名函数功能,可捕获外部变量;3) function+bind组合实现可调用对象的包装与参数绑定。这些特性显著提升了代码简洁性和灵活性,解决了传统函数重载和函数指针的局限性。文章通过实例代码详细演示了每种特性的使用方法,包括可变参数模板的递归展开技巧、lambda的捕获规则以及bind的参数绑定机制,帮助开发者编写更现代
2026-07-27 17:26:43
364
5
原创 C++11初探:C++发展史上的里程碑
C++11是C++发展史上的重大转折点,解决了C++98/03标准长期存在的痛点。本文重点探讨了C++11引入的核心特性: 统一初始化语法:通过std::initializer_list实现了各类对象的{}初始化方式,消除了数组与容器初始化不一致的问题。 右值引用与移动语义:明确定义了左值/右值的概念(能否取地址),引入右值引用(&&)支持资源的高效转移,解决了深拷贝性能问题。 完美转发机制:结合万能引用和std::forward实现了参数的完美转发。
2026-07-26 23:09:08
369
5
原创 封装哈希表模拟实现 unordered_map 和 unordered_set
本文讲解了如何用一套哈希表代码模拟实现unordered_map和unordered_set。核心设计包括:1)通过模板参数T和KeyOfT策略模式实现数据与逻辑分离,支持不同容器类型;2)重构哈希节点为泛型HashNode<T>;3)实现支持跨桶遍历的迭代器,利用Ref和Ptr模板参数统一处理普通和const迭代器;4)通过模板参数重构HashTable,提供统一的插入、查找接口;5)分别封装unordered_map和unordered_set。
2026-07-25 16:17:01
765
7
原创 哈希表原理与实现_链地址法
本文介绍了链地址法哈希表的实现,核心思想是通过链表解决哈希冲突。主要内容包括:链地址法通过链表挂载冲突元素;节点设计采用链表节点+指针数组;复用上篇哈希函数;构造函数初始桶数为质数;插入采用头插法,负载因子设为1;扩容时直接迁移节点而非新建;查找通过哈希定位+链表遍历;删除为标准链表操作;最后对比了开放定址法与链地址法的优缺点。链地址法能有效解决冲突问题,是C++ unordered_map的实现方式。
2026-07-25 09:46:06
412
4
原创 C++ STL unordered_map 与 unordered_set 使用详解
本文全面介绍C++11中的无序关联容器unordered_map和unordered_set的核心用法与实战技巧。主要内容包括:二者与有序容器的本质区别;核心API详解;自定义哈希函数的方法;典型应用场景如单词统计、两数之和算法题;以及常见陷阱。文章通过对比表格和代码示例,帮助开发者根据需求选择合适容器,并规避常见错误,充分发挥哈希表的高效特点。
2026-07-24 22:11:15
291
8
原创 哈希表原理与开放定址法C++实现
本文从哈希表的核心思想出发,详细讲解了使用开放定址法实现哈希表的关键技术。主要内容包括:哈希函数的设计、开放定址法的线性探测实现、三态标记解决删除问题,以及扩容策略。
2026-07-24 17:24:40
564
4
原创 从红黑树到 map/set ——看穿 STL 的封装艺术
本文深入解析了STL中set和map如何基于同一棵红黑树实现的设计思路。通过剖析SGI-STL源码,揭示了红黑树的泛型改造过程:将节点数据类型从固定pair<K,V>改为模板参数T,并引入KeyOfT仿函数实现key的提取,使同一套红黑树能同时支持set(value_type=K)和map(value_type=pair<const K,V>)。
2026-07-23 20:59:55
446
7
原创 红黑树原理与C++实现详解
作为一棵自平衡二叉搜索树,红黑树没有追求 AVL树那样"左右子树高度差不超过 1"的绝对平衡,而是通过一套简洁的颜色标记规则,将树的高度始终控制在 2log(N+1)以内。
2026-07-23 15:17:33
338
4
原创 AVL树原理与实现详解——旋转如何掰正一棵树
本文详细解析了AVL树的实现原理。AVL树是最早的自平衡二叉查找树,通过强制保持左右子树高度差≤1来确保O(logN)的操作效率。
2026-07-22 21:47:49
400
7
原创 C++ map 和 set 使用详解
本文从 C++ STL 关联式容器出发,系统讲解了 set、multiset、map、multimap 四大容器的使用方式与设计原理。
2026-07-21 14:38:01
402
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅