自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SkipList ----- 跳表

1.跳表,也是基于链表实现的,他其实和链表一样,也是一个数据结构中的查找结构,用于解决一些查找问题而产生。链表我们知道,每次都是一个节点指向一个节点,中间没有跳过任何节点,一条路指到头的,所以他的查找的时间复杂度都是O(N)。如下图,就是一个链表的形式。因为链表的查找时间很慢,所以制造跳表的人就想了想,如果说每次相邻的两个节点升高一层,增加一个指针,让指针指向下下个节点,这样新增加的节点又构成了一个链表,并且长度是原来链表长度的一般,这样我们查找一个数的时候,查找效率会提高一倍。

2022-10-07 00:26:24 787

原创 Least Recently Used ----- (LRU)

catch其实就是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。广义上的Cache指的是位于速度相差较大的两种硬件之间, 用于协调两者数据传输速度差异的结构。实现LRU Cache的方法和思路很多,但是要保持高效实现O(1)的put和get,那么使用双向链表和哈希表的搭配是最高效和经典的。使用双向链表是因为双向链表可以实现任意位置O(1)的插入和删除,使用哈希表是因为哈希表的增删查改也是O(1)。主要是通过以上链表和哈希表进行操作的。

2022-10-03 19:09:45 919

原创 数位dp + 记忆化搜索

2.还是同样的上面的题,对于上面题目我们发现,如果说此时遇到了11333这个数字,进行遍历完,然后继续往后遍历,就肯定会遍历到12333这个数字,此时我们其实可以当12333这个数字遍历到123前三位的时候就可以将这个数据是否为正确的数进行返回了,因为后面是不管出现什么情况,都已经在113?对于上题,如果说我们只是通过暴力遍历的方法,那么在进行操作的时候,要取到每一个数,然后对这个数字进行去位,然后判断的话,那么就会用很长的时间,在一些题目中直接就超时了,那么我们这时就应该想到通过数位dp的方法进行解决。

2022-10-02 18:19:11 1623

原创 B-树----(多插平衡树)

B树:有序数组+平衡多叉树。B+树:有序数组链表+平衡多叉树。B*树:一棵更丰满的,空间利用率更高的B+树。

2022-09-17 21:46:09 740

原创 图Graph

1.图是什么?图是由顶点集合及顶点间的关系组成的一种数据结构:G = (V, E)。其中:而:顶点和边:图中结点称为顶点,第i个顶点记作vi。两个顶点vi和vj相关联称作顶点vi和顶点vj之间有一条边,图中的第k条边记作ek,ek = (vi,vj)或。(x, y)表示x到y的一条双向通路,即(x, y)是无方向的;Path(x, y)表示从x到y的一条单向通路,即Path(x, y)是有方向的。(所以就有了图的两个结构,一个是有向图,一个是无向图)2.有向图和无向图①有向图和无向图:在有向

2022-09-08 14:44:42 1192

原创 并查集UnionFindSet (ufs)

①例子:比如有10个人去了学校,其中4个人是来自同一个地方的,3个人是来同自一个地方的,剩下3个人也是来自同一个地方的,那么开始这10个人是互不相识的,都是一个小个体,然后给这个几个人进行标识{0,1,2,3,4,5,6,7,8,9};但是没过多久,这几个人因为是来自同一个地方的人有相同的爱好,就走到了一起,所以这几个人要组合。我们用森林的形式进行表示,取一个该组的成员成为根(其实这个根随便选,只要是该组的一个就好了,而我们为了方便,以小号选择根节点),其他属于该组的成员成为其孩子节点就好了。...

2022-08-31 21:56:59 568

原创 算法之路-------贪心算法

②:因为股票的价格是起伏的,所以我们找到最低点买入,最高点卖出,而我们可以通过看这个股票的价格是否是在继续涨价而判断我们是否要卖这个股票,但是这样的算法实现起来会很困难,所以我们使用的是如果当前的股票的价格比我们买股票的时股票的价格大,就直接卖出。③:通过②了解到,我们卖股票的时候只要当前股票价格比我们买入的股票价格大,我们就卖出,然后将买入的股票定位为当前卖出时的股票,而如果买入的股票价格大于当前股票的价格,则当买入的股票定位为当前的股票价格。(说白了也就是假买假卖的思想)但是这样实现的会比较简单。

