查看原文
其他

那些曾让世界震惊的程序BUG们, 后来都怎么样了?

嵌入式ARM 2021-01-31

The following article is from 来Offer网 Author 正在招生的

本文授权转载自“来Offer网”,版权归原作者所有


对于刚刚接触编程的学生来说,Coding的时候经常会发生一些让人无奈的语法或者逻辑上的问题。


下图是一段Run不过的代码,你能在1分钟内看出下图中都有哪些Bug吗?



一个中文分号、一次Tab、Space混用、一个括号错误,就可能要花上很长的时间Debug,甚至会让你挂掉OA和面试。


即使如此,在教学中,我们还是发现有同学对于Debug和跑Test不够耐心。


今天就分享一些让人目瞪口呆的Bug,告诉大家:Debug和跑Test到底有多!么!重!要!



01

世界上第一个Bug与千年虫



1947年,编译器之母格蕾丝·赫帕的电脑出现了问题,经过排查发现,原来是一只虫子卡在了计算机的继电器中。世界上的第一个计算机“Bug”就由此产生了。



让人没想到的是,这位杰出 女程序员的“Bug”,在她去世之后,又引起了千年虫危机。


当时,为了节约宝贵的存储空间,她创造的编译程序COBOL只使用6位数来表示日期,即MM/DD/YY,当2000年即将到来的时候,人们才突然发现,该程序无法区分1900年和2000年,这让使用这套程序的企业和政府机关非常恐慌,急忙由政府出面进行Debug。但在有些相对落后的国家,还是造成了大规模的断电、政府和金融部门的停摆。



02

iOS致命漏洞竟源于低级错误


苹果推出iOS7后,就不断的被爆出各种安全问题。其中一个安全漏洞对于消费者来说很不起眼,却非常严重。


这个安全漏洞,完全是因为程序员的疏忽。以下就是导致这个问题的代码:



上图中有两个连续的goto fail语句,第二个goto fail由于不受if语句的限制,在任何情况下都会执行,从而导致安全签名的认证永远不会失败。


这意味着,对于有心窃取用户信息或者传播病毒的人来说,不管有没有正确的密钥和签名,都可以通过iOS的安全认证。


据报道,这个小小的Bug不止影响iOS、OSX和Safari,还会将苹果端的Mail、Twitter、iMessage等程序都置于险地。


这个故事还说明了,在C语言中,爱写大括号是个多么好的习惯。



除了虚拟世界的问题,

一个微小的Bug,

还能造成更加严重的后果。



03

两放烟花,损失超过10亿美金



1996年阿丽亚娜5型运载火箭在升空途中自毁,1997年火星气候探测者号坠落火星。


调查显示,阿丽亚娜5型自毁的根源在于程序员偷懒。程序员将原本用于4型的测速程序,直接复制到了5型上面。没有想到,由于两者性能的不同,4型程序中的16位内存已不足以支持5型的计算,造成了数据溢出,最终系统瘫痪自爆。



而火星气候探测者号的Bug却在于地面团队与航天器的数据单位不同。地面团队用pound second,即磅/秒为单位计算,而探测器却使用了牛顿/秒,导致导航错误,数据相差超过100公里,最终在火星大气中燃烧解体。



不到两年的时间,就有两个航天器变成了两枚上亿美元的烟花,二者都是由于程序中的看似不起眼的Bug所导致的。



04

死亡28人,原因是毫秒级延迟



1992年2月,一枚飞毛腿导弹落在了美军宰赫兰军事基地,造成了28死,100多伤,是美军在海湾战争中,单次死伤最多的事件。


所有人的疑问都是,基地配备的爱国者反导系统为什么没能做出有效拦截?


调查发现,罪魁祸首是爱国者的时钟计时。


爱国者的时钟只有24位存储空间,时间精度有限,导致其工作的时候,系统时钟每小时会产生一个0.0033秒的延迟。这本无大碍。但是,位于宰赫兰的爱国者当时已经连续工作了100个小时,这个时间误差积累到了0.33秒。


这是什么概念呢?飞毛腿导弹的时速约为1500米/秒,0.33秒的时间足以产生500米的误差。


最终爱国者没能拦截导弹,酿成悲剧。




看似不起眼的Bug却造成了让人目瞪口呆的后果:新千年的混乱、iOS的安全漏洞、海湾战争最大单次伤亡和两次数亿美金航天器的爆炸……


所以说,做到Bug Free,是对于程序员最基本的业务要求。


在竞争愈发激烈的求职市场,如果仅仅具备Average的能力,很难在众多应征者中脱颖而出。


找工作没有捷径,只有成为一个Solid的程序员,才能在日益复杂的求职环境中,突出重围,拿到心仪的Offer。


本文授权转载自“来Offer网”,公众号见下方二维码


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存