上海医疗网站建设,千度搜索引擎,购物网站服务器带宽,乐清网站设计哪家好大家好#xff0c;我是良许。
前几天在直播的时候#xff0c;问了直播间的小伙伴有没人知道「千年虫」这种神奇的「生物」的#xff0c;居然没有一人能够答得上来的。
所以#xff0c;今天就跟大家科普一下这个人类历史上最大的 Bug 。 1. 全世界的恐慌
一个Bug会让人类…大家好我是良许。
前几天在直播的时候问了直播间的小伙伴有没人知道「千年虫」这种神奇的「生物」的居然没有一人能够答得上来的。
所以今天就跟大家科普一下这个人类历史上最大的 Bug 。 1. 全世界的恐慌
一个Bug会让人类的科技倒退几十年
这不是危言耸听而是真实存在的历史。
1999 年的跨年夜人们集体陷入恐慌大家忙着取现金忙着屯粮还有人钻进山洞避难他们感觉世界末日即将到来。
进入新千年本来是一件非常值得纪念的日子毕竟这辈子这样的机会也不多但为何全世界却乱成了一锅粥呢
引起这场混乱的主角就是著名的「千年虫」。
2. 什么是千年虫
现在新一代的程序员大多是 95 后或 00 后千年虫来袭的时候他们要么还没出生要么还在玩泥巴所以对这场混乱几乎没有任何感知。
所谓的千年虫并不是一种生物而是一种计算机 Bug 。
那这又是一种怎样的 Bug 为何又造成如此大的混乱呢
简单来讲千年虫是由于计算机内部时间的存储不合理导致时间紊乱从而计算机罢工。1999 年到 2000 年虽然只隔了一年但实际上这是世纪交替导致系统时间错乱随后崩溃。
而这些都是有历史渊源的。
计算机刚诞生的时候由于技术的限制导致计算机存储设备非常昂贵。而且贵也就算了这些存储设备的容量偏偏又非常小也是没办法的事所以程序员们在写代码的时候真的是对每个字符都要精打细算。 想想现在的程序员可以随意分配内存空间不为存储而发愁真的是太幸福了。 为了节约内存有位靓女想出了用 6 位数表达时间的办法比如 1989 年 10 月 1 日就写成了 891001 。
这位靓女就是软件之母的格雷斯霍珀。也就是她发现了人类历史上的第一个 Bug 同时也制造了人类历史上最大的 Bug 。 当然这里并不是在贬低她在软件行业她给世人做出的贡献都是有目共睹的。更何况哪个程序员没写过 Bug 霍珀发明的 6 位数时间记录法由于十分简单并且非常省内存所以大家都纷纷效仿。也正是这 6 位数时间记录法的大规模使用使得千年虫开始悄悄埋伏在人类社会只等千禧年开始反扑人类。
有计算机常识的小伙伴应该很快发现这种时间记录法由于年份的前两位被抹去如 1989 年直接记为 89 这就会造成在进入 21 世纪时出现时间回退的现象。
也就是说在 2000 年的时候计算机会认为当前是 1900 年时间混乱就会由此而产生。 在编程世界里时间是个非常重要的参数有很多业务是依赖时间而开展的。一旦时间错乱可能会引起各种各样莫名其妙的故障。
这就是著名的千年虫问题。
3. 危机埋伏
实际上在上世界五十年代末的时候有位叫鲍勃贝默的计算机科学家就发现了这个隐藏的大问题于是他就开始到处奔走想让大家认识到这件事情的严重性。
但是他的声音并没有受到太多关注原因很简单那时候距离千禧年还有四十多年大家觉得还遥遥无期自己可能都活不到那个时候以后的事情就交给后人解决吧。
而且6 位数时间记录法已经大规模使用了新写的代码都要考虑与老程序兼容。如果换成其它时间表达法那么工作量就会十分巨大。 时间就这么很快进入到 20 世纪 90 年代已经越来越多人开始意识到了这个问题的严重性。特别是 1999 年因为计算机的误判分别在三个日子出现大规模 bug 现象这似乎在提醒人们千年虫造成的影响将更为严重。
在当时计算机虽然没有大量普及到普通人但银行、证券公司、股票交易所、工厂、机场、发电站甚至是核弹发射井都已经大量使用计算机而且都几乎埋伏着千年虫。
要知道这些都关乎人类的命脉。
一旦千年虫发作你的银行账户会被清零交通也会混乱电力水利系统瘫痪飞机航线消失最可怕的是核电站相当于核弹爆炸的效果直接经济损失不会小于 1.6 万亿元。
恐慌于是就开始在全球蔓延大家赶紧把现金从银行取出来食物、生活用品也都被哄抢一空更有甚者都已经找好了附近的防空洞仿佛新的世界大战一触即发。 4. 应对千年虫
所以千年虫一旦发作让人类科技倒退几十年绝对不是笑话严重的话可能将直接毁灭人类文明
于是为了应对千年虫的出现各国政府投入了大量的人力物力想尽各种办法来阻止千年虫的出现。
程序员们熬夜加班一点点重写有问题的代码。这时候别说 996 了为了人类命运007 也是在所不辞。
但是由于时间紧迫工作量巨大想要在 2000 年前修复完所有的代码是不可能的一件事情。所以程序员们只重写了那些简单又很关键的程序。
而剩下的程序则采用 windowing 修复法也就是将时间框定在 1920 年至 2020 年这样 00 就只能代表 2000 。
大家也想到了这其实就是将千年虫爆发时间往后延长了 20 年像不像你改 Bug 的样子
但在时间异常紧迫的情况下这也是不得己的事情。采用这种修复法程序员修复了 80% 的 Bug 也算是应对千年虫取得了阶段性的胜利。 但毕竟没有 100% 消除千年虫大家依然没有完全放下心来。所以为了应对很多不确定因素政府、机构纷纷出来了很多政策以降低千年虫可能造成的影响。
5. 千年虫造成的影响
时间到了 1999 年的最后几秒大家都紧张到了极点。直到钟声敲响后人们发现经济没有崩溃交通依然正常导弹没有飞来几亿颗悬着的心终于放下来了。
千年虫虽然没有大规模爆发但依然如期而至。
就比如冈比亚由于缺乏外界的援助政府机构的计算机受到千年虫袭击而瘫痪冈比亚政府宣布当天周一为非工作日以暂时减轻出事机关所要承受的压力。
除此之外全球各国都受到了千年虫不同程度的影响。但相比于人类毁灭这点损失已经算是非常小的了。 6. 卷土重来的千年虫
前面提到为了应对千年虫程序员采用了 windowing 修复法。而这种修复治标不治本只是将千年虫爆发时间延后了 20 年而已。
所以在 2020 年时除了新冠这个大病毒之外千年虫这个老病毒又卷土重来了。
所幸在这 20 年间人们没有忘记这个千年虫都做了充足的准备没有造成重大损失所以当年大家对千年虫的感知不大。 也有可能是因为大家的关注点都在疫情上了吧。 除了这种 6 位数时间表达法造成的重大 Bug 还有一种更隐蔽的 Bug 那就是 2038 年问题。
这种问题又是如何出现的呢学计算机的朋友都知道计算机的计时基点是 1970 年 1 月 1日我们电脑内部时间就是统计从这个基点到现在为止过去了多少秒。
而当时都是 32 位操作系统所能表达的极限是 2147483647 第一位是符号位换算成时间的话就是 2038 年 01 月 19 日 03 时 14 分 07 秒。 应对这个问题就是扩展 Unix 时间长度用 64 位表示最大可以表示 292,277,026,596 年 12 月 4 日 15 时 30 分 08 秒。而在那个时候人类的文明还有没有存在都是个问题。
7. 千年虫对程序员的教训
在编程世界里关于时间的表达都是非常重要的轻则程序运行异常重则会出现千年虫类似的重大 Bug 。
所以有关于时间的一些业务处理都要十分慎重再慎重。
当年我还在职场的时候有个业务就是关于时间的校正。为了保证时间的准确性我们采用了 4 种时间验证法GPS时间、固件时间、内存时间、系统运行时间彼此互相验证减少出错的可能。
所以程序员真正的战场是在代码里而不是甲方也不是产品经理。手里的键盘就是我们的武器程序设计就是我们的秘密一个个 Bug 就是我们的敌人
珍惜你身边的每一位程序员也许将来他们就是拯救世界的主角 学习编程千万不要急于求成一定要多读一些经典书籍多看源码多下苦功夫去死磕代码这样技术才能长进。给大家分享一些程序员必读经典书籍一定要多读几遍 有收获希望老铁们来个三连击给更多的人看到这篇文章
推荐阅读
干货 | 程序员进阶架构师必备资源免费送 刷题 | LeetCode算法刷题神器看完 BAT 随你挑
欢迎关注我的博客良许Linux教程网满满都是干货