自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

学海无涯

我们一直在努力,所以每天在进步

  • 博客(68)
  • 资源 (1)
  • 收藏
  • 关注

转载 Redis和Memcache的区别分析

Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。Redis支持数据的备份,即master-slave模式的数据备份。Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。Redis在很

2015-11-28 14:15:55 331

转载 MySQL分片

本文作者Peter Zaitsev是知名数据库专家,2006年联合创立了Percona。负责维护网站“MySQL性能”。同时,他也是《高性能MySQL》一书的联合作者。以下是他对MySQL分片的建议:在与客户讨论分片决策的时候,我经常会先给他们讲下面这个真实的故事。几年前,有客户来找我,希望获得关于如何对系统分片的一些指导建议。他告诉我说,自从他知道很多应用MySQL的巨头(比如Faceb

2015-11-27 15:08:37 830

转载 数据库分片(Sharding)与分区(Partition)的区别

Sharding不是一个某个特定数据库软件附属的功能,而是在具体技术细节之上的抽象处理,是水平扩展(ScaleOut,亦或横向扩展、向外扩展)的解决方案,其主要目的是为突破单节点数据库服务器的 I/O能力限制,解决数据库扩展性问题。Sharding 的应用场景  任何技术都是在合适的场合下能发挥应有的作用。Sharding 也一样。联机游戏、IM、BSP 都是比较适合 Shardi

2015-11-27 14:45:24 1956

转载 mysql水平分表和垂直分表的优缺点

表分割有两种方式:    1. 水平分割:根据一列或多列数据的值把数据行放到两个独立的表中。  水平分割通常在下面的情况下使用。  • 表很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,提高查询速度。  • 表中的数据本来就有独立性,例如表中分别记录各个地区的数据或不同时期的数据,特别是有些数据常用,而另外一些数据不常用。  • 需要把数据存放到多

2015-11-26 15:24:27 2616

转载 MySQL垂直和水平切分

replication的限制:一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我们还是会面临到扩展瓶颈。数据切分(sharding):通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。。数据的切分同时还可以提高系统的总体可用性,因为单台设备Crash之后,只有总体数据的某部分不可用,而不是所有的数据。数据

2015-11-26 15:10:14 611

转载 深入Java集合学习系列:HashMap的实现原理

1. HashMap概述:  HashMap是基于哈希表的Map接口的非同步实现(Hashtable跟HashMap很像,唯一的区别是Hashtalbe中的方法是线程安全的,也就是同步的)。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。2. HashMap的数据结构:  在java编程语言中,最基本的结构就是两种,一

2015-06-01 22:02:10 368

转载 支付宝系统架构概况

支付宝系统架构概况典型处理默认资金处理平台财务会计支付清算核算中心交易柔性事务支付宝的开源分布式消息中间件--Metamorphosis(MetaQ

2015-03-28 14:04:05 4463 3

转载 C 语言的谜题

<br />1、下面的程序并不见得会输出 hello-std-out,你知道为什么吗?<br />#include<br />#include<br />int main()<br />{<br />while(1)<br />{<br />fprintf(stdout,"hello-std-out");<br />fprintf(stderr,"hello-std-err");<br />sleep(1);<br />}<br />return 0;<br />

2010-10-18 14:21:00 567

转载 纯虚函数能为private吗?

<br />纯虚函数能为private吗?<br />                                              --zhuweisky 2003.04.18<br /><br /> <br /> <br /> <br />我们把一个仅仅含有纯虚函数的类称为接口,我们也好像已经习惯了将这个接口中的所有纯虚函数全声明为public,而且按照这样的设计,一切都工作得不错。比如COM正是这样做的,它的接口中几乎不会存在private的纯虚函数。那么,让我们想一想,纯虚函数或者虚

2010-10-08 21:51:00 1049 3

原创 Mapreuce

Map Reduce – the Free Lunch is not over?<br />微软著名的C++大师Herb Sutter在2005年初的时候曾经写过一篇重量级的文章:”The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software“,预言OO之后软件开发将要面临的又一次重大变革-并行计算。<br />摩尔定律统制下的软件开发时代有一个非常有意思的现象:”Andy giveth, and Bill tak

2010-10-07 20:16:00 580

原创 lucene中的倒排索引

<br />Lucene是一个高性能的java全文检索工具包,它使用的是倒排文件索引结构。该结构及相应的生成算法如下: <br /><br />0)设有两篇文章1和2 <br />文章1的内容为:Tom lives in Guangzhou,I live in Guangzhou too. <br />文章2的内容为:He once lived in Shanghai. <br /><br />1)由于lucene是基于关键词索引和查询的,首先我们要取得这两篇文章的关键词,通常我们需要如下处

