那裡的很多問題和回答都配上了XKCD(由Randall Munroe 創作)的漫畫連結,於是我決定扒一扒,哪幾篇漫畫最愛被程式設計師拿來吐槽他們遇到的奇葩事。
我使用的查詢很簡單:
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 DESCTOP語句是用來限制查詢範圍的,因為他們的服務提供商不允許全文索引,所以不這樣的話,就會請求超時。這個查詢只能涵蓋最近的帖子和評論,所以一些經典的帖子可能被忽略了。不過,這樣已經足夠說明問題了。
你可以從這兒看全部結果,本文只討論排名最前的五篇。
#5 隨機數 (10次引用)
引用這篇漫畫的自然是吐槽各種隨機數生成器坑爹的帖子,其中被頂最多的是這一篇:
161803398是一個特殊的數嗎?Math.Random()裡用到的
我猜答案可能是「數學原理,不解釋」,但我還是希望有人能通俗地解釋一下此中玄機…
起因是,我今天在鼓搗BCL的原始碼,想看看以前用過的那些類是怎麼實現的。因為以前沒考慮過如何生成(偽)隨機數的問題,所以我打算看看在這兒是怎麼實現的。
全部程式碼在此:http://referencesource.microsoft.com/#mscorlib/system/random.cs#29
<code>private const int MSEED = 161803398; </code>每次生成Random()類的隨機數種子都要用到這個MSEED值。
這個神奇的數字:161803398,我想破頭也想不出它是怎麼來的。它不是個質數,也不是2的某次冪,跟哪個稍微有點意義的數字都不搭邊兒。我也查了它的二進位制和十六進位制形式,怎麼看都只是一個沒有特徵的數字。
我Google過了,沒有結果。
這個數來自於Phi值(黃金分割比)。
161803398 = 1.61803398 * 10^8 ≈ φ * 10^8
有關黃金分割比
另外,強烈推薦數學愛好者讀讀這一篇。
我還找到一篇含同樣觀點的關於隨機數生成器的學術論文。(見53頁)
也就是說,出於某些(也許是有道理的)原因,黃金分割比貌似很適合拿來做隨機數生成器的種子……有意思的是,上面引用的那篇論文,程式語言中的偽隨機數生成器,第一頁就引用了上面這篇漫畫。
#4 goto (10次引用)
goto是某些程式語言中的一個構造體(construct),用於跳過所有正在執行的迴圈和處理,無條件跳轉到程式的任意位置。很多程式設計師(顯然還有迅猛龍)都認為這是個很糟的程式設計習慣。
被頂最多的評論來自這個帖子:
解析錯誤:Unexpected “
我遇到了這麼一條錯誤資訊:
Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\xampp\htdocs\game.php on line 12
原始碼如下:
<?php $words=$_GET['words']; $array=explode(",",$words); $j=count($array)-1; goto a; a: shuffle($array); $num=$array[0]; echo "The Number Is = $num"; echo "<br />"; echo "Please Enter The Number Within 10 Seconds"; echo "<form method=\"get\" action=\"$_SERVER[\'PHP_SELF\']\" "; **<--Line 12** echo "<input type=\"text\" name=\"num\""; echo "<input type=\"submit\" value=\"Press Me! \""; $input=$_GET['num']; goto b; b: if($input==$array[0] && $array!=NULL) { array_pop($array); goto a; } elseif($array!=NULL) { goto a; } else break; ?>
請別揪著GOTO不放,告訴我怎麼解決這個錯誤就好,我只是在試驗用這段程式碼解決個問題。
雖然樓主宣告不要在GOTO上挑三揀四,不過說了也白說,被頂最多的評論就連結到上面那篇漫畫。
#3 密碼強度 (11次引用)
相比用一串隨機字元(很難記)當密碼,Randall建議使用基於自然語言的密碼短語(passphrase),既安全又好記。
得票最多的評論來自這個求助帖:
使用正則驗證密碼複雜度
我在寫一個javascript的正規表示式,用於驗證密碼的複雜度,密碼必須符合這些條件:
- 至少包含12個字元
- 至少包含一個以下字元:* ^ !
- 至少包含兩個大寫字母
- 至少包含兩個數字
- 至少包含一個小寫字母
(?=.*[0-9]{2,})(?=.*[a-z])(?=.*[A-Z]{2,}).{12,}但是還缺特殊字元的驗證,而且兩個大寫字母和兩個數字必須連在一起才能通過驗證,結果如下:
我希望第二個密碼也能通過驗證,當然還需要特殊字元的驗證。
誰能幫幫我嗎?
問題在於,這個正則顯然不能允許密碼短語的使用,所以下面的評論用XKCD的連結巧妙地指出了這一點。
#2 前人的智慧 (16次引用)
所謂挫敗感:在網上搜尋一個罕見的、奇特的問題,只找到一個帖子,描述的問題一模一樣,但是最後解決了沒有,如何解決的,沒有下文。
被頂最多的評論來自這個帖子:
部署EAR時報錯:Class bytes found but defineClass()failed for
今天我嘗試把一部分使用EJB 1.1的老程式碼部署到Weblogic 10.3.6,但總是報這個奇怪的錯誤:Class bytes found but defineClass()failed for
類都被找到了,還能是什麼問題?
搞定了,專案程式碼是用JDK 1.7編譯的,但是Weblogic伺服器安裝的是1.6。
我用JDK 1.6重新編譯了一下,然後就能用了!
我把這件事記在這兒,因為這個問題在網上實在太難找到答案了。
發帖的這位顯然花了很多時間才找到這個問題的解決辦法,於是他好心地把問題和答案都發到了Stack Overflow上。
此答案的評論只是一句「謝謝」,外加這篇漫畫的連結。從這條評論和這篇帖子的頂貼數來看,它至少幫到了三個人。
說真的,幹得漂亮!大家都向Jarrod Roberson看齊吧。
最後,獲得了96次引用的大熱門,是這篇:
#1 老媽的逆襲 (96次引用)
一個沒安好心的老媽給他兒子取的這個名字,只要輸入到未防範SQL隱碼攻擊的資料庫裡,就能把資料庫搞壞。
這種事不是第一次聽說了,你可以讀一讀這篇真人真事:搜尋一個叫Null的客戶把程式整崩了
同時,也有一些人,愛爾蘭血統的人(可能是有Null這個名字—譯者注),在註冊網站的時候,被矯枉過正的SQL隱碼攻擊預防手段弄得很不高興。
被頂最多的評論來自這個帖子:
SQL隱碼攻擊演示頁面
我在為我的學生們建立一個SQL隱碼攻擊演示頁面。我寫了一個登入頁面,但是我好像沒法進行注入。下面是我寫的頁面程式碼。我已經試過在username欄位寫入多個語句以繞過SQLi。我還能想到的就只有使用子查詢,或者把我的程式碼漏洞再搞大一點。
<?php // Check to see if there was a request method that is a post type if ($_SERVER['REQUEST_METHOD'] == 'POST') { // Check to see if username field is null if (!empty($_POST['username'])) { // Connect to the server using credentials $con = mysql_connect('localhost','root','sqlcool1'); // If the connection was not successful if (!$con){ echo 'OUCH'; die('Could not connect: '.mysql_error()); } // Select the correct database from the server $db = mysql_select_db('injectme',$con); // Pass a sql query through the table to pull the user field that was entered in the form // Return the results in an array $sql = mysql_query('SELECT * FROM user WHERE username = "' . $_POST['username'] . '"'); $row = mysql_fetch_row($sql); // compare $row["password"] to $_post["password"] // if they match it's good: log them in // if not, they're beat: don't log them in if ($_POST["username"] == $row[1] && $_POST["password"] == $row[2]) { // do something to let them know that it worked echo('<html> <head> <meta http-equiv="refresh" content="3; url=search.php"> </head> <body> <p style="color:green">logged in</p> </body> </html>'); } else { // do something to let them know it didn't work echo('<p style="color: red">Invalid username or password.</p>'); echo('<form name="login" action="login.php" method="POST"> Username: <input type="text" name="username"><br> Password: <input type="password" name="password"><br> <input type="submit" name="submit_button" value="Submit"> <button type="submit" formaction="register.php">Register</button> </form>'); } //Close the connected session with the server mysql_close($con); } else { // Repost Form echo ('<p style="color: red"> No username / password provided.</p>'); echo('<form name="login" action="login.php" method="POST"> Username: <input type="text" name="username"><br> Password: <input type="password" name="password"><br> <input type="submit" name="submit_button" value="Submit"> <button type="submit" formaction="register.php">Register</button> </form>'); } } else { echo('<form name="login" action="login.php" method="POST"> Username: <input type="text" name="username"><br> Password: <input type="password" name="password"><br> <input type="submit" name="submit_button" value="Submit"> <button type="submit" formaction="register.php">Register</button> </form>'); } ?>
這位作者很奇葩地想故意把程式碼寫得能被SQL隱碼攻擊,結果卻做不到……
原文連結: EXPLAIN EXTENDED 翻譯: 伯樂線上- 輕如紙張
來自:伯樂線上
相關閱讀
評論(0)