Bootstrap

一个“/”键,封锁了整个互联网

专栏 | 九章算法

网址 | http://www.jiuzhang.com

正所谓无BUG不生活,从你含辛茹苦地码着第一行代码开始,bug就如影随形。

其实,bug 被自己或者是测试人员发现都是好事;但如果是被用户发现,又或者导致了客户和公司的巨额损失……这些未知后果,就如同悬在头顶的一把利刃,让人脊背发凉……

但一个小小的bug,可能带给你惊吓,也可能带来惊喜。接下来,我们就来看看 bug 都能带来哪些意想不到的影响呢?

1 来自 Amazon 的圣诞大礼包~

2014年的12月,英国的 Robert Quinn 收到了50多个包裹!

但这并非是他前一晚血拼剁手的后果,而是 Amazon的电脑出包将退货到仓库的包裹错寄到了他家!担心退货者收不到钱款的Robert 前后三次联系Amazon。

但是Amazon 给他的回复却是:这么多东西错寄过来给你添麻烦了吧!这些东西你可以留着,送你了!

事实上,Amazon 错送包裹的情况时有发生,而根据美国联邦贸易委员会(FTC)规定,如果是零售商的错,你就可以保留该商品。如果你不想要也可以退货,Amazon理应为返航买单;如果你留下它,你可以送给朋友,捐给慈善机构,甚至是挂在网上出售~~

2 就当一晚的土豪~

1999年1月1日,欧洲19个国家引入欧元,取代本国货币。在葡萄牙,1 欧元值 200 埃斯库多(葡萄牙货币单位)。

新年前夕,一位葡萄牙网友的银行账户里有1,500,000埃斯库多;第二天的户头里理应是7500欧元。然而此时,他的银行账户里却有 **1,500,000 欧元,是之前的整整 200倍!!!**这时,银行突然之间如蚁附膻,视他如皇亲贵胄。

于是1月6日,这位网友收到了一封银行CEO亲自签署的邮件,邀他参加一个私人歌剧晚会,着燕尾服,时间是周末。

这位网友表示,他知道这笔巨额财富最多是黄粱一梦,但是这个晚会实在让人心驰神往,不能不去!所以他回信了,并帮同事和朋友们索要了额外的入场券。果然,他接到了CEO秘书打来的电话,他们表示非常乐意提供更多的入场券。

这位“一晚的土豪”表示:“其实歌剧表演得并不太好,好在鱼子酱和香槟让我不虚此行。”

但不久之后,他的银行余额被更正了,遂再也没接到过CEO的电话了~

3 鸟叔让 YouTube 被迫升级计数系统

2014年,鸟叔的《江南style》震动Google。

当年 YouTube的计数上限为32比特的整数,这意味着可显示的最大计数值为2,147,483,647。此前从未有一个视频播放量超过YouTube预设的上限。直到这首《江南 style》让播放量在某个瞬间变成了-2142871897,终于让google慌了神。

YouTube说:“我们从来没想过有哪个视频的播放率会超过32位整型数据的最高值,直到我们遇到了Psy。”

就这样,YouTube被迫升级了计数系统到 9,223,372,036,854,775,808,即9个Quintillion(九百亿亿,9×1018)以上。

4 让人啼笑皆非的加拿大银行事件

加拿大信托银行的ATM机可以接受银行卡,但是如果你没有带卡你也可以键入你的账户信息,通过这种方式执行你的银行业务。机器会问你:“您是否携带银行卡?”随之会有一个按钮为是,另一个按钮为否。

程序员们花费了几个月的时间去调试系统,追踪每一个错误,预判每一个客户可能会做出的每一个稀奇古怪的决定……这一切都是为了要确保系统会在运行时保持稳定。

终于到了机器开始运营服务的那一天。

运营的第一个小时里,安大略南部某处的某位客户,对“您是否携带银行卡”这一问题选择了“否”后,把他的银行卡强插进了卡槽里。

然后,这整个系统,整个安大略的系统,都……崩了。

5 万死难辞其咎!我应该更新代码的……

阿丽亚娜火箭坠毁居然是因为软件代码没有测试、更新?!

1996年6月4日,阿丽亚娜5型运载火箭原计划将运送4颗太阳风观察卫星到预定轨道,但因软件问题,火箭在发射后偏轨激活了自我摧毁装置。就在刹那间,阿5型火箭和其他卫星燃为灰烬。

