共享目录服务器 共享目录服务器: 编写一个服务器,能够实现用户上传文件,并且通过浏览器浏览以及下载这些文件 为什么? 百度云盘下载和上传速度太慢,不能满足用户的需求 每次使用u盘拷贝文件太麻烦了 框架设计 ** 流程设计** 搭建一个TCP服务器,接收客户端连接请求,建立连接 基于多路转接模型进行总事件监控,若有时间到来,则将描述符抛入线程池中 线程池中的线程操作 -a. http协议格式请求数据解析 http协议请
c++智能指针,从初学到入门 1.为什么需要智能指针 下面我们先分析一下下面这段程序有没有什么问题? #include <vector> void _MergeSort(int* a, int left, int right, int* tmp){ if (left >= right) return; int mid = left + ((right - left) >> 1); // [left, mid] // [mid+1, right]
实现一个简单的list类 list------序列式容器-----可前后双向迭代 list可以在常数范围内任意位置进行插入和删除 底层:带头节点的双向循环链表 双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向访问 list不支持任意位置的随机访问,访问效率O(n) 比如 :要访问第n个元素,需要从已知位置(头部或尾部)进行迭代 list构造函数: list() 构造空的list list (size_type n, const value_type& val = value_type()) 构造的lis
实现一个简单的vector类 vector ---- 序列容器-----可变大小数组 存储:连续存储空间来存储元素 vector是使用动态分配数组来存储它的元素。就时间而言,相对较高 因此,vector占用了更多的存储空间,并且以一种有效的方式动态增长 访问:采用下标进行访问,与数组访问一样高效 与其他动态序列容器相比,vector访问元素,在末尾添加和删除元素更加高效 大小:vector会分配一些额外的空间,防止一些可能的增长 他的大小会被容器自动处理 并不是每一次元素加入到容器时,都会重新分配大小 vector构造函数: vecto
插入排序---直接插入排序 基本思想 将一个记录插入到已排序好的有序表中,从而得到一个新记录数增1的有序表。 即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。 要点:设立哨兵,作为临时存储和判断数组边界之用。 示例: 如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以...
C++中vector和list的区别以及应用 1.概念 (1)vector:连续存储的容器,动态数组,在堆上分配空间 底层实现:数组 两倍容量增加: vector增加(插入)新元素时,如果未超过当时的容量,则还有剩余空间,那么直接添加到最后(插入指定位置),然后调整迭代器。如果没有剩余空间了,则会重新分配原有元素个数的两倍空间,然后将原油空间元素通过复制的方式初始化给新空间,再向新空间增加元素,最后析构释放原有空间,之前的迭代器会失效。 性能...
C++四种cast转换 C++中四种类型分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast 1.const_cast 用于将const变量转换为非const 2.static_cast 用于各种隐式转换,比如非const转const,void*转指针等,也可以用于多态向上转换,如果向下转能成功但是不安全,结果未知 3.dynamic_cast 用于...
简述HTTP和HTTPS的区别 HTTP协议与HTTPS协议的区别如下: HTTP协议是以铭文的方式在网络中传输数据,而HTTPS协议传输的数据则是经过TLS加密后的,HTTPS具有更高的安全性 HTTPS在TCP三次握手阶段之后,还需要进行SSL的handshake,协议加密使用的对称加密密钥 HTTPS协议需要向服务端申请证书,浏览器端安装对应的根证书 HTTP协议端口是80,HTTPS协议端口是443 HTTPS优点 ...
Linux----如何保证TCP的可靠性 1.序列号,确认应答,超时重传 数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明它下一次需要接收的数据序列号。如果发送方迟迟没有收到确认应答,则可能是发送的数据丢失,也有可能是确认应答丢失,这时发送方在等待一定时间后会进行重传。这个时间一般是2*RTT(报文段往返时间)+ 一个偏差值。 2.窗口控制与高速重发控制/快速重传(重复确认) ...
Linux下线程的创建 POSIX线程库: 与线程有关的函数构成一个完整的系列,大多数函数的名字以“pthread_”开头,而要使用这些函数需要引入头文件<pthread.h>,在编译时需追加-lpthread链接函数库 #线程创建: //功能:创建一个线程 //函数原型: int pthread_creat(pthread_t *thread, const pthread_attr_t *attr,...
linux下线程基础 什么是线程? 在一个程序里的执行线路(一个进程内部的控制序列) 一切进程序列至少都有一个线程 在进程内部运行(在进程地址空间进行) 是一个轻量级进程 在进程虚拟地址空间,可以看到进程的大部分的资源,将进程资源分配给每个执行流,就形成了线程执行流 线程是cpu调度的基本单位 线程优点: 创建一个线程的代价比创建一个进程的代价小 与进程之间的切换相比,线程之间的切换需要操作系统做的工作...
static和const关键字的作用 const classA operator*(const classA& a2); operator*的返回结果必须是一个const对象。如果不是,这样的变态代码也不会编译出错: class A a,b,c; (a*b) = c; //对a*b的结果赋值 操作(a*b)=c显然不符合编程者的初衷,也没有任何意义
Linux_网络基础(1) 网络的发展背景: 网络发展: 局域网/城域网/广域网:通过网络覆盖范围进行划分 局域网LAN:计算机数量更多了,通过交换机和路由器连到一起 广域网WAN:将远隔千里的计算机连在一起 局域网与广域网只是相对而言 互联网,因特网:上网 ...
c++__拷贝构造函数 定义 拷贝构造函数又被叫做复制构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。 背景 在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”): 一个对象作为函数参数,以值传递的方式传入函数体; 一个对象作为函数返回值,以值传递的方式从函数返回; 一个对象用于给另外一个对象进行初始化(常称为赋值初始化); 如果在前两种情...
c++_析构函数 1.定义 与构造函数功能相反,析构函数不是完成对象的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成类的一些清理工作。 2.特性 析构函数是特殊的成员函数 特征: 析构函数名是在类名前加上~ 无参数返回值 一个类有且只有一个析构函数。若未显示定义,系统自动生成默认析构函数 对象生命周期结束时,c++编译系统系统自动调用析构函数 #incl...
c++ 构造函数 构造函数是c++类中六个默认成员函数中的一个,主要负责完成初始化工作 1.概念: 构造函数是C++类中一个特殊的成员函数,名字与类名相同,创建类类型对象时编译器自动调用,保证每个数据成员都有一个初始值,并且在对象的生命周期内只调用一次 ????2.特性: 函数名与类名相同 无返回值 对象实例化时编译器自动调用对应的构造函数 构造函数可以重载 构造函数分为无参构造和带参构造函数(构造函数的重载) 通过...
c++ 类和对象 1.认识类 #c语言是面向过程的,关注的是过程,分析出求解问题的步骤,用函数逐步解决问题 #c++是基于面向对象的,关注的对象,将一件事情拆分成不同对象,通过对象之间的交互完成 2.引入类 2.1从结构体到类 结构体是c语言的一种自定义的数据类型,它把相关联的数据元素连在一起 struct Student{ void SetStudentInfo(const char* name, ...
函数重载,函数重写(覆盖),函数重定义(隐藏) 1.函数重载: C++中函数的一种特殊情况,在同一个作用域下,函数名相同,形参列表(参数个数,类型,顺序)不同的函数 //重载函数 int add(int left,short right){ return left + right; } //参数类型不同 int add(short left,short right){ return left + right; } //参数顺序不...
Linux 常用工具 Linux常用工具 1.yum软件包管理器 2.vim文本编辑器 3.gcc编译器 4.makefile 5.gdb调试器 6.git 1.yum软件包管理器 yum list 查看可以安装的软件包 yum instal 安装软件包 yum remove 移除软件包 2.vim编辑器 对文本的操作:插入数据 保存 删除 复制 粘贴 剪切 滚动显示位置/显示位置 vim为了能...
Linux–––操作系统&基本操作 Linux操作系统:外部应用+系统内核 操作系统–––>软件–––>让计算机更好用–––>合理的统筹管理计算机上的软硬件资源 基础指令: 分别包含目录相关指令,文件相关指令,时间命令,查找命令,其他命令, 使用规则:命令名[操作选项][源操作对象][目标操作对象] 目录相关命令 目录—-文件夹 Linux一切皆文件——实现接口的统一 Linux是一个多用户操作系统 ...