上週只上了三天班,但我也絲毫不敢懈怠,BUG 更是一個也沒少寫。
看着滿屏幕的 ERROR,我陷入沉思。爲什麼我寫的代如此爛,無法像大牛們寫的那般優雅?
越想越自卑,越想越抑鬱。我覺得這樣不行,一定得振作起來。
正如一位哲人曾經說過:
世間萬事萬物,都是有兩面性的:有它光明的一面,也就有他陰暗的一面;有它積極的一面就有他消極的一面;有他好的一面也有它壞的一面。
我的代碼雖然不夠優雅,但寫的 BUG 還能比別人差嗎?
然後我在網上搜了一下,沒錯,BUG 也比別人差。
軟件開發歷史上有哪些著名的 BUG 呢?今天我們就來好好聊一聊,漲漲奇怪的知識點。
第一個 BUG
上圖中有一隻飛蛾被貼在了一張紙上,這可不是某個人的特殊愛好,而是計算機的第一個 bug。
它導致了哈佛 Mark II 計算機中的繼電器短路。Grace Murray Hopper 找到了它,並把它放在了日誌中。
如果沒有這個 bug,我們可能對計算機中的錯誤就有不同的說法了。
這可能是最著名的計算機錯誤了。
500 英里外的郵件
一位國外做郵件服務的管理員,有用戶向他抱怨說:他們不能發送超過 500 英里距離的電子郵件。
這不是扯淡嗎?這可是互聯網業務,怎麼還跟實際距離有關了。
管理員一聽也是一臉懵逼,根本不相信。根據程序員法則即可推理:原來還好好的呢。
有一位用戶還特意做了一張郵件發送失敗的地圖。地圖上顯式,郵件的送達區域半徑比 500 英里就多那麼一點點:半徑內的收件人,全收到了,之外的,全失敗了。
看來是真的有這個問題,還是得排查啊。到底是怎麼回事呢?
原來是一次軟件升級導致遠程服務器超時時間被設爲 0。在一個具有典型負載的特定機器上,零超時意味着如果連接時間稍微超過 3 毫秒,服務器就會終止連接。
而以光速傳播的電信號,在 3 毫秒的時間內所能到達的距離大約是:
0.003 * c (光速) = 558.84719 miles
星期三崩潰的系統
一家醫院用來監控病人健康的數據庫,每到週三,會自己崩潰。
我就不一樣了,我是週一到週四都會崩潰。只有週五狀態正常,因爲馬上就要修週末了。
說回這個系統,該系統記錄日誌是用 C 風格的代碼編寫的,把日誌字符串記錄到了一個固定長度的緩衝區中,其中日誌時間一欄,格式例如「Monday, July 17, 1997, 10:38:47.123」。
看到這是不是有點靈感了,肯定是跟時間有關係,讓我們把信息再明確一下:
星期 | 長度 |
---|---|
Sunday | 6 |
Monday | 6 |
Tuesday | 7 |
Wednesday | 9 |
Thursday | 8 |
Friday | 6 |
Saturday | 8 |
這樣的話就清晰了,原因就是週三的字符串長度更長,在這一天,緩衝區恰好溢出了。
這 BUG,還真的就是這麼巧妙。
《江南 Style》爆表
這個 BUG 可能很多同學都知道,也就是幾年前的事情。
鳥叔的一首《江南 Style》火遍全球,順便爆出了 YouTube 的一個 BUG。
原因就是 YouTube 的計數器之前使用的是 32 位整數。32 位整數確定了它可以計數的最大可能點擊量爲 2,147,483,647。
YouTube 的程序員可能都沒想到,還能有一個視頻的點擊量能超過這個數?
《江南 Style》視頻點擊量超過了最大值,我們就得到了著名的《江南 Style》YouTube BUG。
現在,YouTube 的視頻計數器改用 64 位整數,這意味着視頻最大觀看人數爲 922 萬萬億 。
YouTube 程序員:我看看還有誰?
看到這幾個 BUG 之後,我的目標就改變了,不再是寫出優雅的代碼,而是寫出巧妙的 BUG。
我要在系統中暗藏一些「奇思妙想」,給我的繼任者留下一個又一個驚喜。加油~
以上就是本文的全部內容,如果覺得還不錯的話歡迎點贊,轉發和關注,感謝支持。
推薦閱讀: