libevent环境
参照书籍深入浅出lib event
libevent版本:libevent-2.1.12-stable.tar.gz
操作系统:ubuntu18.04 / macOS big sur 11.2.1
依赖环境:openssl1.1
对应依赖关系
libevent
openssl
2.1.x
1.1
2.0.x
1.0
遇到问题1234567891011121314makeCDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash /home/china/Desktop/libevent-2.1.12-stable/build-aux/missing aclocal-1.16 -I m4/home/china/Desktop/libevent-2.1.12-stable/build-aux/missing: 行 81: aclocal-1.16: 未找到命令WARNING: 'aclocal-1.16' is missing on your s ...
CPP设计模式
C++设计模式《大话设计模式》一书中提到 24 种设计模式,这 24 种设计模式没必要面面俱到,但一定要深入了解其中的几种,以下列举常见的3种设计模式,单例模式,工厂模式,观察者模式。在这之前,先让我们来熟悉一下6大设计原则。
设计原则单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。
开放封闭原则:软件实体可以扩展,但是不可修改。即面对需求,对程序的改动可以通过增加代码来完成,但是不能改动现有的代码。
里氏代换原则:一个软件实体如果使用的是一个基类,那么一定适用于其派生类。即在软件中,把基类替换成派生类,程序的行为没有变化。
依赖倒转原则:抽象不应该依赖细节,细节应该依赖抽象。即针对接口编程,不要对实现编程。
迪米特原则:如果两个类不直接通信,那么这两个类就不应当发生直接的相互作用。如果一个类需要调用另一个类的某个方法的话,可以通过第三个类转发这个调用。
接口隔离原则:每个接口中不存在派生类用不到却必须实现的方法,如果不然,就要将接口拆分,使用多个隔离的接口。
设计模式单例模式保证类的实例化对象仅有一个,并且提供一个访问他的全局访问点。
应用场景:
表示文件系统的类,一个操作 ...
download
需求分析选择的项目是下载器设计,内容是实现一个支持主流下载协议(https,ftp等协议)的下载器,需要支持多线程下载,断点下载,垃圾回收,磁盘检测等基本机制,以及可用性,得有一个UI。根据以上软件需求,结合自己已有的技术栈,打算使用QT实现UI部分的设计,然后下载部分的实现打算使用一个叫libcurl的C库,然后封装使其支持以上下载需求。
软件设计思路基于以上的需求分析可知,UI只需要负责显示以及用户信息输入,下载器只负责下载部分的逻辑处理,因此可用使用MVP模式(Model-View-Presenter)。使用此模型能使单元测试更为方便。
确定了软件设计模式,接下来则是UI设计和下载器设计。
原理实现在选定libcurl作为底层的下载库之后,我们得弄清楚其主要的功能原理。首先我们下载一个文件需要知道哪些数据呢?首先是文件链接,文件链接是由用户进行输入的,之后是文件名和文件存储路径,文件路径也是由用户指定的,文件名我们可用通过对用户输入的url进行解析,以url的后缀参数作为文件名。有了以上参数,像迅雷,chrome等软件就能进行文件下载了,因此我们设计的下载器设计思路也是这样的,尽 ...
ELF符号链接
ELF符号链接何为ELF?ELF的全称是executable linkable format,中文直译是可执行可链接格式。使用gcc -c file.c -o file.o,也就是.o格式的文件。这里举一个简单的例子。
1int a = 10;
我们使用如下命令对其进行编译可得到test.o
1gcc -c test.c -o test.o
使用readelf -a test.o即可查看其全部信息
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071$ readelf -a test.o ELF 头: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 类别: ELF64 数据: 2 ...
数据库原理
数据库原理转载于MySQL索引背后的数据结构及算法原理摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。
文章主要内容分为三个部分。
第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础。
第二部分结合MySQL数据库中MyISAM和InnoDB数据存储引擎中索引的架构实现讨论聚集索引、非聚集索引及覆盖索引等话题。
第三部分根据上面的理论基础,讨论MySQL中高性能使用索引的策略。
数据结构及算法基础索引的本质MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。
我们知道,数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算 ...
计算机网络
计算机网络《转载于C/C++面试基础》
计算机经网络体系结构:
各层作用及协议
分层
作用
协议
物理层
通过媒介传输比特,确定机械及电气规范(比特 Bit)
RJ45、CLOCK、IEEE802.3(中继器,集线器)
数据链路层
将比特组装成帧和点到点的传递(帧 Frame)
PPP、FR、HDLC、VLAN、MAC(网桥,交换机)
网络层
负责数据包从源到宿的传递和网际互连(包 Packet)
IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP(路由器)
运输层
提供端到端的可靠报文传递和错误恢复( 段Segment)
TCP、UDP、SPX
会话层
建立、管理和终止会话(会话协议数据单元 SPDU)
NFS、SQL、NETBIOS、RPC
表示层
对数据进行翻译、加密和压缩(表示协议数据单元 PPDU)
JPEG、MPEG、ASII
应用层
允许访问OSI环境的手段(应用协议数据单元 APDU)
FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
物理层
传输数据的单位 ———— 比特
数据传输系统:源系统(源 ...
Linux网络编程
缝合文章,缝合太多了就不注明出处了。
五种基本的IO模型阻塞IO (blocking IO)在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是这样:
当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据。对于network io来说,很多时候数据在一开始还没有到达(比如,还没有收到一个完整的UDP包),这个时候kernel就要等待足够的数据到来。而在用户进程这边,整个进程会被阻塞。当kernel一直等到数据准备好了,它就会将数据从kernel中拷贝到用户内存,然后kernel返回结果,用户进程才解除block的状态,重新运行起来。所以,blocking IO的特点就是在IO执行的两个阶段都被block了。
非阻塞IO ( nonblocking IO)linux下,可以通过设置socket使其变为non-blocking。当对一个non-blocking socket执行读操作时,流程是这个样子:
从图中可以看出,当用户进程发出read操作时,如果kernel中的数据还没有准备好 ...
SGISTLvector
手写SGISTL vector对标SGISTL版本为GUNC++2.91,实现其vector全部功能,使用分配器也是手写对标GUNC++2.91的allocator(暂时没写内存池的版本),使用方式using namespace Allocator;即可。纪念一下,留着以后改进用。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551 ...
3B+server开发文档
数据库登陆
12sudo mysql -uroot -p"qwert15460"#china key:123456
建库
1create database 3B
建表
1create table data(temper varchar(20),humid varchar(20),press varchar(20),light varchar(20));
插表
1insert into data values('999.999','999.999','999.999','999.999');
查表
1select * from data;
查属性
1desc data;
属性
1234567891011mysql> desc data;+--------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+--------+-------- ...
Cdeque
手写C版本的deque记录一个小demo,留着以后批判。实现了除了运算符重载以外的所有功能(大概),这里的deque没有使用map做中控器,然后也没有使用分断(512字节)的形式,直接写成了普通的链表,其他的都没什么问题。vector使用的是const static dequetfuntion deque **类似于C++的namespace**中的通用接口。
用到的宏1#define TYPE int
data定义12345typedef struct dequenode{ struct dequenode*next; struct dequenode*prev; TYPE val;}dequenode;
头节点定义12345typedef struct dequenode{ struct dequenode*next; struct dequenode*prev; TYPE val;}dequenode;
funtion定义1234567891011121314151617181920212223 ...