2010-10-07 20:10:00 643

转载 BTree,B-Tree,B+Tree,B*Tree都是什么

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

2010-10-06 20:41:00 729

转载 (int&)a和(int)a的区别

<br />#include <iostream>#include <string>#include <cstdlib>using namespace std;int main(){ float a = 1.0f; cout << (int)a << endl; cout << (int&)a << endl; cout << boolalpha << ( (int)a == (int&)a ) << endl; // 输出什么? float b = 0.0f;

2010-09-28 12:47:00 879

转载 什么是P问题、NP问题和NPC问题

什么是P问题、NP问题和NPC问题   这或许是众多OIer最大的误区之一。<br />    你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说的NP问题其实都是指的NPC问题。他们没有搞清楚NP问题和NPC问题的概念。NP问题并不是那种“只有搜才行”的问题,NPC问题才是。好,行了,基本上这个误解已经被澄清了。下面的内容都是在讲什么是P问题,什么是NP问题,什么是NPC问题,你如果不是很感兴趣就可以不看了。接下来你可以看

2010-09-27 19:37:00 791

转载 C++ Traits

<br />今天看"modern c++ design"的时候发现自己竟然又把以前好不容易弄懂的Traits技术给忘记了,真是...又重新学习了一下,赶紧记下来。<br />Traits技术可以用来获得一个 类型 的相关信息的。 首先假如有以下一个泛型的迭代器类,其中类型参数 T 为迭代器所指向的类型:<br /><br />template <typename T><br />class myIterator<br />{<br /> ...<br />};<br /><b

2010-09-27 09:59:00 509

转载 如何定位放置new

<br />标准首部<new>由一个特别的操作符new来定义,这个就是我们熟知的placement new。和其他普通的new不同的是,它在括号里多了另外一个参数。比如:<br />Widget * p = new Widget; //普通的new pi = new (ptr) int; //placement new<br />括号里的参数是一个指针,它指向一个内存缓冲器,placement new将在这个缓冲器上分配一个对象。Placementnew的返回值是这个被构造对象的地址。在对时间要

2010-09-27 09:26:00 916

原创 TCP三次握手协议

<br />TCP握手协议<br />  在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。<br />  第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;<br />  第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;<br />  第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认

2010-09-24 19:52:00 615

原创 联合(union)和结构(struct)的区别

<br /> 1. 联合说明和联合变量定义 <br />    联合也是一种新的数据类型, 它是一种特殊形式的变量。 <br />    联合说明和联合变量定义与结构十分相似。其形式为: <br />     union 联合名{ <br />          数据类型 成员名; <br />          数据类型 成员名; <br />          ... <br />     } 联合变量名; <br />    联合表示几个变量公用一个内存位置, 在不同的时间

2010-09-23 19:07:00 1175

转载 网络字节序和主机字节序

什么是Big Endian和Little Endian?<br />来源:http://blog.ednchina.com/qinyonglyz/194674/message.aspx<br />1.故事的起源<br />“endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。<br />我们一般将endian翻译成“字节序”,将big endian和l

2010-09-23 18:50:00 1260 1

原创 二叉树的非递归遍历

<br />#include <iostream>#include <stack>#include <queue>//#include <aa.h>using namespace std;struct BiTreeNode{ int data; BiTreeNode *lchild; BiTreeNode *rchild; bool flag; BiTreeNode() { data = 0; lchild = NULL; rchild =

2010-09-23 18:15:00 521

转载 贪心算法(Greedy Algorithm)之霍夫曼编码(Huffman codes)

