自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 收藏
  • 关注

原创 智能指针

RAIIRAII是一种利用对象生命周期来控制程序资源的技术在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终有效,最后在对象析构的时候释放资源,实际上是将一份资源的责任托管给了一个对象,这样做呢,就不需要显式释放资源,采用这种方法,对象所需资源在其生命周期内始终有效。智能指针原理:RAII特性重载operator* 和operator-> ,使其具有像指针一样的...

2019-10-27 16:32:36 238

原创 指针和引用的区别

指针和引用的区别:在语法上引用就是一个别名,没有独立的空间,和其引用实体共用同一块空间,在底层实现上实际是有空间的,因为引用是按照指针方式来实现的(在汇编代码中可以看出来)引用在定义时必须初始化,指针没有要求引用的类型必须和实体同类型,指针可以强制类型转化,比如将void* 转化为 int*引用在初始化引用一个实体后,就不能再引用其他实体,而指针可以在任意时刻指向任意一个同类型的实体没...

2019-10-27 14:53:04 294

原创 堆和栈的区别

堆和栈的区别:堆是由低地址向高地址扩展,栈是由高地址向低地址扩展堆中的内存需要手动申请和释放,栈中内存会自动申请自动释放,存放参数,局部变量等内存堆中频繁调用malloc和new,会产生内存碎片,降低程序效率,而栈由于其先进后出的特性,不会产生内存碎片堆的分配效率低,而栈的分配效率比较高,具体原因是:栈是操作系统提供的数据结构,计算机底层对栈提供一系列支持,分配专门的寄存器存储栈的地址,...

2019-10-27 14:38:59 263

原创 视图

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变 化会影响到基表,基表的数据变化也会影响到视图。创建视图:create view 视图名 as select语句;删除试图:drop view 视图名;视图规则和限制与表一样,必须唯一命名(不能出现同名视图或表名)创建视图数目无限制,但要考虑复杂查询创建为视图之后的性能影响视图不能...

2019-10-25 20:23:10 204

原创 表的约束

对表所存储的数据进行合法性检查,通过约束来实现。完整性约束关键字含义NOT NULL约束字段的值不能为空DEFAULT设置字段的默认值UNIQUE KEY(UK)约束字段的值唯一PRIMARY KEY(PK)约束字段为表的主键,可以作为表记录的唯一标识AUTO_INCREMENT约束字段的值自动增加FOREIGN KEY(FK)约束字...

2019-10-25 20:19:37 135

原创 索引

索引数据库索引是为了增加查询速度而对表字段附加的一种标识,是对数据库表中一列或多列的值进行排序的一种结构。DB在执行一条Sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度。优点:通过创建唯一性索引,可以保证数据库表中每一行数据...

2019-10-25 20:10:37 145

原创 设计模式之单例模式

什么是设计模式:设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。设计模式使代码编写真正工程化。设计模式又包含有:单例模式,工厂模式,观察者模式等单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的一个类只有一个实例。即一个类只有一个对象实例。单例模式又分为饿汉模式和懒...

2019-10-25 19:26:03 157

原创 select,poll,epoll

select和epoll属于IO多路转接模型,用于实现对大量描述符进行就绪事件监控,可以让进程针对就绪描述符进行操作,避免因对非就绪的描述符进行操作而阻塞,让一个进程轮询对大量的就绪描述符进行操作,实现多个客户端与一个服务端之间的数据通信IO多路转接模型 :select模型 poll模型 epoll模型select模型int select(int nfds,fd_set* readfds,f...

2019-10-25 18:25:33 146

原创 const

(1)可以定义const常量,具有不可变性。  例如:const int Max=100; Max++会产生错误;(2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。  例如: void f(const int i) { …} 编译器就会知道i是一个常量,不允许修改;(3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。 同宏定义一样,可以做到不变则已,...

2019-10-25 12:39:30 220

原创 C语言中static全局变量与普通的全局变量区别

1. static全局变量与普通的全局变量有什么区别 ?全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只...

2019-10-25 12:16:46 1481

原创 http和https

HTTP协议和HTTPS协议区别如下:1)HTTP协议是以明文的方式在网络中传输数据,而HTTPS协议传输的数据则是经过TLS加密后的,HTTPS具有更高的安全性2)HTTPS在TCP三次握手阶段之后,还需要进行SSL 的handshake,协商加密使用的对称加密密钥3)HTTPS协议需要服务端申请证书,浏览器端安装对应的根证书4)HTTP协议端口是80,HTTPS协议端口是443HTT...

