自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

月饼大叔的博客

记录学习过程

  • 博客(39)
  • 收藏
  • 关注

原创 设计模式

1、简单工厂模式当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无需知道其创建细节。比如需要加减乘除类,只需要传入正确的符号,就可以返回正确的类。2、策略模式:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化。分析下定义,策略模式定义和封装了一系列的算法,它们是可以相互替换的,也就是说它们具有共性...

2018-09-15 15:42:32 165

原创 https和http的区别

参考:https://www.cnblogs.com/wqhwe/p/5407468.htmlHTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安...

2018-09-13 20:40:30 258

原创 数据库事务的四大特性和事务的隔离级别

事务的四大特性:(1)原子性原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。(2)一致性一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态。(3)隔离性隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。每个事务都感觉不到有其他事务在并发地执行。(4)持久...

2018-08-26 20:52:49 185

原创 内存泄漏的定义及解决方法(智能指针)

内存泄漏是指由于疏忽或错误,程序没有释放掉不再使用内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了堆该段内存的控制,因而造成了内存的浪费。对于C++这种没有垃圾回收机制的语言来说,主要关注两种类型的内存泄漏:(1)、堆内存泄漏:比如使用new、malloc等从堆中分配的资源,没有用delete和free删掉。(2)、系统资源泄漏:系统分配的...

2018-08-26 20:52:35 693

原创 面向对象的三大特性

