自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

凌桓丶的博客

沙漠尽头必是绿洲

  • 博客(228)
  • 收藏
  • 关注

原创 CMake 快速入门

CMake 是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile 或者 project 文件,CMake 的配置文件取名为 CMakeLists.txt。也就是在 CMakeLists.txt 这个文件中写 cmake 代码。 一句话:cmake 就是将多个 cpp、hpp 文件组合构建为一个大工程的语言。......

2022-07-11 14:00:00 215

原创 从实践到原理掌握 GDB

GDB(GNU Debugger),是一个由 GNU 开源组织发布的、UNIX/LINUX 操作系统下的、基于命令行的、功能强大的程序调试工具;GDB 支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段;GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等。实际场景中,GDB 更常用来调试 C 和 C++ 程序。...

2022-07-10 14:00:00 136 1

原创 一文学会使用Bazel构建C++项目

Bazel 是一个开源构建和测试工具,类似于 Make、Maven 和 Gradle。它使用人类可读的简要构建语言。Bazel 支持多种语言的项目,并针对多个平台构建输出。Bazel 支持跨多个代码库和大量用户的大型代码库。...

2022-07-04 10:00:00 193

原创 一文掌握谷歌 C++ 单元测试框架 GoogleTest

GoogleTest(简称 GTest) 是 Google 开源的一个跨平台的(Liunx、Mac OS X、Windows等)的 C++ 单元测试框架,可以帮助程序员测试 C++ 程序的结果预期。不仅如此,它还提供了丰富的断言、致命和非致命判断、参数化、”死亡测试”等等。......

2022-06-16 10:00:00 939

原创 CPU Cache 一致性:Cache 结构、同步方式、Cache 一致性、总线嗅探、MESI 协议

随着时间的推移,CPU 和内存的访问性能相差越来越大,为了弥补 CPU 与内存两者之间的性能差异,就在 CPU 内部引入了 CPU Cache,也称高速缓存。CPU Cache 通常分为大小不等的三级缓存,分别是 L1 Cache、L2 Cache 和 L3 Cache。它们之间的层级关系如下图:介绍完了 CPU Cache 的层级关系后,再来聊聊它的构成。CPU Cache 其实是由多个 组成的,而 其实就是 CPU 从内存读取数据的基本单位,由 (标志)和 (数据块)组成。当我们把数据写入 Cach

2022-06-09 14:00:00 397 1

原创 etcd Raft 源码剖析

etcd 是 coreOS 使用 golang 开发的分布式,一致性的 kv 存储系统,因其易用性和高可靠性被广泛运用于服务发现、消息发布和订阅、分布式锁和共享配置等方面,也被认为是 zookeeper 的强有力的竞争者。...

2022-06-04 14:00:00 179

原创 新时代内存分配器:TCMalloc

TCMalloc 全称 Thread-Caching Malloc,即线程缓存的 `malloc`,实现了高效的多线程内存管理,用于替代系统的内存分配相关的函数(`malloc`、`free`,`new`,`new[]` 等)。

2022-05-26 16:26:03 143 1

原创 C++20的这些新特性,你都知道吗?

C++20的这些新特性,你都知道吗?

2022-04-28 15:04:17 1370 3

原创 一篇文章掌握C++17核心特性

C++ 17 新特性:折叠表达式、结构化绑定、类模板实参推导、内联变量、STL 并行算法、file_system、string_view、any 等

2022-04-25 09:00:00 437 1

原创 C++14的这些新特性,你都知道吗?

C++14的这些新特性,你都知道吗?

2022-04-21 17:02:47 1344

原创 分布式系统中的一致性模型

一致性模型本质上是进程与数据存储的约定:如果进程遵循某些规则,那么进程对数据的读写操作都是可预期的。

2022-04-15 14:00:00 2371

原创 分布式系统概念 | 分布式时钟:物理时钟、逻辑时钟、Lamport 时间戳、向量时钟、版本向量

分布式系统概念 | 分布式时钟:物理时钟、逻辑时钟、Lamport 时间戳、向量时钟、版本向量

2022-04-12 15:12:34 660

原创 LevelDB 源码剖析(九)DBImpl模块:Open、Get、Put、Delete、Write

LevelDB 源码剖析(九)DBImpl模块:Open、Get、Put、Delete、Write

2022-04-10 13:21:13 375

原创 LevelDB 源码剖析(八)Compaction模块:Minor Compaction、Major Compaction、文件选取、执行流程、垃圾回收

LevelDB 源码剖析(八)Compaction 模块:Minor Compaction、Major Compaction、文件选取、执行流程、垃圾回收

2022-04-08 16:11:56 745