2022-08-25 16:24:10 332

原创 LInux学习------高级IO

select和poll:效率会随着描述符的增多而降低,并且select的实现较为复杂,但是如果是单描述符的监控,或者单描述符的超时控制非常适用。epoll:性能不会随着描述符的增多而降低,适于针对大量描述符的监控场景,而不太适合单描述符的超时控制,因为它需要在内核中创建句柄,进行各种操作,如果不用了还要进行销毁操作。要么适用单个描述符的超时控制,要么针对大量描述符的事件监控。在对于大量描述符事件监控的场景时,只适用于有大量描述符,但同一时间少量就绪的情况。

2022-08-21 14:21:20 897

原创 网络学习总结

源端主机给目的端主机发送ICMP请求报文进行询问,目的主机接收后,必须给源端主机发送ICMP回答报文进行回答,这下源端主机就知道目的主机可以连接成功)①递归查询:一路从本地域名服务器往上递归经过根域名服务器、顶级域名服务器、权限域名服务器,然后返回。②迭代查询:由本地域名服务器挨个访问根域名服务器、顶级域名服务器、权限域名服务器,然后返回。③:为了提高DNS的查询效率并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛的使用了。①:因特网所采用的是层次树状结构的域名结构。...

2022-08-07 22:18:15 932

原创 数据链路层-------以太网协议

1.MAC地址的作用:当多台主机连接到同一个广播信道上,如果说一台主机发送数据到广播信道上,所有主机都会接收到,对于该广播信道上的所有主机而言,通过发送数据上携带的标志信息,才能知道这个数据是不是发送给自己的。假设主机A要给主机B发送数据包,但是我们知道,主机A是不知道主机B的MAC地址,并且如果一个主机接收到的数据报上的MAC地址与自己的MAC地址不匹配的话,会直接将这个数据包丢弃,所以我们在发送数据的时候肯定会将接收方的MAC地址搞到手,而这个操作就是ARP协议的作了。然后给主机A发送ARP响应报文。.

2022-08-03 20:20:30 4068 1

原创 算法之路-------回溯算法

而递归就是对当前的处理进行递归,也就是如上面查找节点,我们对每个节点的左右子节点都进行查找,这样查找的就是全树的节点,并且它的查找方式是从节点开始,一致到最左边的一个节点,也就是遍历的时候,直接一开始搜索到二叉树的最底层,然后开始往上回溯(也就是回溯的官方定义,如果说我们遍历的这个节点是根节点或者是空节点,那么就代表此次递归到头了,要返回上去,由上一层再选择另外一个子节点进入,如果说另外一个子节点都已经被使用了,那么就继续往上走就证明此路不通了,要继续向上返回找通路)而这种搜索方式和回溯的很像。...

2022-07-30 19:29:31 1450

原创 网络层协议------IP协议

②例子2IP地址与子网掩码与得到网络号,但是在该子网中,它的最后一个子节的二进制是"11110000"(只看最后一位的原因是子网掩码前三个子节的十进制都是255,二进制表示为"11111111",这个数与任何数就等于与它与的哪个数),而IP地址的最后一个子节的68表示的二进制是"01000100",所以与下来之后是"01000000"对应的十进制也就是64,这样就可以得到其网络号是多少,然后由于子网掩码最后的bit位为0的位置有4个,最大数量表示为15,所以子网地址的范围如上所示。...

2022-07-28 21:06:49 2703

原创 算法之路-------差分数组

针对数组中连续的大量数据进行修改的问题,如果我们对每个数据都进行依次修改,对于一些少量的数据的修改(例如:1~100这些的),修改的时候我们发现速度貌似还是很快的,但是一旦修改的连续数组中的数量上万了,那么修改的速率就明显下降了。所以:针对这样的情况,就出现了差分数组。1.差分数组的概念:①差分数组:其实也就是一个额外的数组(说白了,就是为了挽回时间效率而利用空间去开辟一个数组帮我们更好的去管理一些数据),这个数组是为要改动的目标数组进行数据管理的。②差分数组与要管理数组的关系:假设要管理的数据为a,差分数

2022-07-21 23:04:00 8279 2

原创 第三方库的认识与使用