2019-10-24 19:31:48 791

原创 五种IO模型

阻塞IO在内核将数据准备好之前,系统调用会一直等待,所有的套接字都是默认阻塞方式非阻塞IO如果内核还没有将数据准备好,系统调用会直接返回,并返回错误码非阻塞IO往往需要以循环的方式反复读写文件描述符,这个过程称为轮询,对CPU的浪费较大,一般只在特定的场景下使用信号驱动IO内核将数据准备好的时候,使用SIGIO信号通知应用程序进行IO操作IO多路转接从过程上看和阻塞IO类似,实际在...

2019-10-23 14:32:46 208

原创 异常安全

构造函数完成对象的构造和初始化,最好不要在构造函数中抛出异常,否则可能导致对象不完整或没有 完全初始化析构函数主要完成资源的清理,最好不要在析构函数内抛出异常,否则可能导致资源泄漏(内存泄漏、句柄未关闭等)C++中异常经常会导致资源泄漏的问题,比如在new和delete中抛出了异常,导致内存泄漏,在lock和 unlock之间抛出了异常导致死锁...

2019-10-23 13:28:37 123

原创 异常

C语言处理错误的方式1、终止程序,如assert。缺陷:难以接受,如发生内存错误,除0错误就会终止程序。2、返回错误码,缺陷:需要自己去找出错误。c++异常异常是一种处理错误的方式,当一个函数发现自己无法处理的错误就可以抛出异常,让函数的直接或者间接的调用者去处理这个错误。throw:当问题出现时,程序会抛出一个异常,这是通过throw来完成的catch: 在您想要处理问题的地方,通...

2019-10-23 13:26:26 159

原创 野指针

空指针空指针就是 void*;void* 可以指向任何类型对象的地址,表示这是一个指针,和地址值无关,但不知道存储在该地址上的数据类型,所以在获取该指针所指向的值时,应将其转换为对应的指针类型int a=10;void* pa=&a;int b=*((int*)pa); //强转为 int*空指针支持的操作:1、向函数传递 void指针2、在函数里返回 void 指针...

2019-10-23 12:43:40 128

原创 list

list 是顺序容器的一种,list是一个双向链表,使用时需要包含头文件list。双向链表的每个元素都有一个指针指向后一个元素,也有一个指针指向前一个元素,list不支持根据下表随机访问。在list中,在已经定位到要增删元素的位置的情况下,这个操作可以在常数时间内完成,相比于vector,list通常在任意位置进行插入,移动元素的效率更好list还需要一些额外的空间来保存每个节点与其他相节点的...

2019-10-19 14:39:11 119

原创 vector

vector是顺序容器的一种,它是可变长的动态数组,支持随机访问,使用时需要包含头文件vector。底层实现是数组,线性连续的空间在vector容器中,根据下标随机访问某个元素的时间是常数,在尾部添加一个元素的时间大多也是常数,在中间插入和删除元素的,要移动多个元素,因此速度较慢,时间复杂度和元素个数成正比。vector容器在实现时,分配的空间一般大于存放元素所需要的空间。例如:哪怕里面只有...

2019-10-19 14:09:31 134

原创 string

string 原型class String{public: String(const char *str = NULL); // 普通构造函数 String(const String &other); // 拷贝构造函数 ~String(void); // 析构函数 String...

2019-09-28 19:13:05 258

原创 虚函数表

虚函数基础知识  C++中,一个类存在虚函数,那么编译器就会为这个类生成一个虚函数表,在虚函数表里存放的是这个类所有虚函数的地址。当生成类对象的时候,编译器会自动的将类对象的前四个字节设置为虚表的地址,而这四个字节就可以看作是一个指向虚函数表的指针。虚函数表可以看做一个函数指针数组。  虚函数表是属于类,类的所有对象共享这个类的虚函数表。并且,子类对象与指向子类的基类指针指向的对象,使用同一个...

2019-09-28 18:46:52 219

原创 static关键字

static关键字1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下一次调用时仍维持上次的值;2)在模块内的static全局变量可以被模块内所有函数访问,但不能被模块外其他函数访问3)在模块内的static函数只可被这一模块内的其他函数调用,这个函数的使用范围被限制在声明它的模块内4)在类中的static成员变量属于整个类所拥有,对...

