自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RabbitMQ 内存管理

RabbitMQ 内存管理1. 存储机制持久化的消息在到达队列时就被写入磁盘,并且如果可以,持久化的消息也会在内存中保存一份备份,从而提高一定性能,当内存吃紧时再从内存换入磁盘。非持久化的消息一般只保存在内存中,当内存吃紧的时候会被换入磁盘持久层:​ 逻辑上的概念,世纪包含两个部分:队列索引(rabbit_queue_index)负责维护队列中落盘消息的信息,包括消息的存储地点,是否已经被交付给消费者,是否已经被消费者ack等等。每个队列都有一个与之对应的rabbit_qu

2020-12-23 16:12:14 671

原创 RabbitMQ 经典镜像队列

RabbitMQ 经典镜像队列1. What’s Queue Mirroring镜像队列机制可以将队列镜像到集群中的其他Broker节点之上。一般来说,RabbitMQ中一个队列的内容保存在其声明的节点中。交换器和绑定起保存在所有的节点中。一个镜像队列由一个主队列和许多镜像队列组成,主队列通常所在的节点通常被认作主节点。每个队列都有自己的主节点。对一个镜像队列的操作会首先作用在其主节点,后传播到其镜像上。镜像队列只能用于集群的节点之间,不推荐在广域网上使用。消息会先发送到主队

2020-12-23 14:24:58 413

原创 C++ Singleton的实现方法

