GoogleTest 入门 GoogleTest 入门 GoogleTest 入门 2026年10月12日 2026年10月12日 October 12, 2026 GoogleTest 是 Google 开源的 C++ 测试框架。 基本概念 test suite:一系列相关的测试 test 或者 test case: test fixture(测试夹具):测试夹具是用于定义多个测试用例所需的**公共数...
C++:容器概述 C++:容器概述 C++:容器概述 2026年10月7日 2026年10月7日 October 7, 2026 有一些对于所有 container 都适用的操作,如图: STL 除了有容器本身之外,还提供一些 container adaptors: std::queue<T>、std::stack<T>、std::priority_queue<T>,...
C++:并发概述(二) C++:并发概述(二) C++:并发概述(二) 2026年10月6日 2026年10月6日 October 6, 2026 Communicating Tasks 我们之前讲到了,要把一个线程函数的结果返回到发起线程的地方,有两种常见方式:1. 让线程函数把结果保存到指针;2. 经由 lambda,把线程函数的结果保存到引用对象中。但是这两种方式不够优雅,而此处...
C++:并发概述(一) C++:并发概述(一) C++:并发概述(一) 2026年10月6日 2026年10月6日 October 6, 2026 这是学习 *A Tour of C++ (3rd Edition)* Chapter 18 Concurrency 的笔记。感觉并发这一块的知识量相当大,本章节也只是做了入门介绍,真正要掌握完整的知识体系还得啃 *C++ Concurren...
C++:指针和容器 C++:指针和容器 C++:指针和容器 2026年10月4日 2026年10月4日 October 4, 2026 裸指针只表示地址,不表示所有权,容易造成悬空或重复释放。 智能指针封装了指针并提供了一系列简化正确使用的方法: unique_ptr 表示唯一拥有 shared_ptr 表示共享拥有 指针 引用其实是 "a pointer with imp...
交易系统:Order Manager 交易系统:Order Manager 交易系统:Order Manager 2026年9月23日 2026年9月23日 September 23, 2026 OrderManager 接收策略想要的订单意图,用本地状态和交易所回报来决定下一步该发新单、撤单还是等待。 讲到订单管理,最重要的就是理清楚一张订单可以有哪些状态。在本书当中,订单状态的定义比较简单,没有引入部分成交之类的细分状态。 因此...
交易系统:FeatureEngine 交易系统:FeatureEngine 交易系统:FeatureEngine 2026年9月20日 2026年9月20日 September 20, 2026 先来总结一下,交易所侧和客户端侧分别有多少线程 | 进程 | 业务工作线程 | Logger 线程 | 主线程 | 总计 | |---|---:|---:|---:|---:| | 交易所 exchange_main | 4 | 5 | 1...
交易系统:OrderServer 与 Market Data Publisher 交易系统:OrderServer 与 Market Data Publisher 交易系统:OrderServer 与 Market Data Publisher 2026年9月18日 2026年9月18日 September 18, 2026 本章覆盖 Order Server 和 Market Data Publisher 两个与客户端相互通信的组件 撰写编码协议 这部分先讲本书的交易系统当中,MarketDataPublisher 组件与客户端通信使用的编码协议,然后讲 Or...
交易系统:UDP McastSocket 类 交易系统:UDP McastSocket 类 交易系统:UDP McastSocket 类 2026年9月18日 2026年9月18日 September 18, 2026 成员对象 在 McstSocket 当中的 logger 对象是引用类型的,而在一些其它对象当中的 logger 是非引用类型。McastSocket 借用所属组件的 logger,把日志写入该组件的日志文件。外部 logger 必须活得比...
交易系统:TCP server 类 交易系统:TCP server 类 交易系统:TCP server 类 2026年9月18日 2026年9月18日 September 18, 2026 之所以书中只定义了 TCPServer 而没有 TCPClient,是因为服务端需要处理监听、accept()、多个连接 socket、epoll 事件分发的逻辑;而客户端只需要管理一个连接。 理解 TCPServer 的行为最好从 epo...
交易系统:TCPSocket 类 交易系统:TCPSocket 类 交易系统:TCPSocket 类 2026年9月17日 2026年9月17日 September 17, 2026 这个类封装了最多的网络相关系统调用。 TCPSocket 的成员对象 下面逐个逐个来解释: 需要把 socket 作为应用层概念与作为内核概念分开理解:作为应用层的 socket 就是我们在这里定义的 TCPSocket,负责管理应用层缓冲...
交易系统: 无锁队列 交易系统: 无锁队列 交易系统: 无锁队列 2026年9月14日 2026年9月14日 September 14, 2026 在交易系统当中,同机器上的不同线程之间通过放在共享内存的无锁队列来互相通信,且通信的情况限制在单方向、一对一的通信,不存在多个生产者、多个消费者的情况。可以使用 Ring Buffer 来高效且优雅实现这种 SPSC (Single Pro...
交易系统:撮合引擎运行态及通信机制 交易系统:撮合引擎运行态及通信机制 交易系统:撮合引擎运行态及通信机制 2026年9月14日 2026年9月14日 September 14, 2026 交易所主程序 exchange_main exchange_main 负责创建交易所组件和它们之间的队列,启动 Matching Engine,并在收到终止信号后协调清理退出。 全局变量和 main() 函数 这里其实可以总结一下在本书当中...
C++:模板 C++:模板 C++:模板 2026年9月13日 2026年9月13日 September 13, 2026 template 提供: 参数化类型:用类型参数生成具体类型 参数化操作:函数模板、函数对象、Lambda 编译期实例化 类型检查(特别是有 C++ 20 引入的 Concept 之后) 零运行时抽象成本:template 不会因为泛化带来...
C++: 对象和资源生命周期 C++: 对象和资源生命周期 C++: 对象和资源生命周期 2026年9月12日 2026年9月12日 September 12, 2026 这是学习 *A Tour of C++*, by Bjarne Stroustrup: Chapter 6 "Essential Operations" 当中 6.1 ~ 6.3 节的读书笔记。 本篇笔记的内容可以分为 2 个部分: cop...
交易系统:撮合引擎当中的限价订单簿 交易系统:撮合引擎当中的限价订单簿 交易系统:撮合引擎当中的限价订单簿 2026年9月10日 2026年9月10日 September 10, 2026 撮合引擎实质上是一个单线程、确定性的订单簿状态机 它按顺序接收 NEW 或 CANCEL 请求,修改某个交易品种的订单簿,同时产生两类结果: 私有结果只发送给相关客户 公开结果用于构建市场数据流 本篇笔记先讨论撮合引擎最核心的部分:订单簿。...
交易系统中的 C++ 网络编程(TCP篇) 交易系统中的 C++ 网络编程(TCP篇) 交易系统中的 C++ 网络编程(TCP篇) 2026年9月8日 2026年9月8日 September 8, 2026 回顾一下这章交易系统拓扑图:在左边的行情传输部分通常使用 UDP,而右边的订单数据传输部分通常使用 TCP。本篇笔记主要关注右侧订单传输部分。 alt text 建立连接 客户端一侧 右侧负责传输订单信息的部分,使用 TCP 协议。下方是...
外脑:按记忆组织的 agent 工作区 外脑:按记忆组织的 agent 工作区 外脑:按记忆组织的 agent 工作区 2026年9月6日 2026年9月6日 September 6, 2026 每次对话都从失忆开始 每次新会话开始,agent 都是失忆的。它不知道上周你为什么否掉那个方案,不知道你习惯先算风险再看收益,也不知道三个月前你刚踩过同一个坑。提示词里能补几句,但装不下一个人。 这个缺陷和人的遗忘几乎同构,而人的解法从来都...
C++20: Concepts 和泛型编程 C++20: Concepts 和泛型编程 C++20: Concepts 和泛型编程 2026年8月20日 2026年8月20日 August 20, 2026 这是学习 A Tour of C++ by Bjarne Stroustrup Chapter 8 "Concepts and Generic Programming" 的读书笔记。 concept 是用来在编译期检查【当前类型是否满足某些...
交易系统:使用 C++ 内存池避免动态内存分配 交易系统:使用 C++ 内存池避免动态内存分配 交易系统:使用 C++ 内存池避免动态内存分配 2026年8月20日 2026年8月20日 August 20, 2026 这是学习 《Building Low Latency Applications With C++: Develop a Complete Low Latency Trading Ecosystem From Scratch Using Mo...
交易系统架构简介 交易系统架构简介 交易系统架构简介 2026年8月20日 2026年8月20日 August 20, 2026 交易系统架构简介 这是学习 《Building Low Latency Applications With C++: Develop a Complete Low Latency Trading Ecosystem From Scratch...
C++20: Ranges、view 和 concepts C++20: Ranges、view 和 concepts C++20: Ranges、view 和 concepts 2026年8月19日 2026年8月19日 August 19, 2026 这是学习 A Tour of C++ by Bjarne Stroustrup Chapter 14 Ranges 的读书笔记 传统 STL 很早就有 range 的思想,即“任何能按顺序遍历元素的对象或表达式”。传统做法是用一对迭代器来表...
automate everything automate everything automate everything 2026年7月30日 2026年7月30日 July 30, 2026 Claude Code's creator has some really good advice 观后感 现在,为 codebase 里的具体问题写定制化自动化工具,越来越值得了。 以前我可能会觉得,给项目写一个很特殊的 lint rul...
A Design Space for Multiscale Visualization 论文阅读 A Design Space for Multiscale Visualization 论文阅读 A Design Space for Multiscale Visualization 论文阅读 2026年6月17日 2026年6月17日 June 17, 2026 论文:Mara Solen、Matt Oddo、Tamara Munzner,_A Design Space for Multiscale Visualization_。 设计空间案例站:Multiscale Visualization D...
通过 nanoGPT 学习 GPT 的基本原理 通过 nanoGPT 學習 GPT 的基本原理 通过 nanoGPT 学习 GPT 的基本原理 2026年6月11日 2026年6月11日 June 11, 2026 这篇文章整理自自然语言处理课程实验报告,主要结合 GPT 原始论文和 src/gpt/gpt_reference.py 的实现,理解 GPT 的模型结构、关键模块与生成流程。这里的实现可以看作一个单文件版本的 decoder-only Tr...
简单的 Word2vec 的 CBOW 和 Skip-gram 实现 简单的 Word2vec 的 CBOW 和 Skip-gram 实现 简单的 Word2vec 的 CBOW 和 Skip-gram 实现 2026年6月4日 2026年6月4日 June 4, 2026 这篇文章整理自自然语言处理课程实验报告,目标是用一个很小的英文语料实现 Word2vec 的两种经典架构:CBOW(Continuous Bag-of-Words)和 Skip-gram。实现刻意保持简单,只使用 PyTorch 的 Emb...