吐槽編程問(wèn)題的五張漫畫(huà)
大家可能知道,我時(shí)?;钴S于Stack Overflow——當(dāng)今最熱門(mén)的程序員問(wèn)答網(wǎng)站。該網(wǎng)站的好同志們公開(kāi)了他們的數(shù)據(jù),任何人都可以通過(guò)這個(gè)頁(yè)面查詢(xún)他們的數(shù)據(jù)庫(kù):data.stackexchange.com
那里的很多問(wèn)題和回答都配上了XKCD(由Randall Munroe 創(chuàng)作)的漫畫(huà)鏈接,于是我決定扒一扒,哪幾篇漫畫(huà)最?lèi)?ài)被程序員拿來(lái)吐槽他們遇到的奇葩事。
我使用的查詢(xún)很簡(jiǎn)單:
- SELECT link, cnt, id [Post Link], score
- FROM (
- SELECT link, id, score,
- COUNT(*) OVER (PARTITION BY link) cnt,
- ROW_NUMBER() OVER (PARTITION BY link ORDER BY score DESC) rn
- FROM (
- SELECT id, score,
- 'http' + SUBSTRING(start, 1, PATINDEX('%/%', SUBSTRING(start, 13, 30)) + 12)
- FROM (
- SELECT id, score,
- SUBSTRING(body, PATINDEX('%://xkcd.com/[0-9]%', body), 20) start
- FROM (
- SELECT TOP 400000
- id, body, score
- FROM posts
- ORDER BY
- id DESC
- UNION
- SELECT TOP 4000000
- postId, text, score
- FROM comments
- ORDER BY
- id DESC
- ) q
- WHERE body LIKE '%://xkcd.com/[0-9]%'
- ) q
- ) q (id, score, link)
- ) q
- WHERE rn = 1
- ORDER BY
- cnt DESC
TOP語(yǔ)句是用來(lái)限制查詢(xún)范圍的,因?yàn)樗麄兊姆?wù)提供商不允許全文索引,所以不這樣的話(huà),就會(huì)請(qǐng)求超時(shí)。這個(gè)查詢(xún)只能涵蓋最近的帖子和評(píng)論,所以一些經(jīng)典的帖子可能被忽略了。不過(guò),這樣已經(jīng)足夠說(shuō)明問(wèn)題了。
你可以從這兒看全部結(jié)果,本文只討論排名最前的五篇。
#5 隨機(jī)數(shù) (10次引用)

引用這篇漫畫(huà)的自然是吐槽各種隨機(jī)數(shù)生成器坑爹的帖子,其中被頂最多的是這一篇:
161803398是一個(gè)特殊的數(shù)嗎?Math.Random()里用到的我猜答案可能是「數(shù)學(xué)原理,不解釋」,但我還是希望有人能通俗地解釋一下此中玄機(jī)… 起因是,我今天在鼓搗BCL的源代碼,想看看以前用過(guò)的那些類(lèi)是怎么實(shí)現(xiàn)的。因?yàn)橐郧皼](méi)考慮過(guò)如何生成(偽)隨機(jī)數(shù)的問(wèn)題,所以我打算看看在這兒是怎么實(shí)現(xiàn)的。 全部代碼在此:http://referencesource.microsoft.com/#mscorlib/system/random.cs#29
次生成Random()類(lèi)的隨機(jī)數(shù)種子都要用到這個(gè)MSEED值。 這個(gè)神奇的數(shù)字:161803398,我想破頭也想不出它是怎么來(lái)的。它不是個(gè)質(zhì)數(shù),也不是2的某次冪,跟哪個(gè)稍微有點(diǎn)意義的數(shù)字都不搭邊兒。我也查了它的二進(jìn)制和十六進(jìn)制形式,怎么看都只是一個(gè)沒(méi)有特征的數(shù)字。 我Google過(guò)了,沒(méi)有結(jié)果。 這個(gè)數(shù)來(lái)自于Phi值(黃金分割比)。 有關(guān)黃金分割比 |
也就是說(shuō),出于某些(也許是有道理的)原因,黃金分割比貌似很適合拿來(lái)做隨機(jī)數(shù)生成器的種子……有意思的是,上面引用的那篇論文,編程語(yǔ)言中的偽隨機(jī)數(shù)生成器,第一頁(yè)就引用了上面這篇漫畫(huà)。
#4 goto (10次引用)