C++ Singleton的实现方法一、Singleton的实现方法二、定义只能在栈\堆上存在的对象一、Singleton的实现方法Singleton模式的要求:一个系统中有且只能有一个指定类的实例Singleton的一般实现步骤 :将构造函数私有化在类中指定一个静态的指向本类型 的指针变量定义一个返回值为类指针的静态成员函数代码实现class Singleton1{ private: Singleton1(){printf("constructor\n");} ~Single

2020-12-19 13:06:39 1445

原创 Docker 1.二进制安装以及基本概念

Docker 1.二进制安装以及基本概念0.Docker安装1. Docker的基本概念0.Docker安装依赖:64位操作系统Linux内核3.10以上iptables v1.4以上git v1.7以上XZ Utils v4.9以上(yum search xz之后安装所有相关文件)安装启动步骤下载解压二进制文件解压进入解压文件,将其中的二进制文件copy到/usr/binsudo dockerd & 启动docker服务普通用户下运行docker报权限

2020-12-19 13:04:02 264 1

原创 Linux定时器

Linux定时器1. 睡眠函数Linux下有两个睡眠函数,#include <unistd.h>unsigned int sleep(unsigned int seconds);int usleep(useconds_t usec);unsigned int alarm(unsigned int seconds);1.seconds秒后触发一个SIGALRM信号,具体操作需要在信号处理函数中完成2.seconds设置为0,则所有正在等待的alarm全部被取消3.alarm

2020-10-26 13:54:08 337

原创 Linux线程总结

Linux线程总结一、线程的基本概念1.线程概念2.线程和进程的关系二、线程的创建和退出、等待0.线程相关的基本数据类型1. 线程的创建2.线程的退出3.线程的等待三、线程的取消和资源清理1.线程的取消2.线程的资源清理四、线程同步1.互斥量 pthread_mutex_t2. 条件变量五、线程的属性和线程安全线程安全线程的属性一、线程的基本概念在Ubuntu中使用pthread库的手册,需要sudo apt install manpages-posix manpages-posix-dev1.线

2020-10-18 17:05:18 111

原创 死锁以及处理机制

死锁以及处理方法一、死锁的概念二、死锁的处理策略三、死锁的预防四、死锁的避免五、 死锁的检测和解除一、死锁的概念死锁的概念死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进行都将无法向前推进。二、死锁的处理策略三、死锁的预防四、死锁的避免五、 死锁的检测和解除...

2020-10-16 14:01:16 396

原创 设计模式之PIMPL

设计模式之pimplPIMPL模式 即pointer to implementation,是C++里一种将类的接口与具体实现细节进行分离的技术。实施方法:通过一个私有的成员指针,将指针所指向的类的内部实现数据进行隐蔽pimpll模式的优点:1.提高编译速度2.实现信息隐蔽3.减小编译依赖,可以用最小的代价平滑的升级库文件4.接口的实现进行耦合5.移动语义好代码:...

2020-09-25 17:58:31 846

原创 日志记录工具:log4cpp,使用流程

日志记录工具:log4cpp一、主要工具类二、使用流程三、使用单例模式进行简易封装四、改进方向一、主要工具类日志系统,就是将用户指定的信息,按照一定的格式,存储到一个指定的区域。根据面向对象的思想,可以抽象出一个执行日志记录的主体Category,该主体用于执行日志的开始,结束以及记录。而如何执行日志记录、这些功能也可以单独抽象出一个类,作为Category的一种属性。log4cpp的开发主要使用以下四个工具类Category类。 执行日志记录任务的主体,其构造函数是protect类型,

2020-09-21 23:12:53 407

原创 C语言Linux线程池代码

Linux线程池

2020-09-19 14:44:07 185

原创 Linux网络编程

Linuxw网络编程一、网络通信的基本概念1.OIS模型和TCP/IP模型二、SOCKET编程三、EPOLL 多路复用四、五种IO模型一、网络通信的基本概念1.OIS模型和TCP/IP模型二、SOCKET编程三、EPOLL 多路复用四、五种IO模型...

2020-08-30 14:20:01 211

原创 Linux进程间通信完整总结

Linux进程间通信的方法一、管道通信管道的特点1.标准流管道2.无名管道3.命名管道FIFO二、system V的三种方法1.共享内存1.使用ftok获取共享内存2.使用shmget获取共享内存3.使用mmap获取共享内存4.hugepage的设定方法2.信号量3.消息队列一、管道通信管道的特点1.管道是一个字节流2.管道是单向的3.管道的容量是有限的4.管道一次写入数量最大为PIPE_BUF。多进程同时写入时,如果超过了这个数量,可能会发生数据混合。5.当管道中不存在数据时,read操作

2020-08-25 22:03:52 581

原创 Linux进程知识点总结

Linux 进程0.基本概念功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入0.基本概念我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

2020-08-16 13:39:43 521

原创 Linux系统io基于文件描述符的操作

基于文件标识符进行的文件操作被设计为无缓冲的结构,没有流结构的读写指针,需要通过设置每次写入的大小来实现对文件的读写操作需要的头文件#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>基本操作单位1.文件描述符 int 类型 主要就是使用文件描述符进行各种操作//(2.文件状态 struct stat,(inod...

2020-08-13 22:28:58 333

原创 Linux系统IO目录文件操作

Linux目录文件 维护着一个链表的数据结构,目录文件的结构和单向链表的节点的类似,可利用链表的遍历方法来实现目录文件遍历.但是直接使用目录流对象不会得到一个链表的节点(因为是流对象),需要配合readdir指令来移动流的当前位置指针,并获得相应的链表节点(目录下的文件的信息)需要的头文件#include<dirent.h>#include<sys.types>//和流无关,目录相关操作用#include<unistd.h>目录的基本操..

2020-08-13 22:26:17 304

原创 简单使用makefile生成调试程序的步骤

第一步,预定义变量的声明CC:=gccRM:=rm -f第二步,定义目标和需要的依赖文件此处可以利用函数来检索当前目录下,所以符合模式规则的文件src := $( wildcard *.c)//文件名的检索替换有三种方式,//1,利用已有变量,通过模式串直接替换obj:= $(src:%.c=%.o)//2.通过字符串模式替换函数进行替换out:=$(patstrst %.c,%.out,$(src))第三步,设定目标及其依赖,以及目标实现的规则//多个目标生

2020-08-13 22:25:15 1429

原创 gdb的基本指令

使用gdb调试的前提条件1.必须在连接之前,即编译的阶段加入-g指令2.如果想要在运行出错后,排查出错原因,需要启用core功能->Linux命令行->ulimit -a 找到core Limit相关,->使用ulimit -c unlimited可直接设置存储容量无限制进入gdb调试模式的方法1.gdb [filename]2.gdb [filename] coregdb常用的调试参数//设定相关set args [args1] [..

2020-08-13 22:23:41 121

原创 gcc快速操作

从源代码生成可执行文件的步骤:main.c->预处理->main.i->编译->main.s->汇编->main.o->链接maingcc包括了全过程的指令基本指令-o 可以把处理过的文件以后面接的文件的形式保存下来实现预处理过程的指令为 gcc -E main.c -o main.i 此阶段将预处理指令展开加到源代码中实现编译的指令为 gcc -S main.i -o main.s 此阶段讲源代码翻译为汇编语言实现...

2020-08-13 22:22:42 464

原创 C语言的字符、字符数组和指针之间的关系

C语言的字符、字符数组和指针之间的关系变量的定义例题变量的定义char ch 表示定义一个字符类型变量char* ch 表示定义一个指向字符类型的指针变量,其值为内存地址。可用于创建动态数组.char ch[N] 表示定义一个存储N个字符类型的数组变量,其中ch[0]表示数组中的第一个元素,其值为char类型。ch则表示整个数组变量,它的值是整个数组在内存中的首地址 ,ch可以看成一个存储了N个char类型的数组的指针,此时ch并不表示char类型的指针,使用sizeof(ch)后得到整个字符数组的

2020-07-26 16:23:02 786

空空如也

空空如也

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

TA关注的人

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