![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++基础
我是小飞猪
小飞猪飞飞飞\n
小肥猪肥肥肥\n
小爪猪biubiubiu\n
展开
-
环形数组循环
给定一个含有正整数和负整数的环形数组 nums。 如果某个索引中的数 k 为正数,则向前移动 k 个索引。相反,如果是负数 (-k),则向后移动 k 个索引。因为数组是环形的,所以可以假设最后一个元素的下一个元素是第一个元素,而第一个元素的前一个元素是最后一个元素。确定 nums 中是否存在循环(或周期)。循环必须在相同的索引处开始和结束并且循环长度 > 1。此外,一个循环中的所有运动都必须沿着同一方向进行。换句话说,一个循环中不能同时包括向前的运动和向后的运动。示例 1:输入:[2,-1,1,原创 2020-07-26 10:32:52 · 492 阅读 · 0 评论 -
位运算应用
位运算:基本上是数据运算里面速度最快的了,很多操作都可以采用位运算来进行计算。笔试又碰见了位运算的题目,剑指offer上页重点讲了位运算的原理,觉得还是非常重要的。判断奇偶:判断奇偶只需要二进制的最后一位就可以,二进制最右位位0则为偶,否则为奇比如:5 = 101 6 = 110,这很容易看出。 5 & 1 计算机运算时转为101 &001 =1,则为奇数。计算数的二进制包含多少个1。这跟1)很像,1)里面仅是判断最后一位是否位1,这种情况则是判断其他位上是否为1。同样的,我们可以原创 2020-06-22 20:16:44 · 128 阅读 · 0 评论 -
c++ - 简单的回声服务器和客户端
功能客户端发送字符串到服务器,服务器接受字符串并返回,客户端接收自己发送的字符串,并打印。流程:正常流程学习并作为一个简单案例为记录。问题在编程程序中,出现了一个问题,导致server一直监听不成功。原因:在socket创建中,填写的是AF_INET, SOCK_DGRAM,填写的IP协议是是UDP协议,导致listen一直不成。server#include <iostream>#include <string>#include <sys/socket.h&原创 2020-05-20 22:30:14 · 427 阅读 · 0 评论 -
网络编程之Epoll
网络编程之EpollLinux平台下使用Epoll进行IO复用的方法,两种触发方式:条件触发和边缘触发Epoll基本原理和过程使用epoll_create来创建保存epoll文件的内存空间使用epoll_ctl在上文创建的内存空间注册监视的文件描述符使用epoll_wait监视已注册好的文件描述符,只要有描述符读或写的epoll_event,epoll_wait就会返回,后续进行遍历操...原创 2020-03-25 10:43:22 · 134 阅读 · 0 评论 -
B+树
B+树####### 传送门特征B+树是一种树数据结构,是一个n叉树,每个节点通常有很多个孩子,一颗B+树包含根节点、内部节点和叶子节点。B+树通常用于数据库和操作系统的文件系统中。B+树的特点是能够保持数据稳定有序,其插入于修改有较稳定的对数时间复杂度。B+树元素自底向上插入。一个m阶的B树特征根节点至少两个子女每个中间节点都至少包含ceil(m/2)个孩子,最多拥有m个孩子每一...原创 2020-03-25 10:24:47 · 224 阅读 · 0 评论 -
数据库事务
数据库事务 数据库事务是指作为单个逻辑工作单元执行的一系列操作,要么完全执行,要么完全不执行。事务处理可以确保除非一个逻辑单元内的所有操作全部完成,否则永久不更新数据库资源。通过组合一系列操作组合作为一个要么成功要么不成功的逻辑单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑单元要成为十五,必须拥有所有的ACI...原创 2020-03-25 10:15:21 · 123 阅读 · 0 评论 -
数据库索引
数据库索引 据库索引是数据库表中一列或多列值进行排序的一种结构,使用索引可以快说访问数据库表中的特定信息。 索引的一个主要目的是加快检索表中数据的方法,也能协助信息搜索者更快得找到符合限制条件的记录的一种辅助数据结构。 ...原创 2020-03-24 13:55:40 · 72 阅读 · 0 评论 -
SOCKET编程钟服务器与客户端主要用到哪些函数
SOCKET编程钟服务器与客户端主要用到哪些函数TCPserver创建一个socket,socket()绑定ip,port等信息,bind()设置允许的最大连接数,listen()接受客户端上来的连接,accpet()收发数据,send()/recv()或者read()/write()关闭连接,close()client创建一个socket,socket()设置想要连接...原创 2020-03-24 13:54:22 · 407 阅读 · 0 评论 -
HTTP协议、get、post的区别
HTTP协议协议HTTP(Hyper Text Tranfer Protocol)超文本传输协议的缩写,适用于万维网服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传输数据。HTTP是一个属于应用层的面向对象的协议,由于其简介、快速的方式没适用于分布式超媒体信息系统。HTTP协议工作于客户端-服务器架构上。浏览器作为HTTP客户端通过URL想HTTP服务器...原创 2020-03-24 13:53:48 · 144 阅读 · 0 评论 -
TCP和UDP的区别及使用场景
TCP和UDP的使用场景TCP和UDP的区别TCP是面向连接的传输层协议,传输数据之前必须先建立连接;UDP是无连接传输。TCP是点对点服务,一条TCP连接只有连个断点;UDP是多对多连接交互通信。TCP是可靠连接:无差错、无重复、无丢失、按序到达;UDP:尽最大努力交付,不保证可靠性。TCP由拥塞控制和流量控制保证数据传输的安全性;UDP无拥塞控制,网络拥塞不影响发送速率。TCP是...原创 2020-03-24 13:53:03 · 1627 阅读 · 1 评论 -
TCP拥塞控制
TCP拥塞控制发送双方都拥有一个拥塞窗口的状态变量。拥塞窗口的大小取决于网络的拥塞成都,并且动态地在变化。慢启动:设定一个拥塞窗口阈值,刚开始拥塞窗口从1开始指数增长,在超过阈值后使用加法增长。发生拥塞时,将阈值降低一半,重新开始拥塞窗口的增长。快重传和快恢复:快重传在接收到接收方一个失序的报文段后立即发出重复确认,而不等到自己发送数据时稍待确认。发送方只要一连收到三次重复确认就立即重传对方...原创 2020-03-24 13:52:20 · 346 阅读 · 0 评论 -
TCP连接的过程及原因
TCP三次握手是怎么样的客户端发送SYN=1,seq=x给服务器服务器回复ACK=x+1、SYN=1,seq=y给客户端客户端回复ACK=y+1给服务器TCP握收为什么两次不可以,为什么不用四次两次不可以:TCP是全双工通信,两次握手只能确定单向数据通信,并不能保证反向通信正常不用四次:前三次已经确定了数据在两个方向上可以进行通信,如果再次确认一次,则与第一步重复,减慢了效率。...原创 2020-03-24 13:51:56 · 183 阅读 · 0 评论 -
server端监听端口,但是没有客户端连接进来,此进程处于什么状态
server端监听端口,但是没有客户端连接进来,此进程处于什么状态最普通的Server模型,则处于阻塞状态;如果使用IO复用中epoll、select等,则处于运行状态。...原创 2020-03-24 13:51:16 · 1496 阅读 · 0 评论 -
TCP/IP数据链路层的交互过程
TCP/IP数据链路层的交互过程网络层等在数据链路层用MAC地址作为通信目标,数据包到达网络层等往数据链路层发送的时候,首先回去ARP缓存表去查找ip对应的MAC地址,如果查到了,就将此ip对应的MAC地址封装到链路层数据包的包头。如果缓存中没有找到,则会发起一个广播,who is ip xxx tell ip xxxx,所有收到广播的机器看到这个ip是不是自己的,如果是自己的,则以单播的形式将...原创 2020-03-24 13:49:59 · 930 阅读 · 0 评论 -
TCP/IP数据链路层的交互过程
TCP/IP数据链路层的交互过程网络层等在数据链路层用MAC地址作为通信目标,数据包到达网络层等往数据链路层发送的时候,首先回去ARP缓存表去查找ip对应的MAC地址,如果查到了,就将此ip对应的MAC地址封装到链路层数据包的包头。如果缓存中没有找到,则会发起一个广播,who is ip xxx tell ip xxxx,所有收到广播的机器看到这个ip是不是自己的,如果是自己的,则以单播的形式将...原创 2020-03-24 13:49:31 · 941 阅读 · 0 评论 -
TCP拥塞控制
TCP拥塞控制,以及到达什么情况的时候开始减慢增长的速度拥塞控制是防止过多的数据注入网络,是得网络中的路由器或者链路过载。流量控制是点对点的通信量控制,而拥塞控制是全局的网络流量整体性的控制。发送双方都拥有一个拥塞窗口—cwnd。慢开始最开始发送方的拥塞窗口大小为1,由小到大逐渐增大发送窗口和拥塞窗口。每经过一格传输轮次,拥塞窗口加倍。当拥塞窗口超过慢开始上限阈值,则使用拥塞避免算法,避免...原创 2020-03-23 15:06:25 · 293 阅读 · 0 评论 -
TCPTCP三次握手和四次挥手的原因和过程
TCP三次握手和四次挥手的过程TCP三次握手过程C->SYN->SS->SYN/ACK->CC->ACK->S三次握手的原因:三次握手可以防止失效的连接请求报文突然又传输到服务器导致服务器资源的浪费。TCP四次挥手过程C->FIN->SS->ACK->CS->FIN->CC->ACK->S四次...原创 2020-03-23 15:05:42 · 145 阅读 · 0 评论 -
OSI和TCP/IP模型
OSI七层模型和TCP/IP四层模型OSI七层模型物理层:通过媒介传输比特,确定机械及电气规范,传输单位为bit主要协议包括:IEE802.3、CLOCK RJ45数据链路层:将比特组装成帧,传输单位为帧主要协议为:MAC、VLAN、PPP网络层:负责数据包从源到宿的传递和网际互连,传输单位为包主要协议为:IP ARP ICMP ARP:根据IP获取物理地址传输层:提供端到端的可...原创 2020-03-23 15:03:28 · 121 阅读 · 0 评论 -
操作系统中断
操作系统中的中断中断是指CPU对系统发生的某个事件做出的一种反应,CPU暂停正在执行的程序,保存现场后去执行相应的处理程序,处理该事件完成后再返回终端出继续执行原来的程序。中断一般分为三类:由CPU外部引起的,如IO中断、时钟中断来自CPU内部时间或程序执行中引起的中断,例如程序非法操作、地址越界、浮点溢出程序中使用了系统调用引起的中断处理一般分为中断响应和中断处理两个步骤,中断响应由...原创 2020-03-23 15:02:25 · 446 阅读 · 0 评论 -
c++之https和http的区别
HTTP和HTTPS的区别,以及HTTPS的缺点区别HTTP协议是以明文的方式在网络中传输数据,而HTTPS协议传输的数据是经过TLS加密后的,HTTPS更具有安全性。HTTPS在TCP三次握手阶段之后,还需要进行SSL的handshake,协商加密使用的堆成加密密钥。HTTPS协议需要服务端申请证书,浏览器端安装对应的根证书HTTP协议端口是80,HTTPS协议端口是43HTTP...原创 2020-03-23 15:00:58 · 449 阅读 · 0 评论 -
TCP详细过程
Tcp怎么保证可靠性####(1)、序列号、确认应答、超时重传数据达到接收方,接受方会发送一个确认应答序列,确认应答序列说明发送方下一次需要接受的序列号。如果接收方迟迟为收到确认应答,那么可能是发送方数据丢失或者确认应答序列丢失,在经过一段时间差后,发送方会进行此数据段的重传。这个时间差一般是2*RTT(报文往返时间)+ 一个时间差。####(2)、窗口控制与高速重发控制(重复确认应答)T...原创 2020-03-23 15:00:12 · 991 阅读 · 0 评论 -
线程、进程
线程、进程引入进程原因进程是为了提高cpu的利用率,减少程序等待带来的cpu空转以及其他计算机软硬件资源带来的浪费引入线程原因为了减少进程切换和创建的开销,提高执行效率和节省资源区别调度:线程是独立调度的基本单位,进程是拥有资源的基本单位。进行线程的切换不会引起进程的切换,进行进程的切换会引起线程的切换。拥有资源并发:都可以并发系统开销:切换开销不一样,页全局目录、硬件上下文、...原创 2020-03-23 14:58:34 · 72 阅读 · 0 评论 -
C++之static和const的作用
static 的作用函数体内static变量的作用范围尾该函数体,不同于auto,该变量只被内存分配一次,下次调用时仍保持上次的值在模块内的static可以被模块内函数所访问,但不能呗模块外部访问模块内的static函数同2类中static成员变量属于整个类,对类的所有对象只有一份拷贝类中statci成员函数属于整个类,不能接受this指针,因而只能访问类的static变量cons...原创 2020-03-23 14:57:42 · 191 阅读 · 0 评论 -
C++之数据结构模拟浏览器前进后退的操作
用数据结构模拟浏览器前进后退的操作使用一个数组vector来保存当前页面的结构内容信息使用一个索引来表示当前页面在数组中的索引,便于后退前进出现新页面,则向后添加,索引表示到数组尾...原创 2020-03-23 14:57:06 · 896 阅读 · 0 评论 -
git之 pull和fecth的却别
git pull和git fetch的区别fetch:相当于从远程获取最新的版本到本地,不会自动mergepull:相当于从远程获取最新的版本当本地并自动merge原创 2020-03-23 14:56:21 · 182 阅读 · 0 评论 -
C++之make、cmake和makefile的区别
make、cmake和makefile的区别make:此工具类似于批处理工具,可以对多个源文件进行批量地编译和链接makefile:是一个文本文件,其中包含了make工具在执行时所要遵循的一系列规则Cmake:用来生成makefile文件,以便make工具进行调用...原创 2020-03-22 13:41:15 · 1595 阅读 · 0 评论 -
C++/Linux之内存映射mmap(memory map)
mmap内存映射原理mmap是unix/linux下的系统调用。mmapmmap 是以一种内存映射文件的方法,即将一个文件或者其他对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟空间中一段虚拟地址的一对一关系;实现这样的映射后,进程就可以采用指针的方式读写操作这一块内存,而系统会自动回写脏页面(未提交的数据)到对应文件磁盘上,即完成了对文件的操作而不是调用read/write等系统调用,...原创 2020-03-22 13:40:07 · 1872 阅读 · 0 评论 -
Mysql之乐观锁和悲观锁
Mysql的锁悲观锁乐观锁的特点是先获取锁,再进行业务操作,即“悲观”的认为获取锁是非常有可能是白的,因此要先确保获取锁成功在进行业务操作。通常所说的“一锁二查三更新”即指的的是使用悲观锁。通常来讲在数据库上的悲观锁需要数据库本身提供支持,即通过select … for update操作来实现悲观锁。与其他此操作互斥,会在完成本事务后自动释放锁。注意:不同的数据库对select for up...原创 2020-03-22 13:38:59 · 192 阅读 · 0 评论 -
C++之继承、多态、封装
继承、多态、封装继承继承是面向对象的重要概念,如果类B继承类A,就把这个B成为A的子类,A成为B的父类。继承成可以使子类拥有父类的各种属性和方法,而不需要再次编码,在子类继承父类的同时,可以重新定义某些属性,并重写某些方法或者定义新方法。多态多态可以使我们以相同的方式处理不同类型的对象,只要他们继承了或实现了相同的类型。这样就可以不必为每一种类型的对象编写不同的逻辑,极大提高了代码重用率。...原创 2020-03-22 13:37:25 · 153 阅读 · 0 评论 -
数据结构之红黑树
红黑树红黑树:是一种自平衡二叉查找树。红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n是树中元素的数目。在STL中,set、map、multiset、multimap底层都用的红黑树。...原创 2020-03-22 13:34:44 · 184 阅读 · 0 评论 -
C++之智能指针
智能指针独占指针(unique_ptr):c++11以后代替不安全的auto_ptr。他对对象拥有独占权,两个独占指针不能指向同一个对象,即此智能指针不能共享它的对象。共享指针(share_ptr):是一种标准的共享所有权的智能指针,允许多个指针指向同一个对象。弱指针(weak_ptr):被设计为与共享指针共同工作,可以从一个共享指针或者另一个弱指针对象构造而来。是为了配合共享指针而引入的...原创 2020-03-22 13:34:13 · 93 阅读 · 1 评论 -
数据结构之单链表找环
单链表找环快慢指针,快指针一次走两步,慢指针一次走一步,总会碰头。set集合/hasp表原创 2020-03-22 13:33:23 · 152 阅读 · 0 评论 -
C++之内存管理
内存管理c++内存分配方式:堆、栈、全局/静态存储区、常用量存储区c++内存的分配和释放栈区在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内至于处理器的指令集中,效率很高,但是分配的内存容量有限。栈地址由高地址向低地址增长。堆堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配。堆由低地址向高...原创 2020-03-22 13:32:03 · 184 阅读 · 0 评论 -
数据结构之前缀树
前缀树:又称为单词查找树,是一种树形结构,哈希树的变种。主要作用是排序和保存大量字符串。经常被用于搜索引擎系统的词频统计。有点:利用字符串的公共前缀减少查询时间,最大限度的减少无所谓字符串的比骄傲,查询效率比较高。特点:根节点不包括字符,除根结点外每一个节点都只包含一个字符;从根节点到某一结点,路劲上经过的字符连接起来,为该节点对应的字符串;每个节点的所有子节点包含的字符都不同。...原创 2020-03-22 13:31:13 · 185 阅读 · 0 评论 -
Linux-评价服务器性能
如何评价服务器的性能:1) cpu使用量,内存使用量,IO, 网络的占用率;2) 系统负载指运行队列的平均长度,也就是等待CPU的平均进程数。;3) 吞吐率:服务器单位时间内处理的请求数,一般用来描述并发能力,当然谈吞吐率的前提是并发用户数。不同的并发用户数下,吞吐率自然大不相同。4) TPS:服务器每秒处理的事务数。...原创 2020-03-22 13:30:35 · 289 阅读 · 0 评论 -
C++之对大小写不敏感的map
这是一道面试题方法一当时面试时,使用(源字符串,小写字符串)为key,value不变,作为键值对存储。这种方式比较占空间。方法二对stlmap进行继承和方法重写,这种方法更好,接口也不变。需要的只是在新map类钟需要有一个string字符串空间。插入重写查询重写赋值重写保存源字符串…...原创 2020-03-22 13:29:15 · 1387 阅读 · 0 评论 -
C++之内存申请malloc/new的区别
malloc、new对象不同区别malloc/free是C的库函数,new/delete是C++的运算符,都用于动态申请内存和释放内存;第二,对于非内部数据类型的对象,对象在创建时要自动构造,销毁前要自动析构,这种情况只能用new/delete,因为malloc/free是库函数,不在编译器控制权限内,不能把构造和析构的任务强加到malloc/free上。申请的内存所在位置不一样new才佐...原创 2020-03-22 13:26:08 · 653 阅读 · 0 评论 -
数据库设计原则
数据库设计原则表设计原则:标准化和规范化,尽量减少数据冗余、采用数据驱动、在设计表时就要考虑到以后会有数据字段的变更字段设计原则:增加修改日期,创建日期,创建者、版本记录、删除标记键和索引:1)键:所有的键必须唯一、为关键字添加外键 2)合理地使用索引...原创 2020-03-22 13:24:49 · 280 阅读 · 0 评论 -
C++之C++11新特性
C++ 11新特性nullptr:替代NULL,为指针指空特指。auto和 decltype类型推导,让编译器来推到判断变量类型。区间迭代:for each列表初始化:统一的初始话语法来初始任意对象(正常是按序)。模板类型别名默认模板类型参数Lambda表达式新增容器:array, forward_list,tuple,无序容器正则表达式右值引用和move函数语言级线...原创 2020-03-22 13:24:13 · 86 阅读 · 0 评论 -
C++之死锁的必要条件
死锁的必要条件请求和保持互斥条件不可抢占条件循环等待原创 2020-03-22 13:23:47 · 245 阅读 · 0 评论