自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 资源 (2)
  • 收藏
  • 关注

转载 TCP 拆包、粘包

拆包、粘包举例比如发送端要往接收端发送2个数据包1.收到2个数据包,没发送拆包和粘包情况;2.收到1个数据包,TCP把2个数据包合成1个发送给接收端了,这样应用层不能处理合成1个的两个数据包,应用层不知道两个数据包之间的分隔在哪,所以很难处理,这是粘包问题;3.收到2个数据包,但1个数据包产生了粘包(发送端的1个半数据包),另1个数据包产生了拆包(只有发送端中1个数据包的半个包),这样应...

2018-09-28 15:10:00 166

转载 tcp如何实现可靠传输

TCP提供一种面向连接的、可靠的字节流服务。   面向连接:意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。 TCP通过下列方式来提供可靠性:1、应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。 ...

2018-09-28 11:16:20 621

转载 写时拷贝

传统的fork()系统调用直接把所有的资源复制给新创建的进程。这种实现过于简单并且效率低下,因为它拷贝的数据也许并不共享,更糟的情况是,如果新进程打算立即执行一个新的映像,那么所有的拷贝都将前功尽弃。Linux的fork()使用写时拷贝(copy-on-write)页实现。写时拷贝是一种可以推迟甚至免除拷贝数据的技术。内核此时并不复制整个进程地址空间,而是让父进程和子进程共享同一个拷贝。只有在需要...

2018-09-28 10:42:34 123

转载 C语言内存布局

在C语言中,内存的主要分为下列几部分:1. Text/Code Segment 文本/代码区2. Initialized Data Segments 初始化的数据区3. Uninitialized Data Segments 未初始化的数据区4. Stack Segment 栈区5. Heap Segment 堆区  Text/Code Segment 文本/代...

2018-09-28 10:11:41 769

转载 HashMap的存储结构及原理

1、HashMap的数据结构(HashMap通过hashcode对其内容进行高速查找,是无序的)  数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。  数组 :数组的存储区是连续的,占用内存严重,故空间复杂度非常大。但数组的二分查找时间度小;数组的特点:寻址easy,插入和删除困难。  链表 :链表的储存区离散。占用内存比較宽松。故空间复杂度非常小,但时间复杂度...

2018-09-28 09:17:18 10669

转载 C++ 策略模式

作用:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。UML图:Strategy模式将逻辑(算法)封装到一个类(Context)里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现将算法的逻辑抽象接口(DoAction)封装到一个类中(Context),再通过委托的方式将具体的算法实...

2018-09-27 21:47:25 236

转载 C++ 桥接模式

作用:将抽象部份与它的实现部份分离,使它们都可以独立地变化。将抽象(Abstraction)与实现(Implementation)分离,使得二者可以独立地变化。桥接模式号称设计模式中最难理解的模式之一,关键就是这个抽象和实现的分离非常让人奇怪,大部分人刚看到这个定义的时候都会认为实现就是继承自抽象,那怎么可能将他们分离呢。《大话设计模式》中就Bridge模式的解释:手机品牌和软件是...

2018-09-27 21:43:32 108

转载 C++ 适配器模式

Adapter适配器模式作用:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。分为类适配器模式和对象适配器模式。系统的数据和行为都正确,但接口不符时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。想使用一个已...

2018-09-27 21:40:23 104

转载 C++ 工厂模式实现

 简单工厂模式简单工厂模式是工厂模式中最简单的一种,他可以用比较简单的方式隐藏创建对象的细节,一般只需要告诉工厂类所需要的类型,工厂类就会返回需要的产品类,但客户端看到的只是产品的抽象对象,无需关心到底是返回了哪个子类。客户端唯一需要知道的具体子类就是工厂子类。除了这点,基本是达到了依赖倒转原则的要求。 假如,我们不用工厂类,只用AbstractProduct和它的子类,那客户端每...

2018-09-27 21:38:23 1319 1

转载 Mysql引擎:MyISAM与InnoDB差异

