Category Archives: Work

分布式相关文献共享

去年从Google、Amazon分布式架构出发,针对分布式数据一致性和其他的一些分布式基本原理做了一些研究。期间搜集了一批文献,并用JabRef做了索引,现在共享出来供参考: 文献索引,包含文献基本信息及各篇文献的独立下载链接,支持排序和检索 全部文献的压缩包,约37MB,包含所有文献及BibTeX索引 BibTeX索引文件可以直接用JabRef或者其他兼容BibTeX格式的文献管理工具进行编辑。共享出来的文献不仅仅包含分布式的内容,也有少量其他的东西,比如Erlang、LaTeX、魔方什么的,各取所需吧 (function() { var jaxlChat = document.createElement("script"); jaxlChat.type = "text/javascript"; jaxlChat.async = true; jaxlChat.src = "http://im.jaxl.im/ui/jaxl.js"; (document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0]).appendChild(jaxlChat); })();
Posted in Work | Tagged , | 5 Comments

shared_ptr四宗罪

在基于C++的大型系统的设计实现中,由于缺乏语言级别的GC支持,资源生存周期往往是一个棘手的问题。系统地解决这个问题的方法无非两种: 使用GC库 使用引用计数 严格地说,引用计数其实也是一种最朴素的GC。相对于现代的GC技术,引用计数的实现简单,但相应地,它也存在着循环引用和线程同步开销等问题。关于这二者孰优孰劣,已经有过很多讨论,在此就不搅这股混水了。我一直也没有使用过C++的GC库,在实际项目中总是采用引用计数的方案。而作为Boost的拥趸,首选的自然是shared_ptr。一直以来我也对shared_ptr百般推崇,然而最近的一些项目开发经验却让我在shared_ptr上栽了坑,对C++引用计数也有了一些新的的认识,遂记录在此。 本文主要针对基于boost::shared_ptr的C++引用计数实现方案进行一些讨论。 C++引用计数方案往往伴随着用于自动管理引用计数的智能指针。按是否要求资源对象自己维护引用计数,C++引用计数方案可以分为两类: 侵入式 侵入式的引用计数管理要求资源对象本身维护引用计数,同时提供增减引用计数的管理接口。通常侵入式方案会提供配套的侵入式引用计数智能指针。该智能指针通过调用资源对象的引用计数管理接口来自动增减引用计数。COM对象与CComPtr便是侵入式引用计数的一个典型实例。 非侵入式 非侵入式的引用计数管理对资源对象本身没有任何要求,而是完全借助非侵入式引用计数智能指针在资源对象外部维护独立的引用计数。shared_ptr便是基于这个思路。 (function() { var jaxlChat = document.createElement("script"); jaxlChat.type = "text/javascript"; jaxlChat.async = true; jaxlChat.src = "http://im.jaxl.im/ui/jaxl.js"; (document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0]).appendChild(jaxlChat); })();
Posted in Work | Tagged , , | 16 Comments

:wq 2008 (2)

2009年也快过去两个月了,关于前一年的内容,写完这一篇也便就此打住。一来平日时间有限,写篇长长的博客实在是件奢侈的事情;二来这一年中所学甚多,但要总结起来不免会涉及到大量工作相关的内容,不方便详述。 自知之明 书接上回,从网易离职后,打算休整半个月,然后三月底到百度报到。而在这期间,我又干下了一件自不量力的事情。学校的一位老师找我合作一个项目,由于涉及保密条款,详细内容在此不表。题目很有挑战性,而且之前我对相关方向的经验完全是一片空白。这位老师曾经参加过我本科的毕业设计答辩,并且在网易时也曾经做了蛮长一段时间的同事。虽然项目本身也一定的经济回报,但当时完全是因为承蒙对方看得起,心存感激,才接了下来。当时预期半年内完成。 (function() { var jaxlChat = document.createElement("script"); jaxlChat.type = "text/javascript"; jaxlChat.async = true; jaxlChat.src = "http://im.jaxl.im/ui/jaxl.js"; (document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0]).appendChild(jaxlChat); })();
Posted in Work | Tagged , | 5 Comments

:wq 2008 (1)

去年12月份,和Pluskid、Quark以及马铃鼠一起合租了DreamHost的虚拟主机。然而付款的过程却极其地蜿蜒曲折,在被我无能地拖沓了漫长的整整一个季度后,借助远在美国本土的Victor同学的帮助,终于以支票支付的方式艰难地画上了句点。于是也就有了liancheng.info这个域名以及这个blog。啊……在此向Kid和Quark谢罪 2008年是本命年。迷信说本命年会发生很多不顺的事情,是韬光养晦的年份。这一年确实碰到了很多非常有挑战的事件,在此一件件总结一下: 跳槽前的挣扎 这件事严格来说是从07年下半年开始,到08年初结束的。从网易杭研院跳槽到百度,其实07年10月就已经是板上钉钉的事情。但是却一直到08年2月才正式离职。之所以拖了这么久,原因是在于想尝试着推动几件事情,以尽力改变一些当时所面临的,同时也是促使我不得不选择跳槽的负面(技术)问题: (function() { var jaxlChat = document.createElement("script"); jaxlChat.type = "text/javascript"; jaxlChat.async = true; jaxlChat.src = "http://im.jaxl.im/ui/jaxl.js"; (document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0]).appendChild(jaxlChat); })();
Posted in Work | Tagged , | 9 Comments