2019-09-27 18:09:17 128

原创 extern和extern "C"

extern变量extern int a; //仅仅是在声明一个全局变量并没有分配空间int a; //定义了一个全局变量extern int a=0; //定义全局变量并赋初值int a=0; //定义变量并给初值当你要引用一个全局变量时,你就要声明extern int a;这个时候extern不能省,否则就成定义了函数函数也有声明和定义,但二者有区别,函数的定义是有函数...

2019-09-27 17:20:37 114

原创 C++的三大特性

C++的三大特性:继承、多态、封装1、继承 被继承的是父类(基类),继承出来的类是子类(派生类),子类拥有父类的所有的特性。 继承方式有公有继承、私有继承,保护继承。默认是私有继承公有继承中父类的公有和保护成员在子类中不变,私有的在子类中不可访问。私有继承中父类的公有和保护成员在子类中变为私有,但私有的在子类中不可访问。保护继承中父类的公有和保护成员在子类中变为保护,但私有的在子类中...

2019-09-16 17:12:57 19720 2

原创 TCP/UDP的区别

TCP与UDP基本区别基于连接与无连接TCP要求系统资源较多,UDP较少;UDP程序结构较简单流模式(TCP)与数据报模式(UDP);TCP保证数据正确性,UDP可能丢包TCP保证数据顺序,UDP不保证UDP应用场景面向数据报方式网络数据大多为短消息拥有大量Client对数据安全性无特殊要求网络负担非常重,但对响应速度要求高具体编程时的区别socket()的参...

2019-09-11 19:06:04 4344

原创 数据链路层

 负责相邻设备之间的数据帧传输,网络层的IP地址定位的是网络通信环境中的起点和终点,链路层的MAC地址定位的是相邻的网络设备网卡以太网“以太网” 不是一种具体的网络,而是一种技术标准,即包含了数据链路层的内容,也包含了一些物理层的内容,例如:规定了网络拓扑结构,访问控制方式,传输速率等以太网中的网线必须使用双绞线,传输速率有1M,100M,1000M等以太网是当前应用最广泛的局域网技术,...

2019-09-11 17:54:29 248

原创 网络层 -- IP

网络层:在复杂的网络环境中确定一个合适的路径 IP协议概念主机:配有IP地址,但是不进行路由控制的设备路由器:既配有IP地址,又能进行路由控制节点:主机和路由器的统称协议头格式4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * ...

2019-09-09 16:56:55 274

原创 传输层

 TCP全称为 “传输控制协议(Transmission Control Protocol”). 人如其名, 要对数据的传输进行一个详细的控制; 所以,TCP的特性就是-面向连接,可靠传输,面向字节流TCPTCP协议段格式源/目的端口号:表示数据从哪个进城来,到那个进程去;32位序号/32位确认序号:保证TCP数据的有序交付(包序管理)4位TCP报头长度,表示该TCP头部由多少个...

2019-09-09 14:39:16 313

原创 应用层

应用层:负责应用程序之间的数据沟通1.自定制协议结构化数据传输序列化:将数据对象安按照指定协议组织成为可持久化存储/数据传输的二进制数据串格式反序列化:二进制数据串按照指定的协议解析出数据对象2.HTTP协议认识URL:统一资源定位符...

2019-09-03 18:28:05 144

原创 便利店神器 --- 收银台系统

 收银台作为便利店不可少的配套设施,是顾客结账的地方,他的效率好坏也就简洁的影响着便利店的利润,速度快,顾客不滞留,速度慢了会因为等待结账时间过长,顾客放弃购买,利润受损。 本篇文章涉及的收银台系统方便快捷地查出顾客结帐情况,商品信息情况,每天的售货情况,方便了对超市商品管理、人员管理,大大提高了超市的售货速度。核心功能 登录 我们使用的CEditUI控件的GetText()接...

