自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 I/O多路复用详解

io多路复用详解

2022-11-06 22:53:22 1277 1

原创 代码风格改善

C++ 代码风格 改善

2022-11-06 22:32:33 478

原创 《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》 论文阅读

Dapper 论文阅读

2022-11-06 22:11:25 169

原创 Memcache详解

memcache架构详解

2022-10-30 22:01:12 252

原创 《Kafka: a Distributed Messaging System for Log Processing》论文阅读

kafka 论文阅读

2022-10-23 22:41:17 769 1

原创 异地多活 以阿里为例

异地多活 -- 学习阿里经验

2022-07-17 20:09:37 1401

原创 《The Chubby lock service for loosely-coupled distributed systems》论文阅读

chubby论文阅读

2022-07-17 19:20:16 586

原创 《TAO: Facebook’s Distributed Data Store for the Social Graph》论文阅读

Facebook经典论文TAO阅读

2022-07-17 18:49:51 453

原创 redis 源码阅读 - 内存编码篇 - 压缩列表 ziplist

2.压缩列表 ziplist.h 和 ziplist.c数据结构定义有序整数集合typedef struct zlentry { // prevrawlen :前置节点的长度 // prevrawlensize :编码 prevrawlen 所需的字节大小 unsigned int prevrawlensize, prevrawlen; // len :当前节点值的长度 // lensize :编码 len 所需的字节大小 unsigned int

2021-07-15 23:38:38 120

原创 redis 源码阅读 - 内存编码篇 - 有序整数集合 intset

1.有序整数集合 intset.h 和 intset.c数据结构定义有序整数集合typedef struct intset { // 编码方式 uint32_t encoding; // 元素数量 uint32_t length; // 保存整数元素的数组 int8_t contents[];} intset;编码方式#define INTSET_ENC_INT16 (sizeof(int16_t))#define INTSET_ENC

2021-07-15 23:33:30 161

原创 rcu入门

是什么可参考官方文档Read-copy update,可以理解为,先读数据,修改之后,一次性替换旧数据是linux内核的同步机制,提供线程安全的并发访问应用场景典型应用场景链表读多写少实现链表插入节点在A之前插入节点,分为3步1.new 新节点2.新节点next指针指向A3.前置节点的next指针,指向新节点分析在2步之后时,所有遍历链表操作正常在3步之后,所有遍历链表操作也均正常因为改变指针是原子的,所以不会有问题链表

2021-07-14 23:59:56 328 1

原创 Redis benchmark 简介

liunx 安装 redis & redis benchmark1.下载安装包点击官网,下载stable版本wget http://download.redis.io/releases/redis-6.2.4.tar.gz2.安装解压,并编译tar xzf redis-6.2.4.tar.gz && cd redis-6.2.4 && make3.安装完成Redis 相关文件在src路径下ll src/redis*可以

2021-07-01 23:59:04 182

原创 Cache 命中率

在数据库的设计中,cache是极其重要的一个模块命中率高,延迟低的cache是承受高QPS,低延时的关键其中,在热点key场景下,全局cache很容易造成锁瓶颈于是,我们可以采用thread local + global的两级cache,应对热点key针对thread local cache的大小应该设置多大来进行讨论问题作为数据库的cache,采用 thread local + global 两级cachethread local 应对热点key,global 作为普通cache (可以

2021-06-28 23:38:37 1748

原创 Tcmalloc SetMemoryReleaseRate(double) 和 ReleaseFreeMemory()浅析

问题Tcmalloc 由于使用了精心设计的 cache,进而大大提高了malloc 和 free 的效率,但由之而来的是 cache 大小的难以把控,容易出现 cache 占用过大,进而 OOM 的问题,tcmalloc 提供了两个方案解决这个问题展现 tcmalloc 维护的内存状态解决//virtual void GetStats(char* buffer, int buffer_length);MallocExtension::instance()->GetStats(buf, l

2021-06-22 23:09:08 1013

原创 #Mac 开机自启设置

1.Apple 官方给出的最佳方案 -> 点此选取苹果菜单 >“系统偏好设置”点按“用户与群组”选择帐户点按窗口顶部的“登录项”。添加删除开机自启2.程序坞中设置程序坞找到软件图标,双指点按勾选「登录时打开」-> 下次 Mac 开机登录就会自动打开这个软件3.第三方工具修改例如 腾讯电脑管家 for Mac4.软件设置自行 google -> Mac “软件”开机自启...

2021-06-21 23:20:59 807

原创 《A1 A Distributed In-Memory Graph Database》论文阅读

A1是微软的一篇SIGMOD 2020年“分布式内存图数据库”的论文,其中关于图系统的讨论,以及新技术的运用,值得我们学习和借鉴本文将按照以下几个方面透彻介绍A1的方方面面一、Background1.历史背景有钱 : 便宜的DRAM有技术:商业应用的RDMAbypass local kernelbypass remote CPUtcp中可靠传输和拥塞控制特性,由网卡、交换机实现利用unreliable datagrams (UD) 进行时钟同步2.技术背景FaRM 微软

2021-06-17 23:36:48 394

原创 redis源码阅读-数据结构篇-hyperloglog

文章目录5. HyperLogLog 实现 hyperloglog.c数据结构定义Helper函数(可跳过,需要时阅读)元素哈希处理 O(1)添加基数 O(1)...5. HyperLogLog 实现 hyperloglog.c数据结构定义hllhdrstruct hllhdr { char magic[4]; /* "HYLL" */ uint8_t encoding; /* HLL_DENSE or HLL_SPARSE. */ uint8_t notu

2021-06-09 23:20:54 180 3

原创 redis源码阅读-数据结构篇-跳表

文章目录4. 跳表实现 redis.h 和 t_zset.c数据结构定义Helper函数(可跳过,需要时阅读)node 构造函数 O(1)构造函数 O(1)node 析构函数 O(1)析构函数 O(n)insert object O(logn)delete object O(logn)根据score,范围删除 O(logn)根据rank,范围删除 O(logn)获取 rank O(logn)get by rank O(logn)4. 跳表实现 redis.h 和 t_zset.c数据结构定义obj

2021-06-09 23:14:26 95

原创 redis源码阅读-数据结构篇-字典dict

文章目录4. 字典实现 dict.h 和 dict.c数据结构定义部分宏定义哈希函数(本部分可选跳过)Helper函数(可跳过,需要时阅读)dict 构造函数 O(1)dict 析构函数 O(N)hashtable 构造函数 O(1)dict resize O(1)rehash O(m)限时rehashset k O(1)set kv O(1)get k O(1)update k O(1)update kv O(1)delete kv O(1)get iter O(1)delete iter O(1)迭代

2021-06-09 22:52:06 192

原创 redis源码阅读-数据结构篇-双端列表adlist

文章目录3. 双端链表 adlist.h 和 adlist.c数据结构定义构造函数析构函数get iterdelete iterreset iter迭代add node to headinsert nodedelete nodeget node by keyget node by indexcopy listrotate3. 双端链表 adlist.h 和 adlist.c数据结构定义节点// 节点typedef struct listNode { struct listNode *p

2021-06-09 22:34:08 121

原创 redis源码阅读-数据结构篇-字符串sds

文章目录2. 动态字符串 sds.h 和 sds.c数据结构定义构造函数析构函数resizeconcatcopycmpsplitstolrange2. 动态字符串 sds.h 和 sds.c数据结构定义抽象 字符串typedef char *sds;struct sdshdr { // 跟内存管理类似,加上prefix维护size信息 int len // buf 中已占用空间的长度 int free; // buf 中剩余可用空间的长度 char b

2021-06-09 22:27:15 87

原创 redis源码阅读-数据结构篇-内存管理

1. 内存管理**malloc和free**void *zmalloc(size_t size); // 对malloc的封装void *zcalloc(size_t size); // 对calloc的封装void *zrealloc(void *ptr, size_t size); // 对realloc的封装void zfree(void *ptr); // 对free的封装zmalloc// 与普通malloc...的区别主要在于有没有pr

2021-06-09 22:16:33 76 1

原创 Redis 中 HyperLogLog 讲解

是什么一个算法论文指路可视化展示作用估计集合的基数(去重元素个数)[a,b,c,d] 的基数是 4[a,b,c,d,a] 的基数还是 4原理概率论的伯努利实验 + 修正让我们玩一个游戏你来掷硬币,我来猜你掷了多少回合每回合规定,直到掷出反面结束,否则一直掷比如你可以一直掷正面,不结束该回合也可能第一次就是正面,回合结束我需要的唯一信息你掷硬币次数最多的回合,掷了多少次硬币答案很简单若你最多掷了n次,则你掷了 (1 <&

2021-06-09 21:59:25 114

原创 linux signal 详解

参考https://man7.org/linux/man-pages/man7/signal.7.htmlsignal是什么定位进程进通信机制作用给进程传递关键控制信息用法signal个数种类固定,确定对应信号的handler即可谁产生的signal也是改变程序状态的原因,主要以下三种用户在终端与程序交互程序异常系统调用killSends a signal to a specified process, to all members of a spec

2021-06-08 23:26:16 242

原创 Bigtable 论文阅读

Bigtable: A Distributed Storage System for Structured Data论文阅读谷歌在2003到2006年间发表了三篇论文2003《The Google File System》2004《MapReduce: Simplified Data Processing on Large Clusters》2006《Bigtable: A Distributed Storage System for Structured Data》介绍了Google如何对大

2021-06-02 23:22:53 180

原创 C++ 编程总结一

文章目录C++ 编程总结整形和string的相互装换常见的用法和范围界定见代码do {...} while(0)一般见于#define 语句块中,为了不反直觉C++ 编程总结整形和string的相互装换常见的用法和范围界定见代码#include<bits/stdc++.h>#include <climits>using namespace std;int main() { //string 2 Integer && Integer 2 str

2021-05-20 23:45:31 38

原创 gitlab 添加 CI CD

文章目录gitlab 添加 CICD什么是CICDCI - 持续集成CD - 持续交付CD - 持续部署配置步骤添加.gitlab-ci.yml配置runnerpipeline含义组成主要关键字**全局参数****job参数**gitlab 添加 CICD什么是CICDCI - 持续集成开发人员的自动化流程代码的新更改会定期构建、测试并合并到共享存储库中可以解决在一次开发中有太多应用分支,从而导致相互冲突的问题CD - 持续交付开发人员的更改会自动进行错误测试并上传到存储库(如 Git

2021-05-20 23:41:55 439 1

原创 C extern 关键词分析

文章目录C extern 关键词分析作用函数函数的声明 / 定义 默认带有 extern 关键字变量变量的声明 默认不带有 extern 关键字声明时定义,视为定义总结C extern 关键词分析原文链接作用首先我们区分两个 术语声明 (declaration) : 仅表示,存在 变量 / 函数,变量的类型 / 函数的参数和返回值,并不分配内存 / 定义实现定义 (definition) : 除了 声明 的作用外,还为变量分配内存 / 定义函数实现。声明 是 定义 的功能子集声明

2021-05-17 23:41:30 64

原创 C++ future async promise 用法详解 - shared_future

shared_future文章目录shared_future获得方式作用区别原理基本函数基本用法获得方式只能由 future 得到作用同 future区别可以多线程、多次访问 shared state原理shared state 指针 + 引用计数基本函数构造函数、析构函数和赋值操作等// valid 情况 1 :false,2 :同参数,且参数 valid 情况不变,3、4 :同参数,且参数 valid 变为 falseshared_future() noex

2021-05-14 00:00:37 216

原创 C++ future async promise 用法详解 - future

Future文章目录Future获得方式作用原理基本函数基本用法获得方式std::async 的返回值std::packaged_task 的消费方式std::promise 的消费方式作用查询 状态等待 返回值获取 返回值以此配合完成线程同步原理shared state 指针基本函数构造函数、析构函数和赋值操作等// 构造函数,default 构造函数无 shared state 指针,此

2021-05-13 23:59:51 251

原创 C++ future async promise 用法详解 - packaged_task

packaged_task文章目录packaged_task背景原理基本函数基本用法背景启发于function pointer采用类似 promise 的设计方便的获取线程运行结果原理生产者 - 消费者模型基本函数生产函数,分两步设置value或者exception设置shared state// 设置value或者exception后,立即将shared state设置为readyvoid operator()(Args... args);// 设置value或

2021-05-13 23:59:02 133

原创 C++ future async promise 用法详解 - promise

promise文章目录promise背景原理基本函数基本用法背景不想利用async提供的线程模型还想方便的获取线程运行结果原理生产者 - 消费者模型基本函数生产函数,分两步设置value或者exception设置shared statetemplate <class R&>// 设置value或者exception后,立即将shared state设置为readyvoid set_value (R& val);void set_exce

2021-05-13 23:57:52 202

原创 C++ future async promise 用法详解 - async

async文章目录async背景用法detail背景C++11添加了thread,可以通过std::thread({})方便的创建线程thread不能方便的获取线程运行结果用法返回值为std::future(下面会讲到),第一个参数policy,第二个参数为function,可以是lamdatemplate< class Function, class... Args >std::future<std::invoke_result_t<std::decay_t

2021-05-13 23:56:24 111

原创 Linux Redis 安装教程

Redis 安装教程只需要三步下载安装包进入官网找到下载地址https://redis.io/download,建议选择stable版本直接点击下载,或者wget https://download.redis.io/releases/redis-6.2.2.tar.gz解压,并进入目录tar -zvxf redis-6.2.2.tar.gzcd redis-6.2.2编译安装编译make安装make PREFIX=/usr/local/redis in

2021-04-27 23:18:49 86

原创 C++ 和 Java 的 String 编码问题

文章目录什么是字符编码字符映射关系有哪些ASCII码Unicode字符编解码协议有哪些UTF-8UTF-16UTF-32C++ String编码Java String编码JNI中存在的问题什么是字符编码计算机世界只认识0和1,如果想要表示多种多样的字符,需要确定一种01串到字符的映射,比如可以规定"11"代表“我”01串越长,表示的字符越多,比如8位可以表示(1 << 8)个字符,但是每个字符占用的空间也相应变多各种不同的映射规则,就是各种编码标准,其中有几种业界公认的编码标准字符

2021-04-26 23:59:51 631

原创 磁盘IO测试工具fio入门

磁盘IO测试工具fio入门文章目录磁盘IO测试工具fio入门fio安装认识参数运行基于linux,本文从安装,参数介绍到运行,手把手教你打开fio的大门,详细的调参和各种介质的测试,留坑待填fio安装下载fio代码需要低版本fio,可切换到某tag:git checkout fio-3.10安装fioJust type:: $ ./configure $ make $ make install认识参数键入fio --cmdhelp=cmd即可了解某运行参数主要参数的

2021-04-21 00:01:21 160

原创 C++虚函数 默认参数

一般函数有函数声明时,默认参数可以放在函数声明或者定义中,但只能放在二者之一,建议放在声明中没有函数(原型)时,默认参数在函数定义时指定static void Test0(int a = 0);...void Test0(int a) { cout << a << endl;}...void Test1(int a, int b = 2, char c = '3', string d = "4") { cout << a <&

2021-04-19 23:51:16 527

原创 Frangipani: A Scalable Distributed File System论文阅读

Frangipani是一篇1997年**“分布式文件系统”的论文,其中关于缓存一致性**,分布式事务和分布式故障恢复的简单并且优秀的设计思想,依旧值得我们学习和借鉴本文将按照以下几个方面透彻介绍Frangipani的方方面面文章目录一、Background1.历史背景2.技术背景二、System Structure1.架构图2.两层设计3.Frangipani file system4.安全性考虑三、 Disk Layout1.Layout2.details四、 The Lock Service1.fe

2021-04-16 19:44:43 421

原创 shared_from_this() 实现原理

shared_from_this() 实现原理shared_ptr 实现原理作用C++中采用new和delete来申请和释放内存,但如果管理不当,很容易出现内存泄漏std::shared_ptr, std::unique_ptr, std::weak_ptr,三种智能指针类,可以自动管理内存使用示例智能指针对象,和一般的指针用法几乎完全相同#include <iostream>#include <memory> // 需要包含这个头文件int main(

2021-04-12 00:06:43 486

原创 STL 重载比较操作符 随机比较问题

文章目录问题描述问题复现STL sort实现问题根源std::sort__introsort_loop__final_insertion_sort__insertion_sort__linear_insert__unguarded_linear_insert问题描述C++ struct 重载比较操作符 可以实现按照重载函数的规则排序;如果 重载比较操作符 时,不是按照确定的大小顺序,而是一种随机的大小问题,会出现访问越界的问题?问题复现在写代码的过程中,出现了上述的问题,简化后的代码如下,可以在

2021-04-12 00:02:42 195

空空如也

空空如也

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

TA关注的人

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