1.当要实现网络数据传输或持久化存储的时候:需要按照指定的数据格式组织,这样才能在使用数据的时候能更好的解析出来。2.json的格式:json是一种数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。具体格式内容我们用下面一个例子来解释:例如:这是同学小明的信息如下:那么用json这种数据交换格式是将这多种数据对象组织成为一个文本字符串格式,如下:组织成这种格式,例如上例,如果有多位同学,那么每个同学都会将自己的信息在{}中以键值对的形式(名称:数值)进行显示,并且不同的同学在[]中以逗号间

2022-07-13 21:11:23 2542

原创 传输层协议------TCP协议

1.首先我们先看TCP协议段格式的样子为:大致包含的内容如上图所示。其中,字段中的每个不同的内容都有着不同的作用。首先,如下图:由于在tcp的传输中,tcp将每个字节的数据都进行编号,称为序列号。假设客户端和服务端已经建立好连接在发送数据。客户端在给服务端发送数据的时候,会将自己所发送的数据对应的每个序列号发送给服务端,而服务端进行接收数据后,会将这些数据的每个序列号进行确认,当服务器接受完此次客户端发送的数据后,会给客户端发送一个确认序列的信号,而这个确认序列的信号大小就等于服务器接收数据的序列号

2022-07-10 14:28:58 1844 4

原创 传输层协议------UDP协议

1.作用:其实就是一个标识符,用来区分应用层中不同的进程。但是在通信中,端口号非常重要。一个五元组信息是通信中必备的信息,而端口号就占了两个,一个通信的成功进行,五元组必不可少,所以对于源端端口号和对端端口号都必须知道。2.端口号的表示:端口号的表示是用16个比特位进行标识的,也就是2个字节,标识的范围为0~65535。其中:对于不同的区间有着不同的划分。注意:端口号只具有本地意义,只是为了标识本计算机的应用层的各进程,而在因特网中,不同的计算机中相同的端口号是没有关系的。3.除了端口号,其实还有个协议

2022-07-03 10:19:05 1298 1

原创 应用层 ------ HTTP协议

