自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

李白

此生是否有幸能在这个行业有所建树

  • 博客(315)
  • 资源 (1)
  • 收藏
  • 关注

原创 linux:硬链接和软链接

linux硬链接和软链接

2022-06-16 00:14:01 9325

原创 golang 对已经关闭的的chan进行读写,会怎么样?

golang 对已经关闭的的chan进行读写,会怎么样?

2022-06-15 23:26:10 1402

原创 c++11:std::forward,完美转发

目录1、不完美转发2、完美转发2.1、引用折叠2.2、std::forward1、不完美转发所谓完美转发,是指在函数模板中,完全按照模板的参数的类型,将参数传递给函数模板中调用的另一个函数。比如:template <typename T>void IamForwording(T t){ IrunCodeActually(t);}上面的例子中,IamForwarding是一个转发函数模板。而函数IrunCodeActually则是真正执行代码的目

2022-05-15 18:26:38 4891

原创 c++11:std::move,移动语义

功能 将一个左值强制转化为右值引用。需要注意的是,被转化的左值,其生命周期并没有随着左右值得转化而改变(例如,std::move转化后的左值变量lvalue不能被立即析构)/*================================================================* Copyright (C) 2022 baichao All rights reserved.** 文件名称:moveable.cpp* 创 建 者:baichao*..

2022-05-14 21:08:55 379

原创 c++11:左值、右值与右值引用

左值和右值左值引用、常量左值引用与右值引用

2022-05-14 15:07:44 326

原创 c++:std::dec, std::hex, std::oct

2022-05-09 23:50:05 5716

原创 c++11:__func__,返回所在函数的名称

2022-05-09 23:31:40 338

原创 c++:fno-elide-constructors

-fno-elide-constructorsC++ 标准允许实现省略创建仅用于初始化相同类型的另一个对象的临时对象。指定此选项会禁用该优化,并强制 g++ 在所有情况下调用复制构造函数。

2022-05-09 23:02:43 1176

原创 c++:复制构造函数默认浅拷贝出现的悬挂指针的问题

未声明构造函数时,默认生成一个浅拷贝的构造函数

2022-05-09 01:22:29 228

原创 golang:不定参数

Go函数支持不定数目的形式参数,不定参数声明使用param ...type的语法格式不定参数有以下几个特点:①所有的不定参数类型必须是相同的。②不定参数必须是函数的最后一个参数。③不定参数在函数体内相当于一个切片,对切片的操作同样适合对不定参数的操作。④切片也可以作为参数传递给不定参数,切片名称后面要加上“...”。package mainimport "fmt"func Add(arr ...int) int { var count int arr1 := arr[1

2022-03-03 23:09:34 2007

原创 golang:rune

Go内置了两种字符类型:一种是byte的字节类型(byte是uint的别称,占用一个字节),常用来处理ascii字符;另一种是表示Unicode编码的字符rune。rune在Go内部是int32类型的别名,常用来处理unicode或utf-8字符。golang中string底层是通过byte数组实现的。中文字符在unicode下占2个字节,在utf-8编码下占3个字节。Go语言默认的编码就是utf-8类型的,如果需要特殊的编码转换,则使用unicode/utf8包。看一个例子package

2022-03-03 22:21:58 1520

原创 golang:实现私钥加密公钥解密

golang:实现私钥加密公钥解密

2022-02-11 22:58:34 3495 5

原创 私钥、公钥、对称加密、非对称加密、摘要、数字签名、证书

1、私钥和公钥私钥签名的数据需要公钥才能验签(场景:服务端加密,客户端解密)公钥签名的数据同样也需要私钥才能验签(场景:客户端加密,服务端解密)2、对称加密加密和解密都用相同的秘钥,加密速度快,但是对称加密存在一个问题:秘钥如何给对方?常见的对称加密算法有DES、3DES、AES等3、非对称加密非对称加密就是我们常说的私钥加密,公钥解密,反之亦然。4、数字签名用于验证数据来源,防止数据被篡改。常见的做法是对原始内容的摘要进行签名(也就是我们说的非对称加密过程)5、摘要

2021-12-27 00:57:49 3783

原创 Redis:二进制安全的string

#define HI_SDS_MAX_PREALLOC (1024*1024)hisds hi_sdsMakeRoomFor(hisds s, size_t addlen) { void *sh, *newsh; size_t avail = hi_sdsavail(s); size_t len, newlen; char type, oldtype = s[-1] & HI_SDS_TYPE_MASK; int hdrlen; /* Retu.

2021-12-13 00:15:31 1199

原创 设计模式的原则

1、开闭原则(Open Close Principle)开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。2、里氏代换原则(Liskov Substitution Principle)里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,.

2021-10-20 21:34:56 113

原创 Docker常用操作

1、docker创建的容器传到docker hub1.1、拉取centos7.0.2009版本镜像2、docker删除image

2021-06-19 18:39:34 138

原创 设计模式:观察者模式

定义定义对象间的⼀种⼀对多(变化)的依赖关系,以便当⼀个对象(Subject)的状态发⽣改变时,所有依赖于它的对象都得到通知并⾃动更新。 ——《 设计模式》 GoF背景⽓象站发布⽓象资料给数据中⼼,数据中⼼经过处理,将⽓象信息更新到两个不同的显示终端(A 和B);要点观察者模式使得我们可以独⽴地改变⽬标与观察者,从⽽使⼆者之间的关系松耦合; 观察者自己决定是否订阅通知,⽬标对象并不关注谁订阅了;观察者不要依赖通知顺序,⽬标对象也不知道通知顺序; 常使⽤在基于事件的ui框架中,也是MV

2021-05-29 18:04:50 150

原创 Golang:反射机制简述

目录1、反射简述1.1、反射的基本概念1.2、reflect 包1.3、反射的类型对象(reflect.Type)1.4、反射的类型(Type)与种类(Kind)1.4.1、 反射种类(Kind)的定义1.4.2、 从类型对象中获取类型名称和种类1.5、指针与指针指向的元素1.6、使用反射获取结构体的成员类型1.6.1、结构体字段类型1.6.2、获取成员反射信息1.7、结构化标签(Struct Tag)1.7.1、结构体标签的格式1.7.2、 从结构体

2021-05-23 18:16:01 887

原创 Golang: ,ok模式

使用场景:在一个表达式返回2个参数的时候使用,第一个参数是一个值或者nil,第二个参数是true/false或者一个错误error在一个需要赋值的if条件语句中,使用这种模式去检测第二个参数值会让代码显得优雅简洁。package mainimport ( "fmt" "reflect")func main() { // 声明一个空结构体 type cat struct { Name string // 带有结构体tag的字段

2021-05-23 17:41:35 1728

原创 Golang:go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘

golang的版本从1.6升级到1.16之后,go test就报错如下:go module介绍go module是go官方自带的go依赖管理库,在1.13版本正式推荐使用go module可以将某个项目(文件夹)下的所有依赖整理成一个 go.mod 文件,里面写入了依赖的版本等使用go module之后我们可不用将代码放置在src下了使用 go module 管理依赖后会在项目根目录下生成两个文件 go.mod 和 go.sum。go.mod 中会记录当前项目的所依赖,文件格式如

2021-05-22 16:42:05 45509 4

原创 一文详述Golang入门

1、HelloWorld初识环境安装好了之后我们先写一个HelloWorld。package mainimport "fmt"func main() { /* 这是我的第一个简单的程序 */ fmt.Println("Hello, World!")}让我们来看下以上程序的各个部分: 第一行代码package main定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序..