原创 LevelDB 源码剖析(七)版本管理:Manifest、Version、VersionEdit、VersionSet

LevelDB 源码剖析(七)版本管理:Manifest、Version、VersionEdit、VersionSet

2022-04-06 13:26:31 1012

原创 LevelDB 源码剖析(六)WAL模块:LOG 结构、读写流程、崩溃恢复

LevelDB 源码剖析(六)WAL模块:LOG 结构、读写流程、崩溃恢复

2022-04-04 16:38:15 337

原创 LevelDB 源码剖析(五)SSTable模块:SSTable、Block、布隆过滤器、LRU Cache

LevelDB 源码剖析(五)SSTable模块:SSTable、Block、布隆过滤器、LRU Cache

2022-04-03 10:00:00 537

原创 LevelDB 源码剖析(四)MemTable模块:SkipList、MemTable、持久化

LevelDB 源码剖析(四)MemTable模块:SkipList、MemTable、持久化

2022-04-01 14:00:00 866

原创 LevelDB 源码剖析(三)公共基础:内存管理、数值编码、Env家族、文件操作

LevelDB 源码剖析(三)公共基础:内存管理、数值编码、Env家族、文件操作

2022-03-30 23:04:51 839

原创 LevelDB 源码剖析(二)整体架构与基本组件:Comparator、Slice、Status、Iterator、Option

LevelDB 源码剖析(二)整体架构与基本组件:Comparator、Slice、Status、Iterator、Option

2022-03-30 15:49:54 1421

原创 LevelDB 源码剖析(一)准备工作:环境搭建、接口使用、常用优化

LevelDB 源码剖析(一):环境搭建、实战使用、常用优化

2022-03-29 14:11:00 1543

原创 LevelDB是什么?为什么我们需要K-V存储?

LevelDB 是一个由 Google 公司所研发的 K-V 存储嵌入式数据库管理系统编程库,以开源的 BSD 许可证发布。其作为 LSM Tree 的经典实现,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,也就是说,LevelDB很适合应用在查询较少,而写很多的场景。

2022-03-28 23:01:30 1509

原创 现代的缓存设计方案:Window-TinyLFU

现代的缓存设计方案:Window-TinyLFu

2022-03-27 21:30:30 1565 2

原创 为什么大部分NOSQL数据库选择使用LSM树而非B+树?

LSM树的架构介绍与核心执行流程

2021-08-24 20:27:46 506 1

原创 ElasticSearch探索之路(六)实战:环境搭建、REST、CRUD、Search

ElasticSearch探索之路(六)实战:环境搭建、REST、CRUD、Search

2021-08-17 14:31:50 172

原创 ElasticSearch探索之路(五)集群与分片:选举、动态更新、近实时搜索、事务日志、段合并

ElasticSearch集群内部原理:选举、动态更新、近实时搜索、事务日志、段合并

2021-08-15 17:26:51 281

原创 ElasticSearch探索之路(四)索引原理:倒排索引、列式存储、Fielddata、索引压缩、联合索引

ElasticSearch索引结构、存储原理

2021-08-12 15:59:37 517 1

原创 ElasticSearch探索之路(三)分布式原理:分布式路由、存储、搜索原理

ElasticSearch分布式存储、搜索原理

2021-08-11 14:33:34 676

原创 ElasticSearch探索之路(二)权重计算与文本分析:布尔模型、TF/IDF、向量空间模型、分析与分析器

ElasticSearch的权重计算与文本分析原理

2021-08-09 15:37:29 496 2

原创 ElasticSearch探索之路(一)初识ElasticSearch:特点、应用场景、架构设计、基本概念

ElasticSearch的特点、应用场景、基本概念

2021-08-08 16:37:29 526

原创 为什么HTTP3.0抛弃传统的TCP而选择QUIC协议?

为什么HTTP3.0抛弃传统的TCP而选择QUIC协议?

2021-08-03 21:37:25 892

原创 Linux常见的一些性能监控命令

文章目录全局监控topCPU监控uptime内存监控freevmstat磁盘监控dfiostat网络监控netstat进程监控pslsof在我们使用Linux进行开发、运维时,难免会出现一些问题,而要解决这些问题我们就需要获取到系统当前的一些运行信息,来帮助我们快速锁定问题的原由,下面就介绍几个Linux常用的性能监控的命令。全局监控toptop用于按一定的顺序显示所有正在运行而且处于活动状态的实时进程,而且会定期更新显示结果。这条命令显示了CPU的使用率、内存使用率、交换内存使用大小、高速缓存使

2021-08-01 00:03:00 1677 3

原创 ZooKeeper ZAB协议:崩溃恢复、消息广播