然而事故的原因却是:代码重用! 在二者的飞行条件截然不同的情况下,阿5型的发射系统代码仍然直接重用了阿4型的相应代码。虽然该代码在阿4型上是完美运行,但却从未在阿5型上进行过测试。

事实证明,阿4型往旧软件(SRI)输入的是16位元整数数据,阿5型往SRI 输入的是64位元浮点数数据,数据转换时溢出。

此次事故损失3.7亿美元。

6 一个“/”键,封锁了整个互联网

2010年1月31日,Google 封锁了整个互联网。

Google 向来都保护着我们免受恶意软件和病毒感染的网站的侵扰;它与stopbadware合作,监视着危险的恶意软件/病毒/软件,并时刻更新标记网站列表。

而这一次,将站点添加到标记的列表程序员在本该输入URL的位置,不小心地输了“/”。

因为这一疏漏,互联网上所有的网站都被标记为危险。

故障持续了40分钟,损失30亿美元。

7 一字之差,AWS服务中断

由于为不少大型网站和应用提供云服务支持,AWS(Amazon Web Services)可以说是互联网的主心骨。

2017年2月28日,亚马逊(S3)团队当时在调试一个问题,该问题导致S3计费系统的处理速度比预期慢。

一名获得授权的S3团队成员要使用事先编写的playbook执行一条命令,该命令旨在为S3计费流程使用的其中一个S3子系统删除少量服务器。

不幸的是,他在输入命令时……输错了一个字母!

结果删除了一大批本不该删除的服务器。不小心删除的服务器支持另外两个S3的索引子系统和布置子系统。删除相当大一部分的容量导致这每个系统都需要完全重启。

而这一故障持续了大约4个小时,影响了数千个在线服务,其中包括 Netflix、Airbnb、Slack、Spotify、雅虎网络邮箱等互联网服务。

8 0.000000095带来的爱国者之殇

1991年2月25日,海湾战争期间,在沙特阿拉伯的达兰,美国的“爱国者”系统未能追踪并拦截一枚伊拉克飞毛腿导弹。

“爱国者”导弹防御系统工作流程是:探索阶段、验证阶段、跟踪阶段,在跟踪阶段会等对方的导弹进行拦截。但如果“爱国者”持续工作超过8小时,射程就会偏离正常位置20%;这虽然是个已知的bug,但美国军方不认为“爱国者”导弹会持续工作超过8小时,但那时实际运行时间已持续约100小时。

系统每1/10秒就进行一次乘以1/10的运算,1/10的二进制就是0.00011001100110011001100...……,但在爱国者的24位固定小数点寄存器里就只保存到小数点后第24位。每次计算就会舍去0.0000000000000000000000011001100(十进制约0.000000095)。

爱国者工作时间约100小时,按0.000000095 x 100(小时)x 60(分) x 60(秒)x 10(每秒进行的除法运算)=0.34秒;飞毛腿导弹速度约1676米/秒,按0.34(秒)x1676(米/秒),导弹飞行距离早就超过了半公里;这点距离已足够能让导弹飞到爱国者追踪拦截的范围之外了。

这枚导弹袭击了美国军营,造成了28名士兵死亡,约100人受伤。

9 手下留情~别杀光我的系统软件!

2010年4月21日,McAfee进行企业版软件更新时将 windows 系统文件识别为隔离感染文件。

McAfee并不确定有多少台电脑受到影响,不过通过网上的反应来看,全球医院、企业和学校等机构至少有数十万台电脑因McAfee更新故障而受影响。据说,英特尔公司内部电脑以及美国卫星电视运营商Dish Network的呼叫中心也受到了这一故障的影响。

之后,McAfee修复了软件问题,重新提供软件更新的下载。

2007年5月,赛门铁克的诺顿杀毒软件也有类似情况,病毒库升级后,把简体中文版Windows XP的关键系统文件当作病毒清除查杀,导致系统瘫痪。

2016年7月,继McAfee后CA互联网安全套装误将某些Windows XP系统文件视为病毒,导致用户无法找到这些文件。对此CA已给予证实,也同时强调这些文件只是被隔离,用户可以手动恢复文件。

但频繁受害的用户们看到这样的境况,真的只能默默做好备份了吧/(ㄒoㄒ)/~~

欢迎关注我的微信公众号:九章算法(ninechapter)。
精英程序员交流社区,定期发布面试题、面试技巧、求职信息等

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;