2021-05-17 18:06:44 458

原创 c:#define用法

/*================================================================* Copyright (C) 2021 baichao All rights reserved.* * 文件名称:define.c* 创 建 者:baichao* 创建日期:2021年04月19日* 描 述:*=========================================================...

2021-04-19 16:14:28 182

原创 linux下查看某个进程中的线程所占用资源的方法

1、top -Htop -H --直接查看系统中所有进程以及其中线程的运行情况top -H -p <pid> --查看特定进程下的线程运行情况2、ps -Tps -T -p <pid> --查看特定进程下的线程运行情况3、htophtop比较类似于windows资源管理器,是一个基于ncurses的交互进程查看器...

2021-04-12 13:29:54 10523

原创 定时器的实现

目录1、定时器概述2、定时器设计2.1、接⼝设计2.2、数据结构选择2.2.1、红⿊树2.2.2、最⼩堆2.2.3、跳表2.2.4、时间轮2.3、红黑树实现定时器2.4、最小堆实现定时器2.5、时间轮实现定时器2.5.1、单层级时间轮2.5.2、多层级时间轮1、定时器概述对于服务端来说,驱动服务端逻辑的事件主要有两个,⼀个是⽹络事件,另⼀个是时间事件;在不同框架中,这两种事件有不同的实现⽅式;第⼀种,⽹络事件和时间事件在⼀个线程当中配合使⽤

2021-04-11 23:38:26 872

原创 Redis:主从复制

目录1、主从复制的概念2、主从复制的机制2.1、全量同步2.2、 增量同步3、redis的主从同步变迁3.1、redis2.8之前3.2、2.8版本3.3、4.0版本1、主从复制的概念redis为了实现高可用(比如解决单点故障的问题),会把数据复制多个副本部署到其他节点上,通过复制,实现Redis的高可用性,实现对数据的冗余备份,保证数据和服务的可靠性。比如:如何配置的:配置⽂件: 在从服务器的配置⽂件中加⼊:slaveof 启动命令: redis-se

2021-04-11 17:14:12 472 1

原创 Redis:Info 命令

Redis Info 命令redis Info 命令基本语法如下:redis 127.0.0.1:6379> INFO [section] Redis Info 命令以一种易于理解和阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。通过给定可选的参数 section ,可以让命令只返回某一部分的信息: server : 一般 Redis 服务器信息,包含以下域: redis_version : Redis 服务器版本 redis_git_sha1 : Git

2021-04-11 14:57:40 205

原创 Redis:缓存穿透、缓存击穿、缓存雪崩的原因和解决方法

目录1、缓存穿透2、缓存击穿3、缓存雪崩1、缓存穿透缓存穿透是指访问缓存和数据库中都不存在的数据,造成数据库压力过大解决方法:①设置请求过滤机制,例如布隆过滤器②将均不存在的数据在缓存中设置为key-null形式,过期时间为500ms,即避免了频繁异常请求,也不会太过于影响正常使用(因为一开始不存在的数据后面有可能会存在)2、缓存击穿缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,.

2021-04-07 15:28:07 200

原创 linux下线程的同步:互斥锁、自旋锁、读写锁、原子操作(进程也可用原子操作)

1、多线程中的i++问题我们来看一个经典的多线程i++出现的问题/*================================================================* Copyright (C) 2021 baichao All rights reserved.* * 文件名称:iaddadd.cpp* 创 建 者:baichao* 创建日期:2021年04月01日* 描 述:*====================.

2021-04-05 22:31:22 782

原创 kafka基础架构

1)Producer:消息生产者,就是向kafkabroker发消息的客户端;2)Consumer:消息消费者。向kafka broker取消息的客户端;3)Consumer Group(CG):消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。4)Broker:一台kafka服务器就是一个broker。一个集群由多个broker组成...

2021-03-28 21:54:00 246 1

原创 Redis存储结构源码分析

1、redis的哈希表//dict.htypedef struct dictEntry { void *key; //键 union { void *val; 可以指向不同类型 redisobject uint64_t u64; //用于redis集群 哨兵模式 选举算法 int64_t s64; //记录过期时间 double d; } v; //值 struct dictEntry *

2021-03-28 14:21:19 1221 4

原创 Redis:缩容、扩容、渐进式rehash

目录1、缩容 扩容2、渐进式rehash1、缩容 扩容随着redis的操作的不断执行,哈希表保存的键值会逐渐地增多或者减少,为了让哈希表的负载因子(ratio)维持在一个合理的范围之内,当哈希表保存的键值对数量太多或者太少时,程序需要对哈希表的大小进行相应的扩展或者收缩。ratio= ht[0].used / ht[0].size比如,hash表的size为4,如果已经插入了4个k-v的话,则ratio为1。redis的默认负载因子为1,负载因子最大可以达到5(持久化的时候,需.

2021-03-28 12:33:43 3537

原创 Redis:性能测试 redis-benchmark

Redis 性能测试是通过同时执行多个命令实现的。语法redis 性能测试的基本命令如下:redis-benchmark [option] [option value]注意:该命令是在 redis 的目录下执行的,而不是 redis 客户端的内部指令。redis 性能测试工具可选参数如下所示:序号 选项 描述 默认值 1 -h 指定服务器主机名 127.0.0.1 2 -p 指定服务器端口 6379 3 -s

2021-03-18 01:08:55 560

原创 Redis:Stream消息队列命令用法实例

XADD使用 XADD 向队列添加消息,如果指定的队列不存在,则创建一个队列,XADD 语法格式:XADD key ID field value [field value ...]key:队列名称,如果不存在就创建 ID:消息 id,我们使用 * 表示由 redis 生成,可以自定义,但是要自己保证递增性。 field value: 记录。xdel和xlength就不多介绍了,下面来介绍一下xtrim。XTRIMxtrim通过驱逐较旧的条目(具有较低ID的条目)来...

2021-03-17 22:35:04 1234

原创 Redis:事务

Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。一个事务从开始到执行会经历以下三个阶段:开始事务(multi)。 命令入队。 执行事务(exec)。...

2021-03-16 19:51:33 81

原创 Redis消息通信模式: 发布订阅

Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:开启两个redis-cli,一个用来创建订阅,一个给创建好的订阅发送.

2021-03-16 18:46:09 248

原创 redis:HyperLogLog

Redis 在 2.8.9 版本添加了 HyperLogLog 结构。HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入

2021-03-16 18:15:07 159

原创 Redis:五种数据类型及常用操作

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。1、String(字符串)string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。string 类型是 Redis 最基本的数据类型,string 类

2021-03-16 16:42:40 225

原创 redis:源码安装、配置

1、源码安装获取源码并make:wget http://download.redis.io/releases/redis-6.2.0.tar.gztar xzf redis-6.2.0.tar.gzcd redis-6.2.0/make执行完make命令后,redis-6.0.8 的src目录下会出现编译后的 redis 服务程序 redis-server,还有用于测试的客户端程序 redis-cli:下面启动 redis 服务:cd src./redis-...

2021-03-16 08:21:36 304

原创 手写一个基于epoll实现的reactor模型

reactor服务器实现代码:/*================================================================* Copyright (C) 2021 baichao All rights reserved.* * 文件名称:reactor.cpp* 创 建 者:baichao* 创建日期:2021年03月07日* 描 述:*=======================================.

2021-03-11 00:26:46 566

原创 linux五种io模型:阻塞IO、非阻塞IO、多路复用IO、异步IO、信号驱动IO

1、阻塞IO(blocking IO)在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程如下:当用户调用了read这个系统调用,kernel就开始了IO的第一个阶段:准备数据。对于network io来说,很多时候数据在一开始还没有达到(比如,还没有收到一个完整的数据包),这个时候kernel就要等待足够的数据到来。而在用户进程这边,整个进程会被阻塞。当kernel一直等到数据准备好了,它就会将数据从kernel中拷贝到用户内存,然后kernel返回结果,用户

2021-02-23 22:44:14 658

linux内核代码-5.6

linux内核代码-5.6

2023-01-15

2.5G Ethernet LINUX driver r8125 for kernel up to 5.19

网卡驱动

2022-12-22

CPP-Summit 2019演讲讲义.zip

2019年c++开发大会资料 ppt整理

2020-11-27

空空如也

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

TA关注的人

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