文章目录ZAB协议消息广播崩溃恢复ZAB协议ZAB(ZooKeeper Atomic Broadcast 原子广播) 协议是为分布式协调服务ZooKeeper专门设计的一种支持崩溃恢复的原子广播协议。 在ZooKeeper中,主要依赖ZAB协议来实现分布式数据一致性,基于该协议,ZooKeeper实现了一种主备模式的系统架构来保持集群中各个副本之间的数据一致性。ZAB协议包括了两种基本的模式,分别是崩溃恢复和消息广播。消息广播为了保证集群中存在过半的机器能够和Leader服务器的数据状态保持一

2021-07-08 21:38:06 510 4

原创 ZooKeeper 集群:集群概念、选举流程、机器数量

文章目录集群集群角色选举服务器启动时期的选举服务器运行时期的选举集群的机器数量集群集群角色通常在分布式系统中,构成一个集群的每一台机器都有自己的角色,最常见的集群模式就是Master/Slave模式(主从模式),在这种模式中,通常Maste服务器作为主服务器提供写服务,其他的Slave服务器从服务器通过异步复制的方式获取Master服务器最新的数据提供读服务。但是ZooKeeper并没有沿用传统的主从模式,而是引入了Leader、Follower和Observer三种角色,如下图所示:ZooK

2021-07-07 21:21:32 380 3

原创 ZooKeeper 基本概念:特点、数据模型、节点特性、Watcher、ACL

文章目录什么是ZooKeeper?特点设计目标应用场景系统模型数据模型节点特性节点类型节点状态版本WatcherACL权限模式:Scheme权限对象:ID权限:PermissionSession什么是ZooKeeper?ZooKeeper是一个开源的分布式协调服务,由知名互联网公司雅虎创建,是Google Chubby的开源实现。它的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。原语: 操作系统或计算机网络用语范畴。是

2021-07-06 15:27:24 133 2

原创 高可用系统设计 | 分布式限流策略:计数器算法、漏桶算法、令牌桶算法

限流可以认为服务降级的一种,限流就是限制系统的输入和输出流量已达到保护系统的目的。

2021-06-26 15:19:42 321 1

原创 ClickHouse 分布式原理:Distributed引擎

文章目录Distributed引擎分布式写入流程数据写入分片副本复制数据分布式查询流程多副本的路由规则多分片查询的流程使用Global优化分布式子查询Distributed引擎Distributed表引擎是分布式表的代名词,它自身不存储任何数据,而是作为数据分片的透明代理,能够自动路由数据至集群中的各个节点,所以Distributed表引擎需要和其他数据表引擎一起协同工作。ClickHouse并不像其他分布式系统那样,拥有高度自动化的分片功能。ClickHouse提供了本地表(Local Table

2021-05-26 16:45:41 1274 1

原创 ClickHouse 副本协同原理:ReplicatedMergeTree引擎

文章目录ReplicatedMergeTree引擎特点数据结构ZooKeeper内的节点结构Entry日志对象的数据结构副本协同的核心流程INSERTMERGEMUTATIONALTERReplicatedMergeTree引擎ReplicatedMergeTree是MergeTree的派生引擎,它在MergeTree的基础上加入了分布式协同的能力,只有使用了ReplicatedMergeTree复制表系列引擎,才能应用副本的能力。或者用一种更为直接的方式理解,即使用ReplicatedMergeTr

2021-05-25 16:24:11 1791 6

原创 ClickHouse 数据存储原理:MergeTree引擎

文章目录MergeTree引擎存储结构一级索引稀疏索引索引粒度index_granularity索引的查询过程联合主键二级索引跳数索引granularity数据标记生成规则工作方式数据标记与压缩数据块的对应关系工作流程存储流程查询流程MergeTree引擎存储结构MergeTree的存储结构partition:分区目录,余下各类数据文件(primary.idx、[Column].mrk、[Column]. bin等)都是以分区目录的形式被组织存放的,属于相同分区的数据,最终会被合并到同一个分

2021-05-22 14:40:38 654 2

原创 还搞不懂STL的type_traits?从源码来带你一起分析

文章目录什么是类型萃取?源码剖析SGI-STL G2.9版本类型萃取C++标准库类型萃取SFINAE机制与enable_ifconditional核心结构:integral_constant 与bool_constantis_same类型转换:remove/add_xx()实战分析:is_void什么是类型萃取?type_traits被称为类型萃取,主要用于在编译期计算、查询、判断、转换和选择,增强了泛型编程的能力,也增强了程序的弹性,使得我们在编译期就能做到优化改进甚至排错,能进一步提高代码质量。

2021-05-15 20:53:56 352 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除