自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AVL树

AVL树是二叉搜索树的一种升级,因为搜索二叉树最坏情况会退化为单支树,效率会降低,所以设计出了一种左右高度差绝对值小于等于一的树,现在我们来讨论一下他的特点并给树代码。特点:一种特殊的二叉搜索树左右高度差绝对值<=1;插入1.首先找到插入的结点位置,这一步和二叉搜索树一样,因为插入新节点,所以要更新二叉树。...

2020-03-01 16:36:47 205 1

原创 二叉搜索树

二叉搜索树二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。它的左右子树也分别为二叉搜索树。二叉搜索树的中序遍历是有序的。二叉搜索树的查找左子树比根结点小,右子树比根结点大,根据大小判断。如何查找二叉搜索树的插入找到插入的位置,记录父节点,...

2020-02-29 19:07:18 397

原创 STL关联式容器

map的使用STL库的map使用没有太多要讲的东西,主要是要清楚的原理和多使用,只列出几个我自己使用时遇到的问题。insert :insert的返回值是一个键值对,<itreator,bool>find:找不到时反回的是end,存在返回迭代器at :返回K对应的val,不存在抛异常。[ ]的原理:用<key, T()>构造一个键值对,然后调用insert()函数...

2020-02-29 15:51:31 159

原创 带头双向循环链表

在复习STL库时,模仿写了一下List,List的底层是带头循环双向链表,在尾插操作时遇到了一点困难,所以这篇就来了解一下带头循环双向链表。数据结构只有头结点时,应当是头结点的前后指针域都指向自己。...

2020-02-21 12:13:12 213

原创 C/C++的内存管理

C/C++的地址空间malloc/free和new/delete的区别malloc/free和new/delete的共同点是:都是从堆上申请空间,并且需要用户手动释放。不同的地方是:malloc和free是函数,new和delete是操作符malloc申请的空间不会初始化,new可以初始化malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可mall...

2020-02-19 16:19:21 150

原创 vector

vector的基本概念vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。vector空间的分配本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储...

2020-02-19 15:50:00 171

原创 C/C++的string

前段时间看了点东西,导致知识比较乱,最近打算把他们总结一下,首先就是C/C++的string。首先简单的回顾接口之后还将讨论一下深浅拷贝的问题。stringC的函数库里也提供了很多对C风格字符串操作的函数,但是使用的时候还是会遇到很多问题内存泄漏,访问越界,覆盖等一系列的问题,而且还不符合面向对象的风格。所以C++引入了字符串类。string的接口这里我们主要列出修改字符串的接口resi...

2020-02-19 14:41:52 117

原创 函数指针,函数对象,lambda表达式,c++faction