1、封装封装是面向对象的特性之一,是对象和类概念的主要特征。封装,也就是把客观失误封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,堆不可信的进行信息隐藏。class Animal{public: //这就是公共成员,外部的接口    void SetAnimalName(string strname);    void ShowAnimalName();pr...

2018-08-26 20:52:29 119

原创 const的用法和注意事项

const的用法和注意事项:①:被const修饰的变量可以阻止这个变量被改变,被const修饰的变量要进行初始化。②:可以指定const指针也可以将指针指向的变量指定为const;③:被const关键字修饰的形参的值在函数内部不能被改变;④:const修饰的成员函数不能修改任何的成员变量(mutable修饰的变量除外);const成员函数不能调用非const成员函数,因为非cons...

2018-08-26 20:52:00 3113

原创 C++多态的相关问题(1)

析构函数设置为虚函数的原因?继承类对象经由一个基类指针被删除,若基类是非虚的析构函数,则只能调用基类的析构函数,则继承类新增的数据部分没有被销毁,造成资源泄漏,败坏数据结构。当一个类不背当作基类、或者不具有多态性时,令其析构函数是虚函数是多余的,浪费内存。构造函数不能时虚函数的原因?①:因为如果子类中的构造函数会继承或者改变父类构造函数中做的一部分工作;如果父类构造函数为虚函数的话...

2018-08-26 20:51:53 123

原创 class和struct的区别

相同点:都能包含成员函数,都能实现继承,都能实现多态。①:默认的继承访问权限:struct是public的,class是private的②:struct默认的数据访问控制是public,class默认的数据成员访问控制是private的。③:class可用于定义模版参数,struct不能用于定义模板参数。...

2018-08-26 20:51:47 181

原创 堆和栈的差别

①:栈由编译器自动管理,堆由程序员控制,容易产生内存泄漏。②:一般在32位系统下,堆内存可以达到4G;栈的空间很小,默认只有几兆。③:对于堆来说,因为频繁的new/delete会造成内存空间的不连续,从而造成大量的碎片;栈是先进后出,不会有哪个在中间弹出。④:从分配效率上讲,栈是及其系统提供的数据结构,计算机底层堆栈有支持,由专门的寄存器存放栈的地址,压栈出栈都由专门的指令执行,因此栈...

2018-08-26 20:51:42 92

原创 static关键字的作用

1、静态全局变量:被static修饰的变量只能在本文件中使用,而不加static的全局变量加上extern声明后可以在别的文件中使用。2、静态局部变量:作用域为局部作用域,以后的调用不再进行初始化,当定义它的函数或者语句块结束时,其作用域随之结束。3、静态函数:只能在本文件内使用,不能被其他文件使用,其他文件中可以定义相同名字的函数,不会发生冲突;4、静态数据成员:对于非静态数据成员,...

2018-08-26 20:51:37 104

原创 new和malloc的区别

①:new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持。②:new申请内存时无需指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式得指出所需内存的尺寸。③:new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无需进行类型转换;malloc内存分配返回void*,需要强制类型转换将void*指针转换成我...

2018-08-26 20:51:31 77

原创 引用和指针的区别

引用的定义:引用是给另外一个变量起别名,所以引用不会分配内存空间。区别:①:指针是一个实体,需要分配变量空间;引用只是变量的别名,不需要分配内存空间。②:引用在定义时必须初始化,并且不能改变;指针在定义时可以不用初始化,并且可以改变指向的地址。③:有多级指针,但是没有多级引用。④:指针和引用的自增运算结果不一样(指针是指向下一个地址,引用是引用的变量+1)。⑤:sizeof...

2018-08-26 20:51:16 181

原创 C++ 多态相关问题2

虚函数表、虚指针、虚函数实现原理:不采用虚函数时,若用父类的指针指向子类,则此指针是指向子类中父类的一部分,行为与父类相同。虚函数表和虚指针:class A  {  protected:      virtual void test(){cout<<"aaa"<<endl;}      virtual void test1(){cout<<"...

2018-08-23 08:19:31 115

原创 C++的四种构造函数

默认构造函数和初始化构造函数:拷贝构造函数:复制构造函数用于复制本类的对象。默认复制构造函数:Student(Student &b) { this.x=b.x; this.y=b.y; }将一个已存在的对象b,赋值给调用该复制构造函数的对象。在以下情况发生时,会调用复制构造函数:①:用复制的方法,建立一个新对象。②:函数的形参为类的对象时。(要...

2018-08-23 08:19:22 754

原创 死锁的四个必要条件

死锁产生的四个必要条件:① 互斥条件:资源是独占的且排他使用,进程互斥使用资源,即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一进程占有时,则申请者等待直到资源被占有者释放。② 不可剥夺条件:进程所获得的资源在未使用完毕之前,不被其他进程强行剥夺,继续占用已分配到的资源。③ 请求和保持条件:进程每次申请它所需要的一部分资源,在申请新的资源的同时,保持已分配到...

2018-08-16 11:27:38 559

原创 进程通信方法和线程通信方法

明天再补。

2018-08-15 19:55:59 613 3

原创 进程和线程

进程:是资源分配的基本单位,它是程序执行的一个实例。程序运行时系统会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列。Linux系统函数fork()可以在父进程中创建一个子进程,这样的话,在一个进程接到来自客户端新的请求时就可以复制出一个子进程让其来处理,父进程只需负责监控请求的到来,然后创建子进程让其去处理,这样就能做到并发处理。线程:是进程的一个实体,是CPU调度和分派的基本...

2018-08-15 19:30:09 109

原创 epoll、SELECT、POLL

1、SELECT:select监听三类文件描述符,分别为writefds、readfds、exceptfds,调用select函数会阻塞,直到有描述符就绪,或者超时。        select在几乎所有平台上都支持,其良好的跨平台支持也是一个优点。缺点:①:select最大的缺陷就是单个进程打开的FD数是有限制的,默认值是1024。           ②:socket采用轮询的方法...

2018-08-15 11:01:06 128

原创 Linux下的I/O模型

用户空间和内核空间:操作系统采用虚拟存储器,对于32位系统而言,寻址空间为4G。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户不能直接操作内核,保证内核的安全,操作系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间。针对Linux操作系统而言,将最高的1G分给内核,成为内核空间,较低的3G给应用程序,成为用户空间。...

2018-08-14 20:57:02 135

原创 聚簇索引和覆盖索引

参考:深入浅出MySql和高性能MySql聚簇索引:聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。聚簇索引是将数据行的内容放在B--tree的叶子节点中,节点列存放数据列,由于不能把数据行放在两个不同的地方,所以每个表只能有一个聚簇索引。MySql的聚簇索引只能将主键作为索引。如果没有主键,则选择唯一的非空索引,如果都没有,则隐式定义主键,但是这样很不好,相邻键值相距会很远。...

2018-08-14 16:30:10 3814 1

原创 Mysql要点记录--索引

MyIsam和InnoDB默认索引都是B-tree索引。只有MyIsam存储引擎支持全文本索引。创建索引:create index cityname on city(city(10));索引设计的原则:①:最适合索引的列是出现在where中的列。②:使用短索引。③:索引的列的选择性越高越好。我的理解是作为索引中的列,列内数据的区分度一定要大,。④:InnoDB自己指定主...

2018-08-14 15:25:15 87

原创 数据库的存储引擎

参考:深入浅出MySql MyIsam:MySQL默认的存储引擎,不支持事务,不支持外键,优势是访问速度快。MyIsam磁盘上存储三个文件:.frm存储表定义;.MYD存储数据;.MYI存储索引。MyIsam表支持三种不同存储方式,静态表,动态表,压缩表。静态表:字段都是非变长的,这样每个记录都是固定长度,这种方式的优点是存储迅速,容易缓存,出故障容易恢复。动态表:字段是变长的...

2018-08-14 14:03:12 117

原创 查找算法

二分查找:要查找的值和要查找区域的中间元素比较。时间复杂度最好是1,最差是log2n+1。插值查找:mid = low + (key - a[low]) / (a[high] - a[low]) * (high - low),也就是将上述的比例参数1/2改进了,根据关键字在整个有序表中所处的位置,让mid值的变化更靠近关键字key,这样也就间接地减少了比较次数。对于表比较长,且关键字分布均...

2018-08-03 21:06:10 100

原创 排序算法

排序算法:排序的稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,若A=B,且A在B之前,则排序后的序列中,A还在B之前则称这种排序算法是稳定的,否则称为不稳定的。其中,堆排、快速排序、希尔排序、直接选择排序不是稳定的排序算法,而冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。内排序:在排序得整个过程...

2018-08-03 11:58:10 65

原创 HTTP与TCP的区别和联系

参考:https://www.cnblogs.com/dingjiaoyang/p/5326544.htmlhttps://www.cnblogs.com/baizhanshi/p/8482612.htmlTCP对应于传输层,HTTP对应于应用层,从本质上来说,二者没有可比性。Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Ht...

2018-07-24 18:10:47 9235

原创 TCP的拥塞控制和流量控制

TCP感知网络拥塞的办法?①:在TCP可靠传输机制中,TCP不断返回确认报文来证实报文已经可靠地到达目的地,所以一旦发现某个确认报文没有及时返回,就判断相应的报文段丢失,即认为网络出线了拥塞。②:在TCP确认报文段发生超时前,一般会出现冗余ACK现象,发送方通过检测冗余ACK也能预测网络拥塞情况。流量控制:让发送方的发送速率不要太快,要让接收方来得及接收。接收方在确认报文中给出...

2018-07-22 21:19:54 168

原创 在浏览器中输入URL之后发生了什么

参考:《TCP/IP网络编程》①:查找域名对应的IP地址,先在浏览器缓存中查找,浏览器会缓存一段时间内的DNS记录,如果浏览器缓存中没有,则在hosts文件中查找,hosts文件会将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,如果hosts文件中没有相应的记录,则去路由器缓存中查找,如果路由器缓存中也没有,再去分配给该ISP的域名服务器中查找IP地址,如果该域名服务器中没有相应...

2018-07-22 20:19:43 224

原创 网关协议

参考:《图解TCP/IP(第五版)》、《计算机网络(第六版)》(谢希仁)内部网关协议:RIP和OSPF。RIP:RIP是一种距离向量型的路由协议,RIP协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。RIP协议的距离称为跳数,每经过一个路由器,跳数+1,在RIP协议中,跳数越少,路径越好,RIP允许一条路径最多包含15个路由器,距离等于16表示不可达,所...

2018-07-22 17:29:20 1191

原创 TCP和UDP的区别

参考:《计算机网络(第六版)》(谢希仁)①:UDP是无连接的,减少数据发送的开销和时延,TCP是面向连接的运输层协议,应用进程间的通信必须要先通过三次握手,四次挥手建立连接。②:UDP尽最大努力交付,不保证可靠交付,TCP提供可靠的交付,TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达。③:UDP是面向报文的,面对应用程序传下来的报文,UDP不合并、不拆分,一次交付一个报文,...

2018-07-22 15:21:42 193

原创 TCP的三次握手、四次挥手

参考:《计算机网络》(谢希仁) 1、TCP的三次握手①:开始时服务器端和客户端都处在CLOSE状态,此时服务器端监听套接字,服务器进入listen状态。②:客户端向服务器发送请求报文,此时首部中的同步位为SYN=1,选择一个初始序号seq=x,SYN=1的报文不携带数据,但是会消耗掉一个序号,此时客户端进入SYN-SENT状态。③:服务器端向客户端发送确认报文,其中SYN=1,...

2018-07-22 14:51:15 96

原创 close和shutdown函数的区别

参考:https://blog.csdn.net/lgp88/article/details/7176509《UNIX网络编程》close()函数:close一个套接字的默认行为是把套接字标记为已关闭,然后立即返回到调用进程,该套接字描述符不能再由调用进程使用,然而TCP将尝试发送已经排队等待发送到对端的任何数据,发送完毕后发生的是正常的TCP连接终止序列。在多进程并发服务器中,父...

2018-07-21 19:29:23 9334 1

原创 socket的系统调用

转自:https://blog.csdn.net/tuhuolong/article/details/8154649一:网络连接相关的系统调用socket()  创建套接字bind() 将本机套接字地址绑定到监听套接字上listen() 监听本端口accept() 接受连接read() 数据接收write() 数据发送close(),shutdown() 关闭套接字...

2018-07-21 18:22:09 542

原创 C++函数重写、重载和重定义的区别

重写:父类与子类之间的多态性。子类重新定义父类中由相同名称和参数的虚函数;被重写的函数不能时static的,必须是virtual的;重写函数必须由相同的类型,名称和参数列表;重写函数的访问修饰符可以不同,尽管virtual是private的,派生类中重写改写为public,protect也是可以的。重载:函数名相同,参数表列个数或顺序,类型不同,但是不能靠返回类型来判断。重定义:子类重新定...

2018-07-21 17:55:45 289

原创 成员初始化列表的概念,为什么用成员初始化列表会快一些。

成员初始化列表:在类构造函数中,不在函数体内对变量赋值,而在参数列表后,跟一个冒号和初始化列表。初始化和赋值对内置类型的成员没有什么大的区别,像上面的人一个构造函数都可以。对非内置类型成员变量,为了避免两次构造,推荐使用类构造函数初始化列表。但是有时候必须使用带初始化列表的构造函数。①:成员类型是没有默认构造函数的类。若没有提供显示初始化,则类创建对象时会调用默认构造函数,如果没有默认...

2018-07-21 17:55:31 4941 4

原创 web服务器开发日记之----sendfile零拷贝高效率发送文件

转自https://blog.csdn.net/hnlyyk/article/details/50856268#include <sys/sendfile.h>       ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);其中,in_fd是一个文件描述符,必须指向真实文件,不能使用so...

2018-07-21 17:54:53 177

原创 web服务器开发日记--CGI实现页面的动态生成

转自https://blog.csdn.net/yi412/article/details/38682717传统的web应用开发局限于有限的静态页面,不利于系统扩展,因此建立一个动态web应用程序尤为重要。一方面根据访问者的不同请求返回不同的访问信息,即满足服务的多样性;另一方面,可以直接通过后台管理页面发布和修改信息即可,再也不需要修改页面程序。一种简单的创建动态页面的方法和技术:C...

2018-07-21 17:54:47 1246

原创 web服务器开发日记---HTTP请求及响应

转自https://blog.csdn.net/u011162260/article/details/44876421 HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:http://host[":"port][abs_path]http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指...

2018-07-21 17:54:40 630

原创 web服务器开发日记--web服务器执行流程

参考:https://blog.csdn.net/qq_25425023/article/details/53932532web服务器执行流程: 其中doit函数的执行流程为:

2018-07-20 12:50:38 874

原创 web服务器开发日记---线程条件变量pthread_cond_t

转自https://blog.csdn.net/icechenbing/article/details/7662026。 ①:#include <pthread.h>int pthread_cond_init(pthread_cond_t *cv, const pthread_condattr_t *cattr);返回值:函数成功返回0;任何其他返回值都表示错误初...

2018-07-19 14:06:53 95

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除