漫畫:什麼是 “千年蟲” 問題?
在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多家公司資料庫癱瘓的訊息。
相關文章
- 漫畫:什麼是計數排序?排序
- 漫畫:什麼是氣泡排序?排序
- 漫畫:什麼是架構師架構
- 漫畫:什麼是人工智慧人工智慧
- 漫畫 | 什麼是區塊鏈?區塊鏈
- 漫畫:什麼是HashMap?(底層原理)HashMap
- 漫畫版:什麼是人工智慧?人工智慧
- 漫畫版:什麼是深度學習?深度學習
- 漫畫:什麼是LRU演算法?演算法
- 漫畫:容器技術docker是什麼?Docker
- 漫畫:什麼是機器學習機器學習
- 漫畫版:什麼是神經網路?神經網路
- 漫畫版:什麼是機器學習?機器學習
- 漫畫:什麼是中間人攻擊
- 漫畫 | 程式設計師的悲哀是什麼?程式設計師
- 用漫畫的形式展現——什麼是webWeb
- 漫畫 | 到底是什麼讓IT人如此苦逼???
- 漫畫:什麼是最終一致性?
- 「幣姐漫畫」1分鐘看懂什麼是“槓桿”?
- 什麼是爬蟲?爬蟲的工作原理是什麼呢爬蟲
- 什麼是P問題、NP問題和NPC問題
- 漫畫 | Redis常見面試問題(一)Redis面試
- [轉載]什麼是P問題、NP問題和NPC問題
- JSONP的原理是什麼?解決什麼問題?JSON
- 什麼是智慧礦山?它能解決什麼問題?
- 什麼是網路爬蟲?為什麼用Python寫爬蟲?爬蟲Python
- 什麼是網路爬蟲?爬蟲
- 網路爬蟲是什麼?爬蟲
- 什麼是網路爬蟲爬蟲
- 動態規劃問題為什麼要畫表格?動態規劃
- python爬蟲是什麼?為什麼用python語言寫爬蟲?Python爬蟲
- 什麼是爬蟲?Python爬蟲框架有哪些?爬蟲Python框架
- 漫畫:什麼是字符集和編碼?ASCII、UTF-8、UTF-16、UTF-32 又是什麼?ASCII
- 什麼是MongoDB?Python爬蟲為什麼使用MongoDB?MongoDBPython爬蟲
- 網路爬蟲技術是什麼,網路爬蟲的基本工作流程是什麼?爬蟲
- Service Mesh是什麼,為我們解決了什麼問題?
- 【Java面試】什麼是可重入,什麼是可重入鎖? 它用來解決什麼問題?Java面試
- 什麼是爬蟲?Python爬蟲工程師崗位爬蟲Python工程師