摘要: 高并发服务端分布式系统设计概要(下) 上篇 链接地址:http://www.cnblogs.com/ccdev/p/3338412.html 中篇 链接地址:http://www.cnblogs.com/ccdev/p/3340484.html 现在接着设计我们的“山推”系统。有了前面两篇的铺垫,我们的系统现在已经有了五脏六腑,剩下的工作就是要让其羽翼丰满。那么,是时候,放出我们的“山推”系统全貌了: 前面啰嗦了半天,也许不少同学看的不明不白,好了,现在开始看图说话环节: (1)整个系统由N台机器组合而成,其中Global Master一台,Global Slave一台到... 阅读全文
posted @ 2013-09-26 17:41 Jone Zhang 阅读(10444) 评论(23) 推荐(20) 编辑
摘要: 高并发服务端分布式系统设计概要(中) 上篇(链接)我们完成了在此分布式系统中,一个group的设计。那么接下来,我们设计系统的其他部分。如前文所述,我们的业务及其数据以group为单位,显然在此系统中将存在many many的groups(别告诉我你的网站总共有一个业务,像我们的“山推”,那业务是一堆一堆地),那么由谁来管理这些groups呢?由Web过来的请求,又将如何到达指定的group,并由该group处理它的请求呢?这就是我们要讨论的问题。 我们引入了一个新的角色——Global Master,顾名思义,它是管理全局的一个节点,它主要完成如下工作:(1)管理系统全局配置,发... 阅读全文
posted @ 2013-09-26 13:24 Jone Zhang 阅读(13052) 评论(12) 推荐(10) 编辑
摘要: 高并发服务端分布式系统设计概要(上) 张峻崇 原创。转载请注明出处。 又是快一年没写博客了,2013年也只剩尾巴,也不知道今年都忙了些什么。写这篇文章的目的,主要是把今年以来学习的一些东西积淀下来,同时作为之前文章《高性能分布式计算与存储系统设计概要》的补充与提升,然而本人水平非常有限,回头看之前写 阅读全文
posted @ 2013-09-26 10:41 Jone Zhang 阅读(33887) 评论(27) 推荐(29) 编辑
摘要: 高性能分布式计算与存储系统设计概要(下篇) (上篇) 在上篇里,我们主要讨论了,这个系统怎样处理大数据的“读”操作,当然还有一些细节没有讲述。下篇,我们将主要讲述,“写”操作是如何被处理的。我们都知道,如果只有“读”,那几乎是不用做任何数据同步的,也不会有并发安全问题,之所以,会产生这样那样的问题, 阅读全文
posted @ 2012-12-29 00:02 Jone Zhang 阅读(10062) 评论(48) 推荐(35) 编辑
摘要: 高性能分布式计算与存储系统设计概要(上篇) 2012年底,末日之后,看到大家都在写年末总结,我也忍不住想一试。工作已经3年半了,头一次写总结。虽然到现在仍是无名小码农一名,但工作这些年,技术着实有不少积累。成长最大的,当然就是这篇文章标题提到的——高性能分布式计算与存储系统的设计和研发过程,这也是我 阅读全文
posted @ 2012-12-28 00:38 Jone Zhang 阅读(14152) 评论(46) 推荐(32) 编辑
摘要: Performanced C++ 经验规则===========================================================================================前言: Performanced C++,意为“高性能C++“编程,是笔者和所在团队多年C++编程总结的经验规则,按条款方式讲述(参考了《Effective C++》的方式),希望能对初入C++的程序员提供帮助,少走弯路,站在前人的肩膀上,看得更高走的更远。我们也同样是脚踩许许多多大牛的经典著作,还有无数默默付出的程序员的辛劳,以及自己许许多多惨痛的编程体验,才有了这些.. 阅读全文
posted @ 2012-12-27 21:38 Jone Zhang 阅读(2163) 评论(0) 推荐(2) 编辑
摘要: 第五条:再谈重载、覆盖和隐藏在C++中,无论在类作用域内还是外,两个(或多个)同名的函数,可能且仅可能是以下三种关系:重载(Overload)、覆盖(Override)和隐藏(Hide),因为同名,区分这些关系则是根据参数是否相同、是否带有const成员函数性质、是否有virtual关键字修饰以及是否在同一作用域来判断。在第四条中,我们曾提到了一些关于重载、覆盖的概念,但只是一带而过,也没有提到隐藏,这一篇我们将详细讨论。1、首先说的是重载,有一个前提必须要弄清楚的是,如果不在类作用域内进行讨论,两个(或多个)同名函数之间的关系只可能是重载或隐藏,这里先说重载。考虑以下事实:1 int foo 阅读全文
posted @ 2012-12-26 17:09 Jone Zhang 阅读(2227) 评论(4) 推荐(4) 编辑
摘要: 第四条:静态和多态,亦敌亦友这一篇,我们讨论C++中静态和多态的关系。我们都知道,C++并不是一门“动态”语言,虽然它提供了同样强大于其它动态语言的多态性,但很多时候,我们之所以选择C++,看重中正是其“静态”所带来的High Performance。所谓静态,通常是指,在程序运行的过程,是“静止”不变,固定的(特别是内存地址),当然“多态”就是与之对立的概念。这一篇我们并不讨论静态(成员)变量或静态(成员)函数有什么作用,而是讨论“静态”的行为,对比“多态”。我们这里所说的静态,是指:compiler time,即编译时绑定、早绑定、静态联编;而“多态”就是真正的runtime绑定、晚绑定、 阅读全文
posted @ 2012-12-25 17:45 Jone Zhang 阅读(1993) 评论(1) 推荐(2) 编辑
摘要: 第三条:你不知道的构造函数(下)前面两篇,我们已经讨论了C++构造函数中诸多细枝末节,但百密一疏,还有一些地方我们没有考虑到。这一篇将对这些问题进行完结。7、构造函数中的异常当你在构造函数中写代码的时候,你有没有想过,如果构造函数中出现异常(别告诉我,你不抛异常。“必要”时系统会替你抛的),那会出现怎样的情况?对象还能构建完成吗?构造函数中已经执行的代码产生的负面效应(如动态分配内存)如何解决?对象退出其作用域时,其析构函数能被调用吗?上述这些问题,正是构造函数中产生异常要面临的问题。让我们先看结论,再分析过程:尽可能不要在构造函数中产生(抛出)异常,否则,一定会产生问题。我们先看一段代码: 阅读全文
posted @ 2012-12-24 14:38 Jone Zhang 阅读(2362) 评论(5) 推荐(0) 编辑
摘要: 第二条:你不知道的构造函数(中)上一篇你不知道的构造函数(上)主要讲述了,C++构造函数在进入构造函数体之前,你可能不知道的一些细节。这一篇将讲述,进入构造函数体后,又发生了什么。4、虚表初始化上一篇曾提到,如果一个类有虚函数,那么虚表的初始化工作,无论构造函数是你定义的还是由编译器产生的,这部分工作都将由编译器隐式“合成”到构造函数中,以表示其良苦用心。上一篇还提到,这部分工作,在“刚”进入构造函数的时候,就开始了,之后,编译器才会理会,你构造函数体的第一行代码。这一点,通过反汇编,我们已经看的非常清楚。虚表初始化的主要内容是:将虚表指针置于对象的首4字节;用该类的虚函数实际地址替换虚表中该 阅读全文
posted @ 2012-12-23 19:00 Jone Zhang 阅读(2785) 评论(1) 推荐(1) 编辑
摘要: Performanced C++ 经验规则前言:Performanced C++,意为“高性能C++“编程,是笔者和所在团队多年C++编程总结的经验规则,按条款方式讲述(参考了《Effective C++》的方式),希望能对初入C++的程序员提供帮助,少走弯路,站在前人的肩膀上,看得更高走的更远。我们也同样是脚踩许许多多大牛的经典著作,还有无数默默付出的程序员的辛劳,以及自己许许多多惨痛的编程体验,才有了这些“规则”。icc(JoneZhang,张峻崇)原创内容,难免有错误,欢迎拍砖指正,共同进步。转载请注明出处,保留追究一切责任的权利。============================ 阅读全文
posted @ 2012-12-23 16:16 Jone Zhang 阅读(5117) 评论(3) 推荐(2) 编辑
摘要: 废话不多说,常用的代码积淀下来。一、懒汉模式:即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。需要用锁,来保证其线程安全性:原因:多个线程可能进入判断是否已经存在实例的if语句,从而non thread safety.使用double-check来保证thread safety.但是如果处理大量数据时,该锁才成为严重的性能瓶颈。1、静态成员实例的懒汉模式: 1 class Singleton 2 { 3 private: 4 static Singleton* m_instance; 5 Singleton(){} 6 public: 7 sta... 阅读全文
posted @ 2012-12-19 18:38 Jone Zhang 阅读(42984) 评论(8) 推荐(7) 编辑
摘要: Top K算法详细解析—百度面试问题描述:这是在网上找到的一道百度的面试题:搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前有一千万个记录,这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。请你统计最热门的10个查询串,要求使用的内存不能超过1G。问题解析:【分析】:要统计最热门查询,首先就是要统计每个Query出现的次数,然后根据统计结果,找出Top 10。所以我们可以基于这个思路分两步来设计该算法。下面分别给出这两步的算法:第一步:Query统计 阅读全文
posted @ 2012-09-12 18:45 Jone Zhang 阅读(10363) 评论(3) 推荐(3) 编辑
摘要: 下载:http://code.google.com/p/git-osx-installer/下载最新的PGK文件。图形化OpeninGitGui:http://code.google.com/p/git-osx-installer上也提供了一个Git的图形化客户端:OpenInGitGui,可以从这里获得,OpenInGitGui十分小巧,下载解压后也只有16K,OpenInGitGui不用安装,双击即可使用,OpenInGitGui刚启动时,会记录打开过的资源库。github使用SSH链接,需要设置SSH1.检查SSH key cd ~/.ssh2.备份已有的key,(如果有的话) mkdi 阅读全文
posted @ 2012-09-12 17:16 Jone Zhang 阅读(110751) 评论(1) 推荐(2) 编辑
摘要: 首先看如下代码:1 int main(int argc, char** argv)2 {3 int a[5] = {1,2,3,4,5};4 int* ptr = (int*)(&a + 1);5 printf("%d,%d\n", *(a+1), *(ptr-1));6 return 0;7 }这道题在很多所谓经典C语言面试题里是常见的不能再常见,你知道输出结果吗?答案是:2,5但是仍有许多人不能答对,也包括当初的我。这道题简简单单,但是考察了不少于如下内容:数组指针、数组首地址概念、数组指针和数组首地址和数组首元素地址之间的关系,指针运算规则,指针类型,in.. 阅读全文
posted @ 2012-09-11 15:50 Jone Zhang 阅读(2396) 评论(4) 推荐(3) 编辑