<br />其实这个霍夫曼编码本身不是一个很难的技巧(也是霍夫曼在期末考试的过程中想出来的方案:)),因为中间用到了贪心的思想,所以也在这里列举了出来。这个问题本身在计算机系的很多教材上都出现过。这里权且记录下来。<br />霍夫曼的编码是这样的。假设我有一组带压缩的文本,里面各个字符出现的频率不同,现在需要对他们进行压缩。比如<br /><br />假设我们有100,000个字符的文本.最直观的压缩办法就是原来每个字符要8个bits。现在我一共只有6个字符,那我就把每个字符用3个二进制位来表示,这样所

2010-09-20 21:46:00 1817

转载 二叉树的非递归遍历

<br />#include "stdafx.h"#include "binaryTree.h"#include<list>#include<vector>#include<stack>#include<queue>using namespace std;Status PreOrderTraverse(BiTree T, Status (*Visit)(TElemType e)){ if(IsEmpty(T)) return Ok;/*

2010-09-20 21:14:00 417

转载 析构函数和虚函数

<br />且看下面的例子<br />Class Deriver: public Base <br />{ <br />…; <br />};<br />Base *pb = new Deriver; <br />Delete pb;              //子类中含有需要释放的资源时, <br />//如果没有声明virtual ~Base();则会造成内存泄漏. <br /><br />   在代码设计的时候,如果派生类有自己在heap中申请的空间,而且会用到派生类向基类的转化,那

2010-09-20 09:20:00 664

原创 堆栈

<br />堆和栈的区别<br />一、预备知识—程序的内存分配<br />一个由c/C++编译的程序占用的内存分为以下几个部分<br />1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。<br />2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。<br />3、全局区(静态区)(static)—,全局变量和静态变

2010-09-20 09:19:00 549

转载 float和double在的存储方式

<br />C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f=2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是float还是double在存储方式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。<br />    无论是单精度还是双精度在存储中都分为三个

2010-09-16 20:48:00 778

转载 String类的实现

<br />#include <iostream>using namespace std;class String{ friend ostream& operator<< (ostream&,String&);public: String(const char* str=NULL); //赋值构造兼默认构造函数(char) String(const String &other);

2010-09-16 20:32:00 476

转载 计算机类研究生求职经历以及经验共享

<br />一、设定求职目标:地点、行业、单位、职位、总体目标<br />二、简历:实习、经验必不可少;另外需要针对不同单位修改自己的简历;<br />三、求职信方式:开头自我介绍比较重要;另附简历;<br />四、笔试:<br />   1、非技术笔试:主要是考速度和答题准确度。<br />   2、技术笔试特点:  <br />      1)对于软件公司,往往考察的都比较细; <br />      2)对于非计算机领域的计算机职位,往往考的都比较全,内容比较广,但大都是基本概念,不难

2010-09-14 09:21:00 1328

转载 海量数据面试题整理

<br />1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?<br />方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。<br />s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个小文件的大约为300M。<br />s 遍历文件b,采取和a相同的方式将url分别存储到1000各小

2010-09-13 20:08:00 449

转载 Bloom Filter概念和原理

Bloom Filter概念和原理<br />焦萌 2007年1月27日<br /> <br />Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter通过

2010-09-13 19:22:00 471

转载 抽象类和接口的区别

<br />.Net提供了接口,这个不同于Class或者Struct的类型定义。接口有些情况,看似和抽象类一样,因此有些人认为在.Net可以完全用接口来替换抽象类。其实不然,接口和抽象类各有长处和缺陷,因此往往在应用当中,两者要结合来使用,从而互补长短。<br /> <br />接下来先说说抽象类和接口的区别。<br />区别一,两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,

2010-09-12 09:19:00 414

转载 抽象工厂模式与工厂方法模式区别

<br />对于java来说,你能见到的大部分抽象工厂模式都是这样的:<br />它的里面是一堆工厂方法,每个工厂方法返回某种类型的对象。<br />比如说工厂可以生产鼠标和键盘。那么抽象工厂的实现类(它的某个具体子类)的对象都可以生产鼠标和键盘,但可能工厂A生产的是罗技的键盘和鼠标,工厂B是微软的。<br />这样A和B就是工厂,对应于抽象工厂;<br />每个工厂生产的鼠标和键盘就是产品,对应于工厂方法;<br />用了工厂方法模式,你替换生成键盘的工厂方法,就可以把键盘从罗技换到微

