漫画:什么是 “千年虫” 问题?
在20世纪末,人类社会曾经遭遇过一场空前的大危机,如果这场危机真的降临,甚至有可能终结整个人类文明。
后来,在全世界精英们共同努力之下,这场危机终于得以化解。
这场危机既不是地震,也不是海啸,更不是瘟疫大流行,而是电子计算机带来的“千年虫”问题。
千年虫问题,到底是怎么来的呢?
说到这个问题,就不得不提起一位伟大的程序媛小姐姐,Grace Murray Hopper。
说起这位小姐姐,那可真是厉害了,她是美国海军准将,也是一位计算机科学家。
Grace Murray Hopper都取得过哪些成就呢?
她发明了最早的现代编译器:A-0系统。
她创造了最早的商用编程语言:COBOL。
她在出故障的计算机里发现了一只飞蛾,使得Bug与Debug成为了计算机领域的流行词汇。
在上世纪60年代,计算机的存储资源非常稀缺,程序员在编写每一行代码的时候,都要为存储的使用而精打细算。
为了更好的节约内存空间,Grace Murray Hopper采用了6位数字的组合来存储时间信息。比如1965年7月23日,对应存储形式就是65/07/23,省去了前面的“19”。
这样的存储形式,很快就在计算机领域流传开来。尽管它节约了一定的存储成本,却埋下了两个隐患:
1. 由于年份只保留了后两位,当2000年到来的时候,年份存储的信息是“00”,计算机无法区分这到底是1900年,还是2000年。
2. 1900年不是闰年,但2000年是闰年,如果年份的前两位被默认为“19”,那么2000年的2月29日就会被当做3月1日,存储为00/03/01。
这两大隐患,都是到了2000年才会爆发出来,所以这个问题被称为“千年虫”问题,英文缩写为Y2K。
1.抓住重点
既然全量的程序改不过来,那就重点修改那些起到核心作用的程序,比如医疗、航空、金融、军事领域的程序,这样工作量就减少了许多。
2.修改时间窗口
对于大多数不那么核心的程序,程序员们想出了一个取巧的方式,这种方式叫做windowing,翻译过来就是时间窗口。
这种方法暂时保留了6位时间表达,但是表达的时间范围不再是默认的1900年-1999年,而是1920年-2019年。
比如,程序当中的“10”年,以前默认代表着1910年,现在代表着2010年。
这个做法大大降低了修改成本,但是没有根本解决问题,而是把问题的爆发推迟了20年。
非洲冈比亚,一些政府机构的软件系统临时瘫痪了。冈比亚政府特意宣布当天(周一)为非工作日,以暂时减轻出事机关所要承受的压力。
中国广州,某商务公司的7台电脑接二连三出现故障,当他们向软件供应商公司求助时发现,那里已经接到100多家公司数据库瘫痪的消息。
—————END—————
喜欢本文的朋友,欢迎关注公众号 程序员小灰,收看更多精彩内容
点个[在看],是对小灰最大的支持!
- 漫画:什么是旅行商问题?
- 一个月想通的问题 (转)-(关于什么是商业价值,市场规模,品牌等问题)
- 需求获取常见的方法是进行客户访谈,结合你的实践谈谈会遇到什么问题,你是怎么解决的?...
- Spring系列第10篇:primary可以解决什么问题?
- “你还有什么事想问”——作为程序员如何回答面试官的问题
- 黑马程序员之ASP.NET学习笔记:AJAX解决什么问题?如何使用AJAX?
- 多线程使用HashMap会导致什么问题
- [56] 测试技术常见的十一种问题之四:什么是系统瓶颈?
- QU:关于字符集的问题,究竟什么是“ISO 8859-1”,还有其它字符集吗?有什么区别?
- 有什么技术能帮我解决总忘事的问题
- 一个连续问了8年的问题:运营是什么?
- 问题是什么?---- 雷龙塔电梯问题(《Are your lights》读后感)
- 游戏服务端究竟解决了什么问题
- 漫画告诉你什么是《屎一样的代码》?
- 广州 .net 外资公司面试会问的问题--.net3.0和.net2.0有什么不同
- Atitit 高性能架构之道 attilax著 艾龙 著 1. 应用服务与数据隔离 2 2. 负载均衡你问题 2 2.1. 用户的请求由谁来转发到到具体的应用服务器 2 2.2. 有什么转发的算法
- 百度帝国目前遇到的最大问题到底是什么
- 问题:https与http有什么区别啊?
- 使用VS2017自带域名 解决静态网站 跨域问题 (鬼知道原因什么我瞎写自己记录的,别看了)
- 阿里JAVA面试题剖析:Redis 的并发竞争问题是什么?如何解决这个问题?