大家好,我是良旭。前几天直播的时候,问直播间的小伙伴们有没有人知道“千年虫”这种神奇的“生物”,但是没人能回答。那么,今天我就给大家讲讲人类历史上最大的bug。1.全球恐慌。一个bug会让人类技术倒退几十年?这不是危言耸听,而是真实的历史。1999年的除夕,人们集体陷入恐慌。大家忙着取现,忙着储存粮食,还有人躲进山洞里。他们觉得世界末日即将来临。进入新千年是一个非常值得纪念的日子。毕竟这辈子,这样的机会不多,可是,为何天下大乱?造成这场混乱的主角就是大名鼎鼎的“千年虫”。2.什么是千年虫?新一代的程序员大多是95后或者00后。千年虫来袭的时候,他们要么还没有出生,要么还在泥泞中玩耍,对于这片混乱,他们几乎没有任何感知。所谓千年虫,不是生物,而是电脑虫。那么这是什么样的错误,为什么会造成这样的混乱呢?简单来说,Y2K就是由于计算机内部时间存储不合理,导致时间紊乱,计算机罢工。1999年到2000年虽然只有一年时间,但实际上是世纪之交,导致系统超时,然后崩溃。而这些都是历史性的。计算机刚诞生时,由于技术限制,计算机存储设备非常昂贵。而且贵点也没关系,而且这些存储设备的容量很小(也是不可能的),所以程序员在写代码的时候,真的要仔细计算每一个字符。想想现在的程序员,可以随意分配内存空间,不用担心存储问题。他们真的很开心。为了节省内存,一位漂亮的姑娘想出了用6位数字表示时间的方法。比如1989年10月1日就写成了891001。这位漂亮的姑娘就是软件之母GraceHopper。也就是她发现了人类历史上第一个bug,也制造了人类历史上最大的bug。当然,这并不是贬低她。她在软件行业对世界的贡献是有目共睹的。更何况,哪个程序员没写过bug?Hopper发明的6位数字时间记录方式非常简单,而且非常节省记忆力,于是大家纷纷效仿。也正是6位数时间记录方式的大量使用,才让千年虫开始潜伏,等待千年虫袭击人类。有电脑常识的朋友应该很快发现,这种记时方式抹掉了年份的前两位(比如1989直接记为89),进入21世纪会造成时间倒退。现象。也就是说,在2000年,计算机会认为当前年份是1900年,从而造成时间混乱。在编程世界里,时间是一个非常重要的参数,很多业务都依赖于时间。一旦时间出现问题,可能会导致各种莫名其妙的故障。这就是著名的Y2K问题。3.CrisisAmbush事实上,在20世纪50年代后期,一位名叫BobBemer的计算机科学家发现了这个隐藏的大问题,于是他开始四处奔波,试图让每个人都意识到这一点。事情的严重性。然而,他的声音并没有受到太多关注。原因很简单。那时候距离千禧年还有四十多年,所有人都觉得还很遥远。让后代去解决吧。而且6位时间记录方式已经被大规模使用,新写的代码必须要和旧程序兼容。如果改用其他时间表达式,工作量会很大。时间很快进入了90年代,越来越多的人开始意识到这个问题的严重性。尤其是1999年,由于计算机的误判,连续三天出现了大规模的bug,这似乎在提醒人们,Y2Kbug的影响会更加严重。那个时候,虽然计算机还没有在老百姓中广泛普及,但银行、证券公司、证券交易所、工厂、机场、电站,甚至核弹发射井都已经大量使用计算机,而且几乎都在拥抱计算机。千年虫。要知道,这些都是关于人类的命脉。一旦爆发千年虫,你的银行账户将被清空,交通将混乱,电力和水利系统将瘫痪,飞机航线将消失。最可怕的是,核电站相当于核弹爆炸的效果,直接经济损失将不低于1.6万亿元。.恐慌随后开始在世界范围内蔓延。大家赶紧从银行里取了现金。食品和日用品也被洗劫一空。更何况,他们已经在附近找到了防空洞,仿佛一场新的世界大战一触即发。4、应对千年虫所以说,千年虫一旦爆发,人类几十年的技术倒退绝对不是闹着玩的。严重的话,可能会直接毁灭人类文明!因此,为了应对Y2K的出现,各国政府投入了大量的人力物力,想方设法阻止Y2K的出现。程序员们熬夜加班,一点一点重写有问题的代码。这个时候别说996了,007为了人类的命运什么都愿意做。但由于时间紧迫,工作量大,不可能把2000年以前的代码都修好。因此,程序员只重写了那些简单而关键的程序。剩下的程序,采用了开窗修复的方式,也就是把时间范围设置在1920年到2020年,所以00只能代表2000年。大家也想到了,这其实是把Y2K的爆发时间延长了20年,看起来你改了bug?但在时间极其紧迫的情况下,这也是一件无法靠自己完成的事情。使用这种修复方式,程序员修复了80%的bug,也算是对付千年虫的阶段性胜利。不过毕竟千年虫还没有百分百消灭,大家还是没有完全松口气。因此,为了应对诸多不确定因素,政府和机构纷纷出台了很多政策来降低Y2K可能带来的影响。5.Y2Kbug的影响在1999年的最后几秒发生,每个人都紧张不安。钟声敲响后,人们发现经济并没有崩溃,交通还算正常,导弹也没有飞过,亿万悬着的心终于放下了。千年虫虽然没有大规模爆发,但还是如期而至。例如,在冈比亚,由于缺乏外部援助,政府机构的计算机因千年虫袭击而瘫痪。冈比亚政府宣布当天(周一)为非工作日,以暂时缓解事故涉事机构的压力。此外,世界各国都不同程度地受到千年虫的影响。不过比起人类的毁灭,这个损失已经很小了。6.千年虫卷土重来前面提到,为了应对千年虫,程序员采用了窗口修复的方法。而这种修复是治标不治本,只是将千年虫的爆发推迟了二十年而已。所以2020年除了新冠这个大病毒之外,千年虫这个老病毒卷土重来。幸运的是,在过去的20年里,人们并没有忘记这个千年虫。他们做了充分的准备,没有造成重大损失。因此,当时人们对千年虫的认识并不多。也可能是因为大家的关注点都在疫情上。除了这个6位时间表达式造成的重大bug外,还有一个更隐蔽的bug,就是2038年问题。这个问题是怎么产生的?学计算机的朋友都知道,计算机计时的基点是1970年1月1日,我们计算机的内部时间就是统计从这个基点开始经过了多少秒。当时都是32位操作系统,能表示的极限是2147483647(第一位是符号位)。换算成时间,就是2038年1月19日03:14:07。处理这个问题,就是扩展Unix时间的长度,用64位表示,最大可以表示292,277,026,596December4,15:30:08seconds。那个时候,人类文明是否还存在就是一个问题。7、Y2K给程序员的教训在编程世界中,时间的表达很重要,小到程序运行异常,大到类似Y2K的严重bug。因此,一些关于时间的业务处理必须非常谨慎和谨慎。当我还在工作场所时,我有一项关于时间校正的业务。为了保证时间的准确性,我们采用了4种时间校验方式(GPS时间、固件时间、内存时间、系统运行时间)相互校验,减少出错的可能性。所以,程序员真正的战场在代码,而不是甲方或产品经理。手中的键盘是我们的武器,编程是我们的秘密,每一个bug都是我们的敌人!珍惜身边的每一位程序员,说不定他们就是未来拯救世界的主角!学习编程时,不要急于求成。一定要多看经典书籍,多看源码,多下功夫破解密码,才能让自己的技能长进。给大家分享几本程序员必读的经典书籍,一定要多看几遍:我会免费送给大家,只求大家给我点个赞!程序员必读经典书单(高清PDF版)有收获?希望老铁三连击,让更多人看到这篇文章。推荐阅读:干货|程序员进阶架构师必备资源免费免刷题|LeetCode算法算法刷机神器,看完BAT随心挑!欢迎关注我的博客:良序Linux教程网,干货满满!