2010-09-11 20:07:00 777

转载 各种排序算法的比较

<br />各种排序算法的比较<br />1.稳定性比较<br /> 插入排序、冒泡排序、二叉树排序、二路归并排序及其他线形排序是稳定的<br /> 选择排序、希尔排序、快速排序、堆排序是不稳定的<br />2.时间复杂性比较<br /> 插入排序、冒泡排序、选择排序的时间复杂性为O(n2)<br /> 其它非线形排序的时间复杂性为O(nlog2n)<br /> 线形排序的时间复杂性为O(n);<br />3.辅助空间的比较<br /> 线形排序、二路归并排序的辅助空间为O(n),其它排序的辅助空间为O(1

2010-09-10 19:28:00 548

原创 稳定排序和不稳定排序

<br />这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定。本文是针对老是记不住这个或者想真正明白到底为什么是稳定或者不稳定的人准备的。 <br />      首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,

2010-09-10 19:18:00 1090

转载 ZigBee组网机制以及数据的发送和接收

<br />Zigbee是一种新型的短距离无线通信技术。其特点是低功耗,低成本,组网灵活。Zigbee协议由zigbee联盟指定,包括应用层,和网络层,其下层采用IEEE802.15.4协议。 <br /><br /> 无论是学习zigbee技术,还是利用zigbee技术开发产品,都需要较好的掌握zigbee协议,并比较深入的了解IEEE802.15.4协议.然而仅zigbee协议就接近400页,而IEEE802.15.4协议多达600页,全部是英文。如果从来没有接触过无线通信的开发,要迅速掌握

2010-09-05 15:20:00 20614 10

转载 位域

位域  有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:  struct 位

2010-09-04 20:29:00 715

转载 补码的计算

<br />今天用java写个程序中用这样的这一句代码:<br />   int i=6;<br />    ~i;<br />结果~i 的值是 -7,有点不解,随即就有了下面一大堆的说明。<br />    一看是负数,我就想到负数在计算机中都是以补码形式表示的。大学时学的补码,好久不用现在计算方法都忘记的差不多了。那好,下面先复习一下补码。<br />   什么事发生我们都要问为什么。那么计算机中为什

2010-09-04 20:23:00 4693

转载 关于sizeof

1、什么是sizeof     首先看一下sizeof在msdn上的定义:   The sizeof keyword gives the amount of storage, in bytes, associatedwith a variable or a type (including aggregate types). This keywordreturns a value of type size_t.    看到return这个字眼,是不是想到了函数?错了,sizeof不是一个函数,你见

2010-09-04 20:20:00 429

转载 堆栈的区别

一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始

2010-09-04 13:59:00 523

转载 构造最优二叉查找树的时间复杂度分析

<br />概念<br /><br />      二叉查找树(BST,Binary Search Tree),又名二叉搜索树或二叉检索树,是一颗满足如下条件的树: <br />      1、每个节点包含一个键值 <br />      2、每个节点有最多两个孩子 <br />      3、对于任意两个节点x和y,它们满足下述搜索性质: <br />            a、如果y在x的左子树里,则key[y] <= key[x] <br />            b、如

2010-09-02 14:30:00 5476

转载 指针如何传递内存

<br />指针参数是如何传递内存的?<br />如果函数的参数是一个指针,不要指望用该指针去申请动态内存。示例7-4-1 中,<br />Test 函数的语句GetMemory(str, 200)并没有使str 获得期望的内存,str 依旧是NULL,<br />为什么?<br />void GetMemory(char *p, int num)<br />{<br />p = (char *)malloc(sizeof(char) * num);<br />}<br />

2010-08-31 09:28:00 587

db2数据库性能调整和优化

db2数据库性能调整和优化,非常好的一本书,推荐给大家

2014-05-25

空空如也

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

TA关注的人

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