垃圾回收机制的优缺点 (On GC Trade-off)

摘要: By taking control over the large part of memory management, GC brings both convenience and inconvenience to programmers, "no need to care" also means "loss of control". In languages with GC, programmers have no way to recycle a large memory immediately, you can reset all references to the object, you can call GC.collect() to notify the GC to work, but there's no guarantee that the memory will be recycled immediately. 阅读全文
posted @ 2013-06-15 22:31 Todd Wei 阅读(2593) 评论(1) 推荐(0) 编辑

TF-IDF模型的概率解释

摘要: TF-IDF模型是搜索引擎中广泛使用的信息检索模型,但对于TF-IDF模型一直存在各种疑问。本文为信息检索问题一种基于条件概率的盒子小球模型,其核心思想是把“查询串q和文档d的匹配度问题”转化为“查询串q来自于文档d的条件概率问题”。它从概率的视角为信息检索问题定义了比TF-IDF模型所表达的匹配度更为清晰的目标。从概率模型中,我们看到查询串q来自于文档d的条件概率主要包含以下几个因素:1) 文档的先验概率P(d[i]),这与PageRank对应;2) 词w被作为搜索关键词的先验概率P(w),这可以通过统计方法获得;3) 关键词w代表文档d主题,或以词w搜索文档d的概率,P(w | d),除了统计方法,这可以通过tf-idf来计算。 阅读全文
posted @ 2012-10-22 09:04 Todd Wei 阅读(17888) 评论(2) 推荐(9) 编辑

Lisp的永恒之道

摘要: Lisp采用单一的S表达式语法表达不同的语义,实现了语法和语义解耦。这使得Lisp具有强大的语义构造能力,擅长于构造DSL实现面向语言编程,而宏使得Lisp具有自解释能力,让不同DSL之间的转换游刃有余。进入Lisp的世界应当从理解面向语言编程入门,这是Lisp之道,而函数式编程和宏皆为Lisp之器,以道驭器方为正途。 阅读全文
posted @ 2012-06-03 23:46 Todd Wei 阅读(22296) 评论(28) 推荐(47) 编辑

需求变化与IoC

摘要: 要不被客户牵着鼻子走,需要自己有很强的设计能力,反过来让客户跟着你的设计来满足你的要求。这本质上就是软件设计中的控制反转(IoC)思想。IoC是每一个初级程序员向高级进阶所需要了解的最重要的设计思想。知道IoC概念的程序员不在少数,但不少人对于IoC的理解仅仅停留在通过依赖注入实现解耦这个层面。实际上,IoC的应用不仅包括解耦,它还是框架的基本原理,在非计算机领域,IoC也是无处不在。 阅读全文
posted @ 2012-03-24 17:55 Todd Wei 阅读(7909) 评论(21) 推荐(23) 编辑

MVCC在分布式系统中的应用

摘要: 本文介绍了一种基于多版本并发控制(MVCC)思想的Conditional Update解决分布式系统并发控制问题的方法。和基于悲观锁的方法相比,该方法避免了大粒度和长时间的锁定,能更好地适应对读的响应速度和并发性要求高的场景。 阅读全文
posted @ 2012-03-13 07:35 Todd Wei 阅读(5072) 评论(6) 推荐(10) 编辑

海量用户积分排名算法探讨

摘要: 问题:为2亿用户规模的网站设计一种算法,在每次用户登录时显示其当前积分排名。本文介绍了一种树形分区设计,它具有几种优点:1. 分区结构稳定,不受积分分布影响;2. 每次查询或更新的复杂度为积分最大值的log(n)级别,且与用户规模无关,可以应对海量规模;3. 不依赖于SQL,容易改造为NoSQL等其他存储方式。 阅读全文
posted @ 2012-03-01 10:05 Todd Wei 阅读(27599) 评论(60) 推荐(103) 编辑

用流畅接口构造内部DSL

摘要: 普通的API抽象方式存在天然的缺陷,通过基本元素/语义构造更高级抽象元素/语义的时候,语言的构造规则很大程度上限制了抽象的维度,我们很难跳出这个维度去,甚至可能根本意识不到这个限制。流畅接口不同于传统的API设计,它突破了语言抽象机制带来的定势思维,根据问题域选取适当的抽象维度,利用语言的基本语法构造领域特定的语义和语法。本文介绍了流畅接口的构造的4种典型抽象:基本语义抽象,管道抽象,层次结构抽象,异步抽象。 阅读全文
posted @ 2011-10-30 21:15 Todd Wei 阅读(11126) 评论(23) 推荐(21) 编辑

品质在于构建过程吗?

摘要: 模型是软件的灵魂,在软件诞生之前就已经存在于设计者的心中,而软件的构建过程正是心中的世界向现实世界逐渐投影。如同光具有波粒二象性,软件开发也具有艺术创作和工业生产的二象性,它包含了柔性的设计和刚性的过程。 阅读全文
posted @ 2011-10-15 21:30 Todd Wei 阅读(5774) 评论(19) 推荐(21) 编辑

对象的消息模型

摘要: 本文主要介绍了对象的消息模型的特征,并比较了C++对象模型,Java、C#等基于类的静态语言中的对象模型与严格消息模型的差异,最后探讨了Method Missing相关话题。 阅读全文
posted @ 2011-08-14 17:28 Todd Wei 阅读(7682) 评论(4) 推荐(10) 编辑

语言的数据亲和力

摘要: 目前,程序设计语言似乎进入了一个蓬勃发展的时期,Javascript、Perl、Python、Ruby、Groovy等一批较新的语言正越来越多地被熟悉和使用,而C++、C#、Java等主流语言也在不断地融入函数式和动态性特征。程序员的百宝箱中可供选择的宝贝是越来多了,而社区中关于语言间的比较和争论也更为热烈,我们常常见到关于“面向过程和面向对象的比较”、“动态语言和静态语言的比较”、“命令式和函数... 阅读全文
posted @ 2011-06-27 23:52 Todd Wei 阅读(7324) 评论(15) 推荐(18) 编辑