从Moco谈程序库设计
Moco在程序库设计包括两个方面,如何设置服务器和如何让服务器运行起来。 先说简单的,如何让服务器运行。最简单的选择是让用户自己启动服务器,然后,在测试结束之后关闭服务器。小结一番,简化用户接口,设计DSL,利用好类型,区分Publish接口。
精选技术长文、实践记录与系统化阅读
低噪声、高可扫读;标题、摘要、来源、标签一目了然。
采集自各技术站点的近期文章。
Moco在程序库设计包括两个方面,如何设置服务器和如何让服务器运行起来。 先说简单的,如何让服务器运行。最简单的选择是让用户自己启动服务器,然后,在测试结束之后关闭服务器。小结一番,简化用户接口,设计DSL,利用好类型,区分Publish接口。
Slab Allocation的原理——将分配的内存分割成各种尺寸的块(chunk), 并把尺寸相同的块分成组(chunk的集合),每个chunk集合被称为slab。 Memcached的内存分配以Page为单位,Page默认值为1M,可以在启动时通过-I参数来指定。 Slab是由多个Page组成的,Page按照指定大小切割成多个chunk。
微软C++编程译器define这个事相当的奇葩,这让我非常不解,对微软的C++编译器再度失望,而这让好多人把这种undefined的东西当成defined来用,还赞扬做得好,真是令人无语。 读完本文,你将知道Base* pBase = new Derived[10];这个问题是C语言的转型的问题,你也应该知道用于数组的指针是怎么回事了吧。 最后,我越来越发现,很多说C++难用的人,其实是不懂C语言。
前些日子 Linode 的远程 ssh 服务被伟大的 GFW 过滤了。但 80 口还开着,很是神奇,相信一堆的人都出现过这种问题。我们这些 IT 民工们基本没有权势,在国内目前搞个备案是非常麻烦。所以一堆堆的做计算机的人都给自己的个人网站移到了大日本帝国中的 Linode ,这是目前连接中国最快的 Linode 节点。 正好以前看过资料怎么样使用一个端口来跑二个服务。其实说白了就是做个代理,然后前端进行协议的识别。然后绑定到后端的应用。所以我也搞了一个,GFW 没有过滤掉 80 那我就让我的服务器 80 端口同时服务 HTTP 协议和 SSH 协议好了。
折半插入排序也是插入排序的一种, 和直接插入排序区别在于插入点不同. 由于插入排序是在一个前面已经排好的序列中进行插入操作, 直接插入是需要进行顺序从右到左进行比较(可以想下刚才我们的插入扑克牌的算法), 假如对 10, J, Q, K, A 要插入9 ,直接插入排序要从A开始依次比较, 一直比较到10. 而假如我们在即将要插入9的时候看到的是Q, 因为Q > 9 这样就知道9应该插入在牌的左边位置. 这种算法就是折半排序算法.
冒泡排序在众多排序算法中算比较简单的一个, 基本思想是, 重复的进行整个数列的排序, 一次比较两个元素(两两排序),如果它们顺序不符合就交换,重复这样直到数列没有再需要交换的数为止(结束条件).就好像气泡一样, 轻的气泡会往上漂浮,在不断漂浮的过程中,发生了两两交换过程, 所以叫冒泡排序.
简单选择排序的基本思想是:一次选定数组中的一个数,记下当前位置并假设它是从当前位置开始后面数中的最小数min=i,从这个数的下一个数开始扫描直到最后一个数,并记录下最小数的位置min,扫描结束后如果min不等于i,说明假设错误,则交换min与i位置上的数。(也即每次从数列中找出一个最小的数放到最前面来,再从剩下的n-1个数中选择一个最小的,不断做下去。
一般情况下,算法的基本操作重复执行的次数是模块n的某一个函数f(n),因此,算法的时间复杂度记做:T(n)=O(f(n)),一般人认为,T(n)是f(n)中增长最快的项/此项的系数.
可以预见的,用户将会在不同的屏幕上体验你的产品,而用户在各个屏幕上的用户体验也将趋于一致。对于用户而言,只在乎你所提供的服务,这与他在什么屏幕上体验无关。
分享两个强符号,弱符号引起的编译问题。由于SP的编译分为debug和release两种模式(话说也没有谁不这么编吧),往往在debug开发的时候没有遇到的问题,在release阶段暴露了,这里面最容易出现的就是弱符号丢失,导致符号定位出错或者符号没找到的问题。
每个程序员都应该具备估算的技能。为磨练这个技能,接手每个任务时,先决定你要做什么。然后在开始之前估算任务所需时间。最后测量实际花费时间,并与估算相比较。同样比较你实际完成的与计划完成的。这样你将会既提高你对一个任务包含细节的理解,同样也提高了你的估算技能。
了解基本的bash通读整个bash man page.学习VIM在Linux系统上,虽然你有Emacs和Eclipse,但是VIM仍然是无出其右的利器。了解SSH,基本的无密码验证方式。例如通过ssh-agent, ssh-add等。
今天碰到一个替换问题:需要把全部接口中出现的一个链接改成另一个链接。虽然链接地址是保存在数据库中的,但是由于某些原因,不能直接修改数据库中的内容,只能在渲染结果的时候再进行替换。 如果有很好的逻辑封装的话,这个问题并不是什么难事儿,可恰恰代码一团乱,搞不清楚到底哪些接口需要修改。我本打算依靠蛮力挨个文件查,但试了试发现工作量实在太大了,没办法只能想想别的招儿。
当注释代码时,要考虑到不仅将来维护你代码的开发人员要看,而且你自己也可能要看。用Phil Haack大师的话来说就是:“一旦一行代码显示屏幕上,你也就成了这段代码的维护者”。因此,对于我们写得好(差)的注释而言,我们将是第一个受益者(受害者)。
我认为V已经是地下黑客世界中的王者,虽然他从不肯告诉我他入侵的那些公司的名字,但我仍然会毫不犹豫的将他列为当今世界上最强大的黑客之一。 V至今仍恪守着古老的黑客守则,就如同中世纪的骑士们执着于骑士精神一般。他从不在任何公众场合谈论入侵了什么网站,入侵后也从不删除数据或是进行破坏,他也不会用入侵获得的成果来牟利。 V只是一个人,他的身后没有任何的机构或组织,因此才更加的难能可贵。
对卡号上的每位数字乘以权重。其规则是,如果卡号数字个数是偶数,则第一位乘以2,否则就乘以1,然后以后分别是,1,2,1,2,1,2。
小公司,三五个人,扯开嗓子开干的情况下,不妨参考一下过去我们淌过的坑。 1.网络 在中国,网络成本是比较贵的(包括托管费用)。分析你的目标用户,如果用户是特别集中在南方或者是北方,这能省些钱,多线机房还是很贵的。同时,移动互联网,特别是中国特色的情况下,各种运营商挂js,各种基站网络不通,如果所在的机房在搜索引擎上一条记录都没有的话,那会很惨,基本上你的用户在手机上是很难过去的。 如果是百分之百的手机上的应用后端,前期数据量不大的情况下,可以考虑租用一些双线机房的机器。搞大了再自己买机器吧,能省则省。 2.硬件 如果要考虑硬件了,说明你的业务量已经到一个阶段了,当然也不排除高富帅创业过程,上来先来一堆高端服务器的。 内存条:注意你买的机器的主板,主板与内存的配合至关重要。常见的三通道主板,尽可能使用三条相同的内存条,高端四通道主板,使用四条相同内存条。
今天踩了一个伪随机数生成函数的坑,与其说是个坑到不如说自己功力不够深厚,对这些随机数生成的函数族欠缺了解,先来介绍下我的问题吧。
ack诞生的目的就是要取代grep,从作者开发的初衷以及它官网的名字,另外它还有一个“可以替代99%grep的工作”这个口号。
你或许熟知一个非常经典的结论: Fibonacci 数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, … (头两项都是 1 ,此后每一项都是前两项之和)的相邻两项之比将会越来越接近黄金比例 0.618 。。。。