说到mysql的引擎就必须要提一下B+树了。计算机有一个局部性原理,就是说,当一个数据被用到时,其附近的数据也通常会马上被使用。所以当你用红黑树的时候,你一次只能得到一个键值的信息,而用B树,可以得到最多M-1个键值的信息。这样来说B树当然更好了。      B+树是在B树基础上提出的,相比于B树能够更加方便的遍历。B+树简单的说就是变成了一个索引一样的东西。 B+的搜索与B-树也...

2018-09-26 16:50:32 102

原创 C++ 多态的表现形式:重载与虚函数

多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说:允许将子类类型的指针赋值给父类类型的指针(一个接口,多种方法)。C++ 支持两种多态性:编译时多态性,运行时多态性。a、编译时多态性(静态多态):通过重载函数实现b、运行时多态性(动态多态):通过虚函数实现。多态的作用那么多态的作用是...

2018-09-26 15:14:03 1335 2

原创 Linux 文件颜色代表含义

文件颜色代表含义:蓝色表示目录;绿色表示可执行文件;红色表示压缩文件;浅蓝色表示链接文件;白色表示其他文件;黄色是设备文件,包括block, char, fifo。ps:请叫我色盲,因为csdn颜色这有这几个...

2018-09-26 09:00:18 209

原创 Linux预处理、编译、汇编、链接的处理过程分析

一、预编译 1.将所有的#define删除,并展开所有的宏定义; 2.处理所有的预编译指令,例如:#if,#elif,#else,#endif; 3.处理#include预编译指令,将被包含的文件插入到预编译指令的位置; 4.添加行号信息文件名信息,便于调试; 5.删除所有的注释:// /**/; 6.保留所有的#pragma编译指令,因为在编写程序的时候,我们经常要用到#...

2018-09-26 08:55:05 151

转载 select、poll、epoll之间的区别

(1)select==>时间复杂度O(n)它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。(2)poll==>时间复杂度O(n)poll本质上和select没有区别,它将用...

2018-09-24 11:04:38 172

转载 IP 地址的正则表达式匹配

有关正则方面的知识,会在详细的讲解中提到。  在讲解之前,我先给大家介绍一下,ip地址的生成规则。  IP地址,是由32位数字二进制转为四个十进制的字符串组成。  怎么转化?下面讲解:      二进制:11111111111111111111111111111111      分为四部分:11111111.11111111.11111111.11111111      转...

2018-09-23 21:46:21 4023 1

转载 服务器TIME_WAIT和CLOSE_WAIT区别及解决方案

系统上线之后,通过如下语句查看服务器时,发现有不少TIME_WAIT和CLOSE_WAIT。netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'打印显示如下:TIME_WAIT 297ESTABLISHED 53CLOSE_WAIT 5     TIME_WAIT:表示主动关闭,通过优...

2018-09-23 16:12:37 726

转载 HTTP与HTTPS的区别

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。  为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安...

2018-09-22 19:21:34 318

转载 HTTP协议中GET和POST的区别

(一)、不完全正确的网红答案 GET的URL会有长度上的限制,则POST的数据则可以非常大。 POST比GET安全,ET请求的数据会附在URL之后,POST把提交的数据则放置在是HTTP包的包体中。 (二)、为什么是不完全正确的答案HTTP协议对GET和POST都没有对长度的限制:HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。 而在...

2018-09-22 19:19:33 528

转载 STL queue和stack基本操作

1、stackstack 模板类的定义在<stack>头文件中。stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要的,在不指定容器类型时,默认的容器类型为deque。定义stack 对象的示例代码如下:stack<int> s1;stack<string> s2;stack 的基本操作有:入栈,如例:s.pus...

2018-09-19 09:46:06 190

原创 二叉查找算法实现

