从状态空间爆炸问题出发,系统介绍形式化验证的核心概念、TLA+ 的时序逻辑基础,以及用 TLC 对并发系统进行模型检验的完整实战。
从架构设计、插件选型、LSP 生态、自制命令面板 KeyFinder 到调试与工作流,全面介绍一套面向多语言开发的 Neovim 现代化配置——venux。
推导 Bloom Filter 的误判率公式,并给出最优哈希函数个数与位数组长度的数学结论。
通过一个最小示例介绍如何使用 LLVM libFuzzer 构建模糊测试,并定位程序中的崩溃问题。
对比 Rust 与 C++ 在泛型、trait 约束和特例化机制上的异同与实践方式。
对比 Rust 与 C++ 在可变性、移动语义和所有权模型上的核心差异与设计取舍。
在C/C++中,我们经常会像下面的代码那样使用一个指向函数的指针,我们称之为函数指针。
利用 std::list::splice 的常数时间节点移动能力,实现一个高效的 LRU Cache。
shared_ptr是一种共享所有权的智能指针,它允许我们安全地访问和管理对象的生命周期。shared_ptr的多个实例通过共享控制块结构来控制对象的生命周期。
c++11 对智能指针做了很大的优化,废弃了 c++98 中的auto_ptr,引入了三种新的智能指针:unique_ptr,shared_ptr,weak_ptr。
介绍 Expression Templates 的基本思路,以及它如何通过延迟求值减少中间对象和额外开销。
对比 C++ 中基于虚函数表的动态多态与模板驱动的静态多态,理解两者的实现原理与取舍。
constexpr 是 c++11 引入的关键字,用于编译时常量和常量表达式。而 c++17 将这一特性做了增强,引入了 constexpr if。
对于熟悉 c99 的人来说,Designated Initializers 并不算是什么新鲜事物,然而 c++直到 c++20 才正式支持这一特性。
从用户态缓冲区到持久化存储,梳理 Linux 磁盘 I/O 的完整路径与各层刷盘机制。
对于一个标准的 c++容器来说,我们可以很容易在运行时使用迭代器和 range-based for。
std::string_view是 c++17 中新增的一种类型。其核心理念是,能够让我们在传统的 C++03 风格的具体性和泛型编程之间找到一个很好的折衷点。
结合源码梳理 LevelDB Compaction 的触发条件、执行流程,以及它在 LSM 结构中的作用。
从拜占庭将军问题讲起,梳理分布式系统中的共识模型,以及 Paxos 和 Raft 的基本思想。
总结在私有 GitLab 环境中落地 Go module 时遇到的仓库、权限与版本管理问题及解决方案。
使用 c 语言的 macro 操作,能够很简单的用 c 语言模拟 lisp 语法。
我们有这样一段简单的代码,用来输出 10 个[0, 100)的随机数。
BDD(Behavior Driven Development),行为驱动开发,是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA 和非技术人员或商业参与者之间的协作。
这篇文章主要是为了帮助大家熟悉 POSIX 线程库以及在实际开发中使用它的特性。我们会具体讲解如何利用这个线程库定义的不同工具。
介绍如何利用正则表达式构建高性能路由,并分析其背后的实现思路。
梳理 C++ 标准库与 STL 的核心组成,并概览常见容器、算法与工具。
梳理 C++ 中字符与字符串的常用处理方式,以及相关标准库能力。
介绍 C++ 操作符重载的基本规则、常见场景,以及运算符语义设计时需要注意的边界。
介绍 C++ 模板与泛型编程的基本思想,并通过函数模板和类模板说明其使用方式。
超类(基类)和子类(派生类):在面向对象程序设计中,我们通常使用继承来避免代码冗余。在 C++中,继承的语法规则如下。