自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 mac vim下的批量缩进

这样的一个场景:指定的n行向后缩进4个空格。第一步:因为缩进宽度默认为8个空格。我们可以使用以下命令,来修改缩进宽度::set shiftwidth=4第二步:按v进入visual状态,用上下键选择多行,用>或者

2016-12-06 18:24:01 2587

转载 MySQL分库分表总结

单库单表 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到。 单库多表 随着用户数量的增加,user表的数据量会越来越大,当数据量达到一定程度的时候对user表的查询会渐渐的变慢,从而影响整个DB的性能。如果使用mysql, 还有一个更严重的问题是,当需要添加一列的时候,mysql会锁表,期间所有的读

2016-07-12 20:33:14 1004

转载 CAS锁

参考文档:http://www.blogjava.net/xylz/archive/2010/07/04/325206.htmlhttp://blog.hesey.net/2011/09/resolve-aba-by-atomicstampedreference.htmlhttp://www.searchsoa.com.cn/showcontent_69238.htm

2016-07-12 18:21:19 6002

转载 Mysql的索引

转载自:https://segmentfault.com/a/1190000003046591在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式。MyISAM索引实现MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM索引

2016-07-12 13:12:22 655

转载 深入理解乐观锁与悲观锁

转载自:http://www.hollischuang.com/archives/934在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。无论是悲观锁还是乐观锁,都是人们定义出来的概念,可

2016-07-12 11:22:53 954 1

转载 乐观锁

乐观锁介绍:乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。那么我们如何实现乐观锁呢,一般来说有以下2种方式:1.使用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。何谓数据

2016-07-12 11:09:39 624

转载 如何限制对象只能建立在堆上或者栈上

在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。        静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。        动态建立类对象,是使用new运算符将对象建立在堆空间

2016-06-19 22:58:31 498

原创 private继承与public继承

1 private, public, protected 访问标号的访问范围private:能够访问:1.该类中的函数;2.友元函数。不能访问:1.public继承的子类和private继承子类;2.该类的对象。protected:能够访问:1.该类中的函数;2.public继承的子类和private继承子类;3.友元函数。不能访问:1.该类的对象。public:

2016-06-19 12:16:32 978

转载 查看Linux下系统资源占用常用命令

一 top命令1.作用top命令用来显示执行中的程序进程,使用权限是所有用户。2.格式top [-] [d delay] [q] [c] [S] [s] [i] [n]3.主要参数d:指定更新的间隔,以秒计算。q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。c:显示进程完整的路径与名称。S:累积模式,会将己完成或消失的子行程的C

2016-06-19 10:56:46 13529

转载 关键字static/const的作用

这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:1)在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区)。2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函

2016-06-18 10:17:20 500

原创 C++中的多态

定义  同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。 简单地概括为“一个接口,多种方法”。类别 编译时的多态性。   编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。运行时的多态性。   运行时的多态性是以一颗父类的指针或者引用,寻址出继承链中实际的对象,就是直到系

2016-06-15 18:02:56 391

原创 静态库和动态库的区别

静态库被链接后库就直接嵌入可执行文件中了,这样就带来了两个问题。(1)磁盘空间被浪费了。想象一下,如果多个程序链接了同一个静态库,则每一个生成的可执行文件就都会有一个库的副本,必然会浪费系统空间。(2)内存空间也被浪费了。当多个链接了同一个静态库的程序被加载到内存运行时,会造成不必要的内存浪费,后果可能会导致内存不足而产生频繁的内存换页。(3)一旦发现了库中有bug,挽救起来就比较

2016-06-05 22:36:12 527

翻译 do{}while(0);的妙用

1、辅助定义复杂的宏,避免引用的时候出错:举例来说,假设你需要定义这样一个宏:#define DOSOMETHING()\ foo1();\ foo2();这个宏的本意是,当调用DOSOMETHING()时,函数foo1()和foo2()都会被调用。但是如果你在调用的时候这么写:if(a>0)

2016-06-04 13:10:38 465

转载 ISO-OSI的七层协议经典架构

第一层:物理层 机械性能:接口的型状,尺寸的大小,引脚的数目和排列方式等。电气性能:接口规定信号的电压、电流、阻抗、波形、速率及平衡特性等。 工程规范:接口引脚的意义、特性、标准。 工作方式:确定数据位流的传输方式,如:单工、半双工或全双工。 物理层协议有: 美国电子工业协会(EIA)的RS232,RS422,RS423,RS485等; 国际电报电话咨询委员会(CC

2016-06-03 23:00:26 684

转载 动态分配内存与静态内存

1) 静态内存分配是在编译时完成的,不需要占用CPU资源;动态分配内存是在运行时完成的,动态内存的分配与释放需要占用CPU资源; 2) 静态内存分配是在栈上分配的,动态内存是堆上分配的; 3) 动态内存分配需要指针或引用数据类型的支持,而静态内存分配不需要; 4) 静态分配内存需要在编译前确定内存块的大小,而动态分配内存不需要编译前确定内存大小,根据运行时环境确定需要的内存块大小,按照

