C++ Const Pointer
C/C++ 中 const 与指针的组合只有三种形态: 指向 const 的指针 1const T *ptr; // 等价于 T const *ptr; 指针指向的数据只读:*ptr = value 报错。 指针本身可变:ptr = &other 合法。 1234int a = 10, b = 20;const int *ptr = &a;// *ptr = 15; ...
C++ 显式类型转换
C 风格的 (T)expr 一个写法背后可能是四种完全不同的操作:数值转换、类层次导航、去除 const、位模式重解释。编译器遇到它时会按固定顺序依次尝试 const_cast、static_cast、static_cast 加 const_cast、reinterpret_cast、reinterpret_cast 加 const_cast,第一个能编译通过的就生效——写的人未必知道实际发...
C++ Tips
收集一下奇奇怪怪的玩意(包括冷门用法)。。。。 虚函数的默认参数 123456789101112131415161718192021222324252627#include <iostream>using namespace std;class Base {public: virtual void show(int x = 10) = 0; virtual ...
C++ CRTP
CRTP CRTP = Curiously Recurring Template Pattern。核心形式是:让派生类把自己作为模板参数传给基类 1234template<typename Derived>struct Base { /* 使用 static_cast<Derived*>(this) 调用派生接口 */ };struct Deriv...
C++ Ranges 完全指南
为什么需要 Ranges? 传统 STL 处理数据序列冗长且易错: 123456// 传统方式:需要中间容器或繁琐的迭代器对std::vector<int> result;std::copy_if(nums.begin(), nums.end(), std::back_inserter(result), [](int n) { return n % 2 == 0;...
C++ Concept
📑 C++ 泛型编程系列:模板 | Type Traits | Concept Concept 是 C++20 对模板参数的命名约束。它解决了模板编程的核心痛点:错误信息晦涩、约束表达隐式、SFINAE 代码难以维护。 核心语法 12template<typename T>concept ConceptName = constraint_expression; 定义示例:...
golang context
写并发程序时,经常会遇到同一个问题:发起方已经不需要结果了,后台任务该怎样尽快停下来? 例如,一个 HTTP 请求会调用数据库和远程服务;如果客户端已经断开连接,继续执行这些工作通常只会浪费连接、CPU 和 goroutine。Go 的 context 就是用来把“这个请求还要不要继续”“最晚什么时候结束”“调用链上有哪些请求元数据”统一传下去的机制。 可以先把它理解为一张随调用链向下传递的...
分布式架构知识体系
问题 在展开分布式架构之前,先用几个核心问题作为线索,串联起全文: 何为分布式,何为微服务?——明确概念边界,区分"多机协作"与"服务拆分"两个维度。 为什么需要分布式?——从单机瓶颈出发,理解扩展性、高可用、容错的工程动机。 分布式核心理论基础是什么?——节点、网络、时间、顺序、一致性是构建一切分布式系统的物理与逻辑前提。 分布式系统有哪些设计模式...
浅谈分布式存储的发展和演进
注:本文来源于组内的一次分享,属于综述性质,内容由互联网资料整理所得,感谢阅读。 发展历史 Google、Amazon、Alibaba等互联网公司的发展催生了大数据和云计算两大热门领域。今天我们使用的各种互联网产品,其底层的基础存储设施都是建立在低成本、高性能、高可靠、高可用、可扩展的分布式存储系统之上。分布式系统从最早的数据共享需求,发展到现在的 serverless 架构。它伴随着技...
golang channel
channel 不是“并发安全的队列”这么简单。它更准确的角色是:让 goroutine 在传递一个值的同时建立同步关系。发送方把值交出去,接收方把值拿走;如果此刻无法完成交接,其中一方就会等待,直到另一个 goroutine 让这次通信继续。 理解 channel 时,建议始终回答四个问题: 值存在哪里:直接交给等待的接收者,还是进入缓冲区? 发送或接收不能立即完成时,哪个 gorout...
C++ Move Semantics
移动语义(Move Semantics)是 C++11 引入的特性,核心目的:在资源传递时“窃取”而非“拷贝”,把 O(n) 的深拷贝降为 O(1) 的指针转移。适用于动态内存、文件句柄、智能指针等可窃取的资源。 类比“搬家”:不是复制一套家具,而是直接把原家具搬走,让原房变空。 背景:拷贝语义的代价 C++98 中对象传递依赖拷贝语义——返回局部对象会触发拷贝构造,复制全部资源。对大对...
golang tips
Go 的 gc Go 的垃圾回收器(Garbage Collector)是 Go 运行时的重要组成部分,它自动管理内存回收,让开发者无需手动释放内存。 核心特性 三色标记清除算法:Go 使用并发三色标记清除算法,在程序运行时并发执行垃圾回收,减少 STW(Stop-The-World)时间 并发标记:标记阶段与用户程序并发执行,只有短暂的停止阶段 分代回收:虽然不是严格分代,但会对新分配的...
Zig 基础语法详解
Zig 是一门现代化的系统级编程语言,由 Andrew Kelley 创建。它的设计理念强调显式优于隐式、编译时代码执行、零成本抽象以及与 C 语言的完美互操作性。本文将全面介绍 Zig 的基础语法。 本文示例基于 Zig 0.13.x,个别在后续版本中更名的 API 会以注释标出。 变量与常量 var 与 const Zig 使用 var 声明可变变量,使用 const 声明常量: ...
C++ Alignment
内存对齐不是什么花里胡哨的理论玩意儿,它是硬件决定的铁律。忽略它,你的代码要么崩溃,要么性能烂到家。现代C++给了你工具,让你精确控制对齐,而不是祈祷编译器聪明。 为什么对齐重要? 硬件要求:CPU从内存读取数据必须按特定边界(如4字节、8字节、16字节)。不对齐,访问非法,段错误伺候。 性能杀手:不对齐导致多次内存访问、缓存失效。SIMD指令(SSE/AVX)强制16/32字节对齐,否则...
Java tips
一句话记住 PECS:Producer Extends, Consumer Super 往外读 → extends 往里写 → super 核心概念:箱子的只读/只写 把泛型容器想象成箱子: 通配符 记忆口诀 箱子特性 你能做什么 <? extends T> extends = 读取 里面可能是 T 的任何子类 只能拿出来(读),不能放进去 <? ...
C++ 特殊成员函数生成规则
C++ 编译器会自动生成六种特殊成员函数。理解它们的生成规则,是写出正确、高效类的关键。 六种特殊成员函数 默认构造函数 T() 析构函数 ~T() 拷贝构造函数 T(const T&) 拷贝赋值运算符 T& operator=(const T&) 移动构造函数 T(T&&) (C++11) 移动赋值运算符 T& operator=(T&am...
Python 数据模型:理解 Python 的"魔法方法"
本文参考《流畅的 Python》(Fluent Python)一书,深入讲解 Python 的数据模型(Data Model),帮助你理解 Python 中"魔法方法"的本质与威力。 什么是数据模型? Python 的数据模型(Data Model)是语言的核心设计之一,定义了对象如何与语言的各种特性交互–迭代、比较、运算符重载、属性访问等。这些交互通过特殊方法(Sp...
Python 类型标注演进
类型标注是 Python 在「动态类型」与「工程可维护性」之间的折中:不改变运行时行为,却让 IDE、类型检查器(mypy / pyright)和读者都受益。语法核心很简单–var: type,但围绕冒号右边那个 type 的写法和它何时被求值,这几年演进得很快。 变量标注:var: type 的本质 PEP 526(Python 3.6)引入了变量标注语法: 12x: int = 5 ...
闭包递归
闭包递归的核心矛盾:匿名闭包如何在自己的函数体里指代自己。三种解法——命名引用(绑到外部变量)、自传递(把自己当参数 f(f, n))、不动点组合子(Y/Z combinator)。以斐波那契为例。 C 无闭包。普通函数有名字,天然递归: 123int fib(int n) { return n <= 1 ? n : fib(n - 1) + fib(n - 2);...
函数传参
函数传参是每种语言最基础的功能,却也是跨语言理解时最容易踩坑的地方。同样一句"传引用",在 C++ 里是语言级特性,在 Java/Python 里却常常被误用。根本原因在于"变量"和"对象"在不同语言里建模不同–有的语言变量是"装值的盒子",有的则是"贴在对象上的标签"。本文用一个统一的分析框...



















