- 博客(35)
- 收藏
- 关注
原创 流量控制
1、什么是流量控制?流量控制的目的?如果发送者发送数据过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。流量控制根本目的是防止分组丢失,它是构成TCP可靠性的一方面。2、如何实现流量控制?由滑动窗口协议(连续ARQ协议)实现。滑动窗口协议既保证了分组无差错、有序接收,也实现了流量控制。主要的方式就是接收方返回...
2020-03-20 21:24:30 2008
原创 TCP的拥塞控制
拥塞控制:TCP模块为了提高网络的利用率,降低丢包率,并保证网络资源对每条数据流的公平性而采取的控制手段。几种拥塞控制方法: 慢开始( slow-start )、拥塞避免( congestion avoidance )、快速重传( fast retransmit )和快速恢复( fast recovery )。1、慢开始:当主机开始发送数据时,如果立即所大量数据字节注入到网络,那...
2020-03-20 21:18:18 241
原创 性能测试关注点
性能测试的内容:(1)负债测试:对于分布式网络,测试不同用户数量来测试系统的反应,主要关注性能指标,系统不同表现。(2)压力测试:高压情况下多用户并发测试,关注系统是怎么崩溃的(内存泄漏,cpu无响应,数据库无反应,网络阻塞)(3)容量测试:系统支持的最大相关数量,例如数据库最大数据数量,用户数量。...
2020-03-20 20:37:58 235
原创 第一范式、第二范式、第三范式
1、第一范式(1NF):同列中不能有多个值。下图所示此表不是范式2、第二范式(2NF):要求实体的属性完全依赖于主关键字。一个订单明细表:【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName),一个订单中可以订购多种产品,所以单单一个 OrderID 是不足以成为主键的,主键应该是(OrderID...
2020-03-18 16:45:15 784
原创 web测试和app测试的区别
1、系统架构不同web项目一般都是b/s架构,是基于浏览器的,app项目是基于c/s的,必须有客户端,用户需要安装客户端。2、性能方面web页面主要关注响应时间,而app主要关注的是流量、电量、CPU等,二者服务器性能没区别,都是一台服务器。3、兼容方面web是基于浏览器的,所以更倾向于浏览器和电脑硬件,app主要看分辨率,屏幕尺寸,设备系统等。web测试是基于浏览器的不用考虑...
2020-03-12 21:23:50 465
原创 服务器测试和客户端测试的区别
1、客户端测试用户可以看到的,使用界面的,web端,PC端,app,一般在用户的机器上去测试。2、服务端测试有俩种,一种是直接对web或者APP的服务端进行测试;另一种是对后端的数据库、缓存系统、中间件、文件系统进行测试。(1)直接对WEB或者APP的服务端进行测试;(2)对更后端的数据库、缓存系统、中间件、文件系统等进行测试。...
2020-03-12 21:03:06 4852
原创 内存泄漏几种情况
几种内存泄漏的情况:1、类的构造函数和析构函数没有匹配调用new和delete 2、在释放内存前程序出现错误。3、释放对象数组时delete没有加上[ ].4、指向对象的指针数组不等同于对象数组。对象数组,只需delete[]p,指向对象的指针数组,delete[]p只是释放了每个指针,但并没有释放对象的空间,正确的做法,是通过一个循环,将每个对象释放了呢,然后再把指针释放了。...
2020-03-10 13:35:02 941
转载 http与https
一、HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因为加密的详细内容就需要SSL。HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了...
2020-03-10 11:54:18 236
原创 网络模型
OSI七层模型:TCP/IP模型,分为几层,每层功能,为啥要分层(土豆丝的例子,买洗切炒)?TCP/IP模型分为四层:应用层:应用程序间沟通的层,如简单的邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。 传输层(API接口,包装好的函数,传送信息,进行进程间通讯):提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)...
2020-03-09 20:40:27 150
原创 在浏览器中输入www.baidu.com 发生了什么?
通过DNS域名解析得到网址对应的IP地址,端口是知名端口,由于浏览器和WEB服务器使用的是http协议通信,而http使用80号端口。 浏览器connect发起连接,在传输层用tcp协议进行三次握手,建立连接。 浏览器组装http请求报文,通过建立的连接发送请求报文。 服务器收到,请求报文,并解析,如果请求能成功,组装http应答报文,通过连接发送报文数据。如果是短连接,关闭描述符。如...
2020-03-09 19:11:52 384
原创 单链表的逆置
void Revserve(Dlist plist){ if(plist!=NULL || plist->next==NULL || plist->next->next==NULL)//头节点为空退出 { return; } Node *p=plist->next;//当前所指节点 Node *q;//p后面的链表...
2020-03-09 19:06:55 119
原创 vector和list 的区别,适用场景
vector和list最大区别就是存储结构不一样,vector是连续存储结构而list是非连续存储结构。连续存储结构:vector是可以实现动态增长的对象数组,支持对数组的高效率访问和在数组尾端的删除和插入操作,在中间和头部删除和插入相对不易,需要挪动大量的数据。vector不需要程序员自己去考虑容量问题,库里边本身已经实现了容量的动态增长,而数组需要程序员手动写入扩容函数进行扩容。非连续...
2020-03-07 21:21:59 1921
原创 class和struct的区别
1、默认继承权限不同class默认继承是私有继承(private),struct默认继承是公有继承(public)2、默认访问权限不同class中默认的成员访问权限是private的,而struct中则是public的。3、有关使用大括号初始化(1)二者在定义了构造函数的情况下,都不可以使用大括号进行初始化。(2)struct在没有定义构造函数的情况下可以用大括号进行初始化...
2020-03-07 20:20:53 503
转载 HTTP 请求方法
根据 HTTP 标准,HTTP 请求可以使用多种请求方法。GET、POST 和、HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。序号 方法 描述 1 GET 请求指定的页面信息,并返回实体主体。 2 HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 3 P...
2020-03-05 19:30:35 124
原创 编译链接详细过程
gcc main.c-->main.exe详细过程:预编译:gcc -E main.o -o main.i预编译过程主要处理那些源代码中以“#”开始的预编译指令。比如”#include”、”#define”等。处理规则如下:·将所有的”#define”删除。并展开所有宏定义。·处理所有条件预编译指令。比如“#if”(如果条件为真,则编译下面代码)“#ifdef”(如果...
2020-03-05 19:19:15 294
原创 进程间通信
进程间通信 :管道、信号量、共享内存、消息队列管道:当从一个进程连接数据流到另一个进程时,我们使用术语管道,我们通常把一个进程的输出通过管道连接到一个进程的输入。 管道分为①有名管道:可在任意两进程间通信。 ②无名管道:父子进程间通信。 管道有两端,读端和写端。写端只能用来写,读端只能用来读。int fd[2];fd[...
2020-02-29 13:47:28 115
原创 三次握手与四次挥手
TCP连接是通过三次握手所建立连接的,通过四次挥手关闭连接的。1、三次握手的过程:SYN(进行了三次握手,请求连接) ACK(确认) seq:初始值(序号)+sizeof(发送的字符长度)第一次握手:客户端向服务器发送请求连接(SYN)第二次握手:服务器同意客户端的请求连接(ACK 、SYN)第三次握手:客户端发送确认帧表明自己知道客户端与自己相连。为什么不能...
2020-02-29 13:32:38 103
原创 HTTP状态码?
1xx:指示信息--表示请求已接收,继续处理2xx:成功--请求已经成功接收,理解,接受3xx:重定向--要完成请求要进一步处理4xx:客户端错误5xx:服务器错误 200 OK //客户端请求成功400 Bad Request //客户端请求有语法错误,不能被服务器所理解401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenti...
2018-09-18 13:16:21 143
原创 const和define比较
1、编译器处理的时间段不一样。define是宏,在预编译的时候就进行处理了,而const是在编译运行阶段使用。2、类型和安全检查不同。define宏没有类型,不做任何类型检查,仅仅是展开。const常量有具体的类型,在编译阶段会执行类型检查。3、const可以节省空间,避免不必要的内存分配。const定义常量从汇编的角度来看,只给出了对应的内存地址,而不是象#define一...
2018-09-15 16:04:25 964
原创 TCP、UDP的区别与使用
TCP是面向连接的,可靠的流式服务。UDP是无连接的、不可靠的数据报服务。TCP主要应用于网络通信方面,例如QQ进行聊天时用TCP传输、客户访问一个网站时使用http底层也是使用的TCP。TCP要及时、可靠的收到传发的消息。TCP有三次握手和四次挥手保证连接的可靠性。TCP还有time_wait状态:(1)可靠的终止TCP连接(2)让迟来的报文段有足够的时间被识别并丢弃。UDP主要应用...
2018-08-29 17:19:53 308
原创 new/delete和malloc/free
不同点 (1)操作对象有所不同。 malloc/free是C/C++语言的标准库函数,new/delete是C++的运算符。对于非内部数据类的对象而言,光用malloc/free无法满足动态对象的要求。对象再创建的同时要自动执行构造函数,对象消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不再编译器控制的权限之内,不能把执行构造函数和析构函数的任务交给m...
2018-08-22 15:34:05 98
原创 C++中类和 struct 的区别,空类大小是多少,空结构 体呢?为什么这样设计?
(1)因为C++设计时定下的一项原则:必须完全兼容C语言,所以就允许C++下使用结构体类型了,并且在C++中的结构体类型支持成员函数。在此基础上扩展了面向对象思想,有了Class类,(2)空类和空结构体大小都为1,c中空结构体为0.这是因为,C++标准中规定,“no object shall have the same address in memory as any other variab...
2018-08-22 15:30:53 477
原创 为什么要有time_wait状态?
谁先关闭谁先进入time_wait状态。通常服务器检测到客户端关闭连接后,(系统调用的一种事件类型,发生了这种事件就会告知服务器),就会立刻给客户端发送一个结束报文段来关闭连接,客户端收到这个结束报文段之后,并没有直接进入CLOSE状态而是转移到TIME_WAIT状态。在这个状态,客户端连接要等待一段长为2MSL的时间,才能完全关闭。MSL是TCP报文段在网络中的最大生存时间。TIME_W...
2018-08-22 15:14:31 3969
原创 C++中的四种类型强转
(1)static_cast:最常用的类型转换符,在正常情况下的类型转换,如把int转换成float,如:int i;float f; f=(float) i;或者f=static_cast<float>(i);(2)const_cast 最常用的类型转换符,把const类型的指针转换为非const类型的指针,如:const int *fun(int x,int y){} ...
2018-08-07 17:40:13 166
原创 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”
C和C++的函数符号生成规则不一样。C++调用C语言,由于符号的生成规则不同会导致符号解析出错。使用extern C告诉C++编译器用C语言的规则生成符号。例:extern "C" {int sum(int a,int b);}//调用.c文件中的sum函数...
2018-08-07 17:17:30 269
原创 C++封装的特性
在面向对象设计中,封装是指数据和实现操作的代码集中起来放在对象内部,并尽可能隐蔽对象的内部细节。对象好像是一个不透明的黑盒子,从外面是看不见的,更不能从外面直接访问或修改这些数据以及代码。我们将对象的特性称为“成员变量”,将对象的行为成为“成员函数”,被封装的特性只能通过特定的行为去访问。封装有两方面的含义:(1)是将有关的数据和操作代码封装在一个对象中,各个对象相互独立,互不干扰.(2)是...
2018-08-07 17:14:30 445
原创 select、poll、epoll系统调用及ET与LT模式
select、pool 、epoll剖析:I/O复用能使系统同时监听多个文件描述符读事件 就绪(缓冲区有数据) 客户端发数据了缓冲区才有数据。写事件 就绪(缓冲区没满)异常:网络情况中,select能处理的异常情况只有一种,socket接收到外带数据。 select系统调用: pool系统调用: 1、用途:在一段时间内,...
2018-07-31 11:55:50 864
原创 继承与多态
1、派生类都继承了父类的哪些东西?派生类继承了基类除构造函数和析构函数外的所有成员。2、继承方式 派生类继承基类方式 基类的的访问限定 派生类的访问限定 外部访问限定 public: ...
2018-07-29 11:36:52 123
原创 关键字static和inline的区别
关键字static和inline的区别(1)从作用域来看二者都只在当前文件可见。(2)static修饰变量或者函数,inline只修饰函数。(3)static修饰的在符号表产生符号,但是符号是local的,不受连接器处理。inline修饰的在调用点直接把代码展开,不产生符号(4)inline修饰函数定义,修饰函数声明无意义...
2018-07-26 20:36:54 1918
原创 C和C++中的const
c语言的const:(1)const修饰的量不一定要初始化。(2)const修饰的量,叫常变量,不能叫常量。(3)不能当做常量数字来使用,比如定义数组长度。(2)常变量的编译方式和普通变量没区别,都需给变量分配内存。2、c++语言的const(1)const修饰的量必须初始化。(2)const修饰的量叫做常量。(3)可以当做常量数字来使用,比如定义数组的长度。(...
2018-07-26 20:15:37 92
原创 内存分配方式有几种
内存分配方式:(1)符号起始的区块(.bss段):通常指的是存放程序中未初始化或者初始化为0的变量的和静态数据的区域。bss属于静态内存分配,程序结束后静态资源变量由系统自动释放。(2)数据段:通常指存放程序中已初始化的全局变量的一块内存区域。也属于静态内存分配。(3)代码段:有时也叫文本段,通常指的是用来存放程序执行代码(包含类成员函数和全局函数及其他函数代码),这部分区域的大小在程...
2018-07-26 17:48:42 2369
原创 关于带环的链表操作
//判断是否有环bool isLoop(List plist){ Node *pf = plist; Node *ps = plist; while(pf != NULL && pf->next != NULL) { pf = pf->next->next; ps = ps->next; if(pf == ps) { br...
2018-07-26 15:36:28 131
原创 智能指针
int * p=new int; =>裸指针必须手动释放 由于逻辑的错误,导致释放资源的代码没有被调用到 程序运行过程中,发生异常,导致释放资源的代码没有被调用到。所以就需要智能指针:不带引用计数的智能指针(资源无引用计数)auto_ptrscope_ptrunique_ptr带引用计数的智能指针(资源有引用计数)shared_ptr 引用计数存在堆上...
2018-07-25 10:23:15 144
原创 resize和resever
vector中resize和reserve的区别:resize(n);1 2 4 8(2倍增长)resize(n,val);resize(100)开辟100个空间,初始化为0。resize函数用来扩容,重新给容器分配内存大小,并且创建对象.reserve(n);reserve用来给vector预分配存储区大小,即capacity的值,但是没给这段内存进行初始化。reserv...
2018-07-25 10:08:14 1535
原创 容器+空间配置器+迭代器理解与应用
vector 容器vector容器的特征=》向量容器(底层是数组结构)默认构造的vector,底层没分配内存 vector添加元素,满了以后,内存以2倍方式增长问题一:构造了一堆没有用的对象,构造容器时。只需要内存但是new附加的会调用默认构造生成对象(无效对象)。问题二:从容器删除对象时,并没有真正的析构对象(内存没有释放)。生成容器时:只需要内存,不需要构造对象。所以需要将...
2018-07-25 10:00:25 230
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人