|
對(duì)于剛剛接觸編程的學(xué)生來(lái)說(shuō),Coding的時(shí)候經(jīng)常會(huì)發(fā)生一些讓人無(wú)奈的語(yǔ)法或者邏輯上的問(wèn)題。 下圖是一段Run不過(guò)的代碼,你能在1分鐘內(nèi)看出下圖中都有哪些Bug嗎? 一個(gè)中文分號(hào)、一次Tab、Space混用、一個(gè)括號(hào)錯(cuò)誤,就可能要花上很長(zhǎng)的時(shí)間Debug,甚至?xí)屇銙斓鬙A和面試。 即使如此,在教學(xué)中,我們還是發(fā)現(xiàn)有同學(xué)對(duì)于Debug和跑Test不夠耐心。 今天就分享一些讓人目瞪口呆的Bug,告訴大家:Debug和跑Test到底有多!么!重!要! 01 世界上第一個(gè)Bug與千年蟲 1947年,編譯器之母格蕾絲·赫帕的電腦出現(xiàn)了問(wèn)題,經(jīng)過(guò)排查發(fā)現(xiàn),原來(lái)是一只蟲子卡在了計(jì)算機(jī)的繼電器中。世界上的第一個(gè)計(jì)算機(jī)“Bug”就由此產(chǎn)生了。 讓人沒(méi)想到的是,這位杰出 女程序員的“Bug”,在她去世之后,又引起了千年蟲危機(jī)。 當(dāng)時(shí),為了節(jié)約寶貴的存儲(chǔ)空間,她創(chuàng)造的編譯程序COBOL只使用6位數(shù)來(lái)表示日期,即MM/DD/YY,當(dāng)2000年即將到來(lái)的時(shí)候,人們才突然發(fā)現(xiàn),該程序無(wú)法區(qū)分1900年和2000年,這讓使用這套程序的企業(yè)和政府機(jī)關(guān)非??只?,急忙由政府出面進(jìn)行Debug。但在有些相對(duì)落后的國(guó)家,還是造成了大規(guī)模的斷電、政府和金融部門的停擺。 02 iOS致命漏洞竟源于低級(jí)錯(cuò)誤 蘋果推出iOS7后,就不斷的被爆出各種安全問(wèn)題。其中一個(gè)安全漏洞對(duì)于消費(fèi)者來(lái)說(shuō)很不起眼,卻非常嚴(yán)重。 這個(gè)安全漏洞,完全是因?yàn)槌绦騿T的疏忽。以下就是導(dǎo)致這個(gè)問(wèn)題的代碼: 上圖中有兩個(gè)連續(xù)的goto fail語(yǔ)句,第二個(gè)goto fail由于不受if語(yǔ)句的限制,在任何情況下都會(huì)執(zhí)行,從而導(dǎo)致安全簽名的認(rèn)證永遠(yuǎn)不會(huì)失敗。 這意味著,對(duì)于有心竊取用戶信息或者傳播病毒的人來(lái)說(shuō),不管有沒(méi)有正確的密鑰和簽名,都可以通過(guò)iOS的安全認(rèn)證。 據(jù)報(bào)道,這個(gè)小小的Bug不止影響iOS、OSX和Safari,還會(huì)將蘋果端的Mail、Twitter、iMessage等程序都置于險(xiǎn)地。 這個(gè)故事還說(shuō)明了,在C語(yǔ)言中,愛寫大括號(hào)是個(gè)多么好的習(xí)慣。 除了虛擬世界的問(wèn)題, 一個(gè)微小的Bug, 還能造成更加嚴(yán)重的后果。 03 兩放煙花,損失超過(guò)10億美金 1996年阿麗亞娜5型運(yùn)載火箭在升空途中自毀,1997年火星氣候探測(cè)者號(hào)墜落火星。 調(diào)查顯示,阿麗亞娜5型自毀的根源在于程序員偷懶。程序員將原本用于4型的測(cè)速程序,直接復(fù)制到了5型上面。沒(méi)有想到,由于兩者性能的不同,4型程序中的16位內(nèi)存已不足以支持5型的計(jì)算,造成了數(shù)據(jù)溢出,最終系統(tǒng)癱瘓自爆。 而火星氣候探測(cè)者號(hào)的Bug卻在于地面團(tuán)隊(duì)與航天器的數(shù)據(jù)單位不同。地面團(tuán)隊(duì)用pound second,即磅/秒為單位計(jì)算,而探測(cè)器卻使用了牛頓/秒,導(dǎo)致導(dǎo)航錯(cuò)誤,數(shù)據(jù)相差超過(guò)100公里,最終在火星大氣中燃燒解體。 不到兩年的時(shí)間,就有兩個(gè)航天器變成了兩枚上億美元的煙花,二者都是由于程序中的看似不起眼的Bug所導(dǎo)致的。 04 死亡28人,原因是毫秒級(jí)延遲 1992年2月,一枚飛毛腿導(dǎo)彈落在了美軍宰赫蘭軍事基地,造成了28死,100多傷,是美軍在海灣戰(zhàn)爭(zhēng)中,單次死傷最多的事件。 所有人的疑問(wèn)都是,基地配備的愛國(guó)者反導(dǎo)系統(tǒng)為什么沒(méi)能做出有效攔截? 調(diào)查發(fā)現(xiàn),罪魁禍?zhǔn)资菒蹏?guó)者的時(shí)鐘計(jì)時(shí)。 愛國(guó)者的時(shí)鐘只有24位存儲(chǔ)空間,時(shí)間精度有限,導(dǎo)致其工作的時(shí)候,系統(tǒng)時(shí)鐘每小時(shí)會(huì)產(chǎn)生一個(gè)0.0033秒的延遲。這本無(wú)大礙。但是,位于宰赫蘭的愛國(guó)者當(dāng)時(shí)已經(jīng)連續(xù)工作了100個(gè)小時(shí),這個(gè)時(shí)間誤差積累到了0.33秒。 這是什么概念呢?飛毛腿導(dǎo)彈的時(shí)速約為1500米/秒,0.33秒的時(shí)間足以產(chǎn)生500米的誤差。 最終愛國(guó)者沒(méi)能攔截導(dǎo)彈,釀成悲劇。 看似不起眼的Bug卻造成了讓人目瞪口呆的后果:新千年的混亂、iOS的安全漏洞、海灣戰(zhàn)爭(zhēng)最大單次傷亡和兩次數(shù)億美金航天器的爆炸…… 所以說(shuō),做到Bug Free,是對(duì)于程序員最基本的業(yè)務(wù)要求。 在競(jìng)爭(zhēng)愈發(fā)激烈的求職市場(chǎng),如果僅僅具備Average的能力,很難在眾多應(yīng)征者中脫穎而出。 找工作沒(méi)有捷徑,只有成為一個(gè)Solid的程序員,才能在日益復(fù)雜的求職環(huán)境中,突出重圍,拿到心儀的Offer。 本文授權(quán)轉(zhuǎn)載自“來(lái)Offer網(wǎng)” |
|
|
來(lái)自: 西北望msm66g9f > 《編程》