维权指南
星期四, 十二月 22nd, 2011我为什么一直没找消协和质检部门?—- 解决西门子冰箱门问题的“正当途径”,这得要多曲折啊,悲哀。 继续阅读
前些天看到一篇文章有点意思。假设,人口的数目不变,儿子的姓氏随着父亲,那么随着时间的推移一代一代的演化,最后所有的人都只有一个姓了。具体用个例子描述就是:100个父亲,按照上面的假设会有100个儿子,也就是平均每个父亲在下一代会有一个儿子,假设某个父亲姓”王”,并且王在父亲这一代所占的比例是7%,那么概率上来说这个儿子姓”王”的概率为7%。你不能说我姓王,我儿子肯定随我姓呐,概率上的说法都是放在一个大的数目下。上面那句话的意思就是,平均来说占7%姓”王”的父亲在下一代能产出7%姓”王”的儿子,这是合理的吧。那么最后人们只剩下一个姓氏了么?对于这么简化的模型是很好模拟的,比如下面这段python的代码: def run(...........继续阅读
OO是一种编程范型,而不只是特定语言的特定支持,所以用C来实现也是可行的。最近碰到的一部分代码都是用C实现的面向对象风格,可能是参考了Python里面的实现,Python内部实现的基本对象这块也全是这样的代码。在这里做一个小小的总结。 C语言里面没有语言层面的面向对象支持,那OO中的三个基本要素封装、继承、多态如何实现?C里面最强大的东西是指针,指针中最神奇的是void指针,这是一切的基本。首先来看封装,如何通过实例来调用方法,而对内部数据进行隐藏。完全可以写一些struct,然后写对应的函数来针对这个struct来操作,我们需要更进一步,把数据和方法绑定起来。这样写初看起来并没什么好处,后面会发现,通过函数指针去找对应的函数...........继续阅读
最近在看memcached的源代码,边看边随手记录了一下。 assoc.c: 记录一个item是否存在于缓存中,这里使用了power 2扩展,primary_hashtable,和old_hashtable分别存新申请的hashtable和旧的hashtable。这里起了个线程来做拷贝的工作,当需要扩展hashtable的时候就触发assoc_expand函数,但是这个函数做的工作是备份primary_hashtable,即old_hashtable=primary_hashtable;然后申请新的空间,标识expanding为true,如果申请空间失败则交换回来。通过条件信号量,assoc_maintenance_thread把old_hashtable的数据逐步拷贝到新的hashtable中,当拷贝完了后释放old_hashtable的空间。耗时的操作用另外一个线程逐步来处理,不过查询和插入都要注意是否...........继续阅读
纪念一下跑测试跑了几天才找出的一个内存泄漏,这个函数源于UNP,还以为UNP有bug呢,找到原书当getaddreinfo失败或者res==NULL的时候直接退出了。但是写这个代码的同学当然不想连接不上直接退出,于是忘记了freeaddrinfo调用直接返回,那个struct addrinfo就没释放。很多错误都是这种,涉及到库函数的时候更加难查。 int tcp_connect(const char *host, const char *serv) { int sockfd, n; struct addrinfo hints, *res, *ressave; bzero(&hints, sizeof(struct addrinfo)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; if ( (n = getaddrinfo(host, serv, &a...........继续阅读
内存泄漏 上一次以为内存泄露查完了,发现服务器跑了比较长时间后又占用太多内存。刚好这段时间加了一些新的模块,又该查查了。整个服务器模块分的还行,但是中间经过几个人一起写,所以看起来就麻烦了。要解决问题还是必须找到泄露的代码段。在C/C++中,只要用了指针这东西,很多逻辑上的问题也会产生内存泄露。在线下用上次封装malloc和free的方法测试,找不到产生内存泄露的样例,grep了一下没有用原来的malloc之类的东西啊,那就应该是测试数量太少的问题。没法,从线上的log中导入一些天的访问记录,其中包含了一天的访问url。试着用Python写个小程序把一天中所有的url依次往线下的服务器发送,这应该有几万条数据了。Python中这相关的库...........继续阅读