- 博客(56)
- 收藏
- 关注
原创 C++之WebSocket初体验
本文对比了Socket和WebSocket的技术差异:Socket是操作系统提供的底层网络通信API,支持TCP/UDP协议,需要开发者手动处理连接状态和数据边界;而WebSocket是基于TCP的应用层协议,通过HTTP握手升级实现全双工通信,内置帧机制和心跳检测,更适合实时通信场景。文章还提供了一个基于WebSocket++的C++实现示例,演示了WebSocket服务器的搭建和测试流程,展示了其在消息回显功能上的应用。通过具体代码实践,帮助开发者理解WebSocket相比传统Socket在高层次通信协
2025-10-16 11:39:35
1122
原创 C++手撕无锁线程池
文章摘要:本文探讨了如何实现一个高性能的无锁线程池,通过引入Vyukov MPMC无锁队列来替代传统基于mutex的线程池,减少锁竞争带来的性能损耗。文章详细介绍了MPMC队列的设计原理、线程池的工作流程以及关键实现细节,包括原子操作、缓存行对齐、自旋退避策略等优化技术。最后通过基础测试、竞态条件测试和高并发压力测试验证了无锁线程池的性能优势。相比传统线程池,该方案在CPU密集场景下具有更高的吞吐量和更低的延迟。
2025-10-15 10:33:18
927
原创 C++手撕TCP连接管理器
本文介绍了一个基于C++11的TCP连接管理器实现,支持服务端监听、客户端连接、异步数据收发和连接生命周期管理。核心功能包括:封装socket API实现服务端监听和客户端连接;使用独立线程处理每个连接的数据接收;提供线程安全的连接管理容器;支持回调机制处理连接状态和数据收发。实现采用现代C++特性如智能指针、lambda表达式和标准线程库,并通过互斥锁保证线程安全。文章详细展示了关键代码片段,包括连接建立、数据收发和错误处理逻辑,并提供了一个完整的测试用例验证功能。该项目已开源在GitHub,可作为网络编
2025-09-24 00:12:18
1121
原创 从零开始的Agent学习(三)-增加文档阅读功能
本文介绍了为AI Agent添加文档读取功能的设计与实现。功能支持三种路径读取方式:单一文件、文件夹和模糊匹配。核心实现包括:1) 单一文件读取,支持10MB大小限制和扩展名检查;2) 文件夹遍历读取,限制10个文件;3) 通配符模式匹配,限制5个文件。所有读取内容拼接后返回给大模型,并统一封装为Tool工具链接口。该功能支持多种文本格式(txt、md、代码文件等),为后续知识库扩展和信息保存提供了基础工具支持。
2025-08-23 15:41:56
483
原创 C++手撕LRU
LRU缓存实现解析 LRU(最近最少使用)是一种常见的缓存淘汰策略,通过优先淘汰最久未被访问的数据来管理有限缓存空间。其核心实现采用"哈希表+双向链表"结构: 双向链表:维护数据访问顺序,头部为最近使用(MRU)数据,尾部为最久未用(LRU)数据 哈希表:提供O(1)时间复杂度的数据查找,存储键到链表节点的映射 主要操作包括: get操作:若命中则移动节点到链表头部 put操作:若已存在更新值并移动;若不存在且缓存满则先删除尾部节点 该实现保证get和put操作的时间复杂度均为O(1),
2025-08-21 23:10:09
482
原创 从零开始的Agent学习(二)-增加文档输出功能
本文介绍了如何为聊天机器人增加文档导出功能。通过创建一个DocumentExporter类,实现了将对话内容导出为Markdown格式文件的功能。该工具可以自动生成包含标题、元数据和生成时间等信息的结构化文档,并支持自定义输出路径。作者使用LangChain框架的Tool类将导出功能封装成可被大模型调用的工具,并详细说明了工具的输入格式和使用场景。最后还提供了完整的实现代码和测试示例,为后续扩展文件查看等功能奠定了基础。
2025-08-21 18:18:07
530
原创 从零开始的Agent学习-基于langGraph的Agent搭建
本文介绍了使用LangGraph框架简化AI代理开发的过程。通过将复杂交互建模为有向图,开发者可以快速构建包含大模型调用和工具执行的聊天机器人。文章详细讲解了框架核心组件:State(状态管理)、Node(处理节点)和Edge(执行流程控制),并提供了完整代码示例,包括与搜索引擎工具的集成。作者还实现了一个消息管理器(MessageManager)来优化上下文处理,通过分层策略平衡历史记录和内存使用,该框架显著降低了AI代理的开发复杂度。
2025-08-14 13:27:37
836
原创 从零开始的ReAct Agent尝试
本文介绍了如何用Python实现一个简易的ReAct(推理+行动)智能体(Agent)。作者选用通义千问大模型作为核心,通过OpenAI接口调用,构建了一个能够执行数学计算的智能代理。文章详细讲解了环境配置、Agent类实现、工具函数设计(如计算器功能)以及提示词工程等关键环节。通过5轮对话循环机制,该智能体能够解析用户问题、执行计算动作并返回结果。示例演示了智能体如何正确处理"4*7+3"这类数学表达式,展示了ReAct框架"思考-行动-观察"的运作流程。这为初学者
2025-08-11 13:22:48
840
原创 使用pybind11封装C++API
本文介绍了如何使用pybind11将C++代码封装供Python调用。首先通过pip安装pybind11库,然后在一个C++源文件(func.cpp)中定义基础函数和类,并通过PYBIND11_MODULE宏进行绑定。接着使用setup.py编译生成Python可调用的模块文件(pyd)。最后通过测试文件验证C++函数和类在Python中的调用效果。这种方法实现了C++高性能计算与Python灵活性的结合,为开发者提供了更高效的开发方案。文章展示了从环境配置到实际调用的完整流程,适合希望整合两种语言优势的开
2025-08-08 23:22:51
648
原创 C++手撕简易仿nlohmann的JSON解析器
本文介绍了一个基于C++的简易JSON解析器实现方案。作者从JSON的基本概念和结构出发,详细讲解了如何使用C++实现JSON的解析和序列化功能。文章重点介绍了三个核心类:Json类(使用variant存储多种数据类型)、JsonParser类(实现词法和语法分析)和JsonSerializer类(处理JSON序列化)。通过完整的代码示例展示了如何解析JSON字符串、访问和修改数据、以及重新序列化为字符串的过程。最后提供了一个使用示例,验证了解析器和序列化器的功能。该实现不仅加深了对JSON格式的理解,也提
2025-08-03 12:48:50
995
原创 C++手撕基于ID3算法的决策树
本文介绍了基于ID3算法的决策树实现方法。决策树是一种监督学习算法,通过信息增益选择最优特征进行分裂,构建树形分类模型。文章详细阐述了关键概念:信息熵衡量数据混乱度,条件熵表示按特征划分后的平均熵,信息增益反映特征对分类的贡献度。决策树类封装了构建过程,包含计算熵、信息增益和选择最佳特征等方法。构建过程递归进行:先计算初始熵,选择信息增益最大的特征作为节点,按特征值划分数据集,直至满足终止条件(样本同属一类或无更多特征)。代码实现了熵计算、信息增益评估和递归建树等核心功能。
2025-08-03 12:48:18
1274
原创 C++手撕简单KNN
本文讲述了机器学习新手小H初次尝试KNN算法的经历。面对LD交代的任务,零基础的小H通过自学选择了K近邻算法,理解其"物以类聚"的核心思想及实现步骤(计算距离、确定K值、投票决策)。小H用Python实现了数据预处理(归一化、降采样)和模型训练,但测试准确率仅60%,分析可能是维度灾难导致。随后又用C++实现了KNN算法,虽然任务失败,但认识到机器学习需要掌握数据清洗、模型选择和参数调优等知识。文章展现了新手探索机器学习的过程与遇到的典型问题。
2025-07-31 21:37:58
376
原创 Educational Codeforces Round 161 (Rated for Div. 2) A-F
Educational Codeforces Round 161 (Rated for Div. 2) A-F
2024-01-22 02:27:29
1065
原创 Codeforces Round 841 (Div. 2) and Divide by Zero 2022 A-D
Codeforces Round 841 (Div. 2) and Divide by Zero 2022 A-D
2024-01-15 21:18:52
418
原创 Codeforces Round 915 (Div. 2) D. Cyclic MEX
Codeforces Round 915 (Div. 2) D. Cyclic MEX
2023-12-19 16:20:35
680
原创 Educational Codeforces Round 156 (Rated for Div. 2) C. Decreasing String
Educational Codeforces Round 156 (Rated for Div. 2) C. Decreasing String
2023-12-12 15:11:30
157
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