lambda表达式[capture-list] (parameters) mutable -> return-type { statement }lambda表达式各部分说明[capture-list] : 捕捉列表,该列表总是出现在lambda函数的开始位置,编译器根据[]来判断接下来的代码是否为lambda函数,捕捉列表能够捕捉上下文中的变量供lambda函数使用。(param...

2020-02-18 17:45:21 407

原创 编译的过程、宏,内联函数,宏函数

学习了很久的C/C++如果还是搞不清这些基础知识的话很说不过,但是宏函数,内联函数这方面又很少使用,很容易遗忘,下面我来总结一下。编译的过程一般一个程序的编译分为四步,预处理,编译,汇编,连接。预处理:展开头文件,替换宏定义,去掉注释,条件编译Linux下生成.i后缀的文件。命令时gcc -E;编译:...

2020-02-18 16:56:07 296

原创 Http应用层协议

HTTP协议URL:统一资源定位符协议名称://用户名:密码@服务器地址:服务器端口/资源路径?查询字符串#片段标识符URL编码/解码查询字符串:urlencode/urldecode,因为HTTP中参数出以<key,val>组成键值对,以&连接像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现. 比如, 某个参数中需要带有这些...

2020-02-14 18:14:10 288

原创 ICMP协议

网络层的协议只负责把数据传输到了就可以,并没有差错报告或者差错纠正机制,IP协议还缺少主机和管理查询所需要的机制。而ICMP协议就是弥补上述两个缺憾的,他是IP协议的伴侣,ICMP是一个网络层协议,但是他的数据并不是直接下发到数据链路层的。实际ICMP是先封装成IP书报的然后再下发。在IP数据报中,如果协议的字段值是1则表示ip数据是ICMP。根据ICMP的特点我们实现了ping 和 tracer...

2020-02-14 15:06:24 302

原创 GO的网络编程

Go的socket编程socket编程的原理我们不在这里赘述,直接进入正题。TcpSocketGo语言的net包中有一个TcpConn类型,可以用来建立Tcp客户端和Tcp服务器之间通信的通道,TCPConn类型的主要函数:func (c *TCPConn) Write(b []byte) (n int, err os.Error)func (c *TCPConn) Read(b []b...

2020-02-13 19:22:36 408

原创 socket编程-TCP

title: socket编程–TCPdate: 2019-07-19 14:48:20tags: Linux网络TCP网络编程TCP网络编程流程socket的API接口:// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器) int socket(int domain, int type, int protocol); 参数: domain:地...

2020-02-12 19:42:48 209

原创 传输层

传输层只有主机才有的层次传输层的功能:传输层提供进程和进程的逻辑通信。复用(应用层所有数据都可以通过传输层传再传输到网络层)和分用(收到数据交付给指定进程);传输层(TCP)对收到的报文进行差错检测(传输层和网络层实现可靠传输)传输层的寻址与端口端口(逻辑端口):传输层的SAP(服务访问点)标识主机中的进程,只有本地意义端口号:16bit,标识65535个端口号。端口号范围:...

2020-02-10 18:35:55 836

原创 路由器

路由器路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。也就是说,将路由器某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。路由表:目的网络的地址,目的网络子网掩码,下一跳地址。是路由算法建立起来的一张表。提取目的IP地址是不是可以之间交付特定主机路由检测路由表有没有合适路径默认路由0.0.0...

2020-02-10 17:13:41 792

原创 网络层IP协议

网络层网络层功能:路由选择与分组转发:找到传输最佳路径异构网络互联:组织各种网络形成英特网拥塞控制:若所有结点都来不及接受分组,而要丢弃大量分组的话,网络就处于拥塞状态。解决办法WAY1:开环控制(静)WAY2:闭环控制(动态)网络层向传输层提供的服务可靠的面向连接的服务:虚电路服务(tcp)不可靠的面向无连接的服务:数据报服务(UDP)数据交换方式电路交换:通信需要三个阶段...

2020-02-10 14:17:34 157

原创 ICMP协议

ICMP协议IP协议本身提供面向无连接的服务,不包括流量控制与差错控制功能。为了提高IP数据报交付成功的机会,在网际层使用了因特网控制报文协议ICMP ,(来检测网络状态(路由、拥塞、服务质量等问题)。 因此,ICMP是IP层的协议。ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP提供多种形式的报文,每个ICMP消息报文都被封装于IP分组中。加上数据报的首部,组成 ...

2020-02-10 14:17:09 250

原创 NAT

网络地址转换NAT技术网络地址转换NAT:在专用网连接到因特网的路由器上安装NAT,安装了NAT软件的路由器叫NAT路由器,他至少有一个有效的外部全球外部IP地址。NAT转换表:...

2020-02-10 14:15:53 223

原创 IP分组的交付和转发

不同子网下的两个主机通信在数据包当中封装的源IP是A,目标IP是B,但是当A主机使用接口掩码和B的IP进行与运算后会发现两个IP不在同一子网,这是A会将这个数据包发送给本网络的网关(通常是本网的路由器),由网关来转发。另外,在封装数据帧时,主机需要知道B的MAC地址,向外广播要求解析B的MAC,但B不在本网络,所以只能有网关的ARP代理功能实现,但A主机得到的并不是B的MAC地址,而是网关的MA...

2020-02-10 14:13:34 1027

原创 IP地址

IP地址IP地址分为两个部分: 网络号 + 主机号网络号: 保证相互连接的两个网段具有不同的标识;主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;不同的子网其实就是把网络号相同的主机放到一起。如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复.通过合理设置主机号和网络号, 就可以保证在相互连接的网络...

2020-02-10 11:05:33 1172

原创 网络层

网络层网络层功能:网络层负责主机到主机的交互路由选择与分组转发:找到传输最佳路径异构网络互联:组织各种网络形成英特网拥塞控制:若所有结点都来不及接受分组,而要丢弃大量分组的话,网络就处于拥塞状态。解决办法WAY1:开环控制(静)WAY2:闭环控制(动态)网络层向传输层提供的服务可靠的面向连接的服务:虚电路服务(tcp)不可靠的面向无连接的服务:数据报服务(UDP)数据交换方式...

2020-02-10 10:58:57 186

原创 DNS系统

DNS系统TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序. 但是IP地址不方便记忆。于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用hosts文件来描述主机名和IP地址的关系。最初, 通过互连网信息中心(SRI-NIC)来管理这个hosts文件的。如果一个新计算机要接入网络, 或者某个计算机IP变更, 都需要到信息中心申请变更hosts文件.。其他计算机也需要定期...

2020-02-09 16:10:20 1003

原创 数据链路层

数据链路层隐藏了物理层不同硬件不同的电器特性,向上提供接口。ARP协议详解实现IP地址到MAC地址的转换,工作的大致流程是主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络地址。该网络的所有机器都会受到ARP请求,只有目第机器会响应一个ARP应答其中包含自己的物理地址。ARP报文段一个ARP的长度为28个字节,加上以太网帧首部和尾部的18个字节,因为以太网帧数据部分最少46...

2020-02-09 15:29:43 144

原创 接口

接口约定接口也是一种类型和其他类型不同接口是一种抽象的类型他不会暴露出所代表对象的内部结构,只展示他的方法,即你只知道它用来做什么不知道是为什么。接口类型接口类型具体描述了一系列方法的集合,一个实现了这些方法的具体类型是这个接口类型的实例。方法名字的集合类似于结构体。也可以嵌套格式:type Reader interface { Read(p []byte) (n int, er...

2020-02-08 15:21:23 125

原创 Go的面向对象编程

方法和函数方法是在函数名前加上一个变量,这个附加的参数会将该函数附加到这种类型上,即相当于为这种类型定义了一个独占的方法。func (p Point) Distance(q Point) float64 { return math.Hypot(q.X-p.X, q.Y-p.Y)}p := Point{1, 2}q := Point{4, 6}fmt.Println(Distan...

2020-02-01 16:18:45 259

原创 函数

函数声明函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体。具体格式如下:func add(x int , y int)(){}如果一组形参或返回值有相同的类型,我们不必为每个形参都写出参数类型。下面2个声明是等价的:func f(i, j, k int, s, t string) { /* ... */ }func f(i int, ...

2020-01-30 18:08:04 178

原创 结构体

用法和C/C++基本相同但初始化有很大的不同,Go中提供了两种初始化的方式,以 var 的方式声明结构体即可完成实例化,在Go语言中,对结构体进行&取地址操作时,视为对该类型进行一次 new 的实例化操作,格式如下:e := &T{}如果结构体成员名字是以大写字母开头的,那么该成员就是导出的;这是Go语言导出规则决定的。一个结构体可能同时包含导出和未导出的成员。结构体类型的零...

2020-01-29 15:10:33 214

原创 数组和容器

数组因为数组的长度是固定的所以Go一般使用slice,类似于C/C++中的vector。数组的每个元素都被初始化为元素类型对应的零值,对于数字类型来说就是0。而C/C++是随机值。以下是数组的三种初始化方式,如果在数组的长度位置出现的是“…”省略号,则表示数组的长度是根据初始化值的个数来计算,数组的长度必须是常量表达式,编译的时候要计算。var arr [3]int = [3]int{1,2...

2020-01-29 12:34:21 566

原创 基础数据类型

整型Go语言同时提供了有符号和无符号类型的整数运算。这里有int8、int16、int32和int64四种截然不同大小的有符号整形数类型,分别对应8、16、32、64bit大小的有符号整形数,与此对应的是uint8、uint16、uint32和uint64四种无符号整形数类型。注意:Unicode字符rune类型是和int32等价的类型,通常用于表示一个Unicode码点。这两个名称可以互换使...

2020-01-16 21:19:58 906

原创 C++模板

C++模板泛型编程作为C++支持泛型的重要武器,模板被引入作为泛型编程的基础:泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。模板又分为函数模板和类模板模板函数模板定义格式template<typename T1, typename T2,......,typename Tn>返回值类型 函数名(参数列表){}template<...

2019-08-02 11:42:30 93

原创 应用层和HTTP协议

应用层和HTTP协议基础概念序列化:将数据持久化存储或网络数据传输格式进行排布反序列化:对数据一指定协议进行解析课外调研序列化的几种方式:协议:约定知名协议和自定制协议HTTP协议URL:统一资源定位符协议名称://用户名:密码@服务器地址:服务器端口/资源路径?查询字符串#片段标识符[外链图片转存失败(img-IpvewHmb-1564324022641)(D:\MyBlog...

2019-07-28 22:27:58 193

原创 设计模式

设计模式产生:是大佬们针对一些经典的常见的场景, 给定了一些对应的解决方案, 这个就是 设计模式单例模式概念:一个对象只可以(需要)被实例化出一次单例模式优点:在单例模式中,活动的单例只有一个实例,对单例类的所有实例化得到的都是相同的一个实例。这样就防 止其它对象对自己的实例化,确保所有的对象都访问一个实例单例模式具有一定的伸缩性,类自己来控制实例化进程,类就在改变实例化进程上...

2019-06-18 11:07:28 103

原创 线程池

线程池基本概念一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个 线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不 仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内 存、网络sockets等的数量;线程池的工作机制:在线程池的编程模式下,任务是提交给...

2019-06-18 09:34:32 153

原创 多线程

多线程线程:**概念:**线程就是进程的内部的一个控制序列,通俗的说就是程序的一个执行线路.一切进程都至少有一个线程,线程在进程内部运行的本质是在进程地址空间内运行线程在Linux下的描述组织:Linux下pcb是一个线程;因为Linux下线程以进程的PCB模拟实现线程,所以Linux下线程也叫轻量级进程进程就是线程组;在Linux下线程是CPU调度的基本单位,进程是资源分配的资源的基本...

2019-06-13 15:47:20 272 2

原创 二叉树

二叉树1.树概念及结构树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树1.树的基本概念节点的度:一个节点含有的子树的...

2019-06-04 16:00:55 290 1

原创 C++入门知识铺垫

C++入门知识铺垫命名空间命名空间的作用在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用 域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污 染,namespace关键字的出现就是针对这种问题的。注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中命名空间的定义:...

2019-06-04 15:59:53 146

原创 C++类的初识

C++类的初识什么是类类就是对事物特征的抽象,也可以理解为一个模具,不是他所描述的具体的事物.c++中引入类也引入了一种新的编程思维,传统C语言是面向过程的我们解决问题时关注的时解决问题的步骤具体体现为函数,而面向对象编程关注的是对象的行为和对象间的交互类的引入和定义C++中可以用struct 和 class定义类,区别是struct的成员默认访问方式是public,class是struc...

2019-06-04 15:58:39 204

原创 信号

信号信号的基本认知:软件的中断,通知时间的发生生命周期信号的种类(kill -l)Linux:62种:1-31对应不同的事件 非可靠信号/非实时(事件可能会丢失/是否立即会处理)​ 34-64用户添加的信号 可靠信号/实时信号信号的生命周期:产生–>注册–>注销–>处理 阻塞信号的产生:​ 1.硬件产...

2019-05-06 22:29:55 135

原创 Linux_linux进程间通信

进程间通信基本的通信方式:管道 共享内存 消息队列 信号量进程通信的目的:数据传输,数据共享,进程间的访问控制管道—传输数据共享内存共享数据消息队列数据传输信号量进程访问控制管道:进程间的数据传输半双工原理:内核的缓冲区匿名管道:这能用于有亲缘关系的进程间通信int pipe(int pipefd[2]);pipefd[0]-----读数据pipefd[1]--...

2019-05-06 22:24:42 92

原创 Linux_linux基础IO

标准库io接口:fopen close fwrite fread fseak​ r:​ r+​ w​ w+​ a​ a+stdout stdin stderr 类型: FILE* 文件流指针注意:文件中包含任意数据处理时要小心,使用完之后要使用fclose关闭避免资源泄露标准库io接口的操作句柄是FILE*结构体是...

2019-05-06 12:41:27 162

空空如也

空空如也

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

TA关注的人

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