08 2012 档案
摘要:1.聊一聊跳表作者的其人其事2. 言归正传,跳表简介3. 跳表数据存储模型4. 跳表的代码实现分析5. 论文,代码下载及参考资料<1>. 聊一聊作者的其人其事跳表是由William Pugh发明。他在 Communications of the ACM June 1990, 33(6) 668-676 发表了Skip lists: a probabilistic alternative to balanced trees,在该论文中详细解释了跳表的数据结构和插入删除操作。William Pugh同时还是FindBug(没有使用过,这是一款java的静态代码分析工具,直接对java
阅读全文
摘要:1、关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针。对象引用本身就是有向的,更适合表达我们所讨论的那种关系。所以这种关系在设计的时候比较少用到,关联一般都是有向的。使用ROSE 生成的代码是这样的:classC1...{public:C2*theC2;};classC2...{public:C1*theC1;};双向关联在代码的表现为双方都拥有对方的一个指针,当然也可以是引用或者是值。单向
阅读全文
摘要:一)TLB1)TLB的概述TLB是一个内存管理单元用于改进虚拟地址到物理地址转换速度的缓存.TLB是位于内存中的页表的cache,如果没有TLB,则每次取数据都需要两次访问内存,即查页表获得物理地址和取数据.2)tlb的原理当cpu对数据进行读请求时,CPU根据虚拟地址(前20位)到TLB中查找.TLB中保存着虚拟地址(前20位)和页框号的对映关系,如 果匹配到虚拟地址就可以迅速找到页框号,通过页框号与虚拟地址后12位的偏移组合得到最终的物理地址.页框号可以理解为页表项如果没在TLB中匹配到虚拟地址,就出现TLB丢失,需要到页表中查询页表项,如果不在页表中,说明要读取的内容不在内存,需要到磁盘
阅读全文
摘要:前言High Performance mysql深入剖析了mysql架构原理,以及sql语句执行原理,并结合作者多年实际经验提出如何高性能设计及使用mysql(不像某数据库教科书籍简单介绍几个sql语句)。本书颠覆了我对与对mysql的认识。特别对于目前海量用户互联网中对于高并发,低延迟应用场景如何设计和使用mysql提出了技巧和方法。有志于从事互联网后台开发的童鞋值得好好研究。--by姜跃jiangyue.hust@gmail.com一.索引类型:1.B-Tree索引B树是一种适合磁盘等慢速设备的索引结构,能够以较少磁盘读取次数查找数据。以下是mysql中InnoDB引擎B+树结构。能用B+
阅读全文
摘要:1.MongoDB是什么MongoDB介绍PPT分享MongoDB GridFS介绍PPT两则初识 MongoDB GridFSMongoDB GridFS 介绍一个NoSQL与MongoDB的介绍PPTMongoDB:下一代MySQL?写给Python程序员的MongoDB介绍又一篇给Python程序员的MongoDB教程MongoDB源码研究系列文章白话MongoDB系列文章MongoDB Tailable Cursors 特性介绍MongoDB 文档阅读笔记 —— 优雅的 NoSQLMongoDB 身上的优势和劣势auto-sharding 无用论:auto-sharding vs. m
阅读全文
摘要:很多朋友反映,说NoSQLFan上的资料不少,但是要找到自己实用的太难,于是萌生做这样一个专题的想法。通过将不同NoSQL产品从入门到精通的各种资料进行汇总,希望能够让大家更快的找到适合自己的教程或文章进行阅读。本篇为Redis部分的资料汇总。保持持续更新。1.Redis是什么?十五分钟介绍 Redis数据结构Redis系统性介绍一个很棒的Redis介绍PPT强烈推荐!非同一般的Redis介绍Redis之七种武器锋利的Redisredis 适用场景与实现2.Redis内部实现Redis源码分析系列文章Redis运行流程源码解析解密Redis持久化Redis RDB文件格式全解析深入Redis内
阅读全文
摘要:百度的高性能计算系统(主要是后端数据训练和计算)目前有4000节点,超过10个的集群,最大的集群规模在1000个节点以上。每个节点由8核CPU以及16G内存以及12TB硬盘组成,每天的数据生成量在3PB以上。规划当中的架构将有超过1万个节点,每天的数据生成量在10PB以上。底层的计算资源管理层采用了Agent调度不同类型的计算分别给MPI结构的算法和Map-Reduce和DAG算法应用等。而通过调度的分配,可以让HPC高性能计算集群和大规模分布式集群各得其所的计算相应数据。百度通过HCE对streaming作业的排序,压缩,解压缩,内存控制进行了优化并提供了C++版的MapReduce接口。百
阅读全文
摘要:参看:http://www.yuewe.cn/article-114342-1.html
阅读全文
摘要:文章地址MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析
阅读全文
摘要:先通过一个小程序来看一看:#includevoid foo(int x, int y, int z){printf("x = %d at [%X]n", x, &x);printf("y = %d at [%X]n", y, &y);printf("z = %d at [%X]n", z, &z);}int main(int argc, char *argv[]){foo(100, 200, 300);return 0;}运行结果:x = 100 at [BFE28760]y = 200 at [BFE2876
阅读全文
摘要:计算机编程语言在过去几十年发现了许多变化。最先出现的语言是用于科学计算的Fortan和逻辑推演的LISP语言,而现在用于网络编程的语言包括C#、Ruby on Rails、Note.JS。下面由Services Angle制作的信息图展示了过去数十年来编程语言的演化过程。1954 FortranFORTRAN(FORmula TRANslator的缩写)意为“公式翻译器”,是世界上最早出现的计算机高级程序设计语言,广泛应用于科学和工程计算领域。FORTRAN语言以其特有的功能在数值、科学和工程计算领域发挥着重要作用。1958 LISPLISP语言(全名LISt Processor,即链表处理语
阅读全文
摘要:分布式哈希和一致性哈希分布式哈希和一致性哈希是分布式存储和p2p网络中说的比较多的两个概念了。介绍的论文很多,这里做一个入门性质的介绍。分布式哈希(DHT) 两个key point:每个节点只维护一部分路由;每个节点只存储一部分数据。从而实现整个网络中的寻址和存储。 DHT只是一个概念,提出了这样一种网络模型。并且说明它是对分布式存储很有好处的。但具体怎么实现,并不是DHT的范畴。一致性哈希: DHT的一种实现。本质还是一个哈希算法。回想平时我们做负载均衡,按querystring签名对后端节点取模是最简单也是最常用的算法,但节点的增删后所造成的问题显而易见,原有的请求几乎都落不到同一台机器上
阅读全文
摘要:有这样一个面试题——请把从1到1000的数打印出来,但你不能使用任何的循环语句或是条件语句。更不能写1000个printf或是cout。用C/C++语言。我相信,大多数人一开始你可能想到的是递归算法:1234567void f(int n){ printf("%d\n",n); (1000-n) ? f(n+1) : exit(0) ; } int main(){ f(1); }当然,题目中说了不能使用条件语句,所以,上面那种解法的不符合题意的,因为还是变向地使用了条件表达式。不过,我们可以用别的方法来让这个递归终止,比如:除以零,当程序crash,呵呵。12345void
阅读全文
摘要:二叉树:一个根节点,每个节点下挂着最多2个子节点。、概念:度:结点的分支数,二叉树度为2。深度:树的层次。二叉排序树:二叉树的基础上,每个节点上都有一个数字,节点上的数字都比右节点上的大。应用场景:基于内存的排序数据结构,写入时将数据写入到对应的位置。数据可能会出现倾斜,可以想到数字写入顺序如果不是50-20-60-18-55,而是18-20-50-55-60,那么二叉树就会退变为链表。B-树:B-树每个节点上包含着数据和指针,每个指针指向其一个子节点的位置,并且数据的个数为指针的2d-1个。这里的d是指针的个数,同时也是树的“度”。B-树的查找需要一次对每个节点进行二分查找,直至找到或返回n
阅读全文
摘要:linux内核在使用fork创建进程时,基本上会使用Copy-On-Write(COW)技术。这里解释一下COW技术以及为什么在fork中使用。WIKI上对COW的解释:Copy-on-write(sometimes referred to as "COW") is anoptimizationstrategy used incomputer programming. The fundamental idea is that if multiple callers ask for resources which are initially indistinguishable
阅读全文
摘要:个人觉得php最方便的就是deployment了,只要把php文件丢到支持php的路径里面,然后访问那个路径就能使用了;无论给主机添加多少php应用,只要把目录改好就没你的事了,完全不用关心php-cgi运行得如何,deployment极为方便。反观python,部属起来真是头痛,常见的部署方法有:fcgi:用spawn-fcgi或者框架自带的工具对各个project分别生成监听进程,然后和http服务互动wsgi:利用http服务的mod_wsgi模块来跑各个project无论哪种都很麻烦,apache的mod_wsgi配置起来很麻烦,内存占用还大,如果要加上nginx作为静态页面的服务器那
阅读全文
摘要:为什么自己当初要选择Redis作为数据存储解决方案中的一员呢?现在能想到的原因主要有三。其一,Redis不仅性能高效,而且完全免费。其二,是基于C/C++开发的服务器,这里应该有一定的感情因素吧。最后就是上手容易,操作简单。记得在刚刚接触Redis的时候,由于当时项目的工期相当紧张,留给我们做出选择的空间也是非常有限,一旦技术决策失误,造成的后果也比较严重。所以在做出决定之前,我不仅快速的浏览了Redis官网文档,而且还熬夜搜集了很多网上的相关技术文章。在经过一通折腾之后,毅然决然的选择了它,现在回头想想自己确实是幸运的。 这个系列博客中的内容和数据主要来自于Redis官方文档,本人仅仅是根.
阅读全文
摘要:python中的Module是比较重要的概念。常见的情况是,事先写好一个.py文 件,在另一个文件中需要import时,将事先写好的.py文件拷贝 到当前目录,或者是在sys.path中增加事先写好的.py文件所在的目录,然后import。这样的做法,对于少数文件是可行的,但如果程序数目很 多,层级很复杂,就很吃力了。有没有办法,像Java的Package一样,将多个.py文件组织起来,以便在外部统一调用,和在内部互相调用呢?答案是有的。主要是用到python的包的概念,python __init__.py在包里起一个比较重要的作用要弄明白这个问题,首先要知道,python在执行import语
阅读全文
摘要:当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂。这里列出了常见的的一些让你程序 crash 的运行时错误。1)忘记在if,elif,else,for,while,class,def声明末尾添加 :(导致 “SyntaxError :invalid syntax”)该错误将发生在类似如下代码中:1ifspam==422print('Hello!')2)使用 = 而不是 ==(导致“SyntaxError: invalid syntax”)= 是赋值操作符而 == 是等于比较操作。该错误发生在如下代码中:1ifspam=42:2print('
阅读全文
浙公网安备 33010602011771号