程序员们,谨防闰年bug

2016年是闰年,今年的2月将会有29天,而不是28天。不要小看多出来的这一天,它虽然不如”千年虫”那么有名,但也造成了很多有重大影响的bug,最有名的一次大概是在2012年,微软云平台Azure宕机12小时,部分服务一度中断超过24小时。

事件的起因很简单,azure在创建虚拟机之前需要颁发一个Transfer Certificate,我们不需要理解为什么需要这个证书,也不需要理解它是怎么使用的,我们只需要知道颁发证书时需要提供一些基本的参数,比如颁发时间,过期时间等。微软的工程师们在设置颁发时间时,用了一个非常简单的逻辑:当前年份-1,也就是去年的今天。

Continue reading “程序员们,谨防闰年bug”

国王-100个犯人-猜号码

一个国王抓住了100个犯人。一天他决定把他们都处死。但是在处死之前,国王把他们召集起来,想给他们最后一次机会。他说将会给每个人一顶帽子戴在头上。每顶帽子上随机写上1到100之间的一个数,作为编号,且允许重复。同时,每个犯人都可以看到其他人帽子的编号,但看不到自己的。每个人会得到一张纸条,犯人自己在上面写下一个数。如果有一个犯人写下的数字和自己帽子的编号相同,所有的犯人都将被释放,否则所有人都将被杀掉。在国王给帽子编号之前,犯人们将有十分钟的时间来讨论策略,在国王正式给帽子编号以后就不许再说话或者传递任何信息。这个策略将会是什么呢?

Continue reading “国王-100个犯人-猜号码”