自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 资源 (9)
  • 收藏
  • 关注

原创 字符串前面补零的简单写法

【代码】字符串前面补零的简单写法。

2023-06-27 16:25:29 182

原创 经典内存池的一种技术实现方案

经典内存池的一种技术实现方案/*** mempool.h***/template<int ObjectSize, int NumofObjects=20>class MemPool {private: const int MemBlockSize;//每个内存块的大小 const int ItemSize; //每个内存节点的大小 struct _FreeNode { _FreeNode* pNext; char data[obje

2022-03-17 17:19:15 529

原创 spdlog源码分析(1)

spdlog几个关键的类logger、sink、registrylogger和sink个类之间是组合关系且是一对多,logger可以有很多sink,如写文件sink,系统syslog的sink,传输的tcp的sink,标准输出stdout的sink等等。registry类和logger类也是组合关系且是一对多,registry类中用无序map存储logger名和logger的对应关系,根据logger名可以得到logger句柄。rigistry类的目的是对这些logger进行统一的管理。...

2022-02-14 17:33:53 859

原创 C++11/14/17/20特性

左值引用和右值引用左值引用只能指向左值,右值引用只能指向右值。可以取地址的是左值,不能取地址的是右值。左值引用指向右值通过加const修饰,右值引用指向左值需要用到std::move转换。...

2022-02-11 15:44:42 405

原创 C++11简单练习

#include <stdio.h>#include <string.h>#include <map>#include <vector>#include <array>#include <iostream>#include <memory>using namespace std;std::map<int, int> DataMap = {{1, 2}, {3, 4}};int main(i

2021-12-24 17:26:35 448

原创 C++链接C库头文件里面需使用extern “C“

C++链接C库,C代码的头文件中需要包含:#ifdef __cplusplusextern "C" {#endif代码断#ifdef __cplusplus}#endif

2021-09-16 10:05:29 170

原创 C++拷贝构造函数和赋值构造函数

typedef struct Test{ char a; int b; short c; double d; std::string str; Test() { a = 0; b = 0; c = 0; } Test(const Test& aoTest) { printf("test copy\n"); str = aoTest.str;

2021-09-01 17:18:04 238

原创 减少代码重复率的方法

1、使用设计模式。设计模式的可以提高代码的复用率,减少代码的重复度。2、使用类模板或者函数模板,所谓的泛型编程。

2021-06-15 14:09:57 4128

原创 How to reduce the number of bugs when coding ?

写设计文档能帮助自己理清设计思路,如果设计到修改原有代码,一定要关注到原有代码的逻辑闭合,否则造成的后果是加功能引入了BUG。作设计的时候要考虑到各种场景和约束。单元测试一定要做到位,程序员自己测试可以做到白盒测试去覆盖每一个分支。程序员有时候偷懒就可能遗留BUG,这个测试人员不一定能发现。...

2021-06-08 17:27:55 140 1

原创 双端链表的另类定义方式

通常在定义结构体的链表的时候一般这样定义typedef struct TDataNode{int data;TDataNode *pre;TDataNode *next;}TDataNode;还有一种方式在其它代码里面有看到:typedef struct TList{TList* pre;TList* next;}TList;typedef struct TDataNode{int data;TList list;}TDataNode;TList可以单独作为一个链表,这个

2021-06-03 16:37:56 77

原创 双缓冲区

通常对同一块数据读写需要加锁,如果写的情况多且比较耗时的话,那读的时候就比较慢。所有这时候可以考虑用双缓冲区用指针切换,虽然切换的时候也需要加读写锁,但是提升效率是明显的。...

2021-05-21 14:47:07 193

原创 归并排序

void merge(int array[], int left, int mid, int right, int temp[]){ int i = left; int j = mid + 1; int k = 0; while(i <= mid && j <= right) { if (array[i] <= array[j]) { temp[k++] = array[i++

2021-04-16 15:53:46 61

原创 插入排序(插入和希尔排序)

void insertSort(int array[], int len){ int key, j; for (int i = 1; i < len; i++) { key = array[i]; //要插入的元素 j = i-1;//已经有序末尾元素索引 while(j >=0 && key < array[j])//找到合适位置 { array[j] = array[

2021-04-16 11:51:17 54

原创 选择类排序(选择排序和堆排序)

void selectSort(int array[], int len){ for (int i = 0; i < len; i++) { int min = i; for (int j = i+1; j < len; j++) { if (array[j] < array[min]) { min = j; }

2021-04-15 17:45:02 105

原创 交换类排序(冒泡和快排)

//填坑和分治的思想,和基准值比较,比基准值大的放在它的右边,比基准值小的放在它的左边void quickSort(int array[], int low, int high){ if (low >= high)//递归的终止条件 { return; } int i = low; int j = high; key = array[i]; while (i < j) { while (i &l.

2021-04-15 14:13:10 57

原创 C++责任链模式例子

责任链模式,模拟请假的审批流程,主管批准小于等于3天的,经理批准小于七天的,总经理批准大于等于7天。chain.h#include <string>typedef struct LeaveReq{ std::string moName; int miNumOfDays;}LeaveReq;class CHandler{public: CHandler(std::string aoName): moName(aoName){} virtual ~C

2021-04-14 15:57:14 133

原创 C++命令模式例子

命令模式将调用操作的对象和知道如何实现该操作的对象解耦。command.h#include "receiver.h"class ICommand{public: ICommand(){} virtual ~ICommand(){} virtual void execute() = 0;};class COpenSwitchCommand : public ICommand{public: COpenSwitchCommand() {

2021-04-13 15:16:48 100

原创 C++中介者模式例子

中介者模式将多对多的交互简化为一对多的交互,引入一个中介者使其对象耦合松散,而且可以独立的改变它们之间的交互。mediator.h#include <vector>class CPerson;class CMediator{public: CMediator(){} virtual ~CMediator(){} void Register(CPerson* aoPerson); CPerson* FindPartner(CPerson* aoPerso

2021-04-13 10:46:08 133

原创 C++观察者模式例子

观察者模式定义了对象间一对多的依赖关系,一个目标可以有任意数目的与之相依赖的观察者,一旦观察目标的状态发生改变,所有的观察者都将得到通知。observer.h#include <string>#include <stdio.h>class CSubject;class CObserver{public: CObserver(){} virtual ~CObserver(){} virtual void Update(CSubject* apoSu

2021-04-12 15:52:11 170

原创 C++状态模式例子

class CContext;class CState{public: CState(){} virtual ~CState(){} virtual void Execute(CContext* apcContext) = 0; virtual std::string GetState() = 0;};class CStateB;class CStateA : public CState{public: CStateA(){} virtual

2021-04-09 17:06:23 141

原创 C++策略模式例子

#include <stdio.h>#include <string>class CDiscount{public: CDiscount(std::string aoDesc) { moDesc = aoDesc; } virtual ~CDiscount(){} virtual double Discount(double adPrice) = 0; std::string GetDesc() {

2021-04-09 14:15:01 303

原创 C++模板方法模式例子

模板方法模式在父类中确定整个流程中的顺序,并实现固定不变的步骤,而把不固定的步骤留给子类实现。甚至可以通过一个钩子方法,让子类来决定流程中某个方法的执行与否。#include <stdio.h>class CCourse{public: CCourse(){} virtual ~CCourse(){} void MakeCourse() { MakePPT(); MakeVideo(); if (IsNe

2021-04-08 17:00:52 53

原创 C++组合模式例子

组合模式是一个树状的结构。component.h#include <stdio.h>#include <list>#include <string>class CObject{public: CObject(){} virtual ~CObject(){} virtual void SetName(std::string aoName){} virtual std::string GetName(){

2021-04-08 10:59:49 181

原创 C++装饰器模式---例子

Notifier.h文件#include <stdio.h>#include <string>class CNotifier{public: CNotifier(){} ~CNotifier(){} virtual void SendMsg(std::string aoMsg) { printf("send msg to mail: %s\n", aoMsg.c_str()); }

2021-04-06 17:36:51 149

原创 C/C++日常编译错误汇总(更新)

1、64位机器上编译32位程序/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld: cannot find -lstdc++64位机器编译32位的目标程序需要gcc加上-m32,以上报错是由于64位机器上缺少libstdc++.so库,在/usr/lib目录下,安装这个库即可编译成功。...

2021-03-02 15:01:43 174

原创 程序开发过程中的惯用编程手法(持续更新)

C语言C++语言

2021-01-29 09:41:18 212 3

原创 ddd调试工具使用

安装下载源码安装:https://ftp.gnu.org/gnu/ddd/安装之前需要安装openmotif,openmotif-devel,ncurses-devel然后执行./configure && make && make install使用ddd是gdb的可视化工具,对于链表,树等复杂的数据结构可以直观的显示。执行程序:ddd ./program...

2021-01-19 17:49:24 713

原创 谈谈消息队列实现

实现思路:1、消息队列中用信号量1作队列的容量操作,进行PV操作。2、消息队列中用信号量2作队列的消息数量操作,进行PV操作。3、锁用于对用一块内存操作,消息队列可以考虑用单链表实现,首尾指针移动,进入队列尾指针移动,出队列首指针移动。4、消息队列类用模板实现通用...

2021-01-11 15:35:29 216

原创 谈一谈线程池

谈一谈线程池在说线程池之前要搞清楚2个问题:1、线程池是什么?线程池是创建若干个可以执行的线程并把它们管理起来,如果有任务需要执行就让某一个空闲的线程去执行任务,任务执行完成之后挂起线程等待唤醒。2、为什么需要线程池?线程的创建和销魂都是需要调用操作系统API为其分配资源,成本高和开销大,为了避免频繁的创建和销毁增加的开销就需要线程池。接下来说说怎么实现线程池,线程池这种属于通用结构,实现时应该和业务层面进行解耦,上层调用只需要关注的是线程池的大小和执行的动作函数。谈谈C++实现方式,可以定义一个

2021-01-11 15:22:56 77

原创 localtime和gmtime函数的区别

C库函数time_t time(time_t *seconds)返回自纪元(00:00:00 UTC,1970年1月1日)以来的时间,单位为秒。如果second不是NULL,则返回值也存储在变量second中。time_t time(time_t *t)C库函数tm *localtime(const time_t *timer)使用timer所指向的时间,用代表相应本地时间的值填充tm结构。timer的值被分解到结构tm中,并以当地时区表示。Localtime不是线程安全的,程序中一般使用lo

2020-12-05 15:16:08 977 1

原创 CentOS系统编译内核源码升级(3.10.0-4.9.133)

下载相应版本的内核源码http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/我们下载的源码版本为linux-4.9.133.tar.gz上传源码到服务器并解压tar –xvf linux-4.9.133.tar.gz –C /usr/src/kernels安装一些工具和依赖yum install gcc -yyum install openssl-devel -yyum install ncurs..

2020-08-21 16:28:43 429

原创 使用tayga测试无状态nat64功能

使用tayga测试nat64功能:tayga程序安装在/usr/local/sbin/tayga目录下配置文件在/usr/local/etc/tayga.conf下建立db目录mkdir -p /var/db/tayga,这个目录存储map关系tayga.conf配置文件:tun-device nat64ipv4-addr 192.168.255.1prefix 2001:db8:1:ffff::/96 # replace with a prefix from ...

2020-08-12 12:35:22 1236

原创 PPTP协议流程测试

安装server端yum install –y pptpd安装,会安装2个包,pptpd和ppp。配置server端vim /etc/pptpd.conflocalip 66.66.66.1remoteip 66.66.66.2-100#Encryptionrequire-chap#Network and Routingms-dns 114.114.114.114ms-dns 8.8.8.8vim /etc/ppp/chap-secrets配置用户和密码#client

2020-06-24 15:14:55 844

原创 用coredump文件分析进程重启

1、 ulimit –a去查看是否开启了core如果为0,ulimit -c unlimited2、 可以执行程序需要加”-g”选项进行编译如:3、 产生了core文件进行gdb用where或者bt进行打印出异常堆栈...

2020-04-17 16:12:56 473

原创 内存重叠拷贝方法

strcpy和memcpy函数对于第一种情况会拷贝出错。memmove可以解决内存重叠问题。void *memmove(void *dest, const void *src, size_t count){char *tmp;const char *s;if (dest <= src) { tmp = dest; s = src; while (count...

2020-03-26 14:58:23 863

原创 分析ISC DHCP源码中hash表的实现

简介哈希表(HashTable)又称为“散列表“,由包含集合中元素的哈希桶(Bucket)组成。哈希函数(hash func)为根据索引键来返回数值哈希程序代码的算法。索引键(Key)是被存储对象的某些属性值(Value)。当对象加入至hashtable时,它存储在与对象哈希程序代码相符的哈希程序代码相关的Buket中。当在HashTable内搜寻值时,哈希程序代码会为该值产生,并且会搜寻...

2020-03-15 15:28:30 242

原创 ISC DHCP服务器和客户端简单测试

步骤一:源码下载和安装源码下载地址:git clone https://github.com/isc-projects/dhcp.git执行./configure & make; make installmkdir -p /usr/local/var/dbtouch /usr/local/var/db/dhcpd.leasesmkdir -p /usr/loca...

2020-03-09 20:29:23 899

原创 ISC DHCP中hash表的使用

简介使用hash算法可以提高数据的查询效率。若结构中存在和关键字K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个事先建立的表为散列表。使用结构体关联hash表struct disable_list { OMAPI_OBJECT_PREAMBLE; struct ha...

2020-03-09 18:05:19 338

原创 ISC DHCP源码运行ATF测试框架下的用例

步骤一下载ATF软件包并安装。下载路径:https://github.com/jmmv/atf/releases/download/atf-0.20/atf-0.20.tar.gz执行./configure && make; make install步骤二在ISC DHCP目录执行./configure --with-atf=/usr/local &am...

2020-03-07 17:49:26 252

原创 snmp协议分析

介绍Snmp协议为简单网络管理协议(Simple Network Management Protocol),属于应用层协议,传输层使用UDP协议,主要用于网络设备的管理。Snmp协议分为snmp管理站(client端)和snmp代理(server端),snmp管理站通过udp协议向snmp代理发送请求消息,当snmp代理收到请求消息后,返回snmp管理站需要的内容。snmp消息全部通过UDP端...

2020-02-19 17:02:37 6237

谈谈select&poll&epoll.docx

select,poll和epoll详解

2021-02-05

思科VPP介绍(包括性能数据).pdf

vpp相关介绍,可以更加全面了解VPP

2020-04-28

dhcp协议流程详解.docx

DHCPv4和DHCPv6协议流程分析

2020-04-20

HOW TO DEVELOP VPP PLUGINS.pdf

VPP插件开发指导,记录怎么样开发VPP插件,对于新手有一定的借鉴意义,更好的了解怎么去开发VPP。

2020-04-17

etcd V3版本CLI命令大全.docx

etcd v3版本命令大全,很详细,可以查阅。。。。。。。。。。。。。。。。。。。。。。。,,,,,,,,,,,,

2019-12-03

Makefile中文手册.pdf

makefile中文手册,全面详细的介绍makefile编写规则,适合查阅和新手学习,,,欢迎下载。。。。。

2019-11-26

空空如也

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

TA关注的人

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