- 博客(37)
- 收藏
- 关注
原创 DPDK之Cache和内存
存储系统简介:存储系统是指计算机用于存储数据部分,如磁盘,硬盘,内存以及cpu内部cache。1.RAM(Random Access memory):随机访问存储器2.SRAM(static RAM):静态随机访问存储器3.DRAM(dynamic RAM):动态随机访问存储器4.DDRCache的种类,从成本和生产工艺的角度考虑,一般分为三级,L1/L2/L3,速度一次减慢。cache的容量一般都很小,一般在几百KB到几MB不等。根据cache和内存之间的映射关系的不同,cache可以分为全关
2020-12-06 12:27:30
343
原创 线程池
线程池是一种预先创建一些线程,线程池中的线程处于阻塞状态,等待任务的到来。在这里插入代码片#include <unistd.h>#include <signal.h>#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <errno.h>#include <time.h>#include "threadpool.h"#if 0
2020-09-20 15:28:05
152
原创 网络虚拟化之network namespace
新增一个namspace:在这里插入代码片sudo ip netns add netns1查看是否创建成功ip netns listsudo ls /var/run/netns/netns1 查看namespace中的网络设备sudo ip netns exec netns1 ip link list删除namespacesudo ip netns delete netns1增加一个自定义的namspace并测试回环网卡网络:在这里插入代码片 sudo ip netns add
2020-09-12 14:30:39
326
原创 epoll实现服务器
使用epoll实现简单的服务器,熟悉下epoll接口的使用,不作详细的原理分析。在这里插入代码片#include <sys/epoll.h>int epoll_create(int size);int epoll_create1(int flags);int epoll_ctl(int epds, int op, int fd, struct epoll_event *event);EPOLL_CTL_ADDRegister the target file descriptor
2020-08-23 16:49:58
488
原创 poll实现网络服务器
poll的使用和select类似,select使用一组宏来表示处理描述符集合,而poll使用结构体。在这里插入代码片#include <poll.h>int poll(struct pollfd *fds, nfds_t nfds, int timeout);struct pollfd { int fd; //文件描述符 short events;//请求的事件 short revents;//返回的事件}在events置位:POLLIN 普通或优先级带
2020-08-23 10:37:09
282
原创 select实现网络服务器
select是实现IO多路复用的一种方式,可以在同一个进程或者线程中同时监控多个文件描述符的读写状态,程序会停在select这里,直到有可以读写的文件描述符状态发生改变。select使得不用阻塞在某一个IO操作上。在这里插入代码片头文件#include <sys/select.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>int select(int nfds,
2020-08-23 09:48:05
288
原创 TCP客户端程序
tcp客户端测试程序:./client_test 127.0.0.1 9000 1 1 5在这里插入代码片#include <stdio.h>#include <stdlib.h>#include <signal.h>#include <errno.h>#include "client_test.h"int tcp_connect(const char *addr, const char *port) { struct sockad
2020-08-18 20:44:17
226
原创 TCP服务器
本次实现一个简单的服务器来了解socket,bind, listen等函数,服务器的主要功能是收到客户端的消息后,原封不动的返回给客户端。在这里插入代码片#include <sys/socket.h>#include <netinet/in.h>#include <time.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include "mytcp.
2020-08-16 10:45:44
185
原创 TCP基本套接字
TCP客户端和服务器编程离不开基本的套接字函数,学习TCP基本套接字很重要,下面学习一下基本的套接字接口,并实现一个简单的客户端和服务器程序。socket函数为了执行网络IO,一个进程要做的第一件事情就是要创建套接字。在这里插入代码片#include <sys/socket.h>int socket(int family, int type, int protocol)返回:成功返回非负描述符,失败返回-1family:AF_INET->IPV4协议AF_INET6-&g
2020-08-15 19:44:29
930
原创 数据结构-树
二叉树是树的一种,特点如下:1.每个节点最多有两颗子树,节点的度最大为22.左右子树次序不能颠倒3.即使某一个节点只有一个子树,也要区分。二叉查找树:1.左子树上的所有节点值均小于根节点值2.右子树上的所有节点均不小于根节点的值3.左右子树也满足以上两个条件有序数组的优势是可以使用二分法快速查找,链表的优势在于数据的插入和删除。二叉树兼具两则的优点于一身。在这里插入代码片typedef struct node* p_node;struct node{ int val; p_nod
2020-08-09 12:26:22
72
原创 大数相加
在这里插入代码片char *addbigint(char *num1, char *num2){ int c = 0; int len_num1 = strlen(num1) - 1; int len_num2 = strlen(num2) - 1; int max_len = strlen(num1) > strlen(num2) ? strlen(num1) + 1 : strlen(num2) + 1; char *rst = (char*)malloc(max_len + 1);
2020-08-08 11:54:38
103
原创 有那几种情况只能用初始化列表,而不能用赋值
无论是在构造函数初始化列表中初始化成员,还是在构造函数中赋值初始化,最终结果都是相同的。不同之处在于,使用构造函数初始化列表初始化数据成员,没有定义初始化列表的构造函数在构造函数体中对数据成员赋值。对于const和reference类型成员变量,它只能够被初始化而不能够做赋值操作,因此只能用初始化列表。类的构造函数调用其基类的构造函数时候,也只能用初始化列表。在这里插入代码片//const...
2020-08-08 11:47:00
605
原创 树形数据结构
树是有限个节点的集合。树的一些基本概念:结点包含一个数据元素及若干指向其子树的分支结点的度一个结点的子树的数目树的度树中所有结点的度的最大值叶子节点树中度为0的结点,即左右孩子结点均不存在的结点孩子一个结点的直接后继称为该节点的孩子双亲一个结点的直接前驱称为该节点的双亲兄弟同一个双亲结点的孩子节点互称为兄弟树的深度树中所有节点的层次的最大值,也成为树的高度二叉树二叉树定义特点:1.每个节点最多有两颗子树2.二叉树的子树有左子树和右子树之分,其次序不能够随意互换结点
2020-08-02 20:30:30
507
原创 顺序队列和链式队列
队列采用顺序存储结构来表示,即在内存中用一组地址连续的存储单元依次存放从队头到队尾的数据元素。有一点要注意,当队尾rear=MAX_SIZE时候,队列并不一定占满。判断队列为空的条件front == rear判断队列满的条件为 (rear + 1) % MAX_SIZE == front进队操作:rear = (rear + 1) % MAX_SIZE出队操作:front = (front + 1) % MAX_SIZE在这里插入代码片#include<stdio.h>#inc
2020-07-26 21:34:32
2036
原创 顺序栈和链式栈
栈是一种只允许在表的一端进行操作的数据结构,插入操作称为进栈,删除操作称为入栈。顺序栈是指采用顺序存储的结构的栈,即在内存中用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时设置一个top指针,指示栈顶元素的当前位置。在这里插入代码片#include<stdio.h>#include<stdlib.h>#define MAX_SIZE 100#define true 0#define false 1typedef struct { int data[MAX
2020-07-25 20:02:54
186
原创 链式线性表和顺序线性表
顺序线性表顺序表的存储结构通常用一维数组来描述,数组的下标与元素在线性表中的序号相对应。在这里插入代码片线性表的存储结构:typedef struct { int elem[MAX_SIZE];//线性表的数据元素数组 int length; //线性表的当前长度} seqlist;typedef struct { int *elem; int length; int listsize;}seqlist;顺序表基本操作初始化顺序表在这里插入代码片int seqlist_in
2020-07-18 11:36:04
194
原创 ubuntu 安装zookeeper
安装环境在这里插入代码片uname -aLinux hwzhang-virtual-machine 4.4.0-142-generic #168~14.04.1-Ubuntu SMP Sat Jan 19 11:26:28 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux安装zookeeper在这里插入代码片sudo apt-get install zookeeperd //系统默认自带的版本,也可以自己下载安装包进行安装配置zookeeper//默认配置文
2020-07-12 16:42:29
2014
原创 C++ vector
在这里插入代码片#include<iostream>#include<vector>int main(){ std::vector<int> arr = { 1,2,3,4,5 }; /*迭代器*/ for (auto it = arr.begin(); it != arr.end(); it++) { std::cout << *it << " "; } std::cout << std::endl; ar
2020-06-27 17:23:36
202
原创 C++ array
array是序列式容器,类似于C语言的数组,是固定大小的,一旦定义完成后就无法进行扩容或收缩。array的模板类声明在这里插入代码片template<class T, size_t N> class array;array模板类的使用1.迭代器遍历函数功能begin返回容器中第一个元素的迭代器end返回容器中最后一个元素之后的迭代器rbegin返回指向最后一个元素的迭代器rend返回指向第一个元素之前的迭代器在这里插入代码片#i
2020-06-27 10:44:45
14898
5
原创 ubuntu14.04安装dpdk
1.环境准备DPDK是英特尔推出的用于网络数据转发的一项技术,仅支持x86架构的机器。系统:在这里插入代码片dpdk@dpdk-virtual-machine:~$ uname -aLinux dpdk-virtual-machine 4.4.0-142-generic #168~14.04.1-Ubuntu SMP Sat Jan 19 11:26:28 UTC 2019 x86_64 x86_64 x86_64 GNU/Linuxdpdk@dpdk-virtual-machine:~$
2020-05-17 16:58:53
272
原创 算法系列 ~归并排序
归并排序是利用归并技术来进行排序。归并是将若干个已排序的子文件合并成一个有序的文件。具体步骤如下:1)分解,将当前区间一分为二,求出分裂点。2)求解,递归地对两个子区间[low…mid]和[mid+1…high]进行递归排序3)组合,将已排序的两个子区间[low…mid]和[mid+1…high]归并为一个有序的区间递归的结束条件是子区间的长度为1.如数组arr[] = {12, 2,...
2020-04-23 21:54:14
117
原创 快速排序
快速排序是一种划分交换排序,采用分治的策略。分治法的基本思想是将原问题分解为若干个规模更小但结构与原问题相似的子问题。通过递归的解这些子问题,然后将这些子问题的解组合为原问题的解。快速排序的基本思想是假设当前要排序的无序区为[low…high]采用分治的思想:1)选一个基准,即哨兵pos,将无序区划分为比哨兵小的区域和比哨兵大的区域,并记录哨兵的位置信息2)通过递归调用快速的对左右子区间...
2020-04-22 21:18:35
156
原创 虚函数
在这里插入代码片#include<iostream>using namespace std;class A{public: virtual void print(void) { cout << "A::print()" << endl; }};class B : public A{public: virtual void prin...
2020-04-08 15:04:04
138
原创 C++多态
多态的定义:同一个操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。有两种不同类型的多态:1.编译时多态。编译时多态通过重载来实现,对于非虚的成员来说,系统在编译时根据传递的参数和返回的类型等来决定实现何种操作,是由编译器来决定的。2.运行时多态。运行时候的多态是指系统运行时间才根据实际情况决定实现何种操作,一般通过虚函数来实现。...
2020-04-08 14:33:32
131
原创 C++临时对象
在这里插入代码片#include<iostream>using namespace std;//临时对象是看不见的,不会出现在程序代码中,会影响程序的执行效率,应避免产生临时对象//临时对象产生的情况,(1):参数按值传递(2):返回值按值传递class test{public: test() :num(0){} test(int data) :num(data){}...
2020-03-29 16:21:45
124
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人