![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++服务器后端
<-->
gitlijian.cn
展开
-
muduo中的Buffer和线程池设计
muduo中的buffer指的是一般的应用层缓冲区,Buffer特指muduo::net::Buffer classmuduo的底层缓冲区使用的容器是vector,这里和实验室小伙伴讨论使用vector作为底层容器,开销会比较大,因为当容量不足时,会有大量拷贝开销。使用deque效率可能更高。...原创 2021-07-13 10:36:52 · 231 阅读 · 0 评论 -
完美转发 左值 右值
#include <iostream>using namespace std;void fun(int& x) { cout<<"call lvalue ref"<<endl; }void fun(int&& x) { cout<<"call rvalue ref"<<endl; }void fun(const int& x) { cout<<"call const lvalue ref"&..原创 2021-04-13 15:07:33 · 86 阅读 · 0 评论 -
在main函数前和main函数后执行某个函数
#include <iostream>using namespace std;class Debug{public: Debug() { cout << "before main!" << endl; }};Debug t;int main(){ cout << "main" << endl; return 0;}// #include <iostre.原创 2021-04-13 11:24:30 · 72 阅读 · 0 评论 -
CMAKE浅尝
CMake的安装及其简单使用_cm_cyj_1116的博客-CSDN博客_cmake 安装cmake的使用最近在面经中有看到,主要就是在写cmakefilelists文件,我这里以编译一个hello.c文件为例子写好cmakelists文件后,在build文件夹中执行cmake ..会自动生成makefile文件在运行make命令就可编译整个工程...原创 2021-04-10 10:39:24 · 64 阅读 · 0 评论 -
c++中几种针
share_ptr 要求实现auto_ptr原创 2021-04-01 15:05:13 · 117 阅读 · 0 评论 -
几种树
B+ B 红黑树 LSMTree 平衡树 堆 查找原创 2021-04-01 14:54:26 · 87 阅读 · 0 评论 -
C++的split,刷题中会用到
#include <sstream>#include <istream>using namespace std;int main(){ istringstream iss("/a//.b/c../d"); string buf; while(getline(iss, buf, '/')) { cout<<buf<<'\t'; } cout<<endl; system("p.原创 2021-04-01 09:24:47 · 134 阅读 · 0 评论 -
libevent网络库编译 & 进程在内存中的布局
最近在学习libevent网络库在编译示例代码时常常会用到一些库,这里用g++ 时需要添加一些附加项原创 2021-01-25 14:24:59 · 70 阅读 · 0 评论 -
编译器
gcc编译器的主要参数优化参数1、代码优化指的是编译器通过分析源代码,找出其中尚未达到最优的部分,然后对其重新进行组合,目的是改善程序的执行性能。2、gcc通过编译参数“-On”来控制优化代码的生成,其中n是一个代表优化级别的参数3、通常,数字越大优化的等级越高,同时也意味着程序的运行速度越快...原创 2020-12-22 22:18:45 · 97 阅读 · 0 评论 -
(.text+0x222): undefined reference to `shm_unlink‘
解决: 加 -lrtg++ 13-4shm_talk_server.cpp -lrt原创 2020-12-10 18:05:49 · 237 阅读 · 1 评论 -
Linux高性能服务器编程---多进程编程
内容:复制进程映像的fork系统调用和替换进程映像的exec系列系统调用 僵尸进程以及如何避免僵尸进程 进程间通信(Inter-Process Communication, IPC)最简单的方式:管道 3种System V进程间通信方式:信号量、消息队列和共享内存。它们都是由 AT&T System V2版本的UNIX引入的,所以统称为System V IPC 在进程间传递文件描述符的通用方法:通过UNIX本地域socket传递特殊的辅助数据fork系统调用#include &l原创 2020-12-09 11:53:15 · 215 阅读 · 0 评论 -
vmstat-实时的输出系统的各种资源的使用情况
vmstat是virtual memory statistics的缩写,它能实时输出系统的各种资源的使用情况,比如进程信息、内存使用、CPU使用率以及I/O使用情况。vmstat命令常用的选项和参数包括:-f:显示系统自启动以来执行的fork次数-s: 显示内存相关的统计信息以及多种系统活动的数量(比如CPU上下文切换次数)。-d: 显示磁盘相关的统计信息-p: 显示指定磁盘分区的统计信息-S:使用指定的单位来显示。 参数k、K、m、M分别代表1000、1024、1024、1000000和原创 2020-11-25 17:33:29 · 382 阅读 · 0 评论 -
netstat-网络信息统计工具
netstat是一个功能很强大的网络信息统计工具。可以打印本地网卡接口上的全部连接、路由表信息、网卡信息等。要获得路由表信息和网卡接口信息还可以使用route和ifconfignetstat命令常用选项:-n # 使用IP地址表示主机,而不是主机名;使用数字表示端口号,而不是服务名称。-a # 显示结果中也包含监听socket-t # 仅显示TCP连接-r # 显示路由信息-i # 显示网卡接口的数据流量-c # 每隔1s输出一次-o # 显示socket定时器(比如保活定时器)的原创 2020-11-25 16:56:49 · 711 阅读 · 0 评论 -
strace
strace是测试服务器性能的重要工具,它跟踪程序运行过程中执行的系统调用和接收到的信号,并将系统调用名、参数、返回值及信号名输出到标准输出或者指定的文件strace命令常用的选项包括:-c # 统计每个系统调用执行时间、执行次数和出错次数-f # 跟踪由fork调用生成的子进程。-t # 在输出的每一行信息前加上时间信息-e # 指定一个表达式,用来控制如何跟踪系统调用(或接收到的信号,下同)。格式:[quaifier=][!]value[,value2]...qualifier可以是原创 2020-11-25 16:23:38 · 754 阅读 · 0 评论 -
nc
nc(netcat) 主要被用来快速构建网络连接。,我们可以让他以服务器方式运行,监听某个端口并接收客户连接,因此可用来调试客户端程序。nc命令常用选项:-i # 设置数据报传送的时间间隔-l # 以服务器方式运行,监听指定的端口。nc默认以客户端方式运行-k # 重复接受并处理某个端口上所有连接,必须与-l选项一起使用-n # 使用IP地址表示主机,而不是主机名;使用数字表示端口号,而不是服务名称-p # 当nc命令以客户端方式运行时,强制其使用指定的端口号-s # 设置本地主机发送出原创 2020-11-25 15:01:40 · 87 阅读 · 0 评论 -
lsof
lsof(list open file)是一个列出当前系统打开的文件描述符的工具通过它,我们可以知道感兴趣的进程打开了哪些文件描述符,或者我们感兴趣的文件描述符被哪些进程打开了。lsof常用选项:-i # 显示socket文件描述符,该选项的使用方法如下:lsof -i [46] [protocol] [@hostname|ipaddr][:service|port] # 其中4表示IPv4协议,6表示IPv6协议:protocol指定传输层协议,可以是TCP或者UDP:hostname原创 2020-11-25 14:19:30 · 348 阅读 · 0 评论 -
C++面向对象高级编程-侯捷
1、防御式声明#ifndef _COMPLEX_#define _COMPLEX_...#endif作用:保证只include一次2、inline function 在body内进行定义更快,但最终能否inline由编译器决定3、为什么应该用初始化列表complex(double r=0, double i=0) : re(r), im(i){}两个阶段:初始化和赋值阶段,如果写在body里面,就放弃了初始化阶段,直接到赋值。这样效率就会降低。..原创 2020-11-21 11:55:16 · 298 阅读 · 0 评论 -
tools
1、arp协议:查看IP地址和mac地址原创 2020-11-05 14:38:33 · 43 阅读 · 0 评论 -
STL源码剖析之map
#include <map>#include <iostream>#include <string>using namespace std;int main(){ map<string, int> simap; // string 为key, int为value simap[string("rabbit")] = 1; simap[string("rocket")] = 2; simap[string("tiger.原创 2020-10-23 17:03:06 · 321 阅读 · 0 评论 -
STL源码剖析之set
#include <set>#include <algorithm>#include <iostream>using namespace std;int main(){ int i; int ia[5] = {0, 1, 2, 3, 4}; set<int> iset(ia, ia + 5); cout << "size=" << iset.size() << endl; .原创 2020-10-23 15:41:27 · 89 阅读 · 1 评论 -
STL源码解析之heap
#include <vector>#include <iostream>#include <algorithm> // heap algorithmsusing namespace std;// heap的所有元素都必须遵循特别的完全二叉树排列规则,所有heap不提供遍历功能,也不提供迭代器int main(){ // 底层以vector完成 int ia[9] = {0, 1, 2, 3, 4, 8, 9, 3, 5}; vecto.原创 2020-10-23 14:27:40 · 98 阅读 · 0 评论 -
STL源码解析之queue
#include <queue>#include <iostream>#include <algorithm>using namespace std;int main(){ queue<int> iqueue; iqueue.push(1); iqueue.push(3); iqueue.push(5); iqueue.push(7); cout << iqueue.size() &l.原创 2020-10-23 09:34:57 · 171 阅读 · 0 评论 -
STL源码解析之stack
#include <stack>#include <iostream>#include <algorithm>using namespace std;int main(){ stack<int> istack; istack.push(1); istack.push(3); istack.push(5); istack.push(7); cout<<istack.size()&.原创 2020-10-23 09:21:04 · 105 阅读 · 0 评论 -
STL源码解析之deque
#include <deque>#include <iostream>#include <algorithm>using namespace std;int main(){ deque<int> ideq(20, 9); // 构造一个deque,有20个元素,初值皆为9 cout << "size=" << ideq.size() << endl; for(int i=0;i<.原创 2020-10-23 09:05:54 · 85 阅读 · 0 评论 -
STL源码解析之list
#include <list>#include <iostream>#include <algorithm>using namespace std;int main(){ int i; list<int> ilist; cout << "size=" << ilist.size() << endl; // 0 ilist.push_back(0); ilist.p.原创 2020-10-23 08:41:22 · 85 阅读 · 0 评论 -
STL源码解析之Vector
#include <vector>#include <iostream>#include <algorithm>using namespace std;int main(){ int i; vector<int> iv(2, 9); cout << "size=" << iv.size() << endl; cout << "capacity=" << i.原创 2020-10-22 18:59:28 · 113 阅读 · 0 评论 -
tmux分屏工具使用笔记
键入命令tmux,进入分屏模式前提:ctrl + Bshift + ” 上下分屏shift + % 左右分屏上下左右键 移动分屏原创 2020-10-22 18:02:07 · 377 阅读 · 0 评论 -
类A的复制构造函数参数是类A、
class A{private: int value;public: A(int n) { value = n; } A(A other) { value = other.value; } };这种情况会出现什么问题?编译器会发现A(A other) { value = other.value; }为复制构造函数,但是这里的参数也是A,我们知道A other 会去调用复制构造函数,这样就会出现自己调用自己的情况,会出现栈溢出的情况!...原创 2020-09-17 22:11:36 · 673 阅读 · 1 评论 -
对空类型求sizeof()?
这是师兄昨天问我的问题,今天居然在????指offer上看到了,可想而知这本书有多重要。如上图:为了使用这种类型的实例,他必须占用一定的空间,至于占多少空间,由编译器决定。如上图:那为什么添加了构造函数和析构函数,结果还是1呢?因为调用构造函数和析构函数只需知道函数的地址,而函数的地址只与类型相关,而与类型的实例无关。如上图:添加上虚函数后,结果变成了8个字节。C++编译器发现这是虚函数,就会为该类型生成虚函数表,,每个实例中添加一个指向虚函数的指针,而指针的大小根据系统而定原创 2020-09-17 22:00:44 · 187 阅读 · 0 评论 -
系统监测工具tcpdump
tcpdump-一款经典的网络抓包工具tcpdump-n 使用IP地址表示主机,使用数字表示端口号-i 指定要监听的网卡接口,-i any 表示抓去所有网卡上的数据包-v 输出一个稍微详细的信息,例如TTL和TOS信息-t 不打印时间戳-e 显示网卡帧头部信息-c 紧抓取指定数量的数据包-x 以十六进制数显示数据包的内容,但不显示包中以太网帧的头部信息-X 与-x类似,不过打印每个十六进制字节对应的ASCII字符-XX 与-.原创 2020-08-10 07:38:34 · 259 阅读 · 0 评论 -
Makefile
Makefile文件规则:如果这个工程没有编译过,那么我们的所有c文件都要编译并被链接。 如果这个工程的某几个c文件被修改,那么我们只编译被修改的c文件,并链接目标程序。 如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的c文件,并链接目标程序 在Makefile文件中使用变量:objects = main.o kbd.o command.o display.o \ insert.o search.o files.o utils.oedit :...原创 2020-08-01 10:26:59 · 105 阅读 · 0 评论 -
压力发生器
#include <netinet/in.h>#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include <sys/epoll.h>#include <errno.h>#include <string.h>#include <fcntl.h>#include <stdlib.h>#inclu.原创 2020-07-27 11:36:27 · 252 阅读 · 0 评论