上周只上了三天班牵现,但我也絲毫不敢懈怠,BUG 更是一個(gè)也沒(méi)少寫邀桑。
看著滿屏幕的 ERROR瞎疼,我陷入沉思。為什么我寫的代如此爛壁畸,無(wú)法像大牛們寫的那般優(yōu)雅贼急?
越想越自卑茅茂,越想越抑郁。我覺(jué)得這樣不行太抓,一定得振作起來(lái)空闲。
正如一位哲人曾經(jīng)說(shuō)過(guò):
世間萬(wàn)事萬(wàn)物,都是有兩面性的:有它光明的一面走敌,也就有他陰暗的一面碴倾;有它積極的一面就有他消極的一面;有他好的一面也有它壞的一面悔常。
我的代碼雖然不夠優(yōu)雅影斑,但寫的 BUG 還能比別人差嗎?
然后我在網(wǎng)上搜了一下机打,沒(méi)錯(cuò)矫户,BUG 也比別人差。
軟件開(kāi)發(fā)歷史上有哪些著名的 BUG 呢残邀?今天我們就來(lái)好好聊一聊皆辽,漲漲奇怪的知識(shí)點(diǎn)。
第一個(gè) BUG
上圖中有一只飛蛾被貼在了一張紙上芥挣,這可不是某個(gè)人的特殊愛(ài)好驱闷,而是計(jì)算機(jī)的第一個(gè) bug。
它導(dǎo)致了哈佛 Mark II 計(jì)算機(jī)中的繼電器短路空免。Grace Murray Hopper 找到了它空另,并把它放在了日志中。
如果沒(méi)有這個(gè) bug蹋砚,我們可能對(duì)計(jì)算機(jī)中的錯(cuò)誤就有不同的說(shuō)法了扼菠。
這可能是最著名的計(jì)算機(jī)錯(cuò)誤了。
500 英里外的郵件
一位國(guó)外做郵件服務(wù)的管理員坝咐,有用戶向他抱怨說(shuō):他們不能發(fā)送超過(guò) 500 英里距離的電子郵件循榆。
這不是扯淡嗎?這可是互聯(lián)網(wǎng)業(yè)務(wù)墨坚,怎么還跟實(shí)際距離有關(guān)了秧饮。
管理員一聽(tīng)也是一臉懵逼,根本不相信泽篮。根據(jù)程序員法則即可推理:原來(lái)還好好的呢盗尸。
有一位用戶還特意做了一張郵件發(fā)送失敗的地圖。地圖上顯式咪辱,郵件的送達(dá)區(qū)域半徑比 500 英里就多那么一點(diǎn)點(diǎn):半徑內(nèi)的收件人振劳,全收到了,之外的油狂,全失敗了历恐。
看來(lái)是真的有這個(gè)問(wèn)題寸癌,還是得排查啊。到底是怎么回事呢弱贼?
原來(lái)是一次軟件升級(jí)導(dǎo)致遠(yuǎn)程服務(wù)器超時(shí)時(shí)間被設(shè)為 0蒸苇。在一個(gè)具有典型負(fù)載的特定機(jī)器上,零超時(shí)意味著如果連接時(shí)間稍微超過(guò) 3 毫秒吮旅,服務(wù)器就會(huì)終止連接溪烤。
而以光速傳播的電信號(hào),在 3 毫秒的時(shí)間內(nèi)所能到達(dá)的距離大約是:
0.003 * c (光速) = 558.84719 miles
星期三崩潰的系統(tǒng)
一家醫(yī)院用來(lái)監(jiān)控病人健康的數(shù)據(jù)庫(kù)庇勃,每到周三檬嘀,會(huì)自己崩潰。
我就不一樣了责嚷,我是周一到周四都會(huì)崩潰鸳兽。只有周五狀態(tài)正常,因?yàn)轳R上就要修周末了罕拂。
說(shuō)回這個(gè)系統(tǒng)揍异,該系統(tǒng)記錄日志是用 C 風(fēng)格的代碼編寫的,把日志字符串記錄到了一個(gè)固定長(zhǎng)度的緩沖區(qū)中爆班,其中日志時(shí)間一欄衷掷,格式例如「Monday, July 17, 1997, 10:38:47.123」。
看到這是不是有點(diǎn)靈感了柿菩,肯定是跟時(shí)間有關(guān)系戚嗅,讓我們把信息再明確一下:
星期 | 長(zhǎng)度 |
---|---|
Sunday | 6 |
Monday | 6 |
Tuesday | 7 |
Wednesday | 9 |
Thursday | 8 |
Friday | 6 |
Saturday | 8 |
這樣的話就清晰了,原因就是周三的字符串長(zhǎng)度更長(zhǎng)枢舶,在這一天渡处,緩沖區(qū)恰好溢出了。
這 BUG祟辟,還真的就是這么巧妙。
《江南 Style》爆表
這個(gè) BUG 可能很多同學(xué)都知道侣肄,也就是幾年前的事情旧困。
鳥(niǎo)叔的一首《江南 Style》火遍全球,順便爆出了 YouTube 的一個(gè) BUG稼锅。
原因就是 YouTube 的計(jì)數(shù)器之前使用的是 32 位整數(shù)吼具。32 位整數(shù)確定了它可以計(jì)數(shù)的最大可能點(diǎn)擊量為 2,147,483,647。
YouTube 的程序員可能都沒(méi)想到矩距,還能有一個(gè)視頻的點(diǎn)擊量能超過(guò)這個(gè)數(shù)拗盒?
《江南 Style》視頻點(diǎn)擊量超過(guò)了最大值,我們就得到了著名的《江南 Style》YouTube BUG锥债。
現(xiàn)在陡蝇,YouTube 的視頻計(jì)數(shù)器改用 64 位整數(shù)痊臭,這意味著視頻最大觀看人數(shù)為 922 萬(wàn)萬(wàn)億 。
YouTube 程序員:我看看還有誰(shuí)登夫?
看到這幾個(gè) BUG 之后广匙,我的目標(biāo)就改變了,不再是寫出優(yōu)雅的代碼恼策,而是寫出巧妙的 BUG鸦致。
我要在系統(tǒng)中暗藏一些「奇思妙想」,給我的繼任者留下一個(gè)又一個(gè)驚喜涣楷。加油~
以上就是本文的全部?jī)?nèi)容分唾,如果覺(jué)得還不錯(cuò)的話歡迎點(diǎn)贊,轉(zhuǎn)發(fā)和關(guān)注狮斗,感謝支持绽乔。
推薦閱讀:
- 計(jì)算機(jī)經(jīng)典必讀書籍
- 技術(shù)博客: 硬核后端開(kāi)發(fā)技術(shù)干貨,內(nèi)容包括 Python情龄、Django迄汛、Docker、Go骤视、Redis鞍爱、ElasticSearch、Kafka专酗、Linux 等睹逃。
- Go 程序員: Go 學(xué)習(xí)路線圖,包括基礎(chǔ)專欄祷肯,進(jìn)階專欄沉填,源碼閱讀,實(shí)戰(zhàn)開(kāi)發(fā)佑笋,面試刷題翼闹,必讀書單等一系列資源。
- 面試題匯總: 包括 Python蒋纬、Go猎荠、Redis、MySQL蜀备、Kafka关摇、數(shù)據(jù)結(jié)構(gòu)、算法碾阁、編程输虱、網(wǎng)絡(luò)等各種常考題脂凶。