自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 桥接模式

文章目录#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>enum Dumpling{Meat,Normal};typedef struct _MeatDumpling{ void (*make)();}MeatDumpli...

2020-03-30 19:03:44 340

原创 装饰模式

文章目录1、场景举例2、主要应用场景3、类图4、用C实现装饰模式角色定义案例描述案例实现5、用C++实现装饰模式角色定义案例描述案例实现6、注意事项7、实现要点8、与桥接模式的区别1、场景举例生产汽车2、主要应用场景1、想要不影响对象的前提下,以动态的、透明的方式给对象添加职责2、某些职责相做成动态的,可以撤销的3、当扩展类较多时,不想类爆炸(如果一味使用继承方式,当扩展类很多,会出现...

2020-03-29 21:10:32 333

原创 代理模式

文章目录#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct PC_CLIENT{ void (*request)();}Pc_Client;typedef struct PROXY{ Pc_Client *pc_client;}Proxy;...

2020-03-27 22:08:03 321

原创 适配器模式

文章目录#include <stdio.h>#include <stdlib.h>typedef struct ADAPTEE{ void (*request)(void);}Adaptee;typedef struct ADAPTER{ struct ADAPTEE *adaptee; void (*request)(struct A...

2020-03-23 21:59:10 216

原创 外观模式\门面模式

文章目录1、场景举例2、主要应用场景3、类图4、用C语言实现外观模式角色定义案例描述案例实现5、使用C++实现门面模式角色定义案例描述案例实现6、优点7、总结1、场景举例vs编译器,仅看到了build,但是实际上完成了编译链接等复杂操作2、主要应用场景想要为一个复杂子系统提供一个简单接口3、类图4、用C语言实现外观模式角色定义实现一个组合步骤的门面函数案例描述使用门面模式,...

2020-03-22 16:06:50 193

原创 单例模式

文章目录1、场景举例2、主要应用场景3、类图4、用C语言实现原型模式角色定义案例描述案例实现5、使用C++实现单例模式角色定义案例描述函数实现6、缺点1、场景举例日志系统2、主要应用场景1、解决重复操作引起的大量new delete问题2、代替全局变量3、类图4、用C语言实现原型模式角色定义1、实现一个返回静态地址的内存申请函数案例描述使用单例模式实现申请具体结构内存,下...

2020-03-22 13:56:44 232

原创 原型模式

文章目录1、场景举例2、主要应用场景3、类图4、用C语言实现原型模式角色定义案例描述案例实现5、用C++实现原型模式角色定义案例描述案例实现6、缺点7、各个创建模式比较1、场景举例很多时候,在程序运行过程共,我们需要动态的复制一份已经被赋值的对象,这个时候原型模式就可以发挥作用了2、主要应用场景1、需要在运行过程中,动态的拷贝一份对象2、需要某个对象在某个状态下的副本3、处理一些简单...

2020-03-13 22:19:50 177

原创 建造者模式

文章目录1、场景举例2、主要应用场景3、类图4、用C语言实现创建者模式角色定义案例描述案例实现5、用C++实现简单工厂模式角色定义案例描述案例实现6、缺点1、场景举例之间提到的那个买鞋店,使用简单工厂模式、工厂方法模式、抽象工厂模式可以很完美的解决问题。但是如果细心的话,可以发现,工厂类模式比较适合那些存在相关性的场景。对象的元素之间往往存在一定的联系,最后生成单一对象。但是如果此时把买鞋店...

2020-03-13 09:41:34 160

原创 抽象工厂模式

文章目录可以解决那类问题主要应用场景用C语言实现抽象工厂模式实现步骤案例描述案例实现使用C++实现抽象工厂模式可以解决那类问题针对大部分对象生产场景,使用工厂方法模式即可以搞定。但是:1、如果解决某个问题需要用到的工厂种类非常多,那么程序逻辑里就需要维护很多的工厂,增加程序熵值,后期维护难度会很高。2、很多时候多个对象之间是存在依赖关系的,这样的两个对象如果用两个工厂去维护,会增加很多不必...

2020-03-01 00:24:39 168

原创 工厂方法模式

文章目录1、可以解决那类问题2、主要应用场景3、用C语言实现工厂方法模式实现步骤1、可以解决那类问题之前提到过了简单工厂模式,它一方面将对象的创建和使用完全分离,但同时自身存在三个比较大的问题:1、针对于产品本身的扩展性很差:如果我给产品新增某个元素,那么所有的产线代码都需要做出调整。扩展性很差2、如果新增一个同类型产品,那么需要改动工厂代码,之前针对工厂代码的测试全部要重新进行。扩展性很...

2020-02-29 09:25:26 217

原创 简单工厂模式

文章目录可以解决那类问题主要应用场景用C语言实现简单工厂模式实现步骤案例描述案例实现用C++实现简单工厂模式类图实现步骤案例描述案例实现可以解决那类问题就比如ceph中以osd作为一个对象,如果每次用到这个对象的时候都去临时创建一个,创建必然伴随着malloc|new等操作,然后又得是一段异常处理函数,这样下来整个代码都会显得异常臃肿。其实来说,使用对象的一方其实根本不在乎对象是如何创建的,如...

2020-02-16 15:58:49 323

原创 编程--编码设计模式总结

文章目录前言为什么编码时一定要考虑编码模式编码模式分类前言关于编码设计模式,之前从各方渠道搜集了很多很容,今天在这里做一个统一整理归纳。用自己的语言描述目前对于编码模式的理解。每一门知识要真正深究起来,都会有一定深度,要真正理解编码模式,不光要对其理论有整体掌握,还要经过大量的输出才能将知识内化,目前对这部分的理解并没有到达精通水平,本次是对已有知识的进一步深入整理,当遇到一些场景时,能够立刻...

2020-02-13 18:43:23 758

原创 常用排序算法

冒泡排序void bubbleSort(int* arr, int n) { int m = 0; int i = 0; int j = 0; for (i = 0;i < n - 1;i++) { for (j = 0;j < n - 1 - i;j++) { if (arr[j] > arr[j + 1]) { m ...

2020-02-09 19:05:10 156

原创 C语言思维导图

2020-01-27 17:17:06 503

原创 linuxC多进程通讯---无名管道dup

文章目录举例1举例2举例3举例1#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>int main1 (void){ int fd, new_fd; fd = open ("writ...

2020-01-27 10:35:01 319

原创 linux多进程通讯---通过共享磁盘文件

文章目录1、举例1、举例#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <ctype.h>i...

2020-01-27 10:34:47 378

转载 系统卡写入量过大之---LSM-tree 基本原理及应用

LSM-tree 在 NoSQL 系统里非常常见,基本已经成为必选方案了。今天介绍一下 LSM-tree 的主要思想,再举一个 LevelDB 的例子。LSM-tree起源于 1996 年的一篇论文《The Log-Structured Merge-Tree (LSM-Tree)》,这篇论文 32 页,我一直没读,对 LSM 的学习基本都来自顶会论文的背景知识以及开源系统文档。今天的内容和图片...

2020-01-27 10:34:38 865

原创 C多线程编程---pthread_create pthread_join pthred_exit

文章目录1、三个基本API2、举例1、三个基本APIextern int pthread_create __P ((pthread_t *__thread, __const pthread_attr_t *__attr, void *(*__start_routine) (void *), void *__arg)); 第一个参数为指向线程标识符的指针,后续可以使用该线程标示符来处理线程第...

2020-01-27 10:34:28 426

原创 linux磁盘常用操作

1、查看磁盘信息,可查看槽位lsscsi2、修改磁盘配置文件echo 32 > /proc/sys/vm/dirty_ratioecho 15 > /proc/sys/vm/dirty_background_ratioecho 4096 > /sys/block/${iscsi开出来的盘符}/queue/max_sectors_kb 一次请求中block 层最大支持多...

2020-01-27 10:34:23 1049

原创 CSDN blog保存为pdf小技巧

1、下载Google Chrome浏览器,在右上角点开设置一栏,找到更多工具—开发者工具2、在Console中黏贴下面一段代码,然后按回车键即可,当前页面的pdf会自动加载出来。(function(){$("#side").remove();$("#comment_title, #comment_list, #comment_bar, #comment_form, .announce, #...

2020-01-27 10:34:01 556

原创 C多线程编程---条件变量

文章目录1、原理2、头文件3、 函数库3.1、初始化3.2、pthread_cond_signal3.3、pthread_cond_broadcast3.4、pthread_cond_wait3.5、pthread_cond_timedwait3.6、pthread_cond_destroy3.7、操作步骤:3.8、举例1、原理假设我们需要解决这样一个问题:一个列表记录需要处理的任务。一个线程...

2020-01-27 10:33:16 1707 2

原创 容量单位换算

1KB (Kilobyte 千字节)=1024B,  1MB (Megabyte 兆字节 简称“兆”)=1024KB,  1GB (Gigabyte 吉字节 又称“千兆”)=1024MB,  1TB (Trillionbyte 万亿字节 太字节)=1024GB,  1PB (Petabyte 千万亿字节 拍字节)=1024TB,  1EB (Exabyte 百亿亿字节 艾字节)=1024...

2020-01-27 10:33:01 3794

原创 rocksdb配置参数

配置参数:参数含义附加说明[DBOptions]new_table_reader_for_compaction_inputs=falserecycle_log_file_num=0avoid_flush_during_shutdown=falseskip_stats_update_on_db_open=falseuse_dir...

2020-01-27 10:32:58 4139

原创 有限状态机

一、基本概念英语:Finite-state machine简称FSM,又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型二、概念术语:状态:存储过去的信息,就是说:它反映从系统开始到现在时刻的输入变化转移:指示状态变更,并且用“满足确使转移发生的条件”来描述它动作:在给定时刻要进行的活动的描述a、进入动作:在进入状态时进行b、退出动作:在退...

2020-01-27 10:32:54 564

原创 linuxC多进程通讯---pipe同步

文章目录例子解析例子#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#define handle_error(msg) \ {perror(msg);exit(EXIT_FAILURE);}int main (void...

2020-01-27 10:32:00 467

原创 linuxC多进程通讯systemv---共享内存

文章目录相关APIshmgetshmatshmdtshmctl共享内存通讯限制举例写共享内存读共享内存相关API•获取共享内存对象的ID: int shmget(key_t key, size_t size, int shmflg);•映射共享内存: void *shmat(int shmid, const void *shmaddr, int shmflg);•解除内存映射: int s...

2020-01-27 10:30:37 283

原创 linuxC多进程通讯systemv---信号量

文章目录信号量概念通信原理相关APIsemget含义函数原型头文件函数参数函数返回值semctl含义函数原型头文件函数参数函数返回值semop含义函数原型头文件函数参数函数返回值sembuf结构体使用流程举例应用:对共享内存的同步访问writeread信号量概念•英文:semaphore,简称SEM,主要用来进程间同步•本质:内核维护的一个正整数,可对其进行各种操作+/-操作•分类:sys...

2020-01-27 10:30:11 357

原创 linuxC多进程通讯---POSIX消息队列

文章目录posix与system v对比POSIX 编程注意事项相关API创建或打开 IPC 对象•函数原型:•函数功能:•函数参数:•函数返回值关闭POSIX 消息队列•函数原型:•函数功能:•TIPS:•删除一个POSIX 消息队列•函数原型:•函数功能:•向 POSIX 消息队列写入消息•函数原型:•函数功能:•函数参数:•从 POSIX 消息队列读取消息•函数功能:•函数参数:•函数返回值...

2020-01-27 10:29:57 421

原创 linuxC多进程通讯---信号量+共享内存示例

文章目录生产消费者模型例程cousumerproducerSystem V 信号量的通信特点生产消费者模型•2个生产者,每1S、5S往缓冲区写一次数据•3个消费者,每2S、2S、5S往缓冲区读一次数据•2个写进程分别对写信号量做P操作、对读信号量做V操作•3个读进程分别对写信号量做V操作、对读信号量做P操作例程cousumer#include <stdio.h>#i...

2020-01-27 10:29:56 1014

原创 linuxC多进程通讯---POSIX消息队列之异步通知

文章目录异步通知API介绍•函数原型:•函数功能:•函数参数:关键结构体:sigevent举例异步信号处理端消息发送端异步通知API介绍•函数原型:int mq_notify(mqd_t mqdes, const struct sigevent * sevp);•函数功能:–当空的消息队列到来消息时给进程发送一个通知–当执行完相关处理,通知机制结束,可以重新调用mq_notify注册...

2020-01-27 10:28:45 575

原创 linuxC多进程通讯---POSIX消息队列之内核实现

文章目录POSIX消息队列内核实现•system V消息队列内核实现•内核中的消息队列描述符•查看设置消息队列的属性•POSIX消息队列在Linux上实现的特性•区别和联系POSIX 消息队列的优势举例POSIX消息队列内核实现•相关数据结构:/usr/include/linux/mqueue.h、/ipc/mqueue.c•消息队列是消息的链表,存储在内核中,由消息队列标识符标识。•标识...

2020-01-27 10:28:42 614

原创 linuxC多进程通讯----POSIX信号量

文章目录相关API使用说明基本创建、加减、关闭示例两个进程通过信号量通讯示例postwait父子进程通过信号量同步相关API•sem_t *sem_open (const char *name, int oflag);•sem_t *sem_open (const char *name, int oflag,mode_t mode, unsigned int value);•int sem...

2020-01-27 10:28:35 266 1

原创 linuxC多进程通讯---POSIX共享内存

文章目录相关的API函数ftruncatemunmap简单的共享内存读写示例readwrite信号量和共享内存 使用示例writeread相关的API函数•int shm_open (const char *name, int oflag, mode_t mode);•int shm_unlink (const char *name);•int ftruncate (int fd, off...

2020-01-27 10:28:29 328

原创 linuxC多进程通讯---文件锁

文章目录•什么是文件锁•系统调用:flock•系统调用:fcntl•系统调用:lockf示例flock示例fcntl示例lockf•什么是文件锁•英文名:file lock,在同一时刻只允许一个进程对文件进行访问•建议性锁:advisory locking,又称协同锁–内核只提供加减锁以及检测是否加锁,不提供锁的控制与协调工作–需要多进程相互检测确认的加锁机制–A进程对一个操作的文件加...

2020-01-27 10:28:23 499

原创 linux多进程通讯---signal 信号机制

文章目录基本概念信号的来源进程对信号的处理方式信号相关API系统调用signal系统调用:kill系统调用:pause系统调用:alarm系统调用:setitimer函数示例pausesetitimersignalalarmkill基本概念•又叫:软中断信号,是一种异步通信的IPC•类似于硬件中断,可以将一个事件以信号形式通知给进程•给一个指定进程发送一个信号–信号只是告诉进程发生了什么...

2020-01-27 10:28:18 519

原创 linux多进程通讯---信号底层API sigaction sigqueue

文章目录sigaction 函数原型sigaction 函数功能sigqueue 函数原型sigqueue 函数功能一些经验示例signalsigaction 和 sigqueue CP交互sigactionsigqueuesigaction 函数原型int sigaction(int signum, const struct sigaction *act,struct sigaction *...

2020-01-27 10:27:20 349

原创 linux多进程通讯---信号新增API signalfd

文章目录优缺点使用说明函数说明举例优缺点•在软件层次上是对中断机制的一种模拟•信号是进程间通信中唯一的“异步通信机制”•带来的弊端:数据的并发访问、可重入问题•解决方案:将信号抽象为文件,将信号转化为I/O文件操作使用说明•将信号抽象为一个文件描述符•将信号的异步处理转换为文件的I/O操作•当有信号发生时,可以对其read•每次read都会阻塞、直到signalfd指定的信号到...

2020-01-27 10:27:07 340

原创 linux多进程通讯---信号新增API timerfd

文章目录定时器说明举例定时器说明•函数功能:通过文件I/O方式去获取定时器的通知事件•相关API:–int timerfd_create(int clockid, int flags);–int timerfd_settime(int fd, int flags, const struct itimerspec *new_value,struct itimerspec *old_val...

2020-01-27 10:27:01 221

原创 linux多进程通讯---信号新增API eventfd

文章目录API说明举例API说明•eventfd API•int eventfd(unsigned int initval, int flags);–用来创建一个用于事件通知的eventfd对象–返回值为一个int型fd,用来引用打开的对象–打开的对象在内核中是一个64位的无符号整型计数器,初始化为initval–计数器数据类型:typedef uint64_t eventfd_t...

2020-01-27 10:26:58 313

原创 C多线程编程---互斥锁mutex

文章目录1、多线程的问题引入2、互斥锁1、初始化一个互斥锁:2、加锁:3、解锁:4、注销互斥锁:5、pthread_mutex_lock()和pthread_mutex_trylock()区别6、解锁要满足的条件:1、多线程的问题引入多线程的最大的特点是资源的共享,但是,当多个线程同时去操作(同时去改变)一个临界资源时,会破坏临界资源。如利用多线程同时写一个文件:#include <s...

2020-01-27 10:26:00 828

空空如也

空空如也

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

TA关注的人

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