goto是某些編程語(yǔ)言中的一個(gè)構(gòu)造體(construct),用于跳過(guò)所有正在執(zhí)行的循環(huán)和處理,無(wú)條件跳轉(zhuǎn)到程序的任意位置。很多程序員(顯然還有迅猛龍)都認(rèn)為這是個(gè)很糟的編程習(xí)慣。
被頂最多的評(píng)論來(lái)自這個(gè)帖子:
解析錯(cuò)誤:Unexpected “我遇到了這么一條錯(cuò)誤信息: 源代碼如下:
請(qǐng)別揪著GOTO不放,告訴我怎么解決這個(gè)錯(cuò)誤就好,我只是在試驗(yàn)用這段代碼解決個(gè)問(wèn)題。 |
#3 密碼強(qiáng)度 (11次引用)

相比用一串隨機(jī)字符(很難記)當(dāng)密碼,Randall建議使用基于自然語(yǔ)言的密碼短語(yǔ)(passphrase),既安全又好記。
得票最多的評(píng)論來(lái)自這個(gè)求助帖:
使用正則驗(yàn)證密碼復(fù)雜度我在寫(xiě)一個(gè)javascript的正則表達(dá)式,用于驗(yàn)證密碼的復(fù)雜度,密碼必須符合這些條件: 至少包含12個(gè)字符 我在網(wǎng)上找到一個(gè)例子,修改了一下:
但是還缺特殊字符的驗(yàn)證,而且兩個(gè)大寫(xiě)字母和兩個(gè)數(shù)字必須連在一起才能通過(guò)驗(yàn)證,結(jié)果如下:
我希望第二個(gè)密碼也能通過(guò)驗(yàn)證,當(dāng)然還需要特殊字符的驗(yàn)證。 誰(shuí)能幫幫我嗎? |
問(wèn)題在于,這個(gè)正則顯然不能允許密碼短語(yǔ)的使用,所以下面的評(píng)論用XKCD的鏈接巧妙地指出了這一點(diǎn)。
#p#
#2 前人的智慧 (16次引用)

所謂挫敗感:在網(wǎng)上搜索一個(gè)罕見(jiàn)的、奇特的問(wèn)題,只找到一個(gè)帖子,描述的問(wèn)題一模一樣,但是最后解決了沒(méi)有,如何解決的,沒(méi)有下文。
被頂最多的評(píng)論來(lái)自這個(gè)帖子:
部署EAR時(shí)報(bào)錯(cuò):Class bytes found but defineClass()failed for今天我嘗試把一部分使用EJB 1.1的老代碼部署到Weblogic 10.3.6,但總是報(bào)這個(gè)奇怪的錯(cuò)誤: 類(lèi)都被找到了,還能是什么問(wèn)題? 搞定了,項(xiàng)目代碼是用JDK 1.7編譯的,但是Weblogic服務(wù)器安裝的是1.6。 |
發(fā)帖的這位顯然花了很多時(shí)間才找到這個(gè)問(wèn)題的解決辦法,于是他好心地把問(wèn)題和答案都發(fā)到了Stack Overflow上。
此答案的評(píng)論只是一句「謝謝」,外加這篇漫畫(huà)的鏈接。從這條評(píng)論和這篇帖子的頂貼數(shù)來(lái)看,它至少幫到了三個(gè)人。
說(shuō)真的,干得漂亮!大家都向Jarrod Roberson看齊吧。
最后,獲得了96次引用的大熱門(mén),是這篇:
#1 老媽的逆襲 (96次引用)

一個(gè)沒(méi)安好心的老媽給他兒子取的這個(gè)名字,只要輸入到未防范SQL注入的數(shù)據(jù)庫(kù)里,就能把數(shù)據(jù)庫(kù)搞壞。
這種事不是第一次聽(tīng)說(shuō)了,你可以讀一讀這篇真人真事:搜索一個(gè)叫Null的客戶(hù)把程序整崩了
同時(shí),也有一些人,愛(ài)爾蘭血統(tǒng)的人(可能是有Null這個(gè)名字—譯者注),在注冊(cè)網(wǎng)站的時(shí)候,被矯枉過(guò)正的SQL注入預(yù)防手段弄得很不高興。
被頂最多的評(píng)論來(lái)自這個(gè)帖子:
SQL注入演示頁(yè)面我在為我的學(xué)生們創(chuàng)建一個(gè)SQL注入演示頁(yè)面。我寫(xiě)了一個(gè)登錄頁(yè)面,但是我好像沒(méi)法進(jìn)行注入。下面是我寫(xiě)的頁(yè)面代碼。我已經(jīng)試過(guò)在username字段寫(xiě)入多個(gè)語(yǔ)句以繞過(guò)SQLi。我還能想到的就只有使用子查詢(xún),或者把我的代碼漏洞再搞大一點(diǎn)。
|
這位作者很奇葩地想故意把代碼寫(xiě)得能被SQL注入,結(jié)果卻做不到……
原文鏈接: EXPLAIN EXTENDED 翻譯: 伯樂(lè)在線(xiàn) - 輕如紙張






















