- 博客(76)
- 收藏
- 关注
原创 并查集/岛问题
并查集结构用于将一定量的元素合并到同一个集合,并随时查看两个元素所在的集合是否是同一个。即并查集结构必须提供isSameSet()接口与uinon()接口。实现并查集时有多种结构可以考虑,如list、hashMap等,但这些结构在合并时都需要进行集合的合并,代价比较高,最高效的做法是底层结构采用一种类似单链表的结构。实现单链表时,一个节点的值就是输入的元素的值,而节点的指针指向同一个集合的另一个...
2019-08-13 20:56:37
396
原创 哈希、布隆过滤器
哈希函数1. 哈希函数的特点输入域无穷大,输出域有限;相同的输入定然导致相同的输出;不同的输入也可能导致相同的输出(哈希碰撞);虽然存在一定的哈希碰撞,但如果存在大量的输入数据那么哈希的输出域上的每一个点基本是均匀增长的(好的哈希函数它的增长于输入数据本身的质量无关,即使输入数据本身存在一定的规律,也应该保证每个点均匀增长)。2.哈希函数的原理数学上的疏密数3.哈希函数的用处根据...
2019-08-13 20:53:19
266
原创 贪心
贪心算法的定义在某一个标准下,优先考虑最满足标准的样本,然后考虑不那么满足标准的样本,最终得到某一个答案的算法,就是贪心算法。也就是说,你得出的答案只是满足这个标准的最优解(局部最优),可能不是全局最优解。根据下面这个例子来说明贪心算法给出字符串数组strs,请找出一种排序方式,使得所有的字符串拼接后形成的字符串具有最小的字典序。字典序:按照字母 abcdef…z 排序。如果有两个字符串“...
2019-08-13 20:48:31
229
原创 前缀树
一个字符串类型的数组arr1,另一个字符串类型的数组arr2。arr2中有哪些字符,是arr1中 出现的?请打印。arr2中有哪些字符,是作为arr1中某个字符串前缀出现的?请打印。请打印 arr2中出现次数最大的前缀。分析:对于这种题目,就可以用到前缀树来解。如果arr1 = {a, b, c}, arr2 = {a, b , c , d, e},那么这两个字符串的前缀树如图。前缀树的实现...
2019-08-13 20:38:06
144
原创 图
图的表达方式邻接表上图的邻接表表示为1:2,7;2:3;3:4,7;4:5;6:5,3;邻接矩阵上图的邻接矩阵表达为0, 1,0, 0, 0, 0, 10, 0,1, 0, 0, 0, 00, 0,0, 1, 0, 0, 10, 0,0, 0, 1, 0, 00, 0,0, 0 , 0,0 ,00, 0,0, 0, 1, 0,00, 0,0, 0, 0, 0, 0...
2019-08-13 20:36:31
149
原创 链表问题
单链表与双链表单链表的节点结构Class Node{V value;Node next;}由以上结构的节点依次连接起来所形成的链叫单链表结构。双链表的节点结构Class Node{V value;Node next;Node last;}由以上结构的节点依次连接起来所形成的链叫双链表结构。单链表和双链表结构只需要给定一个头部节点head,就可以找到剩下的所有的节点。解...
2019-08-13 20:25:09
161
原创 树问题总结
二叉树的结构class Node<V>{ V value; Node left; Node right;}二叉树的遍历分别是前序、中序、后续、层序遍历。//递归实现的前序遍历 static void preOrderRecur(Node* head){ if(head == NULL) return;...
2019-08-13 20:00:17
307
原创 排序问题的总结
所谓稳定性,就是同样值的个体之间,如果不会因为排序操作而改变相对次序,那么这个排序方法就具有稳定性。除了表中列出的排序算法,一切基于桶排序思想下的排序都是稳定的。在数据量较小时,建议选择插入排序的算法,因为时间复杂度为O(N^2)的排序算法的额为的常数时间的操作较少,在数据量较小时反而比下面的时间复杂度更低的算法排序更快。另外,选择排序与冒泡排序的常数时间的操作都是固定的,而插入排序的操作...
2019-08-13 18:14:55
179
原创 桶排序、仿函数
桶排序桶排序不是基于比较的排序,它只能用于对基本数据类型进行排序,只与具体业务有关。1. 计数排序某公司有员工10人,员工的年龄在20到50之间,请对员工的年龄进行排序。用计数排序对员工进行排序:创建容器数组arr[50 - 20 + 1];依次统计每个年龄有多少人,即arr[0]储存20岁的员工有多少人,arr[1]存储21岁有多少人。。。。。。按照数组arr的顺序依次...
2019-08-13 18:05:51
94
原创 字典序全排列and递归全排列
一、字典序字典序,就是按照字典中出现的先后顺序进行排序。1.单个字符在计算机中,25个字母以及数字字符,字典排序如下:‘0’ < ‘1’ < ‘2’ < … < ‘9’ < ‘a’ < ‘b’ < … < ‘z’比如在 python 中, ‘0’ < ‘9’ < ‘a’ < ‘z’ 这个表达式就会返回 True。2、多个...
2019-07-26 14:10:19
1648
2
原创 mmap&shm
共享内存允许两个或多个进程共享一给定的存储区,因为数据不需要来回复制,所以是最快的一种进程间通信机制。共享内存可以通过mmap()映射普通文件(特殊情况下还可以采用匿名映射)机制实现,也可以通过系统V共享内存机制实现。应用接口和原理很简单,内部机制复杂。为了实现更安全通信,往往还与信号灯等同步机制共同使用。1.mmapmmap的机制如:就是在磁盘上建立一个文件,每个进程存储器里面,单独开辟一个...
2019-07-18 15:25:40
690
原创 Linux——线程间通信(同步)总结
进程进程组成:1.进程控制块PCB2.程序段3.数据段进程控制块PCB 是内核中存放的一块PCB区域,记录型数据结构 ,PCB 记录了操作系统所需要的参数,用来描述进程目前情况和进程运行的全部信息,包括1.进程描述信息:进程标识符,识别进程用户标识,用于资源共享和保护家族关系,进程关于有父进程和子进程的信息2.处理机状态信息:包含通用寄存器、指令寄存器、程序状态字(PSW)、用...
2019-07-17 20:49:08
338
转载 进程间通信IPC——管道、信号量、共享内存、消息队列
进程间通信linux 系统中有很多进程,免不了进程间进行通信,即IPC通信,linux 中有6种方式信号、无名管道(pipe)和有名管道(FIFO)、共享内存、信号量、消息队列、套接字(socket)信号信号是软件中断产生,用于进程间异步传递信息一般在shell 中操作,进程获取信号进行处理,一共有64中信号,在shell中输入 kill -l 可查阅#include <sign...
2019-07-17 20:13:38
253
原创 C++11 新特性
C++11 特性1、请问C++11有哪些新特性?C++11 最常用的新特性如下:auto关键字:编译器可以根据初始值自动推导出类型。但是不能用于函数传参以及数组类型的推导nullptr关键字:nullptr是一种特殊类型的字面值,它可以被转换成任意其它的指针类型;而NULL一般被宏定义为0,在遇到重载时可能会出现问题。智能指针:C++11新增了std::shared_ptr、std...
2019-07-01 10:57:39
536
转载 数据库的事务隔离技术 之 MVCC
https://blog.csdn.net/Fly_as_tadpole/article/details/85083121
2019-06-22 16:30:52
118
转载 数据库的三大范式和五大约束
一、数据库的三大特性可谓是:实体、属性和关系。实体:表; 属性:表中的数据(字段); 关系:表与表之间的关系;二、 数据库设计三大范式第一范式(1NF):数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性;例如:userInfo:山东省烟台市 131777368781 userAds:山东0省烟台市 userTel:1317773687...
2019-06-22 15:53:23
203
转载 GET、 POST的区别
两种 HTTP 请求方法:GET 和 POST在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。GET - 从指定的资源请求数据。POST - 向指定的资源提交要被处理的数据1. get是从服务器上获取数据,post是向服务器传送数据。get 和 post只是一种传递数据的方式,get也可以把数据传到服务器,他们的本质都是发送请求和接收结果。只是组织格式...
2019-06-18 17:22:38
255
转载 报文、报文段、分组、包、数据报、帧、数据流
1.报文(message)我们将位于应用层的信息分组称为报文。报文是网络中交换与传输的数据单元,也是网络传输的单元。报文包含了将要发送的完整的数据信息,其长短不需一致。报文在传输过程中会不断地封装成分组、包、帧来传输,封装的方式就是添加一些控制信息组成的首部,那些就是报文头。2.报文段(segment)通常是指起始点和目的地都是传输层的信息单元。3.分组/包(packet)分组是在网络中...
2019-06-17 20:56:25
672
转载 五种IO模型、select/pool/epoll简析
1.阻塞I/O模型老李去火车站买票,排队三天买到一张退票。耗费:在车站吃喝拉撒睡 3天,其他事一件没干。调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停的去检查这个函数有没有返回,必须等这个函数返回才能进行下一步动作2.非阻塞I/O模型老李去火车站买票,隔12小时去火车站问有没有退票,三天后买到一张票。耗费:往返车站6次,路上6小时,其他时间做了好多事。非阻塞等待,每隔一...
2019-06-16 10:37:41
1835
1
转载 Linux内核、虚拟内存和物理内存、LINUX 逻辑地址、线性地址、物理地址和虚拟地址
一、概念物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。所以,...
2019-06-15 11:16:08
397
转载 qsort的使用
函数原型#include <stdlib.h>void qsort(void *base, size_t nmemb, size_t size, int (*compar) (const void *, const void *));解释:qsort函数对含有nmemb个元素的数组进行排序,而base指针指向数组的第一个元素。这个数组的元素个数由size指定。compar...
2019-06-01 20:02:16
153
转载 STL各个容器迭代器总结
写在前面,迭代器这种东西,就是为了使访问简单!!容器::iterator iter;for(iter= 容器.begin();iter!=容器.end();iter++){cout<<*iter或者是 iter->first等等之类的 //迭代器就是这么个套路}然后就是set,set就是一个集合,仅此...
2019-06-01 18:10:08
671
转载 STL容器的排序操作sort等
排序是最广泛的算法之一,本文详细介绍了STL中不同排序算法的用法和区别。1. STL提供的Sort 算法C++之所以得到这么多人的喜欢,是因为它既具有面向对象的概念,又保持了C语言高效的特点。STL 排序算法同样需要保持高效。因此,对于不同的需求,STL提供的不同的函数,不同的函数,实现的算法又不尽相同。1.1 所有sort算法介绍所有的sort算法的参数都需要输入一个范围,[begin,...
2019-06-01 16:38:58
758
转载 动态规划的递归和迭代
动态规划法简介:动态规划法求解的总体过程就是将问题分为多个不同的阶段的问题,根据最开始阶段已知的问题的解逐步推导出最终解。即动态规划算法通常基于一个递推公式及一个或多个初始状态。过程细化为:第一步,确定问题的解的表达式,称之为状态。第二步,将最终问题的构造成上一阶段问题的解(可能被拆分为多个子问题的解),即根据当前阶段问题的解求出下一阶段问题的解方法,即递推公式,称之为状态转移方程。已知...
2019-06-01 15:39:56
1717
原创 Linux——网络编程线程池机制
#include <stdlib.h>#include <pthread.h>#include <unistd.h>#include <assert.h>#include <stdio.h>#include <string.h>#include <signal.h>#include <errno...
2019-05-18 20:11:47
291
原创 libevent——epoll 反应堆模型
一、epoll服务器 :epoll — 服务器 — 监听 — fd ----可读 ---- epoll返回 ---- read — 小写转大写 — write ---- epoll继续监听。epoll 反应堆模型:创建efd(epoll_create) ---- 增加fd(epoll_ctl) ---- epoll_wait返回----fd可读 ---- read ---- fd从树上摘...
2019-05-18 16:26:41
221
原创 文件的多进程拷贝
假设有一个超大文件,需对其完成拷贝工作。为提高效率,可采用多进程并行拷贝的方法来实现。假设文件大小为 len,共有 n 个进程对该文件进行拷贝。那每个进程拷贝的字节数应为 len/n。 但未必一定能整除, 我们可以选择让最后一个进程负责剩余部分拷贝工作。 可使用 len % (len/n)将剩余部分大小求出。为降低实现复杂度, 可选用 mmap 来实现源、 目标文件的映射,通过指针操作内存地...
2019-05-05 21:15:21
562
3
原创 TCP/IP——HTTP协议
一、概述HTTP协议:超文本传输协议哑服务器,是指连接上服务器而不输入HTTP的8个命令,服务器不会响应任何信息。而一般的服务器,如FTP,连上之后会有一个欢迎信息。HTTP服务器连上之后,不会有欢迎信息,不会主动跟你打招呼。命令: nc www.126.com 80回车后,即连上了服务器,但服务器未返回任何信息。接着输入命令: GET /(获取HTTP服务器的根文件)接下来的...
2019-02-26 11:30:17
146
原创 TCP/IP——TCP保活定时器
一、引言如果T C P连接的双方都没有向对方发送数据,则在两个T C P模块之间不交换任何信息。这意味着我们可以启动一个客户与服务器建立一个连接,然后离去数小时、数天、数个星期或者数月,而连接依然保持。中间路由器可以崩溃和重启,电话线可以被挂断再连通,但是只要两端的主机没有被重启,则连接依然保持建立。该情况容易出现半打开连接,即连接正常建立后,一方突然崩溃,而另一方无法得知。保活并不是T C...
2019-02-26 09:14:53
224
原创 TCP/IP——FTP协议、主动模式、被动模式
一、概述FTP是数据传输主流协议。它采用两个信道(两个TCP连接)进行传输。第一信道,控制信道,无论何时都是由客户端发起连接(客户端端口号随机,大于1023)。采用客户端服务器模式。服务端监听21端口。用于控制命令的传输。第二信道,数据信道。根据数据信道是否由服务端发起,区分ActiveMode和PassiveMode。TCP的知名端口号(服务端的监听端口),21号,是控制信道的端口。...
2019-02-25 22:44:21
1203
原创 TCP/IP——Telnet协议
Telnet不安全,明文传输,交互式数据流。当连接到Telnet服务器后,如 telnet www.baidu.com 80,这时会跳转到Telnet客户端界面,这时在界面上输入字母,界面会显示该字母。这个字母的显示不是本地通过键盘直接输入上去的,本地键盘键入一个字母(如‘a’),Telnet客户端会将该字母发往服务端,服务端收到该字母后,会将该字母回写给客户端(即原样发回),客户端收到服务端的...
2019-02-25 22:21:50
1899
原创 TCP/IP——TCP坚持定时器、糊涂窗口综合症
一、坚持定时器解决的问题只是一个窗口探查的工具当窗口显示为0的时候启用发送端不断往接收端发送数据,但是是快的发送和慢的接收文,导致接收方接收窗口很快就满了,发送方收到接收方通告窗口大小为0(第8个报文)。随着接收方应用程序不断地提取数据,接收方的接收窗口增大,可以再接收报文了。于是接收方向发送方发送了第9个报文,告诉发送方我的接收窗口为4096,现在又可以接收数据了。在TCP协议中,只会对...
2019-02-25 22:01:59
256
原创 TCP/IP——TCP超时与重传、拥塞避免、快重传快恢复
一、引言T C P提供可靠的运输层。它使用的方法之一就是确认从另一端收到的数据。但数据和确认都有可能会丢失。 T C P通过在发送时设置一个定时器来解决这种问题。如果当定时器溢出时还没有收到确认,它就重传该数据。只有数据设置有超时重传定时器。ACK无该定时器。对每个连接, T C P管理4个不同的定时器。重传定时器,发送数据端(非发送ACK端),每发送一个数据都将设置一个超时时间,用于...
2019-02-25 10:06:16
1874
1
原创 TCP/IP——TCP的成块数据流、滑动窗口、慢启动、PUSH和URG
一、引言我们看到TFTP使用了停止等待协议。数据发送方再发送下一个数据块之前需要等待接收对已发送数据的确认。TCP所使用的被称为滑动窗口协议的另一种形式的流量控制方法。该协议允许发送方再停止并等待确认前可以连续发送多个分组(但发送分组的总大小不能超过通告窗口)。由于发送方不必每发送一个分组就停下来等待确认,因此该协议可以加速数据的传输。二、正常数据流通常使用的“隔一个报文段确认”的策略(即每...
2019-02-24 22:39:47
382
原创 TCP/IP——TCP的交互数据流
一、引言如果按照分组数量计算,约有一半的TCP报文段包含成块数据(如FTP、电子邮件),另一半则包含交互数据(如Telnet)如果按字节计算,则成块数据与交互数据的比例约为90%和10%二、交互式输入通常每一个交互按键都会产生一个数据分组这样就会产生4个报文段:(1) 来自客户的交互按键(2) 来自服务器的按键确认(3) 来自服务器的按键回显(4) 来自...
2019-02-24 17:35:13
172
原创 TCP/IP——TCP连接的建立与终止、TCP超时、TCP状态变迁、TCP复位
一、概述TCP是一个面向连接的协议。无论哪一方想另一方发送数据之前,都必须现在双方之间建立一条连接。这种两端间连接的建立与无连接协议如UDP不同。一端使用UDP想另一端发送数据报时,无需任何预先的握手。二、TCP连接的建立和终止的时间发起连接(报文段1)的一方是主动打开,接受连接(报文段2)的一方是被动打开。其中,双方的序号(ack)的初始值(ISN)都是根据自身主机的时钟随机生成的,这...
2019-02-24 17:16:51
2814
原创 TCP/IP——TCP、TCP首部、TCP在IP数据报中的封装
一、概念TCP提供一种面向连接的、可靠的字节流服务。面向连接 ,TCP一定要有三次握手的建立和四次握手的结束。 可靠 ,TCP传输的每一个字节都需要确认。 字节流服务,UDP叫数据报服务 ,应用层不管给UDP多大一个包,UDP就直接在这个基础之上封装UDP头部、IP头部、以太网头部,然后发走,网络上传输的数据和应用层给的数据是一一对应的。TCP是叫数据流,应用层给的数据,大了会把它拆小,...
2019-02-22 16:34:44
1261
原创 TCP/IP——TFTP
一、TFTP:TFTP(Trivial File Transfer Protocol)即简单文件传输协议,最初打算用于引导无盘系统和使用TCP的文件传输协议(FTP)不同,为了保持简单和短小,TFTP将使用UDPTFTP的代码(和它所使用UDP、IP和设备驱动程序)都能适合只读存储器二、TFTP报文格式操作码:1是读,2是写,3是数据,4是确认,5是差错文件名:要读或者写的文件名模...
2019-02-22 15:38:31
647
原创 TCP/IP——DNS
一、概念DNS:域名系统(DNS)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。这里提到的分布式是指在Internet上的单个站点不能拥有所有的信息。DNS提供了允许服务器和客户程序相互通信的协议对DNS的访问是通过一个地址解析器(windows的nslookup)来完成的解析器通常是应用程序的一部分,解析器并不像TCP/IP...
2019-02-21 17:32:15
952
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人