- 博客(20)
- 收藏
- 关注
原创 C++——模板
类模板 作用:建立一个通用类,类中的成员数据类型可以不具体指定,用一个虚拟类型代表 template< class T> 紧跟一个类,与函数模板区别在于紧跟在上式后面是类而不是函数 template<class T1, class T2> class Solution { public: Solution(T1 a, T2 b) { this->a = a; this->b = b; } T1 a; T2 b; } void test() { So
2021-10-25 19:33:31
214
原创 C++——多态
1.基本概念 静态多态:函数重载、运算符重载,可以复用函数属于静态多态,地址早绑定,编译阶段确定函数地址 动态多态:派生类和虚函数,地址晚绑定,运行阶段确定函数地址,启动运行后才能确定函数怎么走 void func(Father &C) { C.done(); } void test() { Son B; func(B); } C++中允许父子之间的类型转换,将B的子类对象传递给父类对象时,地址是早绑定的,在编译阶段就确定了函数的地址,因此函数执行时,调用的是父类中的done函数,而不是
2021-10-19 17:26:14
261
原创 C++——继承
继承本质:减少重复代码 语法:class 子类 : 继承方式 父类 子类也称为派生类, 父类也称为基类 公共类: class gonngyong { public: //公共的成员属性和成员函数 } 继承: class Solution : public gongyong { public: //自身的成员属性和成员函数 } ...
2021-10-14 21:49:41
190
1
原创 C++——运算符重载
运算符重载:对已有的运算符重新定义,赋予其另一种功能,以适应不同的数据类型 1.加号运算符重载 ①成员函数重载 Solution C = C1.operator+(C2) Solutin operator+(Solution &C2) { Solution tmp; tmp->a = this->a + C2->a; return tmp; } ②全局函数重载 Solution C = operator+(C1,C2); //C2也可以是别的函数类型,实现对象和int等类
2021-10-11 20:14:28
144
原创 C++——友元
友元:一个函数或者类可以访问另一个类中的私有成员 1.全局函数作友元 将friend 全局函数的声明放入类中;表示该全局函数是该类的好朋友可以访问类中的私有成员 2.类作友元 类外写成员函数: GoodGay::GoodGay { building = new Building; } void GoodGay::visit() { //如果Building类中m_SittingRoom成员是私有的,需要在building类中加上 friend class GoodGay; 表示这个类是本类的好朋友,这
2021-10-08 10:56:45
101
原创 epoll事件模型——ET和LT
1.水平触发(LT) 缓冲区中剩余未读尽的数据会导致epoll_wait()返回,再次调用epoll_wait()时会继续处理此事件,直到缓冲区的数据读完 2.边沿模式(ET) 缓冲区剩余未读尽的数据不会导致epoll_wait()的返回,只有新的事件满足了才会触发,所有要求读事件时必须一次读完 3.LT和ET比较 边沿触发是一种高速的工作模式,只支持非阻塞,当服务器端读取客户端的数据时,不需要读取数据完整性时就可以满足要求时,选用ET模式,提高效率;边沿模式必须与非阻塞一起使用,保证所需数据的完整性,ep
2021-09-30 16:00:08
273
原创 多路I/O复用——epoll
1.epoll优点 ①不受最大文件描述符1024的限制,可以处理更多的事件 ②提高了效率,只有满足条件的文件描述符才能调用callback()函数 ③通过mmap实现用户空间和内核空间的通信 2.epoll_create 创建epoll文件描述符的句柄,指向的是一棵平衡二叉树(红黑树),返回的epfd文件描述符是红黑树的根节点 int epoll_create(int size) size:创建的红黑树 返回值:新创建的红黑树的根节点的fd 失败:-1 3.epoll_ctl int epoll_ctl(
2021-09-28 22:52:59
159
原创 多路I/O复用——poll
1.select的缺点 ①监听文件描述符受限制,最大是1024 ②每次都要从0开始遍历文件描述符,效率低,需要自己增加满足条件的文件描述符数组提高效率,但增加了编码难度 但select是对路/O转接中唯一支持跨平台的,win、linux等 ...
2021-09-28 16:54:47
188
原创 多路I/O复用——select
1.原理 相对于多线程多进程的多路I/O复用,解决了服务器accept()的阻塞问题,当客户端有连接需求时,用select监听,服务器再启用accept(),select接收到服务器创建的监听套接字,用于监听是否有新的客户端连接,监听connect事件,同时服务器accept返回的cfd交给select用于监听是否有数据传送过来,监听read、write事件,服务器的读写也不用阻塞,同时处理大量的并发I/O 2.函数 int select(int nfds, fd_set *readfds, fd_set
2021-09-27 11:40:07
129
原创 libevent库--bufferevent函数分析
1.概述 bufferevent是带有缓存区的事件对象,与常规event相对应,其主要应用于socket通信,具有两个缓冲区,读缓冲和写缓冲。读缓冲中有数据时,会触发读缓冲中的回调函数,在读缓冲回调函数中,内部数据只能读一次,使用bufferevent_read()从读缓冲中读数据;写缓冲中使用bufferevent_write()向写缓冲中写数据,一旦有数据,就会自动刷新,发送给对端,发送成功,写完后,回调函数会被调用,通知写数据完成(意义不大)。 2.bufferevent架构 ①创建buffereve
2021-09-24 00:31:50
605
原创 libevent库的简单实现
1.定义 libevent是一种轻量级事件触发的网络库,开源跨平台,专注于底层网络库;支持多种IO复用技术,支持定时器、异步IO和信号事件,libevent API提供了一种当某事件的条件发生时再去调用回调函数去处理机制 2.特性 libevent是基于“事件”的异步通信模型,同步通信是有时效地并行访问,防止顺序错乱,异步是指函数的注册时间和返回调用不是同一时间的,要等到某一个条件满足了才调用内核实现回调。 3.libevent框架 ①创建event_base struct event_base *even
2021-09-22 21:48:09
234
原创 计算机网络--应用层2
超级文本传输协议HTTP 1.定义 HTTP是浏览器和Web服务器之间应用层通信协议,Web服务器存放的都是超文本信息,浏览器需要通过HTTP协议传输所要访问的信息,HTTP规定了访问的格式和规则,以能够可靠地交换文件(文本、声音、图像等多种多媒体文件) 2.统一资源定位符URL 使用URL来定位互联网上上的资源,用户浏览页面的方式有两种,一种是在浏览器的地址窗口中键入所要找的页面的URL,另一种是在某一个页面中用鼠标点击一个可选部分,这时浏览器会自动在因特网上找到所要链接的页面。 协议:http、htt
2021-09-20 22:11:58
143
原创 计算机网络--应用层1
1.定义: 应用层协议定义了一种服务,用于解决一类问题,需要通过客户和服务器之间的通信来完成,协议通信是所采用的规则 2.DNS域名解析协议 域名:为了方便机器处理,需要将方便记忆的主机名转换为32位IP地址 域名结构:采用层次树状结构的命名方法 例如www.baidu.com,其中www是主机名,baidu.com是域名,主机名和域名构成了完全限定域。 根:. 可以省略 顶级域名:国家顶级域名(cn、us)通用顶级域名(com、org、net、edu) 二级域名:可以是国家域名或者顶级域名下的顶级域名的名
2021-09-18 22:52:29
150
原创 vim常用操作命令
1.vi的三种工作模式 命令模式 文本模式 末行模式 vi打开一个文件,如果该文件存在就打开,不存在会自动创建一个-类型的普通文件,此时会进入命令模式,按i I a A O s S等命令会进入文本模式,可以进行代码编辑,按ESC退出文本模式,回到命令模式,按:进入末行模式,进入vi的最底端: w 保存文件并回到 wq 保存文件并退出 q 保存文件后才可以正常退出,否则要执行强制退出命令 q! 强制退出,不保存文件 按两次ESC或者执行w保存命令,退出末行模式,回到命令模式,在命令模式下,执行ZZ可以退出
2021-09-16 22:57:26
1169
原创 LINUX软件安装卸载
1.安装软件 sudo apt-get install name 如果上一条指令没有找到软件需要执行:进行本地网站名的 sudo apt-get update
2021-09-15 20:29:48
210
原创 LINUX常用命令讲解大全
1.shell:命令解析器,在终端中输入命令时,会被shell解析,执行一个同名的可执行文件,可以通过cat /etc/shells 查看当前系统支持哪些shell,使用echo $SHELL,SHELL是环境变量 $是取环境变量的值,查看当前操作系统正在使用的命令解析器。 2.主键盘快捷键: ctrl+a 移动光标至开头 ctrl+e 移动光标至末尾 ctrl+d 删除光标后面的元素 ctrl+u 删除光标前面的所有元素 clear 清空屏幕 cd .. 跳转到上一级目录 cd - 跳转到上一次访问的目录
2021-09-14 22:45:19
196
原创 软连接和硬链接
软连接和硬连接 软连接:相当于快捷方式,用软连接可以访问源文件 ln -s file(已经存在的文件) file.soft ls -l 查看时软连接的大小,读写属性只是代表软连接本身的权限,通过软连接能否读写修改,要看源文件的权限;可以查看该软连接访问路径的大小 创建软连接时,为保证该软连接可以在任意目录下执行,必须使用绝对路径 ln -s /home/yonghu/file file2.soft 硬链接:对硬链接的文件进行修改,会使其他所有硬链接的文件,包括源文件都发生改变,相当于文件是同步的; 原理
2021-09-14 12:11:28
191
原创 数据结构--括号问题汇总
1.有效的括号 leetcode 20 考虑到有效匹配的问题,可以采用栈的方法,每次匹配上一个栈顶的字符,不符合就返回,将左括号放入栈中,用右括号去匹配,思路如下: class Solution { public: char returnWord(char c){ char res = '0'; switch(c){ case ')': res = '('; break;
2021-09-13 12:51:22
584
原创 OSI七层模型概述
#OSI七层模型 1.应用层:服务器和客户端的通信规范,可以发送哪些响应,哪些请求,顺序,交互过程,出现的意外状态代码的表示与处理,报文的格式。 2.表示层:代码转换、字符转换、数据结构操作的适应,数据压缩加密,发送端和接收端必须使用相同的编码方式,否则会出现乱码,例如字符数字使用ASCII码,图片使用二进制的编码方式 3.会话层:身份验证状态的保持和连接,允许不用机器上的用户之间建立会话关系,例如在windows上可以建立一个共享文件夹,并将其设置为指定用户的共享权限,我们就可以在另一台用户的cmd输入\
2021-09-12 20:09:03
300
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