2019-09-03 14:46:41 1173

原创 基于TCP的socket的改进

在小编的这篇文章中—基于TCP/UDP的socket编程简单给出客户端与服务端之间的通信,但TCP存在的一个缺陷就是TCP为每个客户端新建了套接字进行独立通信,但是服务端无法获知那个客户端数据会先到达,因此可能阻塞在等待连接请求或者等待接收某个客户端的数据。解决的方案:多进程或者多线程 每个线程/进程独立负责一个功能 一个线程/进程复制客户端已经完成连接获取功能 为每个客户端搜新建一个线程...

2019-08-25 15:33:50 244

原创 基于TCP/UDP的socket编程

socket编程接口socket常见API//创建socket文件描述符(TCP/UDP, 客户端 + 服务器) int socket (int domain,int type,int protocol); //domain:AF_INET 代表的是IPV4的地址域 // AF_INET6 代表的是IPV6的地址域 //type:套接字类型 // SOCK_STR...

2019-08-25 15:10:19 342

原创 网络1

一、计算机网络背景1.网络发展独立模式:计算机之间相互独立,每个终端各自持有客户数据。网络模式:多台计算机连接在一起,完成数据共享。局域网LAN:计算机数量增多,通过交换机和路由器连接在一起。广域网WAN:将远隔千里的计算机连在一起。二、协议 “协议”就是一种约定。1.协议分层 OSI 七层模型OSI(Open System Interconnection,开放系统互连)...

2019-08-24 12:24:30 175

原创 数据库表的操作

一、表的操作1.创建表CREATE TABLE table_name( field1 datatype, field2 datatype, field3 datatype)character set 字符集 collate 校验规则 engine 存储引擎; 说明:field 表示列名。datatype 表示列的类型。character set 字符集,如果没有指定字符集,...

2019-08-19 18:37:20 151

原创 数据库库的操作

1.连接数据库 在windows下dos窗口,输入以下命令 mysql -uroot -p  输出结果C:\Users>mysql -uroot -pEnter password: ******Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 33Serv...

2019-08-19 14:08:26 132

原创 Linux之线程

一、Linux线程概念1.什么是线程在一个程序里的一个执行路线就叫做线程,或者更准确的说:线程是“一个进程内部的控制序列”。一切进程至少都有一个执行线程。线程在进程内部运行,本质上是在进程地址空间内运行。Linux下pcb用来模拟实现线程,因此在Linux中pcb实际是一个轻量级进程。通过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。...

2019-08-18 17:49:35 88

原创 数组中出现次数超过一半的数字

链接:来源:牛客网       数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。【题目解析】     &nbs...

2019-08-01 15:55:11 615

原创 Linux之进程间通信的方式

       因为进程的独立性(各自操作的都是自己虚拟地址空间中的虚拟地址,无法访问别人的地址)导致无法直接通信。因此按照通信场景的不同操作系统提供了几种不同的进程间通信方式。        按照system V标准:管道、共享内存、消息队列、信号量。&n...

2019-07-30 17:41:09 136

原创 文件描述符与文件指针

fd与FILE结构体的纵向对比       文件指针:C语言中使用文件指针做为I/O的句柄。文件指针指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括缓冲区和文件描述符。而文件描述符是文件描述符表的一个索引,也就是说c语言的文件指针是Linux系统中对文件描述符的一种封装。   &nb...

2019-07-30 13:35:35 169

原创 动/静态库生成与使用

编写简单的add/sub/mul/div函数,并打包成动/静态库,并分别使用。

2019-07-30 13:17:42 294

原创 树根

链接:来源:牛客网       数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根;如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。       比如,对于24 来说...

2019-07-29 14:03:49 691

原创 小易的升级之路

链接:来源:牛客网       小易经常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a.在接下来的一段时间内,他将会依次遇见n个怪物,每个怪物的防御力为b1,b2,b3…bn. 如果遇到的怪物防御力bi小于等于小易的当前能力值c,那么他就能轻松打败怪物,并 且使得自己的能力值增加bi;如果bi大...

2019-07-26 10:51:55 155

空空如也

空空如也

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

TA关注的人

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