2016-06-03 22:23:22 1862

原创 如何统计一个目录下的文件个数以及代码总行数的命令

linux下如何统计一个目录下的文件个数以及代码总行数的命令知道指定后缀名的文件总个数命令:find . -name "*.cpp" | wc -lfind . -maxdepth 1 -name "*.sh"|wc -l知道一个目录下代码总行数以及单个文件行数:find . -name "*.h" | xargs wc -lfind . -name "*.c" | xar

2016-06-03 09:00:48 8321

原创 C/C++的static关键字

static主要有三个作用:(1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数 前两种C和C++都有,第三种仅在C++中有,下面分别作以下介绍:一、局部静态变量在C/C++中, 局部变量按照存储形式可分为三种auto, static, register。其中register不常用到,下面主要说说auto和static的区别。1. 存储空间分配

2016-05-31 10:13:00 422

转载 TCP协议三次握手连接四次握手断开和DOS攻击

TCP连接的状态图TCP建立连接的三次握手过程,以及关闭连接的四次握手过程贴一个telnet建立连接,断开连接的使用wireshark捕获的packet截图。1、建立连接协议(三次握手)(1)客户 端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和S

2016-05-26 10:22:22 594

转载 I/O中的同步 异步 阻塞 非阻塞

同步/异步, 它们是消息的通知机制1. 概念解释A. 同步所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用(例如sin isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。该函数发送一个消息给某个

2016-05-21 17:54:18 564

原创 malloc浅析

隐式空闲链表就是通过每个块的头部中存放的信息可以方便的定位到下一个块的位置。头部一般就是本块的大小及使用情况(分配或空闲)。本块的起始地址加上本块的大小就是下一个块的起始地址。本文使用的控制块结构如下:[cpp] view plain copystruct mem_block  {      int size;     // 本块

2016-05-15 10:57:54 782

转载 调度算法

一、先来先服务和短作业(进程)优先调度算法1.先来先服务调度算法先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入

2016-05-14 17:50:37 621

原创 洗牌算法

工作原理看完代码之后,让我们看看它对数组都做了写什么。首先,该方法选中数组的最后一个元素:接下来确定挑选随机元素的范围,从数组的第一个元素到上一步选中的元素都属于这一范围:确定范围后,从中随机挑选一个数,这里假设随机选中的元素为 4:然后交换最后一个元素和随机选中的元素的值:上面的交换完成后,相当于我们完成了对数组最后一个元素

2016-05-14 17:17:52 551

原创 volitale关键字

volitale关键字是用了防止编译器优化代码的,volitale限定的变量都被指定从内存中读取. int v=10; void func() { int a,b; a=5*v ; b=5*v ; .... } 当编译期间编译器访问这段代码时,在第一次计算5*v的值后,先赋给a,然后直接从寄

2016-05-14 16:40:53 1297 1

转载 图的存储结构

邻接表(无向图) 邻接矩阵看上去是个不错的选择,首先是容易理解,第二是索引和编排都很舒服~但是我们也发现,对于边数相对顶点较少的图,这种结构无疑是存在对存储空间的极大浪费。邻接表(有向图) 因此我们可以考虑另外一种存储结构方式,例如把数组与链表结合一起来存储,这种方式在图结构也适用,我们称为邻接表(AdjacencyList)。

2016-05-14 11:28:41 901

原创 判断有向图是否有环

拓扑排序 算法思想1、在AOV网络中选一个没有直接前驱的顶点, 并输出之;2、从图中删去该顶点, 同时删去所有它发出的有向边;3、重复以上步骤, 直到◆ 全部顶点均已输出,拓扑有序序列形成,拓扑排序完成;◆ 或者图中还有未输出的顶点,但已跳出处理循环。这说明图中还剩下一些顶点,它们都有直接前驱,再也找不到没有前驱的顶点了。这时AOV网络中必定存在有向环。

2016-05-14 11:18:45 2298

原创 判断无向图是否有环

无向图:1 并查集                                                                             首先我们把每个点看成独立的集合{0} ,{1}, {2}, 然后规定如果两个点之间有边相连,如果这两个点不属于同一个集合,那就将他们所属的结合合并,看边0-1,直接将这两个点代表的集合合并{0, 1},

2016-05-14 10:46:05 6671 2

转载 evbuffer结构与基本操作

转载请注明出处:http://blog.csdn.net/luotuo44/article/details/39290721                        对于非阻塞IO的网络库来说,buffer几乎是必须的。Libevent在1.0版本之前就提供了buffer功能。现在来看一下Libevent的buffer。buffer相关结构体:

2016-05-10 19:34:27 2042

转载 bufferevent简介

分析:libevent的bufferevent在event的基础上自己维护了一个buffer,这样的话,就不需要再自己管理一个buffer了,上一篇博客是自己维护一个buffer,维护过程复杂,且过程难以理解,既然libevent自己提供了bufferevent这个神器,且有API,何必自己维护呢?先看看struct bufferevent这个结构体[cpp] view p

2016-05-10 19:05:50 946

转载 vim的用法

vim 选择文本,删除,复制,粘贴  文本的选择,对于编辑器来说,是很基本的东西,也经常被用到,总结如下:v    从光标当前位置开始,光标所经过的地方会被选中,再按一下v结束。 V    从光标当前行开始,光标经过的行都会被选中,再按一下V结束。 Ctrl + v   从光标当前位置开始,选中光标起点和终点所构成的矩形区域,再按一下Ctrl + v结束。 

2016-05-10 17:09:36 442

原创 并查集

以下是两种实现: // Model One const int MAXSIZE = 500010; int rank[MAXSIZE];      // 节点高度的上界 int parent[MAXSIZE];       // 根节点 int FindSet(int x){        // 查找+递归的路径压缩

2016-05-09 01:06:40 750

原创 找出key在有序数组中出现的次数

思路:用两次二次查找即可,第一次查找确定key第一次出现的位置,第二次查找确定key最后一次出现的位置。 int fun(vector &arr,int size,int key) { if(arr.empty()) return 0; int left =0; int right=size

2016-05-08 15:01:29 688

转载 滑动窗口机制

(1).窗口机制    滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。下面举一个例子(假设

2016-05-07 23:52:54 4744

原创 如何提高服务器并发能力

1什么是服务器并发处理能力  一台服务器在单位时间里能处理的请求越多,服务器的能力越高,也就是服务器并发处理能力越强。如何提高服务器的处理能力,是目前计算机界的一个关键问题。服务器的本质工作就是,争取以最快的速度将内核缓冲区中的用户请求数据都拿出来,然后尽快处理,再将响应数据放到一块又能够与发送数据的缓冲区中,接着处理下一个请求。2 衡量方法2.1 吞吐率  吞

2016-05-07 22:43:45 4623

原创 Proactor和Reactor的简单分析

两种I/O多路复用模式:Reactor和ProactorI/O多路复用机制都依赖于一个事件多路分离器(Event Demultiplexer)。分离器对象可将来自事件源的I/O事件分离出来,并分发到对应的read/write事件处理器(Event Handler)。开发人员预先注册需要处理的事件及其事件处理器(或回调函数);事件分离器负责将请求事件传递给事件处理器。两个与事件分离器有关的模式是

2016-05-07 10:07:17 672

转载 一致性hash算法

一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义:1、平衡性(Balance):平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。2、单调性(Monotonicity):单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应能够保证原

2016-05-07 01:06:29 657

原创 哈希表和红黑树的对比

什么是Hash Hash,也可以称为“散列”,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出(也就是多对一的关系)。哈希表的构造 在所有的线性数据结构中,数组的定位速度最快,因为它可通过数组下标直接定位到相应的数组空间,就不需要一个个查找。而哈希表就是利用数

2016-05-07 00:53:15 18035 5

转载 神奇的暴雪哈希算法

暴雪公司的魔兽、星际等游戏都一样一个非常大的MPQ文件,该文件存储了游戏中的大部分数据,想要把这些文字找出来,简单的办法是从数组头开始,一个个字符串读过去,比较每一个,直到找到对应的内容。Blizzard的天才和牛人们当然不会这样做,他们用了更聪明的方法: 用某种算法,把一个字符串压缩成一个整数,即hash。然后,根据这个整数值,直接得到此字符串在整个文件中的位置,从而直接读取之。 Bli

2016-05-07 00:20:32 1524

转载 tcpdump用法

简介用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。实用命令实例默认启动tcpdump普通

2016-05-06 23:11:27 366

转载 Vim编辑器-批量注释与反注释

vim编辑器---批量注释与反注释在使用vim编写代码的时候,经常需要用到批量注释与反注释一段代码。下面简要介绍其操作。方法一 块选择模式插入注释:用v进入virtual模式用上下键选中需要注释的行数按Control+v(win下面ctrl+q)进入列模式按大些“I”进入插入模式,输入注释符“#”或者是"//",然后立

2016-05-06 16:14:54 382

原创 字符串的排列

void fun(char *str,int begin,int end) { if(begin==end){ cout<<str<<endl; return ; } for(int i=begin;i<=end;++i){ if(i!=begin)

2016-05-06 14:04:07 270

空空如也

空空如也

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

TA关注的人

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