C++ 易误用的标准库函数
标准库里有不少函数,签名朴素、名字“望文生义”,实际语义却和直觉差一截。用对了是利器,用错了编译能过、跑出错误结果还不报警。本系列收集这类“看着会、用着错”的函数,从二分查找家族的 lower_bound / upper_bound 开始。 前置概念:划分而非“已排序” 二分家族的前置条件比“整个区间升序”更宽松——它要求区间按给定比较被划分: lower_bound:所有满足 elem ...
C++ 容器速查手册
STL 容器与原生数组的 API 速查表,按“查得到、抄得来”组织,覆盖构造、访问、容量、修改、查找。原理(内存布局、扩容机制、迭代器失效的根因、选型权衡)见 C++ STL 容器,内存分配细节见 C++ STL Allocator。本文只列怎么用。 容器总览 容器 头文件 底层 迭代器类别 随机访问 T[N] 原生数组 - 连续 指针(随机) ✓ array <ar...
类型系统:泛型、trait 与多态
📚 Rust 课程系列 课程概览 基础语法(一):变量、数据类型与字符串 切片(Slice):序列的借用视图 基础语法(二):运算符、表达式与控制流 函数与输入输出 所有权、借用与生命周期 结构体 枚举 模式匹配 类型系统:泛型、trait 与多态(本文) 集合与容器 错误处理与 Panic 恢复 模块、属性与宏 智能指针、迭代器与闭包 并发与异步编程 Unsafe Rust 与常用 ...
模式匹配:match、解构与绑定
📚 Rust 课程系列 课程概览 基础语法(一):变量、数据类型与字符串 切片(Slice):序列的借用视图 基础语法(二):运算符、表达式与控制流 函数与输入输出 所有权、借用与生命周期 结构体 枚举 模式匹配(本文) 类型系统:泛型、trait 与多态 集合与容器 错误处理与 Panic 恢复 模块、属性与宏 智能指针、迭代器与闭包 并发与异步编程 Unsafe Rust 与常用 ...
枚举:代数数据类型、Option 与 Result
📚 Rust 课程系列 课程概览 基础语法(一):变量、数据类型与字符串 切片(Slice):序列的借用视图 基础语法(二):运算符、表达式与控制流 函数与输入输出 所有权、借用与生命周期 结构体 枚举(本文) 模式匹配 类型系统:泛型、trait 与多态 集合与容器 错误处理与 Panic 恢复 模块、属性与宏 智能指针、迭代器与闭包 并发与异步编程 Unsafe Rust 与常用 ...
结构体:定义、方法与内存布局
📚 Rust 课程系列 课程概览 基础语法(一):变量、数据类型与字符串 切片(Slice):序列的借用视图 基础语法(二):运算符、表达式与控制流 函数与输入输出 所有权、借用与生命周期 结构体(本文) 枚举 模式匹配 类型系统:泛型、trait 与多态 集合与容器 错误处理与 Panic 恢复 模块、属性与宏 智能指针、迭代器与闭包 并发与异步编程 Unsafe Rust 与常用 ...
广度优先搜索
如果把图遍历比作探索一座陌生城市,深度优先搜索(DFS)像是一个执着地"一条路走到底、走不通再回头"的探险者,而广度优先搜索(Breadth-First Search,BFS)更像是投入湖面的石子激起的涟漪——从落点出发,一圈一圈匀速向外扩散,先抵达近处,再抵达远处。这种"层层向外"的推进方式,让 BFS 在所有"距离敏感"的场景中...
深度优先搜索
深度优先搜索(Depth-First Search,DFS)是图与隐式状态空间遍历的最自然范式。想象你站在迷宫入口,眼前的岔路通向未知。最直觉的走法是:右手扶墙,遇岔路先挑一条往下走,走到死胡同就退回上一个岔口换路–这套「一条路走到黑、走不通就回退」的策略,正是 DFS 的精神。它和人类走迷宫的行为高度一致,也因此成为最容易「想得到」的搜索算法。 DFS 的适用面远不止迷宫。判断地图里有几个...
Rust 基础语法(二):运算符、表达式与控制流
📚 Rust 课程系列 课程概览 基础语法(一):变量、数据类型与字符串 切片(Slice):序列的借用视图 基础语法(二):运算符、表达式与控制流(本文) 函数与输入输出 所有权、借用与生命周期 结构体 枚举 模式匹配 类型系统:泛型、trait 与多态 集合与容器 错误处理与 Panic 恢复 模块、属性与宏 智能指针、迭代器与闭包 并发与异步编程 Unsafe Rust 与常用 ...
字典树
问题引入 给定一个字符串集合,需要频繁执行「插入一个串」「查询某串是否存在」「查询某前缀是否出现过」「枚举所有以某前缀开头的串」等操作。把所有串存进 set 或哈希表,精确查找虽快,但前缀查询只能遍历所有键逐一比对,10510^5105 量级即超时。关键在于:这些查询都围绕公共前缀展开——字典树(Trie,又称前缀树) 把公共前缀压缩到同一条路径上,使前缀相关操作降至 O(L)O(L)O(L...
Python 内置集合类型详解
Python 的内置容器(builtin collections)是这门语言的地基:list、tuple、dict、set、str 这五个类型覆盖了绝大多数日常代码。它们看起来简单,但每一个背后都有精心设计的实现——list 是动态数组而非链表、dict 从 3.7 起保证有序、set 和 dict 共享哈希表思路。理解这些实现细节,才能写出既正确又高效的代码。 本文逐个拆解内置集合类型:它...
并查集
问题引入 nnn 个元素,不断接收「xxx 与 yyy 同集合」的合并指令,并查询「xxx 与 yyy 是否同集合」「当前多少个独立集合」。图遍历每次查询 O(n)O(n)O(n),10510^5105 量级即超时。关键在于:只关心集合归属,不关心内部连接结构–并查集(Union-Find / DSU[Disjoint Set Union]) 即为此设计,配合两种优化后单次操作均摊近似 O(...
Python itertools 详解:迭代器代数与惰性求值
Python 的 for 循环和生成器已经把「按需逐个产出」做得很顺手,但遇到「把两个序列交错」「取前 N 个」「按 key 分组」「笛卡尔积」这类组合操作,手写循环既啰嗦又容易错。标准库的 itertools 提供了一批构建和组合迭代器的工具,像代数运算一样把简单的迭代器拼成复杂的数据流。 它的设计哲学是惰性求值–所有函数都返回迭代器,不预先计算全部结果,只在被消费时才产出元素。这意味着它...
Python 并发编程:threading、multiprocessing、concurrent.futures 与 GIL
Python 的并发比多数语言更绕,因为有个 GIL 横在中间:同样是「开线程」,在 Java 里能并行跑满多核,在 CPython 里却常常只能并发不能并行。于是 Python 的并发分成了三条路线,各自服务的场景泾渭分明: threading --多线程。受 GIL 限制,同一时刻只有一个线程执行 Python 字节码,但 IO 阻塞时会释放 GIL,适合 IO 密集任务。 multi...
Python asyncio 异步编程:事件循环、协程与并发原语
线程是实现并发的经典手段,但内核调度、栈内存、锁竞争、上下文切换都不是免费的。当瓶颈是「等」而不是「算」(等网络、磁盘、数据库),开几万个线程去各自阻塞并不划算。asyncio 给了另一条路:单线程 + 事件循环 + 协作式调度。一个线程里跑成千上万个协程,谁 await 了就把执行权让出去,事件循环负责在「数据就绪」时把它接回来。 难点不在语法(async/await 很简单),而在心智模...
Pi Coding Agent 使用入门
Pi Coding Agent(命令名是 pi)是一个很轻量的终端编码代理。它的核心只提供对话、读写文件和执行命令;计划模式、子代理、MCP、权限弹窗等能力都不强行内置,而是交给扩展、Skill 或你自己的工作流。因此它很适合希望自己决定工具链和约束方式的人。 三分钟开始 安装后,在目标仓库目录里启动即可: 1234npm install -g --ignore-scripts @earen...
C++ 运算符重载(operator)
运算符重载(operator overloading)让用户定义类型可以像内置类型一样参与表达式:a + b、x[i]、*p、if (x)、os << x。它的价值不在于把代码写得“炫”,而在于让一个类型的自然操作具有自然、可预测的写法。 但 operator 不是“给任意符号赋予任意含义”的机制。C++ 已经规定了每个运算符的优先级、结合性、操作数个数与大致语义;重载只是在这些...
Python 进阶语法:推导式、f-string、海象运算符、上下文管理器、装饰器与 match-case
Python 的许多“高级语法”并不难,难的是知道它们各自解决什么问题、该在什么边界内使用。本文把日常代码中最常见的一组语法放在一起:推导式、f-string、海象运算符、with、装饰器和 match-case。 它们的共同目标是让代码更贴近意图,而不是单纯压缩行数。本文示例以 Python 3.12 为基准;最低版本见下表。 语法 最低版本 核心用途 解包 */** Pyt...
回溯算法
引言:为什么需要回溯 许多算法问题不是「求一个最优值」,而是「把所有符合条件的方案枚举出来」,或者「在庞大的状态空间里找一个可行解」。前者如「列出数组的所有全排列」「把字符串切成若干回文子串的所有切法」,后者如「在 9×99 \times 99×9 棋盘上填出一个合法数独」「在字符网格里搜出某个单词」。 这类问题的共同特点是:解空间结构上是一棵巨大的「决策树」,每个节点代表「到目前为止已经做...
二分查找
二分查找(Binary Search)大概是每个程序员最早接触到的算法之一:在有序数组里找目标值,每次砍掉一半,O(log n) 完事。听起来简单到不值一提。但只要稍微写过几道二分题,几乎所有人都经历过「改一个符号就死循环」「差一行就越界」「边界永远是 off-by-one」的折磨。Donald Knuth 在《The Art of Computer Programming》里指出,第一个正...
分治算法
引言:为什么「分而治之」如此自然 面对一个规模为 nnn 的问题,如果它具备某种可分解的内部结构,我们往往不必正面强攻。把问题切成若干个规模更小的同构子问题,递归求解后再把答案拼回来——这就是分治(Divide and Conquer)。这并非某种具体算法,而是一套算法设计范式,与贪心、动态规划、回溯并列。 分治的影子无处不在:归并排序把数组对半切,快速排序按 pivot 分两半,最近点对按...
贪心算法
引言:从「走一步看一步」到「步步最优」 在算法世界里,有两类策略恰好处于光谱的两端。一类是「把所有可能都试一遍再回溯」的搜索派——DFS、回溯、动态规划都属于这一脉,它们宁可付出指数级代价也要保证不漏掉任何一种可能。另一类则是「看眼前、不回头」的贪心派——每一步都基于当前可观察的信息做出最优决策,做完就不再反悔。 贪心算法 (Greedy Algorithm) 听起来朴素得近乎天真:在每一步...
双指针技术
双指针(Two Pointers)是数组、字符串、链表上最常用的算法技巧之一。它用一个看似平凡的细节–用两个游标代替一个游标遍历–换取指数级的效率提升。表面上看,从「单指针 O(n²)」到「双指针 O(n)」省下的是一次嵌套循环;往深处理解,双指针真正在做的是利用问题本身的结构(单调性、有序性、区间不变量),把搜索空间裁剪成一个低维流形。 这一篇我们系统地拆解双指针的四大家族:对撞指针、快慢...
动态规划
动态规划(Dynamic Programming,DP)是算法世界里最具张力、也最容易让人"卡壳"的一个主题。它的代码往往只有寥寥数行,思想却能在陌生题目面前把人挡在门外;它的理论门槛看似只是一句"分治 + 记忆化",但能否在第一时间构造出正确的状态定义,几乎直接决定了"会做"与"不会做"。本文将以 DP 的三要...
数位 dp
数位 dp(digit DP)是一类专门处理「在某个数区间 [L,R][L, R][L,R] 内统计满足特定数位性质的数」的动态规划技术。所谓"数位性质",指的是只取决于数的十进制(或任意进制)表示中各位数字的性质,例如"不含数字 4"、“相邻两位之差至少为 2”、“数字之和等于 K”。这类问题看似简单,但区间上界可能高达 101810^{18}101...
Golang 杂项:embed 与资源嵌入
📚 Golang 教程系列 入门与基础类型 字符串、变量与常量 流程控制 集合类型 函数、指针与类型 结构体 接口 错误处理、并发与泛型 测试与工程实践 杂项:make 与 select 杂项:embed 与资源嵌入(本文) //go:embed 指令与 embed 包(Go 1.16 引入)解决了 Go 程序分发时的一个老问题:如何把静态资源——HTML 模板、SQL 迁移、前端...
切片(Slice):序列的借用视图
📚 Rust 课程系列 课程概览 基础语法(一):变量、数据类型与字符串 切片(Slice):序列的借用视图(本文) 基础语法(二):运算符、表达式与控制流 函数与输入输出 所有权、借用与生命周期 结构体 枚举 模式匹配 类型系统:泛型、trait 与多态 集合与容器 错误处理与 Panic 恢复 模块、属性与宏 智能指针、迭代器与闭包 并发与异步编程 Unsafe Rust 与常用 ...
Cargo.toml 配置速查
Cargo.toml 是 Cargo 项目的清单文件(TOML 格式),描述包名、版本、依赖、特性、编译目标等。本文给出常用配置速查。 最小示例 1234567[package]name = "myapp"version = "0.1.0"edition = "2021"[dependencies]serde = { ve...
C++17 any 与 variant
在 C++ 中,我们经常需要“用一个变量持有多种可能的类型”。C 风格的 union 和 void* 是最早的答案,但它们既不安全(不记录当前存的是哪种类型),也缺乏面向对象的扩展能力。C++17 引入了 std::any 和 std::variant,从两个不同方向填补了这块空白: std::any:类型擦除(type erasure)——持有一个任意类型的值,但“忘记”了它的静态类型,...
Python collections 包详解
Python 内置的 dict、list、set、tuple 已经覆盖了绝大多数日常需求,但一旦遇到"按出现次数统计"“给元组字段起名字”“双端高效增删”"层叠的配置查找"这类场景,手写往往既啰嗦又容易出错。标准库的 collections 模块正是为此而生:它在内置类型之上提供了一批专门化的容器,既保留 Pythonic 的简洁,又补齐了数据结构层面...
FastAPI 快速上手
FastAPI 是基于 Python 类型标注的现代 Web 框架,底层是 Starlette(ASGI)和 Pydantic(数据校验)。核心思想很纯粹:函数签名上的类型标注就是一切契约的来源–路由参数解析、请求体校验、响应序列化、OpenAPI 文档全部从同一份标注推导。写一次标注,同时得到校验、文档和编辑器补全,这是对「动态语言写后端」的最大重构。 安装与第一个应用 FastAPI 本...
C++ 转换运算符
在 C++ 中,转换运算符(conversion operator) 又称用户定义转换函数(user-defined conversion function),是一种特殊的成员函数,用于把当前类类型的对象转换为另一个类型。它的语法形式是 operator 目标类型(),与构造函数形成对称关系:构造函数把"其他类型"构造成"本类型",而转换运算符把&qu...
最佳实践、性能与调试
📚 Rust 课程系列 课程概览 基础语法(一):变量、数据类型与字符串 切片(Slice):序列的借用视图 基础语法(二):运算符、表达式与控制流 函数与输入输出 所有权、借用与生命周期 结构体 枚举 模式匹配 类型系统:泛型、trait 与多态 集合与容器 错误处理与 Panic 恢复 模块、属性与宏 智能指针、迭代器与闭包 并发与异步编程 Unsafe Rust 与常用 trai...
工具链、Cargo 与外部 crate
📚 Rust 课程系列 课程概览 基础语法(一):变量、数据类型与字符串 切片(Slice):序列的借用视图 基础语法(二):运算符、表达式与控制流 函数与输入输出 所有权、借用与生命周期 结构体 枚举 模式匹配 类型系统:泛型、trait 与多态 集合与容器 错误处理与 Panic 恢复 模块、属性与宏 智能指针、迭代器与闭包 并发与异步编程 Unsafe Rust 与常用 trai...
Unsafe Rust 与常用 trait 详解
📚 Rust 课程系列 课程概览 基础语法(一):变量、数据类型与字符串 切片(Slice):序列的借用视图 基础语法(二):运算符、表达式与控制流 函数与输入输出 所有权、借用与生命周期 结构体 枚举 模式匹配 类型系统:泛型、trait 与多态 集合与容器 错误处理与 Panic 恢复 模块、属性与宏 智能指针、迭代器与闭包 并发与异步编程 Unsafe Rust 与常用 trai...
并发与异步编程
📚 Rust 课程系列 课程概览 基础语法(一):变量、数据类型与字符串 切片(Slice):序列的借用视图 基础语法(二):运算符、表达式与控制流 函数与输入输出 所有权、借用与生命周期 结构体 枚举 模式匹配 类型系统:泛型、trait 与多态 集合与容器 错误处理与 Panic 恢复 模块、属性与宏 智能指针、迭代器与闭包 并发与异步编程(本文) Unsafe Rust 与常用 ...
智能指针、迭代器与闭包
📚 Rust 课程系列 课程概览 基础语法(一):变量、数据类型与字符串 切片(Slice):序列的借用视图 基础语法(二):运算符、表达式与控制流 函数与输入输出 所有权、借用与生命周期 结构体 枚举 模式匹配 类型系统:泛型、trait 与多态 集合与容器 错误处理与 Panic 恢复 模块、属性与宏 智能指针、迭代器与闭包(本文) 并发与异步编程 Unsafe Rust 与常用 ...
模块、属性与宏
📚 Rust 课程系列 课程概览 基础语法(一):变量、数据类型与字符串 切片(Slice):序列的借用视图 基础语法(二):运算符、表达式与控制流 函数与输入输出 所有权、借用与生命周期 结构体 枚举 模式匹配 类型系统:泛型、trait 与多态 集合与容器 错误处理与 Panic 恢复 模块、属性与宏(本文) 智能指针、迭代器与闭包 并发与异步编程 Unsafe Rust 与常用 ...
错误处理与 Panic 恢复
📚 Rust 课程系列 课程概览 基础语法(一):变量、数据类型与字符串 切片(Slice):序列的借用视图 基础语法(二):运算符、表达式与控制流 函数与输入输出 所有权、借用与生命周期 结构体 枚举 模式匹配 类型系统:泛型、trait 与多态 集合与容器 错误处理与 Panic 恢复(本文) 模块、属性与宏 智能指针、迭代器与闭包 并发与异步编程 Unsafe Rust 与常用 ...
集合与容器
📚 Rust 课程系列 课程概览 基础语法(一):变量、数据类型与字符串 切片(Slice):序列的借用视图 基础语法(二):运算符、表达式与控制流 函数与输入输出 所有权、借用与生命周期 结构体 枚举 模式匹配 类型系统:泛型、trait 与多态 集合与容器(本文) 错误处理与 Panic 恢复 模块、属性与宏 智能指针、迭代器与闭包 并发与异步编程 Unsafe Rust 与常用 ...
所有权、借用与生命周期
📚 Rust 课程系列 课程概览 基础语法(一):变量、数据类型与字符串 切片(Slice):序列的借用视图 基础语法(二):运算符、表达式与控制流 函数与输入输出 所有权、借用与生命周期(本文) 结构体 枚举 模式匹配 类型系统:泛型、trait 与多态 集合与容器 错误处理与 Panic 恢复 模块、属性与宏 智能指针、迭代器与闭包 并发与异步编程 Unsafe Rust 与常用 ...
函数与输入输出
📚 Rust 课程系列 课程概览 基础语法(一):变量、数据类型与字符串 切片(Slice):序列的借用视图 基础语法(二):运算符、表达式与控制流 函数与输入输出(本文) 所有权、借用与生命周期 结构体 枚举 模式匹配 类型系统:泛型、trait 与多态 集合与容器 错误处理与 Panic 恢复 模块、属性与宏 智能指针、迭代器与闭包 并发与异步编程 Unsafe Rust 与常用 ...
Rust 基础语法(一):变量、数据类型与字符串
📚 Rust 课程系列 课程概览 基础语法(一):变量、数据类型与字符串(本文) 切片(Slice):序列的借用视图 基础语法(二):运算符、表达式与控制流 函数与输入输出 所有权、借用与生命周期 结构体 枚举 模式匹配 类型系统:泛型、trait 与多态 集合与容器 错误处理与 Panic 恢复 模块、属性与宏 智能指针、迭代器与闭包 并发与异步编程 Unsafe Rust 与常用 ...
Rust 课程概览
📚 Rust 课程系列 课程概览(本文) 基础语法(一):变量、数据类型与字符串 切片(Slice):序列的借用视图 基础语法(二):运算符、表达式与控制流 函数与输入输出 所有权、借用与生命周期 结构体 枚举 模式匹配 类型系统:泛型、trait 与多态 集合与容器 错误处理与 Panic 恢复 模块、属性与宏 智能指针、迭代器与闭包 并发与异步编程 Unsafe Rust 与常用 ...
C++ 宏的常见用法与现代替代
C 预处理器宏是 C/C++ 中最古老也最具争议的特性之一。它发生在编译之前——纯文本替换,没有类型检查、没有作用域、调试时不可见。尽管现代 C++ 已为绝大多数宏场景提供了更安全的替代方案,宏仍大量存在于系统编程、跨平台代码和第三方库中。理解宏的常见用法,既是阅读遗留代码的必备技能,也是避免在新代码中误用的前提。 常量定义 最古老的用法——用宏定义编译期常量: 1234#define PI...
C++ 视图
C++ 里的“视图”不是某一个单独类型,而是一类共同思想:用一个轻量对象描述一段数据或一段计算,不拥有数据,尽量不复制,按需访问。它们把“我想看哪一段、以什么方式看”从“数据本身如何存储”里拆出来。 常见视图有三类: 类型 标准 作用 是否拥有元素 能否修改元素 std::string_view C++17 只读地观察一段字符 否 否(只读) std::span C++20...
Redis 底层原理与架构
Redis 是基于内存的键值存储,常被当作缓存、消息队列、分布式锁甚至轻量数据库使用。它之所以通用,关键在于其丰富的数据结构与精巧的底层实现。本文聚焦 Redis 的"内部"——数据结构的底层编码、Lua 执行模型、过期与淘汰机制、持久化、集群架构与故障转移;命令用法与适用场景见姊妹篇《Redis 使用手册》。 全局视角 Redis 的 key 是二进制安全的字符串,va...
golang-arch
写 Go 的人大多停在"写代码 → go build → 跑起来"这一层。但真要追问"go build 到底产出了什么?二进制里塞了哪些东西?程序被 OS 拉起来之后,CPU 第一条指令落在哪?goroutine 又是怎么’凭空’跑起来的?"——能讲清楚的人并不多。 这篇文章把 Go 从源码到执行的全链路拆开:编译格式 → 二进制格式 → 运行时格式 ...
MCP 协议详解:从架构到原语的设计拆解
Model Context Protocol(MCP)是 Anthropic 在 2024 年底推出的开放协议,目标是给 LLM 应用和外部数据源、工具之间定一个标准化的接驳方式。它借用了 Language Server Protocol(LSP)的思路——LSP 让任意编辑器对接任意语言服务,MCP 则让任意 AI 应用对接任意工具与上下文。 这篇文章不写"怎么装一个 MCP S...
Redis 使用手册
Redis 是基于内存的键值存储,常被当作缓存、消息队列、分布式锁甚至轻量数据库使用。它之所以通用,关键在于其丰富的数据结构——选对结构,命令和场景往往自然成立。本文是 Redis 使用侧手册,系统梳理各数据结构的核心命令与适用场景;底层编码、Lua 执行模型、过期淘汰、持久化与集群架构等原理见姊妹篇《Redis 底层原理与架构》。 全局视角 Redis 的 key 是二进制安全的字符串,v...
TypeScript 与 React 实战
📚 TypeScript 教程系列 入门与配置 基础类型与变量声明 函数 流程控制与运算符 集合类型 异步编程与错误处理 接口与类 泛型与类型组合 高级类型 模块、装饰器与工程化 TypeScript 与 Bun 实战 TypeScript 与 React 实战(本文) 前面的章节我们系统掌握了 TypeScript 的类型系统,并在 Bun 服务端场景里落地。本篇把 TypeSc...
TypeScript 与 Bun 实战
📚 TypeScript 教程系列 入门与配置 基础类型与变量声明 函数 流程控制与运算符 集合类型 异步编程与错误处理 接口与类 泛型与类型组合 高级类型 模块、装饰器与工程化 TypeScript 与 Bun 实战(本文) TypeScript 与 React 实战 前面的章节我们系统学习了 TypeScript 的类型系统与工程化能力,但一直停留在"编译成 JS 后...
TypeScript 模块、装饰器与工程化
📚 TypeScript 教程系列 入门与配置 基础类型与变量声明 函数 流程控制与运算符 集合类型 异步编程与错误处理 接口与类 泛型与类型组合 高级类型 模块、装饰器与工程化(本文) TypeScript 与 Bun 实战 TypeScript 与 React 实战 ⚠️ 来源声明:本文内容参考自 菜鸟教程 TypeScript 教程,仅供学习交流,版权归原作者所有。 本篇聚...
TypeScript 高级类型
📚 TypeScript 教程系列 入门与配置 基础类型与变量声明 函数 流程控制与运算符 集合类型 异步编程与错误处理 接口与类 泛型与类型组合 高级类型(本文) 模块、装饰器与工程化 TypeScript 与 Bun 实战 TypeScript 与 React 实战 ⚠️ 来源声明:本文内容参考自 菜鸟教程 TypeScript 教程,仅供学习交流,版权归原作者所有。 Typ...
TypeScript 泛型与类型组合
📚 TypeScript 教程系列 入门与配置 基础类型与变量声明 函数 流程控制与运算符 集合类型 异步编程与错误处理 接口与类 泛型与类型组合(本文) 高级类型 模块、装饰器与工程化 TypeScript 与 Bun 实战 TypeScript 与 React 实战 ⚠️ 来源声明:本文内容参考自 菜鸟教程 TypeScript 教程,仅供学习交流,版权归原作者所有。 Typ...
TypeScript 接口与类
📚 TypeScript 教程系列 入门与配置 基础类型与变量声明 函数 流程控制与运算符 集合类型 异步编程与错误处理 接口与类(本文) 泛型与类型组合 高级类型 模块、装饰器与工程化 TypeScript 与 Bun 实战 TypeScript 与 React 实战 ⚠️ 来源声明:本文内容参考自 菜鸟教程 TypeScript 教程,仅供学习交流,版权归原作者所有。 Typ...
TypeScript 异步编程与错误处理
📚 TypeScript 教程系列 入门与配置 基础类型与变量声明 函数 流程控制与运算符 集合类型 异步编程与错误处理(本文) 接口与类 泛型与类型组合 高级类型 模块、装饰器与工程化 TypeScript 与 Bun 实战 TypeScript 与 React 实战 ⚠️ 来源声明:本文内容参考自 菜鸟教程 TypeScript 教程,仅供学习交流,版权归原作者所有。 Jav...
TypeScript 集合类型
📚 TypeScript 教程系列 入门与配置 基础类型与变量声明 函数 流程控制与运算符 集合类型(本文) 异步编程与错误处理 接口与类 泛型与类型组合 高级类型 模块、装饰器与工程化 TypeScript 与 Bun 实战 TypeScript 与 React 实战 ⚠️ 来源声明:本文内容参考自 菜鸟教程 TypeScript 教程,仅供学习交流,版权归原作者所有。 Typ...
TypeScript 流程控制与运算符
📚 TypeScript 教程系列 入门与配置 基础类型与变量声明 函数 流程控制与运算符(本文) 集合类型 异步编程与错误处理 接口与类 泛型与类型组合 高级类型 模块、装饰器与工程化 TypeScript 与 Bun 实战 TypeScript 与 React 实战 ⚠️ 来源声明:本文内容参考自 菜鸟教程 TypeScript 教程,仅供学习交流,版权归原作者所有。 Typ...
TypeScript 函数
📚 TypeScript 教程系列 入门与配置 基础类型与变量声明 函数(本文) 流程控制与运算符 集合类型 异步编程与错误处理 接口与类 泛型与类型组合 高级类型 模块、装饰器与工程化 TypeScript 与 Bun 实战 TypeScript 与 React 实战 ⚠️ 来源声明:本文内容参考自 菜鸟教程 TypeScript 教程,仅供学习交流,版权归原作者所有。 Typ...
TypeScript 基础类型与变量声明
📚 TypeScript 教程系列 入门与配置 基础类型与变量声明(本文) 函数 流程控制与运算符 集合类型 异步编程与错误处理 接口与类 泛型与类型组合 高级类型 模块、装饰器与工程化 TypeScript 与 Bun 实战 TypeScript 与 React 实战 ⚠️ 来源声明:本文内容参考自 菜鸟教程 TypeScript 教程,仅供学习交流,版权归原作者所有。 Typ...
TypeScript 入门与配置
📚 TypeScript 教程系列 入门与配置(本文) 基础类型与变量声明 函数 流程控制与运算符 集合类型 异步编程与错误处理 接口与类 泛型与类型组合 高级类型 模块、装饰器与工程化 TypeScript 与 Bun 实战 TypeScript 与 React 实战 ⚠️ 来源声明:本文内容参考自 菜鸟教程 TypeScript 教程,仅供学习交流,版权归原作者所有。 Typ...
Java25 新特性
Java 25 是继 Java 21 之后的又一个长期支持(LTS)版本,于 2025 年 9 月 16 日发布,包含 18 个 JEP。Java 21 引入的虚拟线程、记录模式等在 25 中继续打磨成熟,同时 25 带来了模块导入、紧凑源文件、作用域值正式化等一批新特性,并在 AOT 提前编译、对象头压缩、JFR 可观测性等方面有显著提升。以下是对 Java 25 相比 Java 21 的...
Java Class
类(class)是 Java 面向对象编程的基本构建单元,它既是数据抽象的载体,也是行为封装的边界。理解 class 的核心内容,本质上是理解 Java 如何用类型系统组织数据与行为。本文从现代 Java(25 LTS)视角出发,梳理 class 设计的核心要素。 类的本质:状态与行为的封装 一个 class 由两部分构成:字段(状态)和方法(行为)。封装的目的是把可变状态收敛到最小范围,对...
Intel TBB
TBB (Threading Building Blocks) 是 Intel 出品的 C++ 并行编程库,也贡献给了 oneAPI 项目(oneAPI TBB)。它提供了高层抽象的任务并行、并行算法、并发容器和同步原语,让开发者不用直接操作 pthread/win32 thread 就能写出跨平台的高效并行程序。 安装与配置 获取方式 oneAPI TBB(推荐):https://git...
Vite 构建工具指南
开发时利用浏览器原生 ESM 按需加载,生产时交给 Rollup 打包。它不像 Webpack 那样在开发阶段先打成一个大包,而是让浏览器直接加载源码模块——项目越大,体验差异越明显。 启动快:不用全量打包,直接提供原生 ESM 模块。 HMR 快:热更新只影响变化的模块,不受应用规模影响。 开箱即用:TypeScript、JSX、CSS、静态资源开箱支持。 插件生态清晰:兼容 Rollu...
JavaScript 核心要点详解
ES6+ 关键特性 解构赋值 解构赋值是一种从数组或对象中提取值并赋给变量的语法糖。 数组解构 1234567891011121314151617181920212223242526// 基本数组解构const [a, b, c] = [1, 2, 3];console.log(a, b, c); // 1, 2, 3// 跳过某些元素const [first, , third] = [1,...
前端调试技巧与工具大全
浏览器开发者工具 Chrome DevTools 核心功能 Console 面板 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828...
前端工程化工具链:ESLint、Prettier、Biome、Tailwind CSS
ESLint ESLint 是 JavaScript 和 TypeScript 的代码检查工具,用于发现和修复代码中的问题。 安装与配置 12345678# 安装 ESLintbun add -d eslint# 初始化配置(交互式)bunx eslint --init# 或手动安装推荐的配置bun add -d eslint @eslint/js typescript-eslint ESL...
前端性能优化实战指南
性能优化概述 前端性能优化的目标是提升用户体验,让页面加载更快、响应更及时、交互更流畅。 核心 Web 指标 (Core Web Vitals) LCP (Largest Contentful Paint): 最大内容绘制,衡量加载性能,应在 2.5 秒内 INP (Interaction to Next Paint): 交互到下次绘制,衡量响应性,应在 200 毫秒内 CLS (Cumu...
包管理器完全指南:NPM、Yarn、PNPM、Bun
NPM (Node Package Manager) NPM 是 Node.js 默认的包管理器,也是世界上最大的软件注册表。 安装与初始化 123456789101112131415# 检查版本npm --version# 或npm -v# 初始化项目(交互式)npm init# 快速初始化(使用默认值)npm init -y# 安装所有依赖npm install# 或npm i 包安装 ...
C++ STL 容器
标准库容器是 C++ 日常 80% 工作的载体,但很多人对它们的认知停留在"vector 快、list 能随便插"。真正决定选型的,是三件事:内存布局(连续 or 节点)、迭代器失效规则、各操作的复杂度保证。这篇把这三件事讲透,给一张能照着选的决策表。容器的内存分配细节见 C++ STL Allocator,这里聚焦容器本身。 容器的分类 STL 容器按组织方式分三大类:...
Codex CLI 使用技巧
Codex CLI 不只是一个“在终端里聊天的 AI”。把它用顺手之后,它更像一个可配置、可约束、可脚本化的本地编码代理:能读写仓库、在沙箱里执行命令、调用 MCP 工具、用 AGENTS.md 沉淀规则,也能在 CI 或脚本里以 JSON 输出工作结果。 这篇不是入门教程。安装、登录、第一次提问这些内容只保留最低限度;重点放在日常高强度使用时真正影响效率和安全性的东西:审批与沙箱、配置作用...
Spring Boot Bean 使用规范
理解 Spring Boot 的 Bean 加载原理后,更重要的是在实际开发中正确使用。本文从用户角度出发,总结 Bean 的使用规范和最佳实践。 Bean 定义方式 Spring 提供了多种定义 Bean 的方式,各有适用场景: 123456789101112131415161718192021222324252627282930313233343536373839404142434445...
OpenCode 源码解析:从一次提问到工具调用的完整链路
OpenCode 是 SST 团队开源的 AI 编程助手,定位与 Claude Code 类似,但用 TypeScript + Bun 实现,并基于 Effect 与 Vercel AI SDK 构建了一套相当工程化的运行时。这篇以 sst/opencode 的真实源码为依据,逐机制拆解它"为什么是这样设计的"。 本文所有结论均来自 github.com/sst/open...
Java Guava
Google Guava 是 Google 开发的 Java 核心库,提供了集合、缓存、并发、字符串处理、I/O 等领域的增强工具。相比 Apache Commons,Guava 更现代化,设计理念更接近函数式编程风格。 概述 Guava 的设计哲学: 不可变优先:大量使用不可变集合 预防式设计:快速失败(fail-fast),尽早暴露问题 函数式风格:Predicate、Function...
Java Apache Commons
Apache Commons 是 Apache 软件基金会提供的一系列 Java 工具库,它们是 Java 生态中最成熟、使用最广泛的基础设施之一。本文介绍几个最常用的 Commons 库。 概述 Apache Commons 项目起源于 Jakarta 项目,目的是提供可复用的 Java 组件。这些库填补了 JDK 标准库的空白,提供了大量实用工具方法。 核心价值:减少样板代码、处理边界...
Logback 详解:Java 日志框架的核心与实践
Logback 是 Java 生态系统中使用最广泛的日志框架之一,作为 Log4j 的继任者和 SLF4J 的原生实现,它以其卓越的性能、灵活的配置和丰富的功能成为现代 Java 应用的首选日志解决方案。 Logback 简介 什么是 Logback Logback 由 Log4j 创始人 Ceki Gülcü 开发,设计上分为三个核心模块: 模块 作用 logback-cor...
mybatis
什么是 MyBatis MyBatis 是一个半自动化的持久层框架,它将 SQL 语句从 Java 代码中解耦出来,放在 XML 配置文件或注解中。与 Hibernate 等全自动 ORM 框架不同,MyBatis 不会自动生成 SQL,而是让开发者直接编写 SQL,从而获得更高的灵活性和性能控制。 MyBatis 的核心组件 组件 作用 生命周期 SqlSessionFact...
Spring Boot Startup
Spring Boot 中的各种原理解析说一说 Spring Boot 启动原理 入口点:SpringApplication.run() 123456@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplic...
Spring Boot Common Annotations
SpringBoot 的注解系统是其"约定优于配置"哲学的核心体现。这篇文章不讲虚的,只讲实际开发中真正会用到的注解。我会按照功能分类,每个注解都配上最简示例。 核心启动注解 @SpringBootApplication 这是 SpringBoot 应用的入口注解,一个组合注解,等价于三个注解的叠加: 123456@SpringBootApplicationpublic ...
Golang Struct Tag
Struct Tag 是 Go 语言中一个简洁但极其强大的特性。它允许你为结构体字段附加元数据,这些元数据可以被反射读取,广泛用于序列化、ORM、验证等场景。 基本语法 Struct Tag 是紧跟在字段类型后面的反引号字符串: 12345type User struct { Name string `json:"name"` Age int...
Golang Versions
1.27 Go 1.27(预计 2026 年 8 月发布) 延续了 1.26 “把痛点都修了"的路线,并在语言表达力和标准库上来了两记重拳:泛型方法终于落地、encoding/json/v2 正式进标准库。如果说 1.26 是"最舒服的小版本”,1.27 就是"标准库开始换代"的版本。 下面按重要程度捋一捋最值得关注的点(基于官方 tip 文档 dra...
Claude Code 高阶玩家手册
Claude Code 不只是一个“在终端里聊天的 AI”。把它用顺手之后,它更像一个可配置、可约束、可编排的本地开发代理:能读写仓库、执行命令、调用 MCP 工具、运行子代理、触发 Hooks,也能在 CI 或脚本里以 JSON 输出工作结果。 这篇不是入门教程。安装、登录、第一次提问这些内容只保留最低限度;重点放在日常高强度使用时真正影响效率和稳定性的东西:上下文、权限、配置、自动化、并...
Rust Tips
& 的各种用法 不可变引用(借用) 最基本的形式,用于借用所有权而不转移: 1234567fn print_length(s: &String) { println!("{}", s.len());} // s 在这里归还,不影响原数据let s = String::from("hello"...
Cpp Timeline
📑 C++ 演进系列:总览 | C++11 | C++14 | C++17 | C++20 | C++23 | C++26 C++: 从 C++11 到 C++26 的演进之路 C++ 从 2011 年开始进入了快速发展的时代,每三年一个新标准,带来了大量现代特性。本文将梳理 C++11 到 C++26 的主要特性和常用特性。 详细指南 C++11 - 现代 C++ 的开端 C++...
C++14 - 增量改进
📑 C++ 演进系列:总览 | C++11 | C++14 | C++17 | C++20 | C++23 | C++26 C++14 是一个较小的更新,主要是对 C++11 的改进和补充。它没有引入颠覆性概念,而是填补 C++11 留下的缺口、放宽不必要的限制、补齐明显缺失的工具(如 make_unique)。这种"查漏补缺"的版本让 C++11 的新特性更易用、...
C++11 - 现代 C++ 的开端
📑 C++ 演进系列:总览 | C++11 | C++14 | C++17 | C++20 | C++23 | C++26 C++11 是 C++ 历史上最重要的标准之一,它彻底改变了 C++ 的编程方式,被称为"现代 C++"的起点。在 C++11 之前,C++98/03 沿用了十余年,语言表达力落后于时代。C++11 一次性引入了自动类型推导、Lambda、智能...
C++20 - 革命性更新
📑 C++ 演进系列:总览 | C++11 | C++14 | C++17 | C++20 | C++23 | C++26 C++20 是继 C++11 之后最大的更新,引入了模块、协程、概念和 ranges 等重大特性。它从四个方向重塑了 C++: Concepts 让模板约束成为一等公民、Ranges 让算法与数据以管道组合、协程把异步/生成器纳入语言、模块从根本上改善编译模型。此...
C++17 - 重大更新
📑 C++ 演进系列:总览 | C++11 | C++14 | C++17 | C++20 | C++23 | C++26 C++17 带来了许多重要的新特性,显著提升了 C++ 的表达力和安全性。它虽不如 C++11/C++20 那般颠覆,但落地了大量"早就该有"的实用特性:结构化绑定、optional/variant/any/string_view、文件系统、并...
C++23 - 最新特性
📑 C++ 演进系列:总览 | C++11 | C++14 | C++17 | C++20 | C++23 | C++26 C++23 是当前已发布的最新标准,继续完善和扩展 C++ 的功能。它在 C++20 的基础上查漏补缺:补齐 Ranges/Concepts/Modules 留下的短板,新增一批面向实际工程痛点的小特性(错误处理、格式化输出、容器适配),并进一步向"零开...
C++26 - 下一个里程碑
📑 C++ 演进系列:总览 | C++11 | C++14 | C++17 | C++20 | C++23 | C++26 C++26 已于 2025 年年中完成特性冻结(feature freeze),预计 2026 年正式发布。它继续强化元编程、安全性、并发和标准库表达能力。下面逐个特性展开,讲清它解决的问题、背后的设计以及使用时要注意的语义。 静态反射(Static Reflec...
Kubernetes 架构与底层实现详解
Kubernetes(K8s)是容器编排的行业标准。本文重点剖析其架构和核心组件底层实现原理。 为什么 Kubernetes? 声明式 API:定义期望状态,系统自动维护 强一致性存储:etcd + Raft 分布式调度与控制器模式 插件化:CRI/CNI/CSI 整体架构 核心概念概览 在深入Kubernetes架构之前,我们需要理解几个核心概念: 概念 定义 作用 Po...
Java juc
JUC 是 java.util.concurrent 的缩写,它是 Java 标准库中一个至关重要的包,专门用于支持并发编程。从 Java 5 开始引入,JUC 极大地简化了多线程开发的复杂性,并提供了更强大、更灵活、更安全的并发工具。 可以毫不夸张地说,掌握 JUC 是从“会用多线程”到“精通并发编程”的必经之路。 为什么需要 JUC ? 在 JUC 出现之前,我们主要依赖 synchro...
Java gc
Java 8 (2014年) 是一个里程碑式的版本,其 GC 组合(Parallel GC + CMS/G1)在当时非常经典。但从 Java 9 开始,GC 领域进入了快速迭代和创新的时期,核心目标是:降低停顿时间、提高吞吐量、更好地适应现代大内存和多核硬件,并简化 GC 的使用和调优。 核心思想转变:从“选择”到“自适应” 在 Java 8 之前,你需要根据应用场景(吞吐量优先还是低延迟优...
C++ std::print
C++23 引入了 std::print 和 std::println。它们建立在 C++20 std::format 之上,用类型安全的 {} 格式串替代了 printf 的 % 风格格式串。 std::print 不追加换行,std::println 会在末尾追加一个换行符;二者都默认写入 C 标准输出 stdout,而不是 std::cout。换行不等于刷新缓冲区,...
Java 模块系统
Java 模块系统(Java Platform Module System,简称 JPMS)是 Java 9(2017 年发布)引入的一项重大特性,也被称为 Project Jigsaw。该系统旨在解决 Java 早期版本中类路径(classpath)管理的痛点,如 JAR Hell(依赖冲突)、模块化不足和封装性弱等问题。通过模块化,Java 应用可以更好地组织代码、提高安全性、减少依赖并...
C++ Asio
Asio 是一个跨平台的 C++ 库,用于网络和低级 I/O 编程,提供了一套异步操作的框架。Boost.Asio 是其最知名的版本,但独立(standalone)版本的 Asio 允许在不依赖 Boost 的情况下使用。 Asio 库概述 Standalone Asio 是一个轻量级的网络编程库,设计目标是提供高效、异步的 I/O 操作。它支持以下功能: 网络编程:TCP、UDP、ICM...
sort summary
好的,这里为您总结了 C++、Java、Python、Golang 和 Rust 这些主流语言的排序方法,特别是自定义排序的实现方式。 概述 语言 内置排序方法 主要特点 自定义排序核心 C++ std::sort 非常高效,通常是 IntroSort 函数对象 (Functor)、Lambda、普通函数 Java Arrays.sort(), Collections.so...
sort summary
好的,这里为您总结了 C++、Java、Python、Golang 和 Rust 这些主流语言的排序方法,特别是自定义排序的实现方式。 概述 语言 内置排序方法 主要特点 自定义排序核心 C++ std::sort 非常高效,通常是 IntroSort 函数对象 (Functor)、Lambda、普通函数 Java Arrays.sort(), Collections.so...


































































































