自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(173)
  • 资源 (1)
  • 收藏
  • 关注

原创 Redis 4.0.11配置说明

1、外置配置文件导入(INCLUDES).... 12、启动加载模块(MODULES).... 23、网络配置(NETWORK).... 34、通用配置(GENERAL)... 65、主从配置.... 126、安全配置.... 157、客户端配置.... 169、内存相关配置.... 1610、惰性删除配置(非阻塞删除配置).... 1711、仅追加模...

2019-03-28 21:37:14 1778 1

原创 C++ Memory Order 理解

多线程编程过程中,并发、数据竞争和线程同步是一个绕不过的问题,为了支持多线程并发编程,C++提供了atomic、mutex等标准库用于原子操作以及线程之前的同步机制。在使用atomic进行原子操作的时候,由于原子操作可能在对象本身以外的内存进行操作,可能会导致线程A的操作1和操作2 在线程C、D看来执行顺序可能不同(即C可能看到的执行顺序是1->2,D可能看到的执行顺序是2->1),为了解决这个问题,在所有原子操作的接口中都提供了一个Memory Order参数,用于给Progermer提供灵活的控制选

2022-09-10 18:44:20 983 1

原创 隐藏struct具体实现细节

​ 我们知道对于struct,其所有的成员默认情况下是所有对外可见的,即为public属性。但是有时候为了提高程序的封装性,我们需要将struct的内容细节隐藏起来,怎么做呢?可以使用下面这种做法达到目的。// a.htypedef struct A At;class Test {public: Test(int a); int Get(); At* _a;};// a.cpp#include "a.h"typedef struct A { int a;} At;T

2020-06-01 00:26:19 714

原创 自旋锁、互斥锁、乐观锁、悲观锁、读写锁概念以及特点总结

​ 在开发的过程中,很常见的场景就是在多进程或者多线程中访问同一份资源,而如果直接不加限制的对这段资源进行写操作的话,很可能会将这段共享资源写乱而导致不可预期的后果。在Linux中为了解决这个问题,一个常用的方法就是对操作这段共享资源的区域进行加锁避免上述问题。在Linux中将锁在不同的角度进行了一些分类,这里记录一下Linux中提到的一些锁的概念以及其特点。本文只对部分类型的锁的概念、特点进行记录,而不深究其实现。如果有什么理解有误的地方欢迎指正。1、自旋锁(spinlock)与互斥锁1.1 概

2020-05-31 00:48:07 1463

原创 以示例方式记录pthread_once_t

#include <iostream>#include <thread>#include <vector>#include <pthread.h>/* 参考链接:https://www.cnblogs.com/qinwanlin/p/pthread_once.html* @desc: pthread_once_t* 用于控制函数只执行一次的变量,一般初始化为PTHREAD_ONCE_INIT,即0* 取值范围:*

2020-05-27 12:56:49 387

原创 以示例方式记录unique_lock&lock_guard

#include <iostream>#include <mutex>#include <thread>#include <vector>/* 参考链接:https://www.cnblogs.com/fnlingnzb-learner/p/9542183.html* @desc: unique_lock* @constructor:* (1) unique_lock() noexcept;

2020-05-27 12:26:34 238

原创 以示例方式记录mutex

#include <iostream>#include <mutex>#include <thread>#include <vector>/** @desc std::mutex* @constructor* constexpr mutex() noexcept; // 只有一个默认构造函数* mutex (const mutex&) = delete; // 禁止拷贝构造* @func

2020-05-27 12:25:43 154

原创 以示例方式记录pthread_key_t

#include <thread>#include <iostream>#include <string>#include <vector>#include <chrono>// 参考链接:https://blog.csdn.net/Kaiwii/article/details/8461277/** @desc pthread_key_t* 线程特有变量,对进程来看只有一个变量,但是在线程中,该变量的数据是完全独立

2020-05-27 12:18:29 150

原创 读扩散与写扩散分析

