- 博客(71)
- 收藏
- 关注
原创 网页认识和html语法
1.1什么是网页:网站是指在因特网上根据一定规则使用html等制作的用于展示特定内容相关网页集合网页:是指网站中的一页通常是html格式的文件通过浏览器来阅读网页是构成网站的基本元素,通常由图片、连接、文字、声音视频等元素组成。通常看到的网页是以.html/.htm后缀结尾的文件因此将其称为html文件1.2什么是htmlhtml指的是超文本标记语言它是用来描述网页的一种语言,html不是一种编程语言而是一种标记语言。标记语言是一套标记标签超文本:1可以加入图片、声音、动
2020-05-18 19:16:28
404
原创 c++11相关语法与lambda表达式
1.初始化问题int array1[] = {1,2,3,4,5};int array2[5] = {0};C++11扩大了用大括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自定义的类型,使用初始化列表时,可添加等号(=),也可不添加。内置类型的列表初始化int main(){// 内置类型变量int x1 = {10};int x2{10};int x...
2019-08-26 21:58:05
300
原创 c++几种类型强转
标准C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符:static_cast、reinterpret_cast、const_cast、dynamic_cast1static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用static_cast,但它不能用于两个不相关的类型进行转换double d=1.11;int i=d;///c语言的强转i...
2019-08-26 20:33:04
325
原创 c++异常
首先要说的是c语言的传统处理错误的方式传统的错误处理机制:终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码放到errno中,表示错误C 标准库中setjmp和longjmp组合。这个不是很常用C++异常概念异常是一种处理错误的方式,当一个函数发现自...
2019-08-26 17:51:39
176
原创 红黑树底层原理
为什么要有红黑树搜索树性能不稳定达不到logn—>avl树,不好控制–>红黑树特点:比avl简单但是更抽象avl树左右高度差不超过1,是严格的平衡树,两个结点就是1红黑树达到的是近似平衡树保证最长路径不超过最短路径的二倍红黑树是一种二叉搜索树但是在每个结点上增加一个存储位表示颜色,颜色可以为red/balck通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有...
2019-08-25 21:34:19
1022
1
原创 网段划分以及计算
ip地址分为两个部分网络号和主机号网络号: 保证相互连接的两个网段具有不同的标识;主机号: 同一网段内, 主机之间具有相同的网络号,但是必须有不同的主机号;不同的子网其实就是把网络号相同的主机号连接在一起如果子网中增加一个主机则这台主机的网络号和这个子网的网络号必须相同但是主机号必须不能和子网中的其他主机重复通过合理设置主机号和网络号, 就可以保证在相互连接来了,但是手动管理子网内的I...
2019-08-22 15:16:33
7758
1
原创 线程安全预防与总结
多个线程同时操作临界资源而不会出现数据二义性就是线程安全临界资源:多线程执行流共享的资源就叫做临界资源临界区:每个线程内部,访问临界自娱的代码,就叫做临界区互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用原子性:不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成互斥量:大部分情况,线程使用的数据都是局部变量,变量的地址空间在线...
2019-08-21 19:46:18
172
原创 AVL平衡树--(插入)
为什么要引入AVL平衡树二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。avl树的定义:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:(1)它的左右...
2019-08-21 01:34:24
366
原创 c++/c内存管理
栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。3. 堆用于程序运行时动态内存分配,堆是可以上增长的。4. 数据段–存储全局数据和静态数据。5. 代码段–可执行的代码/只读常量。...
2019-08-18 23:59:20
303
原创 智能指针+守卫锁--借于RAII思想
RAII(Resource Acquisition Is Initialization)(资源获得即初始化)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量)等的简单技术–本质托管资源-管理权转移,托管权利交给你,自己置空不管在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源托管给对象的好处:(1)不需要显式地释...
2019-08-17 01:51:38
388
原创 多态原理剖析
封装:把数据和方法放到类里通过访问限定符控制,把不想访问的屏蔽,把想要访问的开给你继承:类级别的复用,子类可以复用父类的成员多态:多种形态,去完成某个行为时,当不同对象取完成时,会产生的不同状态同一件事情,不同的人去做,得到的过程结果不一样eg:(1)比如买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买票;军人买票时是优先买票。—>买票的行为是多态不同的人做这件事情结...
2019-08-16 22:17:20
442
原创 c++继承
继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许我们在保持原有类性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。eg:一个叫chen的人属于person这个类但是他是学生(研究生),但是他也是老师(对于本科生)class Person{public...
2019-08-16 19:23:35
131
原创 模板与泛型编程
泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。模板的格式template<typename T1, typename T2,…,typename Tn>返回值类型 函数名(参数列表){}模板分为类模板和函数模板模板它本身并不是函数,是编译...
2019-08-16 16:22:42
316
原创 c++类和对象关键字static+有元
1理解构造函数的中构造函数体的赋值构造函数调用之后,对象中已经有了一个初始值,但是不能将其称作为类对象成员的初始化,构造函数体中的语句只能将其称作为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。所以引出初始化列表初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。初始化列表注意的事项:1每...
2019-08-16 00:34:08
178
原创 c++6个默认成员函数
成员函数1.1构造函数构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。1.2 特性构造函数是特殊的成员函数,构造函数的虽然名称叫构造,但是需要注意的是构造函数的主要任务并不是开空间创建对象,而是初始化对象。(1) 函数名与类名相同。(2)无返回值。(3) 对象实例化时编译器自动...
2019-08-15 23:07:57
138
原创 c++类
类的定义class className{//类体成员由成员函数和成员变量构成};class为类的关键字,className为类的名字{}为类的主体注意类定义结束后要用分号类中的元素称为类的成员,类中的数据称为类的属性或者成员变量; 类中的函数称为类的方法或者成员函数。1声明和定义全部放在类体中,需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。class A{vo...
2019-08-15 00:03:58
198
原创 autoh和范围for和nullptr
1auto在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量C++11中,auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。`int Test(){return 10; }int main(){int a = 10;auto b = a;auto c = 'a';...
2019-08-14 23:15:48
166
原创 c++中的缺省参数和左值引用(!!!)函数声明以及定义的区别
1缺省参数就是函数在声明或者定义的时候为参数指定一个默认值,在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。void TestFunc(int a = 0) {cout<<a<<endl; }int main(){TestFunc(); TestFunc(10);}如图所示// 没有传参时,使用参数的默认值 TestFunc()传参...
2019-08-14 22:28:08
1701
原创 二叉搜索树
二叉搜索树–采用三叉链结构–也就是左右孩子和母亲二叉搜索树又称二叉排序树它或者是一棵空树或者有以下特点(1)若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜素树首先是二叉树的插入(1)插入先建立遍历方式(1.1)分两种情况一种在左边小于根一种在右边大于根(2)插入数据(2.1)建立新结点...
2019-08-11 01:18:41
164
原创 归并排序+分治
归并:将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并的本质–空间换时间,通过申请一个额外数组存储中间变化,从而实现排序归并排序核心步骤:归并排序的特性总结:. 归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。—外部排序首选2. 时间复杂度:O(N*logN)...
2019-08-10 15:48:20
137
原创 快排+分治算法
1选一个基准值选最左边为基准值2遍历整个数组后比基准值小的放左边大的放右边时间复杂度最好 O(n * log(n))平均 O(n * log(n))最坏 O(n^2)空间复杂度最好 O(log(n))平均 O(log(n)) 最坏 O(n)稳定性:不稳定特殊情况处理:长度为1和为0if (low > high)return; 区间长度为 0或者区间长度为 1,表示区间内的数已经有序i...
2019-08-10 15:06:17
403
原创 高级io--select epoll poll
高级io:五种io模型:阻塞io,非阻塞io,信号驱动io,异步io,同步io多路转接io模型:select,poll,epoll五种io模型:eg:钓鱼鱼竿–>过程–>鱼竿鱼饵抛出去–>等待鱼(看鱼漂动没有动)—>阻塞io阻塞io:进行io读取数据,不一定能进行io等待–>找到读写位置才能io–>直到读取到数据等待过程:做其他事然后看一下鱼漂非...
2019-08-10 01:28:07
154
原创 c++的引用--11的右值引用
c++的引用有左值引用和右值引用c++11提出了右值引用通俗的将左值引用–给左值取别名右值引用就是给右值取别名如何理解右值引用理解右值引用首先要明白什么是左值什么是右值eg:int a = 10;//a左值10右值int b = a;//b左值,a不是右值得出结论:赋值号左边的是左值(可以被修改的值),赋值号右边的不一定是右值,右值:(1)常量/表达式的返回值(临时变量)(1...
2019-08-09 00:53:18
124
原创 堆的实现
顺序结构存储就是使用数组来存储只适合表示完全二叉树一般使用数组只适合于完全二叉树(物理上是一个数组,逻辑上是二叉树)-堆堆的实现–大堆和小堆堆是一颗完全二叉树堆中某个结点的值总是不大于或不小于其父节点的值作用:根节点最大为大堆根节点最小为小堆堆:时间复杂度 O(log(n))空间复杂度 O(1)int tree[] 和 int size 合起来表示装堆的值的数组int rootId...
2019-08-07 18:06:32
184
1
原创 二叉树
二叉树的存储(1)顺序结构存储就是使用数组来存储只适合表示完全二叉树一般使用数组只适合于完全二叉树(物理上是一个数组,逻辑上是二叉树)-堆(2)链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系完全二叉树和满二叉树(1)完全二叉树:最后一层结点不满上层结点满的树(2)满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树如果一个二叉树的层数为K...
2019-08-07 17:22:30
271
原创 单链表以及链表和顺序表的优缺点分析
链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.定义结点和链表结点定义(1)值(2)next下一个结点的地址链表的定义定义头typedef int SListDataType;// 链表中的一个结点typedef struct Node {SListDataType value; // 值struct Node *next; ...
2019-08-07 15:23:19
1594
1
原创 顺序表
线性表在逻辑上是线性结构连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,数组和链式结构存储一般为数组顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构分类1 静态顺序表:使用定长数组存储。顺序表的容量是在编译期间(静态期间)决定2. 动态顺序表:使用动态开辟的数组存储。动态顺序表// O(n)// static 修饰函数更改链接属性,从外部链接属性...
2019-08-06 00:48:51
134
原创 udp传输层协议
udp用户数据报协议socket如何实现服务端/客户端服务端:创建套接字–>绑定地址信息–>接受客户端信息–>响应数据到客户端–>关闭套接字客户端:创建套接字–>(系统自动分配地址信息)–>发送数据–>接受数据–>关闭套接字1创建套接字–使进程和网卡建立连接sokcet(AF_INET(IPV4),SOCK_DGRAM, 17/ippro...
2019-08-06 00:18:16
429
原创 链路层和物理层
链路层作用:相邻数据之间的数据帧传输(电脑发送给路由器)–路由器–路由器典型协议:以太网etheth字段信息:源mac地址,目的mac地址,上层协议类型,数据,帧尾CRC(校验码)mac地址网卡上的物理地址定位相邻的两个设备,识别数据链路层相连的结点uint_8_t mac[6] 48bit(位),48位6个字节ip地址和mac区别(1)ip路途的总体起点终点(2)mac路途上每...
2019-08-05 19:48:44
1585
原创 应用层协议http/dns
应用层负责应用程序之间的数据沟通典型协议::http协议,ftp传文件 SMTP邮件协议,DNS,自定制协议1自定制协议:1.1用结构体进行序列化和反序列化结构体解析本身就是反序列化的过程1.1.1序列化:将数据对象按照持久化存储或者网络数据传输的格式进行排布的过程1.1.2反序列化:对数据以指定的协议进行解析1.1.3jason序列化ason组织序列化–>然后按照jasson方...
2019-08-05 19:34:29
281
原创 网络层协议ip
主机: 配有IP地址, 但是不进行路由控制的设备; 路由器: 即配有IP地址, 又能进行路由控制; 节点: 主机和路由器的统称;功能:负责地址管理与路由选择(选择发送路径和路由表选择)(发送给哪个主机)一个ip包含两部分数据:网络号+主机号网络号:区分网络主机号:区分网络内的主机注意:相邻的网络不能使用相同的网络号,相邻的网络分配的ip地址就不会冲突了因为只有相邻的网络中网络号相同时才...
2019-08-05 19:23:31
130
原创 tcp面向连接管理--传输层协议
适用场景:数据安全性高如何调用接口:服务端:创建套接字–>绑定地址信息–>开始监听–>获取已近完成连接–>收发数据–>关闭套接字客户端:创建套接字–>绑定地址信息(系统绑定)—>向服务器发送连接请求–>收发数据–>关闭套接字1创建套接字 sokcet参数1)AF_INET(IPV4)2)SOCK_STREAM(TCP)3)6/IP...
2019-08-05 16:57:24
514
原创 c++类型转换
c语言void Test (){int i = 1;// 隐式类型转换double d = i;(4–8)printf("%d, %.2f\n" , i, d);int* p = &i;// 显示的强制类型转换int address = (int) p;相近类型支持类型转换,但是这个不相似printf("%x, %d\n" , p, address);}强类型语言都...
2019-07-06 23:30:05
116
原创 tcp协议
Tcp/ip五层模型:应用层,传输层,网络层,链路层,物理层(有时候四层没有物理层)根据每一层提供的服务以及协议接口进行讲解应用层:http协议,自定制协议—>负责应用程序之间的沟通(如何自己定制协议)传输层–>作用如何实现应用层:负责应用程序之间的数据沟通 应用程序性就是应用层的程序–>之间与用户进行沟通协议:自定制协议:–>自己约定定制的协议知名协议:在自...
2019-05-15 23:47:10
361
原创 c++命名空间(命名规则)函数重载引用,以及内存对齐内联函数的理解
面向对象的三大特性:继承多态封装封装:将数据和操作数据的方法进行有机结合,隐藏对象的熟悉和实现细节,仅对外公开接口来和对象进行交互–>本质上是一种管理公开的接口用pubilc修饰隐藏的数据用private/protected,知道如何使用就好不需要知道原理定义类就是封装,(数据和函数打包到一起),访问限定符限制访问(接口公开公有,接口不公开私有,数据是私有的,函数有些也是私有的外部提供几...
2019-05-06 23:47:20
242
原创 linux套接字--udp协议实现网络通信
基于udp协议实现网络通信:(套接字实现)客户端 —> 服务端Socket接口:通过网卡将数据传输出去,操作系统提供了一套网络编程接口怎么操作网卡?—>(网卡是设备–>linux一切皆文件–>操作网卡就是操作文件,socket也是文件以(d目录文件-普通文件b块设备文件c字符设备文件l软链接文件(符号链接文件)p管道文件s套接字文件(平时看不到)))对于客户...
2019-05-06 23:35:56
853
原创 linux网络基础第一篇tcp/ip五层模型和套接字编程
网络:路由器:局域网,连在同一个服务器,工作数据处理永远在同一台机器上限制大,服务器压力也大,开发出来一个漏油器,电脑连接到漏油器就可以进行互相通信了;漏油器功能:数据转发;星形网络:其中一个路由器挂了但是可以选择其他路径进行信号传输;容灾能力强,稳定性更加强大局域网:小范围内的网络,几公里内广域网:横跨几千公里非常大型的网络互联网:国际化的广域网Eg:中国和阿拉斯加交互,中国的网路接...
2019-05-02 21:28:50
468
原创 linux线程池的实现-线程的单例模式(懒汉饿汉模式)
线程池:一个或多个线程+任务队列;为什么要有线程池:一个程序起来以后立即启动了很多线程然后取处理任务,如果每来一个请求都创建一个线程线程占资源,如果一瞬间来了很多请求会把资源耗尽程序奔溃了应用场景:(1)启动线程处理任务请求,若同一时间因为大量请求创建大量线程有可能导致资源耗尽程序奔溃(需要限制上限)(2)创建线程(t1)+t2(处理任务时间)+t3销毁线程=总花费时间tt1+t3/t线程...
2019-04-30 23:54:17
375
原创 信号量和读写锁
信号量:具有等待队列的计数器,做什么:实现进程/线程间同步与互斥计数器用于判断现在是否有资源信号量有更多的计数–>标记有多少资源是否可以操作–>实现同步:–>唤醒和等待信号量:功能计数大于0代表有资源可以操作(-1)往下走返回(内部对计数减1操作),代表资源被使用之后,操作完毕之后,唤醒,回收,然后释放资源(计数器+1)通知队列上的pcb资源空出一个,将互斥锁的计数和条...
2019-04-28 23:25:11
554
原创 linux生产者消费者模型---线程池的实现实现
生产者和消费者模型:通过一个容器来解决生产者和消费者的强耦合问题,生产者和消费者彼此直接不直接通讯,而是通过组设队列来进行通讯,所以生产者产生数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里去,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力,这个阻塞队列就是出来给生产者和消费者解耦的生产者 ------------缓冲区-----------...
2019-04-27 22:47:21
1306
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人