1.概念:应用层为我们计算机网络体系结构的最高层,以下的每一层就是为其服务的,说白了就是我们经常接触的那一层,这层也是满足我们日常生活的一些需求的网络程序。例如:我们经常使用的qq,网站的访问,以及应用软件这一切的都是在应用层。2.作用:负责应用程序之间的数据沟通,但是对于这些应用程序,它都是又人为编写出来的,所以它就像上面我们写的加法器一样,应该有着自己的协议,有了这些协议,应用层程序之间的交流才会流畅。应用层的协议有很多,例如:HTTP协议(超文本传输协议)、FTP协议(文件传输协议)、SMTP协议(邮

2022-07-02 11:59:25 1526

原创 “再谈”协议

如果我们要指定一个计算器,那么客户端就应该将两个数据和一个运算符号发给服务器,服务器进行解析后计算后将最终数据发给客户端。例如:我们要指定一个加法器,那么客户端就应该给服务端发两个数据和一个“+”符号,那么对于服务器,他肯定有自己的一个协议,这个协议就是约定方案,约定了客户端在请求服务端的时候,应该将数据以什么方式发送,数据最终以什么方式返回来,只有这样的操作,客户端才能得到客户们想要的结果。例如:我们要制定一个加法器,那么我们应该又以下一些协议约定一:约定二:上面只是写了约定的一部分,因为对于我们实现一

2022-06-24 18:00:35 192

原创 Linux------网络套接字编程(二)

由于TCP的协议的服务,他是提供一个可靠的,面向字节流,有连接的传输服务,所以他与UDP协议是有部分不同的,但是还是右部分是相同的。具体工作的步骤如下:1.TCP服务端通信服务的步骤:2.TCP客户端通信的操作步骤:TCP通信程序的函数接口和UDP通信程序的函数接口有相同的也有不同的,如下:1.创建套接字:其中:domain:地址域类型,由于我们目前学习是IPV4地址域类型,所以填写AF_INET。type:数据传输方式,因为是TCP协议的通信,所以需要的可以提供面向字节流,可靠的,基于连接的流式套接字

2022-06-19 17:09:11 850 1

原创 Linux-----网络套字编程(一)

1.在网络通信中,我们去将一个数据给另一个用户去发送的时候,其实并不是直接交到另一个用户的手里的,而是将这个数据发给一个服务端,服务端通过客户端发送的数据,从里面提取到一些给谁的信息,此时服务端会找到这些信息所对应的用户,然后等待这些用户上线之后,将这些数据给其发过去,实现了网络通信。2.通过上面的网络通信的大致路径,我们也就知道了,进行网络通信的时候,我们为什么在发送的数据的时候要加上源端ip地址,源端口号,对端ip地址,对端口号,这样服务端才能对发来的数据进行操作。3.客户端和服务端①:客户端:网络通

2022-06-12 23:07:05 827

原创 网络基础(1)-----认识网络

网络基础1计算机网络背景网络发展ip地址和端口号MAC地址网络的模型及协议网络传输的流程网络字节序计算机网络背景网络发展1.独立模式:计算机之间相互独立。2.网络互联:多台计算机连接在一起,完成数据共享。其中,A,B,C是不同的计算机,但是他们共有一个服务器,通过服务器进行数据共享。3.局域网和广域网①:局域网(LAN):计算机数量多了,通过路由器和交换机连接起来,如下图:其中交换机的作用就是将服务器和客户机连接起来,并且通过路由器与另外的服务器的交换机连接起来。(其实在现实生活中,交

2022-05-31 00:33:40 1548

原创 Linux学习------多线程(4)-----线程应用

线程应用线程池单例模型线程池单例模型

2022-05-25 08:21:22 237

原创 算法之路-------KMP算法

这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录

2022-05-24 18:24:22 225

原创 Linux学习------线程(3)------线程安全

线程安全概念以及实现方法互斥互斥锁死锁同步条件变量同步的实现概念以及实现方法1.概念:多线程对同一临界资源的访问是安全的。因为对于临界资源,多个线程同时对其进行修改,就会出现数据的二义性。例如:这段程序运行的时候,两个进程对变量a进行操作,我们想的的出来的结果应该是a是按顺序加的,但是并不是,是会出现错误的,如下:我们发现并没有按顺序去进行,这是为什么呢,这就是多线程的安全问题了,对于像全局变量这种临界资源,如a,不同的线程对其操作,他都会改变,并且,我们知道,每个线程在pcb上运行的时间是相

2022-05-22 21:59:19 370 1

原创 Liunx学习-----多线程(2)-----线程的创建与使用

线程的创建与使用线程的创建线程的终止线程的等待线程的分离线程的创建线程的终止线程的等待线程的分离

2022-05-15 23:07:37 286

原创 Linux学习-------多线程(1)-------了解线程

线程线程的概念线程与进程之间的关系线程与线程之间的关系多线程与多进程在任务处理中的优缺点线程的概念线程与进程之间的关系线程与线程之间的关系多线程与多进程在任务处理中的优缺点...

2022-05-14 22:21:16 283

原创 Linux学习-----(进程信号)

这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录

2022-05-12 20:38:46 886

原创 Effective C++学习------让自己习惯C++

让自己习惯C++C++为一个语言联邦尽量用const,enum,inline代替#define尽量使用const确保对象在使用前已经被初始化C++为一个语言联邦尽量用const,enum,inline代替#define尽量使用const确保对象在使用前已经被初始化...

2022-05-08 15:23:03 598

原创 Liunx学习之-----IPC---(进程间通信)

进程间通信管道匿名管道命名管道共享内存消息队列信号量1.进程间通信在linux下是非常重要的,我们知道在linux下不同的进程的操作是互不干扰的(独立性,这是因为每个进程都有自己的独特的虚拟地址,而这个虚拟地址就是进程与物理内存沟通的桥梁,对于不同的进程,相同的虚拟地址位置会映射到不同的物理内存上,所以进程具有独立性),那么我们难免会遇到一个进程需要另一个进程的东西,那么对于进程间通信,在这些方面就非常重要。2.进程间通信的目的:数据传输:一个进程将自己的数据传输给另一个进程。资源共享:多个进程共

2022-05-03 13:14:14 475 1

原创 C++学习之空间配置器--------(二级空间配置器)

二级空间配置器出现的原因二级空间配置器的原理二级空间配置器的简单模拟实现出现的原因二级空间配置器的原理二级空间配置器的简单模拟实现

2022-04-26 23:45:57 1865

原创 MySQL----(多种查询方法)

查询的多种方法数据库的约束类型表的设计新增查询聚合查询联合查询数据库的约束类型约束类型:在数据库中一共有6中约束类型,其中分别如下:1.not null类型:功能:指某列不能出现null类型:例如:创建上表,此时我们添加一个id为null的值就会出错。2.unique约束:功能:唯一约束,对列使用后,这列的数据就是唯一的,不能重复。例如:我们创建以上表,并对其加入id相同的数据,如下:那么就会出错。3.default约束:功能:设置默认值,当一个数据插入是为空时,可以设置其

2022-04-23 19:22:41 1851

原创 MySQL数据库基础操作-----(基础增删查改)

增删查改新增查询修改删除新增1.新增语法:insert [into] table_name values();其中:①:[]里面的into可加可不加。②:()里面的数据为要插入的数据。首先我们先创建一个学生表,如下:如表中有三个数据(其中comment为解释,解释这个数据的什么)。2.对上面创建的表插入单行数据(并且是全列插入)(新增的数据必须与表中的数据多少,列数相同)例如:我们新增以下数据然后我们查看表的内容:就看到表中就有一个与插入数据相同的一行数据。3.对上面的表进

2022-04-20 20:33:50 476

原创 MySQL数据库基础-----(基础操作)

MySQL数据库基础操作数据库的操作常用的数据类型表的操作本篇均以Linux下的MySQL进行操作。数据库的操作1.显示当前的数据库show databases;这是显示数据库中的所有的数据库,使用结果:2.创建一个数据库创建语法为:create database if not exists database_name;其中:if not exists :可以写也可以不写,它的使用就是检查是否写重表了,如果不加if not exists,那么如果创建的表已经存在,那么就会创建失败,如

2022-04-19 09:19:43 252

原创 关于operator new的异常处理机制

关于new的内存开辟问题operator newnew-handler和set_new_handleroperator new内存开辟失败异常处理operator newnew-handler和set_new_handleroperator new内存开辟失败异常处理

2022-04-17 20:06:46 1388

原创 Linux---系统编程阶段------(基础IO)

基础IO常用的IO接口库函数IO接口系统调用IO接口文件操作符和文件流指针动态库和静态库的生成和使用常用的IO接口库函数IO接口系统调用IO接口文件操作符和文件流指针动态库和静态库的生成和使用...

2022-04-16 19:06:21 1267

原创 C++学习-------程序异常处理

程序异常处理一级标题二级标题三级标题四级标题一级标题二级标题三级标题四级标题

2022-04-13 23:25:59 939 1

原创 C++学习-------C++11标准新出的操作

C++11标准C++11简介列表初始化变量类型推导范围for循环final和override智能指针默认成员函数的控制右值引用lambda表达式线程库C++11简介在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于TC1主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真

2022-04-11 18:25:01 230

原创 Linux---系统编程阶段-------(进程控制)

进程控制进程创建进程终止进程等待进程间程序替换进程创建1.进程创建函数:①:pit_t fork(void);其中pit_t实际上为int类型,返回的是子进程的id。其头文件为:#include<unistd.h>主要作用是在已经运行的进程里面创建一个进程。原来的进程称为父进程,新建的进程称为子进程。并且,自身的返回值为0,给父进程返回值大于0,出错返回-1。②:进程调用fork后,当控制转移到内核终的fork代码后,内核做以下事情:分配新的内存块和内存数据结构给子进程将父

2022-04-06 11:38:02 1144 1

原创 C++学习------智能指针------(智能pointer)

智能指针智能指针的由来和概念智能指针的分布智能的原理智能指针的由来和概念智能指针的分布智能的原理

2022-04-04 12:07:33 947 1

原创 C++学习-----(哈希)-------(hash)

哈希hash的由来和概念hash的介绍哈希函数哈希冲突以及解决办法hash的应用位图布隆过滤器hash的由来和概念hash的介绍哈希函数哈希冲突以及解决办法hash的应用位图布隆过滤器

2022-04-01 20:25:57 1702 4

空空如也

空空如也

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

TA关注的人

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