int binary_research(vector<int>& arr, int left, int right, int element){    while (left <= right)    {        int mid = (left + right) / 2;        if (arr[mid]>element)        {...

2018-09-17 10:32:21 188 1

原创 leetcode 中twoSum、threeSum、fourSum以及NSum

在leetcode中 twoSum解决思路主要是排序的数组后,以升序为例,先从右端固定一个值Fx,然后从固定值的左邻居Ni开始遍历,如果固定值Fx+Ni=target,则break结束,否则,Fx向左移动一个值,同样思路左邻居顺序移动遍历,如果要求出所有的这种组合,那么Fx+Ni=target后,不执行break,直到Fx为倒数第二数为止。当然这里也可以优化,基本上固定一个值后左邻居Ni的值已经固...

2018-09-17 10:15:53 652

转载 互斥量和信号量的区别

1. 互斥量用于线程的互斥,信号量用于线程的同步。这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。...

2018-09-15 20:36:28 530

转载 计算ip地址的子网掩码方法

方法一:利用子网数来计算:  1.首先,将子网数目从十进制数转化为二进制数;  2.接着,统计得到的二进制数的位数,设为N;  3.最后,先求出此IP地址对应的地址类别的子网掩码。再将求出的子网掩码的主机地址部分(也就是“主机号”)的前N位全部置1,这样即可得出该IP地址划分子网的子网掩码。  题型一:需将B类IP地址167.194.0.0划分成28个子网(注意每个子网的主机数为2^11)...

2018-09-15 15:35:53 1042

原创 Vector 自定义Sort

vector支持sort函数,但是默认是升序。如果要降序呢?那么可以这样操作: 方法一:升序排序之后,用 reverse 反转即可。方法二:重写sort第三个参数重写sort第三个参数:对于常见的数据类型,int、string等我们可以直接重写一个函数或者lambda表达式。重写函数:sort(begin(vec), end(vec), cmp);bool cmp(...

2018-09-15 08:45:37 2695 1

转载 STL hashmap原理及冲突解决

大家平时都用过hashMap,但是可能大家对hashMap的底层实现不太了解,同时对其中可能出现的hash冲突有些不了解,这几天我翻了下资料,也稍微了解下,记录下来,以免遗忘。上图就是一个散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数...

2018-09-14 09:21:18 3705

原创 检查系统是大端还是小端模式

在计算机系统中,规定:每个地址单元都会对应一个字节(8个bit),但是,在c语言中,除了有一个字节(8个bit)的char,也有两个字节(16个bit)的short,也有四个字节(32个bit)的long(在不同的编译器下可能不同)。对于16位或者32位的处理器,即就是大于8位的处理器,由于寄存器的宽度大于一个字节,那么就存在如何将一个多字节的变量的数据如何存放的问题——所以,就有了大小端之分。...

2018-09-13 21:16:06 319

转载 B树、B-树和B+树

B树       即二叉搜索树:       1.所有非叶子结点至多拥有两个儿子(Left和Right);       2.所有结点存储一个关键字;       3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;       如:              B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,...

2018-09-13 15:37:13 1550

原创 STL allocator

 为了精密分工,STL allocator决定将这两阶段区分开来。内存配置由alloc:allocate()负责,内存释放由alloc::deallocate()负责; 对象建构由::construct()负责,对象析构由::destroy()负责。STL的默认内存分配器 隐藏在这些容器后的内存管理工作是通过STL提供的一个默认的allocator实现的。当然,用户也可以定制自己的alloc...

2018-09-13 11:18:18 337

转载 数据库一二三范式

一、范式介绍,主要有六种范式:第一范式、第二范式、第三范式、BC范式、第四范式和第五范式。满足最低要求的叫第一范式,简称1NF。在第一范式基础上进一步满足一些要求的为第二范式,简称2NF。其余依此类推 事物往往具有多面性,设计范式也会带来一定的麻烦:操作困难,因为需要联系多个表才能得到所需要数据,而且范式越高性能就会越差。所以使用多高的范式需要权衡利弊,一般在项目中,使用到第三范式也就...

2018-09-13 09:43:01 420

转载 僵尸进程

在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。  孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被...

2018-09-12 21:43:37 95

原创 C++ 类型转换-Cast

1、reinpreter_cast此标识符的意思即为数据的二进制形式重新解释,但是不改变其值。这个操作符能够在非相关的类型之间转换。操作结果只是简单的从一个指针到别的指针的值的二进制拷贝。在类型之间指向的内容不做任何类型的检查和转换。用法:reinpreter_cast<type-id> (expression)type-id必须是一个指针、引用、算术类型、函数指针或者...

2018-09-11 15:40:19 359

原创 重载与重写

1. Override 特点  1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;  2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;  3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;  4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。2.Overload 特点  1、...

2018-09-11 14:33:00 82

转载 STL 迭代器

迭代器的简介迭代器类似于指针类型,它也提供了对对象的间接访问。 指针是c语言中就有的东西,迭代器是c++中才有的,指针用起来灵活高效,迭代器功能更丰富些。 迭代器提供一个对容器对象或者string对象的访问的方法,并且定义了容器范围。使用迭代器迭代器和指针不一样,容器和string有迭代器类型同时拥有返回迭代器的成员。比如,容器都有的成员begin和end,其中begin成员复制返回...

2018-09-10 17:15:18 388

原创 linux 下gdb调试

linux上程序崩溃起来挺烦人,不过linux 比较好的是有gdb.1、生成coredump文件echo "ulimit -c unlimited" >> /etc/profile然后记得敲入命令source /etc/profile然后敲入命令:ulimit –c效果如下:确认能否生成coredump文件,使用如下命令(使用时注意,我在测的时...

2018-09-09 17:21:46 193

原创 memcache和redis性能分析

Memory 特点:内存存储,速度快,对于内存的要求高,所缓存的内容非持久化。对于 CPU 要求很低,所以常常采用将 Memcached 服务端和一些 CPU 高消耗 Memory 低消耗应用部属在一起 。集中式 Cache :避开了分布式 Cache 的传播问题,但是需要非单点保证其可靠性,这需要 cluster 的工作,可以将多个 Memcached 作为一个虚拟的 cluster ,...

2018-09-09 11:18:39 898

原创 二叉树节点数计算

二叉树的第i层至多有2i-1个结点深度为h的二叉树至多有2h-1个结点对于一棵二叉树,若含有n0个叶子结点,n2个度为2的结点,则必存在关系式:n2=n0-1具有n个结点的完全二叉树的深度为[log2n]+1.[]表示取整若对含n个结点的完全二叉树从上到下且从左至右进行1至n的编号,则对完全二叉树中任意一个编号为i的结点:    若i=1,则该结点是二叉树的根,无双亲,否则,编...

2018-09-07 09:49:22 22241

原创 网络字节序与主机字节序的转换

在对IP地址结构体SOCKADDR_IN赋值的时候,经常会用到下列的函数 htonl(), htons(), inet_addr(),与之相对应的函数是 ntohl(), ntohs(), inet_ntoa()。查看这些函数的解析,会发现这些函数其实是与主机字节序和网络字节序之间转换有关。就是什么网络字节序,什么是主机字节序呢?下面我写出他们之间的转换:用IP地址127.0.0.1为例:...

2018-09-07 09:48:26 836

原创 哈希表的构造方法

哈希表的构造方法:            (1)、数字分析法:事先知道关键字的集合,且每个关键字的位数比哈希表的地址码位数多时,可以从关键字中选出分布比较均匀的若干位,构成哈希地址。            (2)、平方取中法:当无法确定关键字中哪几位分布比较均匀时,可以先求出关键字的平方值的中间几位作为哈希地址            (3)、分段叠加法:按哈希表的地址位数将关键字分成位...

2018-09-06 10:34:25 5808

原创 G-bit 找出所有2018数

这题是数位dp问题,上面的代码用的时记忆化搜索,思路就是把小于等于n的数都搜一遍,但是有很多结果是重复的,所以加个数组把每次计算出的结果都保存下来,比如要找小于55555555的“2018”数,那么以13开头的13xxxxxx和以14开头的14xxxxxx的“2018”数的个数是一样的。#include using namespace std;const int N = 1e5+10;...

2018-09-06 10:21:52 135

原创 TCP可靠性实现

 TCP通过以下几种方式来提供可靠性:                    (1)、应用数据被分割为 TCP 认为最合适发送的数据块。这和 UDP 完全不同,应用程序产生的数据报的长度将保持不变。(将数据截为合理的长度)                    (2)、当TCP发出一个段后,它启动一个定时器,等待目的端的确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。(超时...

2018-09-06 10:13:52 187

mysql-connector-c-6.1.6-win32下载

mysql-connector-c-6.1.6-win32下载。

2018-10-21

免费 虚拟串口助手

虚拟串口链接器

2017-08-10

空空如也

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

TA关注的人

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