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
Concept 是 C++20 对模板参数的命名约束。它解决了模板编程的核心痛点:错误信息晦涩、约束表达隐式、SFINAE 代码难以维护。 核心语法 12template<typename T>concept ConceptName = constraint_expression; 定义示例: 123456789101112131415template<typename ...
简明Rust语法介绍
Rust 是一门注重内存安全、性能和并发性的系统编程语言。以下是其核心语法的扩展介绍,涵盖更多细节和实用特性,适合初学者快速了解并深入掌握。 变量与常量 变量:使用 let 声明,默认不可变。使用 mut 允许修改。变量可以被遮蔽(重新声明)。 1234let x = 5;let x = x + 1; // 遮蔽,创建新变量let mut y = 10;y = 15; 常见场景与注意事项...
golang context
在 Go(Golang)中,context 是一个标准库提供的重要机制,用于控制协程(goroutine)之间的取消、超时、截止时间传递,以及上下文数据传递。它是并发编程中管理协程生命周期和避免资源泄漏的核心工具之一。 context 的主要用途 取消协程(Cancellation) 设置超时时间或截止时间(Timeout / Deadline) 跨 API 传递请求范围的数据(如认证信息...
分布式架构知识体系
问题 何为分布式,何为微服务? 为什么需要分布式? 分布式核心理论基础,节点、网络、时间、顺序,一致性? 分布式系统有哪些设计模式? 分布式有哪些类型? 如何实现分布式? 关键词 节点,时间,一致性,CAP,ACID,BASE,P2P,机器伸缩,网络变更,负载均衡,限流,鉴权,服务发现,服务编排,降级,熔断,幂等,分库分表,分片分区,自动运维,容错处理,全栈监控,故障恢复,性能调优 全文...
浅谈分布式存储的发展和演进
注:本文来源于组内的一次分享,属于综述性质,内容由互联网资料整理所得,感谢阅读。 发展历史 Google、Amazon、Alibaba等互联网公司的发展催生了大数据和云计算两大热门领域。今天我们使用的各种互联网产品,其底层的基础存储设施都是建立在低成本、高性能、高可靠、高可用、可扩展的分布式存储系统之上。分布式系统从最早的数据共享需求,发展到现在的 serverless 架构。它伴随着技...
golang channel
在 Go 语言(Golang)中,Channel 是一种强大的并发原语,用于在不同的 Goroutine 之间进行安全的通信和同步。它是 Go 语言并发模型(CSP,Communicating Sequential Processes)的核心组成部分之一,旨在通过消息传递实现并发,而不是通过共享内存来实现并发。以下是对 Channel 的详细讲解,包括其概念、用法、特性、以及一些高级用法和注...
C++ move_only_function
在C++中,std::move_only_function 是C++23引入的标准库功能,用于表示仅支持移动语义的函数对象(callable object)。它是std::function的变种,但与std::function不同的是,std::move_only_function不要求存储的函数对象是可拷贝的,仅要求可移动,从而支持更广泛的用例,例如存储只支持移动语义的对象(如std::u...
Java21 新特性
Java 21 是继 Java 17 之后的又一个长期支持(LTS)版本,于 2023 年 9 月 19 日发布,相较于 Java 17 引入了许多新特性和改进,涵盖语言特性、性能优化、并发模型、API 增强等方面。以下是对 Java 21 相比 Java 17 的主要新特性的详细总结,重点突出其提升,并尽量简洁: 语言特性改进 虚拟线程(Virtual Threads,JEP 444,J...
Java17 新特性
Java 17 相对于 Java 8 的提升主要体现在语言特性、性能、API 增强、安全性以及生态系统的改进上。以下是详细对比,涵盖主要方面的提升: 语言特性的改进 Java 17 引入了多项新特性,许多是 Java 8 之后逐步引入并在 Java 17(长期支持版本,LTS)中稳定或正式化的功能: 密封类(Sealed Classes,JEP 409,Java 17 正式化) 允许限...
Java11 新特性
Java 11 是继 Java 8 之后的另一个长期支持(LTS)版本,于 2018 年 9 月 25 日发布,相对于 Java 8 引入了多项重要的语言特性、性能优化、API 改进和模块化支持。以下是对 Java 11 相比 Java 8 的主要新特性和提升的简洁总结,涵盖核心变化: 语言特性改进 局部变量类型推断(var,JEP 323,Java 10 引入) 使用 var 关键字...
Java8 新特性
Java 8 的主要新特性,深入每个特性的背景、用法、实际应用场景,并提供代码示例,力求全面且易懂。Java 8(2014年3月发布)是 Java 语言的一次重大升级,引入了函数式编程、现代化 API 和性能优化,极大地提升了开发效率和代码可读性。以下是详细内容: Lambda 表达式 背景: Lambda 表达式是 Java 8 引入的函数式编程核心特性,旨在减少样板代码,允许将行为作为参...
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 使用 var 声明可变变量,使用 const 声明常量: 1234567891011121314const std = @import("std&qu...
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 里却常常被误用。根本原因在于"变量"和"对象"在不同语言里建模不同–有的语言变量是"装值的盒子",有的则是"贴在对象上的标签"。本文用一个统一的分析框...
Golang Generics
Go 1.18 引入的泛型(Generics)是 Go 历史上最具革命性的特性。它让代码复用和类型安全达到了新高度。 基本语法 泛型函数 123456789101112131415// T 是类型参数,any 是约束(表示任意类型)func Map[T, U any](s []T, f func(T) U) []U { result := make([]U, len(s)) ...
Rust Std Trait
Rust 的 trait 系统是其类型系统的核心。理解这些标准 trait 不是背文档,而是要明白它们背后的设计意图和实际使用场景。 核心 Trait 分类 Rust 标准库的 trait 可以分为几个层次: 标记 Trait - 编译器特殊处理,无实际方法 派生 Trait - 几乎总是用 #[derive] 自动生成 操作 Trait - 运算符重载和类型转换 迭代 Trait - ...
Rust 智能指针详解
先搞清楚一件事 Rust 的"智能指针"概念和 C++ 完全是两码事。在 C++ 里,智能指针是用来擦屁股的——程序员管不好内存,标准库帮你想办法。Rust 不一样,所有权系统在编译期就解决了 99% 的内存安全问题,所谓的智能指针只是所有权规则的延伸。 记住这句话:Rust 的智能指针不是为了修复烂代码,而是为了实现特定的数据结构需求。 Box:最简单的堆分配 Box&...
Rust Containers
Rust 的标准库提供了丰富的容器类型,每个容器都有其特定的使用场景和性能特征。理解这些容器的特性对于编写高效、安全的 Rust 代码至关重要。 Vec - 动态数组 Vec<T> 是最常用的容器,类似于 C++ 的 std::vector 或 Python 的 list。它在堆上分配连续内存,支持动态扩容。 基本用法 123456789101112131415161718192...
golang 简明语法教程
本文原为单篇 Go 简明语法速查表,现已拆分为 11 章系列,便于分节阅读与检索。各章独立成篇,可通过下方目录跳转。 系列目录 入门与基础类型 - Hello World、模块系统、包导入与声明、基本数据类型 字符串、变量与常量 - String 与 []byte 的关系、变量遮蔽、iota 常量 流程控制 - if、for(唯一循环)、switch 与 fallthrough 集合类型...
Golang 入门与基础类型
📚 Golang 教程系列 入门与基础类型(本文) 字符串、变量与常量 流程控制 集合类型 函数、指针与类型 结构体 接口 错误处理、并发与泛型 测试与工程实践 杂项:make 与 select 杂项:embed 与资源嵌入 从 Hello World 开始,了解 Go 的模块系统、包导入与声明规则,以及基本数据类型。 Hello World 与构建命令 最小可运行程序 能编译运...
Golang 流程控制
📚 Golang 教程系列 入门与基础类型 字符串、变量与常量 流程控制(本文) 集合类型 函数、指针与类型 结构体 接口 错误处理、并发与泛型 测试与工程实践 杂项:make 与 select 杂项:embed 与资源嵌入 Go 只有 for 一种循环,配合 if 和 switch 覆盖所有流程控制场景。 流程控制总览 流程控制决定代码"如何执行"。大多数语...
Golang 集合类型
📚 Golang 教程系列 入门与基础类型 字符串、变量与常量 流程控制 集合类型(本文) 函数、指针与类型 结构体 接口 错误处理、并发与泛型 测试与工程实践 杂项:make 与 select 杂项:embed 与资源嵌入 数组、切片与 Map 是 Go 最常用的集合类型,结合 slices/maps 标准库高效操作。 数组:被低估的值类型 Go 的数组(array)是固定长度...
Golang 字符串、变量与常量
📚 Golang 教程系列 入门与基础类型 字符串、变量与常量(本文) 流程控制 集合类型 函数、指针与类型 结构体 接口 错误处理、并发与泛型 测试与工程实践 杂项:make 与 select 杂项:embed 与资源嵌入 深入 string 与 []byte 的底层关系,掌握变量声明、遮蔽陷阱与常量用法。 string 的底层结构:一段只读的字节序列 抛弃“字符串是一串字符”...
Golang 函数、指针与类型
📚 Golang 教程系列 入门与基础类型 字符串、变量与常量 流程控制 集合类型 函数、指针与类型(本文) 结构体 接口 错误处理、并发与泛型 测试与工程实践 杂项:make 与 select 杂项:embed 与资源嵌入 函数的多返回值、闭包、defer,以及指针的取地址与解引用和自定义类型。 函数基础:声明、参数与返回值 Go 的函数支持多返回值、命名返回值、可变参数,并把...
Golang 接口
📚 Golang 教程系列 入门与基础类型 字符串、变量与常量 流程控制 集合类型 函数、指针与类型 结构体 接口(本文) 错误处理、并发与泛型 测试与工程实践 杂项:make 与 select 杂项:embed 与资源嵌入 本篇聚焦 Go 接口–隐式实现、空接口 any、类型断言、接口组合,以及最经典的 nil 接口陷阱,拆解鸭子类型与 (type, data) 二元组的底层机制...
Golang 结构体
📚 Golang 教程系列 入门与基础类型 字符串、变量与常量 流程控制 集合类型 函数、指针与类型 结构体(本文) 接口 错误处理、并发与泛型 测试与工程实践 杂项:make 与 select 杂项:embed 与资源嵌入 本篇聚焦 Go 结构体–从定义、方法、嵌套组合到内存布局与 JSON 序列化,拆解这套值类型面向对象体系的底层机制(接口部分见下一篇)。 Go 没有类、继承...
Golang 错误处理、并发与泛型
📚 Golang 教程系列 入门与基础类型 字符串、变量与常量 流程控制 集合类型 函数、指针与类型 结构体 接口 错误处理、并发与泛型(本文) 测试与工程实践 杂项:make 与 select 杂项:embed 与资源嵌入 错误处理约定、Goroutine 与 Channel 并发模型,以及泛型基础。 本篇展开 Go 的三张王牌:error 为值的错误处理、CSP 并发原语,以...
Golang 测试与工程实践
📚 Golang 教程系列 入门与基础类型 字符串、变量与常量 流程控制 集合类型 函数、指针与类型 结构体 接口 错误处理、并发与泛型 测试与工程实践(本文) 杂项:make 与 select 杂项:embed 与资源嵌入 init 函数、单元测试规范与常用标准库速查。 测试与工程是把语言从“能写”推向“能交付”的关键。Go 立场鲜明:测试框架内置于标准库(testing),g...
Golang 杂项:make 与 select 深度总结
📚 Golang 教程系列 入门与基础类型 字符串、变量与常量 流程控制 集合类型 函数、指针与类型 结构体 接口 错误处理、并发与泛型 测试与工程实践 杂项:make 与 select(本文) 杂项:embed 与资源嵌入 make 是唯一带初始化语义的内置分配函数,只服务于 slice/map/channel;select 是唯一专门做 channel 多路复用的控制结构。两者...
golang test
Go 测试基础概念 Go 的测试能力是语言原生内建的,不需要任何第三方框架。核心命令 go test 会自动发现并运行符合约定的测试代码。Go 提供四种测试类型,均通过函数名前缀区分: 单元测试(Unit Tests):函数名以 Test 开头,签名 func TestXxx(t *testing.T) 示例测试(Example Tests):函数名以 Example 开头,无参数,通过 ...
Golang GMP调度模型
Go语言(Golang)的并发能力是其核心优势之一,主要依赖于goroutine(协程)和调度器。Go的调度器采用GMP模型(G-M-P模型),这是从Go 1.1版本开始引入的成熟调度机制,能够高效地将大量goroutine映射到少量的操作系统线程上,实现高并发和多核利用。 GMP模型的演变背景 早期的Go(1.0版本)使用GM模型: G:Goroutine(协程)。 M:Machine(...
Java 集合框架深度剖析
容器的本质是数据结构在内存中的组织方式。如果你只是机械地记住 List、Set、Map 这三个名字,那你根本不懂容器——你只是在背诵 API。这篇文章从最底层的数组讲起,一路深入到 HashMap 的扰动函数、ArrayList 的扩容源码、ConcurrentHashMap 的并发设计,把整个 Java Collections Framework(JCF)拆到骨头。 数组:被低估的基石 ...
Useful Boost Libraries
基于 boost 1.82 timer 计时器 过去老的 boost/timer.hpp 已经废弃了,目前推荐使用的是 boost/timer/timer.hpp, 主要包括下面了2个类 class detail boost::timer::cpu_timer 计时器 boost::timer::auto_cpu_timer 计时器,基于cpu_timer实现,在析构的时候...
C++ 中的 RVO 与 NRVO
什么是 RVO? RVO(Return Value Optimization,返回值优化)是 C++ 编译器的一种优化技术,通过消除不必要的临时对象拷贝来提升性能。NRVO(Named RVO)是 RVO 的变体,针对已命名的局部变量。 关键时间点: C++11 之前:RVO/NRVO 作为编译器优化选项存在 C++17:强制要求对 prvalue(纯右值)执行 RVO C++20:进一步...
C++ 类型擦除详解
类型擦除让 C++ 在运行时处理未知类型。核心:隐藏具体类型,只暴露接口。标准库如 std::function, std::any, std::variant 都依赖它。 类型擦除是什么? 定义:运行时统一处理多种类型,编译时忘掉具体类型。只剩接口。 解决痛点: 模板太静态,无法处理运行时类型(插件、网络数据)。 容器存异构类型。 API 解耦:接受任意 callable。 核心机制:动...
C++ 字符串
std::string 的内存布局 std::string 通常用 SSO(Small String Optimization):短字符串直接存在对象内部,长字符串才堆分配。 观察分配阈值: 123456789101112131415#include <cstdlib>#include <iostream>#include <string>void* op...
C++ lambda and bind
基本表达式 1[capture](parameters) -> return-type {body} 当没有返回类型时, 可以省略 -> return-type 变量捕获与lambda闭包实现 [] 不截取任何变量 [&] 截取外部作用域中所有变量,并作为引用在函数体中使用 [=] 截取外部作用域中所有变量,并拷贝一份在函数体中使用 [=, &...
C++ 迭代器与 traits
迭代器是 STL 的"胶水"——算法不认容器,只认迭代器;容器只要暴露迭代器,就能对接整套算法库。这套设计的关键,是给迭代器分类别(category),让算法按能力分派到最优实现。traits 则是"编译期问迭代器属性"的接口,是泛型代码的基础设施。C++20 用 concepts 重写了这套体系,引入了 sentinel 和 contiguous 迭...
C++ 编译期计算
"编译期计算"是 C++ 区别于大多数语言的核心能力:把能在编译期算出来的东西全部前移到编译期——更早发现错误、运行期零开销、生成更紧凑的代码。这条路从 C++98 的模板元编程一路演进到 C++26 的静态反射,工具越来越多也越来越人道。 这篇把整套编译期计算的版图画出来:模板元编程、if constexpr、fold 表达式、type traits、constexpr...
C++ 异常与错误处理
C++ 有两套并行的错误处理体系:异常(exception)处理"不该发生但发生了"的意外,错误即值(std::optional / std::expected)处理"完全可能发生"的预期失败。很多人混用它们,结果要么用异常做流程控制、要么对所有失败都返回 expected 把调用方淹没在 if (!result) 里。这篇把两套机制的边界、异常的生命...
C++ Concurrency
cpp11之后,cpp本身对并发的支持大大增强,这里记录一下 std::thread class cpp的thread类型,创建即运行,不像java那样需要start,thread表示一个系统资源,一个系统线程 构造函数 function construct constructor 1 thread() noexcept; constructor 2 thread(thre...
Java Coding Guidelines - The Yellow Mountain Edtion
《Java 开发手册》是 Java 社区爱好者的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,整理成册后,众多社区开发者踊跃参与打磨完善,系统化地整理成册,当前的最新版本是黄山版。 现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。比如:五花八门的错误码会人为地增加排查问题的难度;数据库的表结...
一大坨知识-12-Netty
核心组件 整体结构 1. Core 核心层 Core 核心层是 Netty 最精华的内容,它提供了底层网络通信的通用抽象和实现,包括事件模型、通用API、支持零拷贝的 ByteBuf 等。 2. Protocol Support 协议支持层 协议支持层基本上覆盖了主流协议的编解码实现,如 HTTP、Protobuf、WebSocket、二进制等主流协议,此外 Netty 还支持...
一大坨知识-11-Docker&K8S
chroot 是在 Unix 和 Linux 系统的一个操作,针对正在运作的软件行程和它的子进程,改变它外显的根目录。一个运行在这个环境下,经由 chroot 设置根目录的程序,它不能够对这个指定根目录之外的文件进行访问动作,不能读取,也不能更改它的内容。 虚拟化技术 VMware 、VirtualBox、KVM 虚拟化技术就是在操作系统上多加了一个虚拟化层(Hypervisor),可以...
一大坨知识-10-ES
Elasticsearch可以实现 秒级 的搜索,cluster 是一种分布式的部署,极易扩展这样很容易使它处理PB级的数据库容量。最重要的是Elasticsearch是它搜索的结果可以按照分数进行排序,它能提供我们最相关的搜索结果(relevance) 概述 特点 安装方便 :没有其他依赖,下载后安装非常方便;只用修改几个参数就可以搭建起来一个集群 JSON :输入/输出格式为...
一大坨知识-9-分布式
分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。 发展历程 入口级负载均衡 网关负载均衡 客户端负载均衡 单应用架构 应用服务和数据服务分离 应用服务集群 应用服务中心化SAAS 数据库主备读写分离 全文搜索引擎加快数据统计 缓存集群缓解数据库读压力 分布式消息中间件缓解数据库写压力 数据库水平拆分适应微服务 数...
一大坨知识-SpringCloud-8
Why SpringCloud Spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如 服务发现注册 、配置中心 、消息总线 、负载均衡 、断路器 、数据监控 等,都可以用 spring boot 的开发风格做到一键启动和部署。 SpringCloud(微服务解决方案) Dubbo(分布式服务治理框...
一大坨知识-7-Spring
设计思想&Beans IOC 控制反转 IoC(Inverse of Control:控制反转) 是⼀种设计思想,就是将原本在程序中⼿动创建对象的控制权,交由Spring框架来管理。 IoC 在其他语⾔中也有应⽤,并⾮ Spring 特有。 IoC 容器是 Spring⽤来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value, Map中存放的是各种对象。将对...
一大坨知识-6-Kafka
Why kafka 消息队列的作用: 异步、削峰填谷、解耦 中小型公司 ,技术实力较为一般,技术挑战不是特别高,用 RabbitMQ (开源、社区活跃)是不错的选择; 大型公司,基础架构研发实力较强,用 RocketMQ (Java二次开发) 是很好的选择。 如果是 大数据领域 的实时计算、日志采集等场景,用 Kafka 是业内标准的,绝对没问题,社区活跃度很高,绝对不会黄,何况几乎是全世界...
一大坨知识-5-Redis
WhyRedis 速度快,完全基于内存,使用C语言实现,网络层使用epoll解决高并发问题,单线程模型避免了不必要的上下文切换及竞争条件; Name GuavaCache Tair EVCache Aerospike 类别 本地JVM缓存 分布式缓存 分布式缓存 分布式nosql数据库 应用 本地缓存 淘宝 Netflix、AWS 广告 性能 非常高 较高 很高 较高 ...
一大坨知识-4-MySQL篇
WhyMysql? NoSQL数据库四大家族 列存储 Hbase K-V存储 Redis 图像存储 Neo4j 文档存储 MongoDB 海量Aerospike Aerospike(简称AS)是一个分布式,可扩展的键值存储的NoSQL 数据库 。T级别大数据高并发的结构化 数据存储, 采用混合架构,索引存储在内存中,而数据可存储在机械硬盘(HDD)或固态硬盘(SSD) 上,读写操作达...
一大坨知识-3-多线程篇
线程调度 线程状态 线程是cpu任务调度的最小执行单位,每个线程拥有自己独立的程序计数器、虚拟机栈、本地方法栈 线程状态:创建、就绪、运行、阻塞、死亡 线程状态切换 方法 作用 区别 start 启动线程,由虚拟机自动调度执行run()方法 线程处于就绪状态 run 线程逻辑代码块处理,JVM调度执行 线程处于运行状态 sleep 让当前正在执行的线程休眠(暂停执...
一大坨知识-2-JVM篇
JVM内存划分 JVM运行时数据区域 堆、方法区(元空间)、虚拟机栈、本地方法栈、程序计数器 Heap(堆) 对象的实例以及数组的内存都在堆上进行分配,堆是线程共享的区域,用来存放对象实例,也是垃圾回收(GC)的主要区域。开启逃逸分析后,某些未逃逸的对象可以通过标量替换的方式在栈中分配。 堆细分: 新生代、老年代 新生代分为:Eden区、Survivor1区、Survivor2区 方法...
一大坨知识-1-基础篇
不错的帖子, COPY一下 一大坨知识全都来自于此,原来帖子的名字如下: 这些年,背过的面试题 今天看到一篇文章,感叹失败的原因可能有很多条,但成功的道路只一条,来之前准备了半年,上篇俗称八股文,下篇是一些经验总结供大家参考。 网络基础 TCP三次握手 三次握手过程: 客户端——发送带有SYN标志的数据包——服务端 一次握手 Client进入syn_sent状态 服务端——发送带有SY...
C++ Coroutines
C++20 引入的协程(Coroutines)是一种可暂停、可恢复的函数。普通函数从入口跑到结尾一次性完成;协程可以在中途挂起(suspend),把控制权交还调用者,之后从挂起点继续执行。 类比:普通函数是一段单次播放的录音;协程是可以暂停、续播、还能边播边产值的播放器。 核心价值:用同步的线性代码风格写出异步逻辑,避免回调地狱与状态机手写。但 C++20 只提供“协程机制”(编译器变换...
C++ Smart Pointers
裸指针(new/delete)的两大顽疾:忘记释放导致内存泄漏,重复释放或异常路径跳过释放导致未定义行为。智能指针用 RAII 把“获取即初始化”贯彻到指针上——构造时持有资源,析构时自动释放,从而让资源管理与控制流解耦。 C++11 后标准库提供三类智能指针(均在 <memory>):std::unique_ptr、std::shared_ptr、std::weak_ptr,加...
C++ Templates
模板是 C++ 的编译期多态与元编程基石。同一份模板代码,编译器根据传入的类型生成不同实例,实现“一次编写,多类型复用”,且零运行时开销。模板把“类型”当作一等公民,在编译期进行计算与分发。 类比:模板是“代码模具”,注入不同类型(材料)压出不同实例(零件)。 模板的两大用途:泛型编程(容器、算法与类型无关)与模板元编程(TMP,编译期计算)。本文聚焦模板本身的核心机制,约束部分见 [[...
C++ new & delete
C++ 的 new 和 delete 是动态内存核心,但现代代码中应避免裸用。理解其机制避免陷阱:new 分配内存+构造对象,delete 析构+释放内存。 Widget 示例类(全局唯一定义) 1234567891011121314#include <print>#include <format>class Widget {public: Widge...
C++ Stl Allocator
Allocator 是 C++ STL 容器内存管理的核心。它直接决定程序的内存效率和性能瓶颈。默认的 std::allocator 在高性能场景下往往不够用,但记住我的铁律:简单第一,复杂是敌人。 1. Allocator 的核心接口 STL 容器通过 allocator 抽象内存管理,解耦内存分配与容器逻辑。一个合格的 allocator 必须满足 allocator_traits 的要...
C++ Callable Objects
在 C++ 中,Callable Object(可调用对象) 指的是任何可以像函数一样被调用的事物。简单来说,就是任何可以使用 () 运算符(Function Call Operator)的对象。 在现代 C++(C++11 及以后)中,可调用对象的概念非常重要,因为它是 STL 算法、线程(std::thread)以及回调机制的核心。 C++ 中的可调用对象主要分为以下 5 类。 普通函...
C++ namespace
C++命名空间是语言的核心特性之一,用于解决名字冲突问题,尤其在大项目或使用多个库时。基于最新C++23标准,命名空间用法稳定,但结合模块(modules)使用更高效。下面直击要害,逐一拆解,包括[inline namespace]、匿名命名空间和命名空间别名。 参考:[cppreference.com] 基本用法:声明与定义 命名空间通过namespace关键字声明,内容可以分散在多个文...
Rust Iterator
什么是 Rust 迭代器? Rust 的迭代器(Iterator)是一种强大的抽象,它允许你遍历集合元素而不需要关心底层数据结构的具体实现。迭代器模式是函数式编程的核心概念之一,Rust 在这方面做得特别出色。 迭代器的基本概念 在 Rust 中,任何实现了 Iterator trait 的类型都可以称为迭代器: 1234pub trait Iterator { type I...
C++ 三路比较 (Three-way Comparison)
简介 C++20 引入了三路比较运算符 <=>,也被称为"宇宙飞船运算符"(spaceship operator)。这个运算符可以一次性确定两个对象之间的所有比较关系(小于、等于、大于),大大简化了比较运算符的实现。 传统比较运算符的问题 在 C++20 之前,如果我们想为一个自定义类型实现完整的比较运算符,需要分别实现六个运算符: 1234567891011...
