写扩散与读扩散的概念常见于feeds流类型的业务中的数据写入和数据读取的流程。下面用两张图简单说明一下读扩散和写扩散分别是什么。写扩散读扩散从上面的读写扩散的流程我们可以分析出读写扩散分别具有哪些优缺点。写扩散的优点:1、控制逻辑和数据读取逻辑简单2、粉丝数据独立,方便粉丝内容定制化推荐。3、大V数据丢失,对关注者数据影响不大,关注者依然可以正常读取关注者发布的数据内容。写扩散的缺点:1、浪费存储成本2、写扩散需要使用专门的扩散队列3、数据实时性较差。(要等待数据扩散完才

2020-05-22 11:36:42 6487

原创 使用示例方式记录lamda表达式使用方法

#include <iostream>#include <vector>#include <algorithm>/* lamda表达式的基本语法: [capture](parameters)->return-type{body} 语法说明: [capture]:变量捕获,这里指定在lamda表达式中可见的外部变量,并说明是以传值还是传引用的方式进行捕获 (parameters):lamda表达式

2020-05-21 10:46:21 140

原创 使用示例方式记录weak_ptr使用方法

#include <iostream>#include <memory>/*// pa与pb相互引用,导致引用计数不能减为0,导致内存泄漏class B;class A {public: std::shared_ptr<B> m_pb; ~A() { std::cout << "A deleted" << std::endl; }};class B {public: std::s

2020-05-20 16:04:21 398

原创 使用示例方式记录shared_ptr使用方法

#include <memory>#include <iostream>// shared_ptr实现共享式拥有概念。// 多个智能指针可以指向相同对象,该对象和其相关资源会在“最后一个引用被销毁”时候释放。// 从名字share就可以看出了资源可以被多个指针共享,它使用计数机制来表明资源被几个指针共享。int main() { std::cout << "***********************默认初始化为空******************

2020-05-20 15:28:00 207

原创 使用示例方式记录unique_ptr使用方法

#include <memory>#include <iostream>int main() { std::cout << "*************************默认初始化为nullptr*************************" << std::endl; std::unique_ptr<int> u1; std::unique_ptr<int> u2(nullptr); s

2020-05-20 13:15:47 329

原创 C++11 nullptr与常量表达式constexpr记录

1、nullptr(1) nullptr是一个关键字,而nullptr_t是一个类型typedef decltype(nullptr) nullptr_t使用nullptr_t类型必须包含#include ,而nullptr不需要包含任何头文件。nullptr_t类型可以隐式转换为任意一种指针类型;如:std::nullptr_t test;char* s = test;Nullptr_t类型不适用于算数表达式,但是使用与关系表达式。(2) nullptr是有类型的,仅可以被隐式转换为指

2020-05-15 16:12:53 295

原创 基于Protobuf的简单RPC框架实现原理

​ 以前对protobuf的使用仅限于将其作为C/S之间的数据传输的序列化工具,而对于基于protobuf实现rpc框架的使用较少了解,这两天通过一个开源的简单RPC框架对这部分的实现原理进行学习,并做相关记录,如存在理解有误之处,欢迎指正。​ 开源简单RPC框架:https://github.com/goyas/goya-rpc​ 使用Protobuf实现RPC框架大致可以分为以下几步:1、编写proto文件定义服务,并使用Protoc工具生成RPC对象接口模型。2、编写RPC服务处理主逻辑(继

2020-05-11 11:11:43 4073 1

原创 protobuf基本用法详解

文章目录1、包名package2、option3、消息类型3.1 message3.2 字段规则3.3 标识号3.4 数据类型3.4.1 基本数据类型3.4.2 枚举类型3.4.3 map数据类型3.4.4 message类型3.4.5 嵌套消息类型4、import导入其他proto文件4.1 import4.2 import public5、更新Message消息类型原则6、protobuf扩展...

2020-05-08 00:59:48 16402

原创 Linux设置命令行提示符格式

命令行提示符的环境变量是PS1,所以我们只需要对命令行提示符进行设置,即可按照我们想要的格式进行设置。这里分享一下我的设置:export PS1="\[\e[32;1m\][\[\e[33;1m\]\u\[\e[31;1m\]@\[\e[33;1m\]`/sbin/ifconfig eth1 | sed -nr 's/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/...

2020-05-03 15:52:31 652

原创 http协议详解

​ http协议是一种超文本传输协议,用于客户端和服务器的一种请求应答标准。设计http协议的最初目的是为了提供一种发布和接收html页面的方法,通过http或者https协议请求的数据使用url来标识。1、http协议特点(1)基于请求/响应模型的客户端服务器模型。(2)简单快速:客户端请求服务端只需要指定请求方法+请求路径,由于http协议简单,使得http服务器程序规模较小,因而传输...

2020-03-24 00:15:41 508

原创 Golang 协程优雅退出

关于golang中消费协程优雅退出的写法,写了一个简单的小例子进行记录一下。使用场景:1、生成协程生产数据到管道中2、消费协程在管道中取数据进行处理通过捕捉特定信号对程序进行相关处理,当某个信号进行触发的时候,主协程将向各个协程发送退出指令,当数据管道处理完成时,若接收到退出指令 将结束协程的执行package mainimport ( "fmt" "git.code.oa.co...

2020-02-23 11:39:31 1593

原创 优雅实现golang默认参数

​ 原生的golang中,函数定义不支持默认参数。但是在实际开发过程中,经常会有些参数用户可以不关心或者可以根据实际情况去定制实现,这个时候需要使用到默认参数,在C++中,函数的定义和实现本来就支持默认参数,如果需要在golang中实现默认参数,可以参考一下做法:package mainimport "fmt"// 可以由用户自定义的参数集合type Option struct { ...

2020-01-11 11:47:19 11640

原创 golang值类型与引用类型的区别

1、golang值类型与引用类型的区别1.1 本质存储区别值类型与引用类型的区别主要在于:值类型的变量: 存储当前类型的存储的数据。值类型包括数值类型、bool、string、数组、struct结构体引用类型的变量:存储地址,该地址对应的空间才是真正存储的数据。引用类型包括:指针、slice切片、管道chan、map、以及interface等类型。注意:golang中的引用类型和值...

2020-01-10 20:51:44 2411

原创 zookeeper权限控制详解

文章目录1、预备知识1.1 权限列表1.2 ACL权限特点1.3 权限相关命令2、添加认证用户:addauth3、 设置znode节点操作权限命令:SetAcl4、 设置节点权限命令中节点权限详解4.1 world ACL授权策略4.2 ip ACL授权策略4.3 auth ACL授权策略4.4 digest Acl授权策略4.5 auth与digest权限控制区别本文zookeeper权限控制...

2019-12-28 21:52:08 4258 2

原创 zookeeper客户端shell命令详解

​ 本文将介绍zookeeper的客户端命令,并对命令进行归类,方便以后查阅。由于权限控制和配置相关涉及内容较多,这两块独立出来,可通过文章内的链接查看。1.1 网络相关命令网络相关主要包括以下三个命令:connect host:port:连接指定host:port zk服务,连接过程中状态为CONNECTING,连接成功后状态转变为CONNECTEDclose :关闭当前连接,即关闭当...

2019-12-28 21:47:34 900 2

原创 zookeeper3.5.6配置教程

文章目录1、Java JDK环境配置1.1 jdk包下载1.2 解压jdk包并将文件夹移动到指定位置1.3 添加系统环境变量1.4 检查是否配置成功2、集群版zookeeper 配置2.1 zookeeper安装包下载2.2 解压安装包并创建软连接2.3 设置myid2.4 zookeeper配置zoo.cfg修改----静态配置2.5 zookeeper动态配置文件2.6 /bin/zkEnv....

2019-12-25 10:57:14 2156

原创 Zookeeper数据存储模型

Zookeeper数据存储模型​ 上一节介绍了zookeeper线网环境安装教程,本章将继续介绍zookeeper中的数据存储模型。1、数据存储结构​ zookeeper的数据模型采用类似文件系统的目录结构进行存储,目录树中的每个节点被称为Znode,Znode既可以存储数据,也可以拥有自己的子节点。​ zookeeper中节点必须通过绝对路径进行访问,以斜杠/开头,其中路径和节点是...

2019-12-18 10:04:58 2655

原创 zookeeper3.4.14配置教程

zookeeper3.5.6配置教程​ zookeeper是一种分布式协调服务组件,它是Google chubby的一种开源实现。在日常工作中,zookeeper应用广泛,它不仅可以作为分布式协调服务使用,还常被用作配置维护、主从选举、集群管理、分布式锁等场景。​ 由于工作中常用到zookeeper,为了之后服务搭建的方便,此处记录整个服务搭建的配置过程,以便之后查阅并快速配置。zooke...

2019-12-15 16:12:03 992

原创 IaaS、PaaS、SaaS服务模式理解

IaaS、PaaS、SaaS服务模式理解    SaaS、PaaS、IaaS简单的说都属于云计算服务,也就是云计算+服务。    云计算就是一种按照需求通过Internet获取计算资源的形态。这些计算资源被包装成为服务,提供给用户。而提供这些服务的主体,我们称之为云服务供应商(Cloud Service Provi...

2019-12-12 20:47:12 372

原创 条款1:视C++为一个语言联邦

条款1:视C++为一个语言联邦​   最开始C++只是在C上添加了一些面向对象的特性。从C++最初的名称C with Classes也反映了这个血缘关系。​   随着C++的发展和成熟,其体系越来越庞大,开始接受不同于面向对象的各种观念、特性以及编程战略。exception对函数结构化带来不同的做法,templates将我们带到新的设计思考方式,STL定义了一个前所未见的伸展性做法。今天的C+...

2019-10-09 22:43:13 593

原创 redis源码阅读之数据结构sds

redis源码阅读之数据结构sds本系列文章为结合阅读redis5.0源码以及网上查阅相关资料整理,如有错误,欢迎交流指正(QQ:2824759538)​ sds是simple dynamic string的缩写,从命名上我们可以对它进行一个初步的认识,它是一个动态可扩展的字符串类型。在redis内部实现中,sds取代了C默认的字符串类型char*,在redis中,除了只会作为字符串字面常...

2019-09-24 09:51:44 303

原创 Redis源码学习计划

Redis源码学习计划​ 年初给自己设定了redis学习计划,但是由于忙于工作,在研究完redis搭建的相关配置之后,将这个计划搁置了一段时间,现在开始重新捡起来,给自己制定明确计划,按照下面的步骤对redis源码通读并做详细的分析,并将分析过程记录于博客。​ 第一部分从基本的数据结构开始研究,后面持续更新…Redis搭建相关配置说明Redis4.0.11配置说明Redis源码阅...

2019-09-22 12:22:00 266

原创 __attribute__((format(printf, 2, 3)))用法详解

_attribute_((format(printf, 2, 3)))用法详解在阅读redis源码的时候,遇到_attribute_((format(printf, 2, 3)))用法,在此记录下该用法的作用以及需要注意的点。1. 用法及作用​ 在C语言编程过程中,我们常常会实现一些可变参数的函数调用(类scanf、printf函数),变参函数在我们编程过程中带来了很大的方便,但是也有一些问...

2019-09-21 14:36:15 6393 1

原创 C语言柔性数组

C语言柔性数组​ 在阅读redis源码的时候遇到C语言的柔性数组的用法,之前有接触过但是没有深入了解,今天在网上查阅相关资料和写一些小的示例记录下C语言柔性数组的用法和特性。Redis在sds类型定义中提到了下列的用法,其中每个结构体的最后一个成员**char buf[]**即为柔性字数组的用法。下面这种使用方法,通过使用柔性数组,达到了sds类型的包头(header)与实际数据连续存储的目的...

2019-09-15 17:30:55 192

原创 通过/proc/stat计算linux系统即时CPU使用率

博客搬家,原地址:https://langzi989.github.io/2016/12/19/通过-proc-stat计算linux系统即时CPU使用率//proc/stat/proc文件系统是一个伪文件系统,它存在于内存中,不占用外存空间。它以文件系统的方式为内核与进程提供通信接口。用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程是动态改变的...

2019-04-24 19:43:38 832

原创 通过/proc/meminfo实时获取系统内存使用情况(Linux)

博客搬家,原地址:https://langzi989.github.io/2016/12/19/通过-proc-meminfo实时获取系统内存使用情况/linux内核提供了一种通过/proc文件系统来在运行时访问内核内部数据结构,改变内核设置的机制,各种硬件平台上的linux系统的/proc文件系统的基本概念都是相同的。/proc文件系统是一种内核和内核模块用来向进程发送信息的机制。这个伪文件...

2019-04-24 19:42:57 5724

转载 迭代器和简单的生成器

摘自: https://www.ibm.com/developerworks/cn/linux/sdk/python/charm-20/python2.2引进了一种带有新型关键字的新型构造。这个构造是生成器;关键字是yield.生成器使几个新型,强大和富有表现力的编程习惯成为可能,但初看,要理解生成器,还是有一点难度。本文由浅入深的介绍了生成器,同时还介绍了迭代器的相关问题。由于迭代器比较...

2019-04-24 19:41:55 134

原创 汇编基础之寄存器及汇编指令

博客搬家,原地址:https://langzi989.github.io/2017/10/06/汇编基础之寄存器与简单指令分析/参考链接:http://www.cnblogs.com/technology/archive/2010/05/16/1736782.htmlhttp://anonymalias.github.io/2017/01/09/ucontext-theory/最近在学...

2019-04-24 19:41:04 2485

原创 条款27:尽量少做转型动作(Effective C++)

博客搬家,原地址:https://langzi989.github.io/2016/12/21/条款27-尽量少做转型动作/C++规则设计的目标之一是,保证类型错误决不可能发生。理论上如果你的程序很干净的通过编译,就表示它并不企图在任何对象身上执行任何不安全,无意义,愚蠢荒谬的操作。这是一个及其具有价值的保证,不要轻易放弃它。但是在很多种情况下,我们不得不进行转型操作,转型操作破坏了类型系统。...

2019-04-19 21:22:33 258

原创 工厂类模式家族之简单工厂模式

博客搬家,原地址:https://langzi989.github.io/2017/01/09/工厂类模式家族之简单工厂模式/在面向对象编程的领域,设计模式给我们提供了适合特定场景的软件设计思想,不过大多设计模式都可以通过一般的设计进行替代,但我们为什么还有费工夫去遵循设计模式呢?这就要说到设计模式的精髓了,我们通过对软件系统进行良好的设计,不但可以提高代码的可重用性,增强系统的可扩展性,给客户...

2019-04-07 12:15:41 213

原创 创建型设计模式之build模式

博客搬家,原地址:https://langzi989.github.io/2017/01/08/创建型设计模式之build模式/最近在读《设计模式-可复用面向对象软件设计的基础》一书,在阅读的过程中我会结合书中的相关知识和实例以及在网络上的博客对相关的模式的理解进行总结,并在此基础上加入自己的一些理解,总结模式中需要注意的一些点,记录在此博客,以供大家交流分享,同时防止自己对内容遗忘,如有不正确...

2019-04-07 12:14:44 387

原创 分布式系统中的数据一致性问题

博客搬家,原地址:https://langzi989.github.io/2018/11/20/分布式系统数据一致性/数据一致性数据库系统中的数据一致性数据一致性问题最初是存在于数据库系统中的一个概念,数据库系统中一致性问题通常指的是关联数据之间的逻辑是否完整和正确,通常数据库系统会通过使用事务来保证数据的一致性和完整性。事务本质上就是一个操作序列的有限集合,若事务中有的操作没有成功完成,则...

2019-04-07 12:13:29 717

中缀表达式求值实验报告及源码

设计思路:为了设计一个完整运算器,可以采用将中缀表达式转化为后缀表达式进行求解。具体思路: 第一步:先初始化两个栈,分别盛放操作数和操作符; 第二步:将输入的字符串去掉空格,从字符串开头开始遍历; 第三步:若遇到的字符位数字,利用标记判断其是否为小数位及小数位的第几位,存在temp变量中,若不为

2014-12-05

空空如也

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

TA关注的人

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