3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
嘿嘿,程序員的幽默可以程序員們捧腹大笑,而其他人則一頭霧水,看不到懂這些段子的笑點。如果你不是程序員,請看看下方對應的解釋。1.為什麼程序員總是搞混萬聖節和聖誕節?因為 Oct 31 = Dec 25。這個笑話是說八進位的 31(其縮寫看著像 October 31st ,萬聖節)和十進位的 25(其縮寫很像 December 25th ,聖誕節)相等。十進位和八進位是兩種計數制,它們的基數不同。十進位是基於 10 的計數制,大家都很熟悉了。一種計數制的數字個數和它的基數數目一樣。這就是說,基數為 10 的計數制有 10個數字(0, 1, 2, 3, 4, 5, 6, 7, 8, 9),十進位因此得名( 其英文單詞 decimal 源自拉丁語 decimus,意思是第 10 個)。當你要表示一個比最高位數還高的數字時,在左邊再加上一列,所以你會這樣數:9, 10, 11, 12,等等。八進位(英文單詞源自拉丁語詞根 oct-,意思是8)是一種基數為 8 的計數制,通常用於編程。基數為8的計數制意味著它有8個數位(0, 1, 2, 3, 4, 5, 6, 7)。當你要表示一個大於 7 的數時,你也得再加一列,那麼你像這樣數:6, 7, 10, 11, 12 等等。分享之前我還是要推薦下我自己的前端學習群:180442230,不管你是小白還是大牛,小編我都挺歡迎,不定期分享乾貨,包括我自己整理的一份2017最新的前端資料和零基礎入門教程,送給大家,歡迎初學和進階中的小夥伴如果我們把八進位的 31 轉換成十進位,我們最後得到 25。瞧:如果我們把八進位的 31 分解,用一個數學等式表示,最終是3*81+1*80=3*8+1*1= 24+1= 十進位的 25。反過來把十進位轉換成八進位的話,用你可以除的基數(在這個例子里是8)的最大次冪去除,得到一個整數,保留這個整數,再用餘數去除基數的小一次的冪,直到冪的次數為0。然後,你只要把除后得到的數字組合起來即可。比如在這個例子里轉換25,我們從81開始:25/81=3,餘數1/80=1,因此它的八進位是31。2. 世界上有 10 種人,懂二進位的和不懂二進位的。這是一個關於二進位的笑話。二進位是一種基數為 2 的計數制。因為它基數為 2,所以它只有 2 個數字,0 和 1。如果我們把二進位 10 轉換成十進位,我們得到:1*21+0*20=1*2+0= 2所以,這個笑話的意思就是 「世界上有 2 種人。懂二進位的和不懂二進位的。」如果你不懂二進位,你會認為世界上有十種人,那這個笑話就很詭異了。除了十進位(基數為 10),八進位(基數為8)和二進位(基數為 2),十六進位(基數為 16)也廣泛用於編程。它用字母A、B、C、D、E 和 F表示大於 9 的「數字」。3. 有兩種方法寫出零錯誤的程序,只有第三種方法奏效。這個段子指出了一個事實,實際上不可能寫出一個零錯誤的程序。寫出一個看似沒有錯誤的程序還是有可能的(錯誤在程序員的術語中叫做「bug」),但控制論昆蟲學的 Lubarsky 法則就說了,「總會還有一個 bug」。Bug 可能很小,在某些特定的情況下你根本發現不了它……但是總會還有一個bug。正因為總是還有一個 bug,這個段子說只有第三種方法,即不存在的方法,是寫出一個零錯誤程序的唯一方法。4. 關於布爾數最棒的事情是,就算你錯了,你也只是錯了一點(bit)。布爾數是一種只有兩個值的數據類型,即「真」和「假」。數據類型是指,比如在像變數之類的東西里保存的數據是什麼類型的。編程世界里的變數,類似於你可能在數學課里見過的變數,不同的是,程序里的變數可以表示的不僅僅是數字。例如,它能保存一個字母,如「c」,或者一整句話或是短語,比如「Hello World」。這種變數一般叫做字元串,或者布爾數。典型的布爾數保存一個 bit 。bit 是計算機里最小的存儲單位。bit 保存的是一個二進位數位。二進位,也就是基數為 2 的計數制,表示說它只有 0 或者 1 的值。在布爾數里,0 通常表示「假」,而 1 通常表示「真」。那麼這個笑話就說了,如果你有一個布爾數,你最多只能錯一個 bit,不是 0 就是 1。5. 優秀的程序員,在過單行道時總要左右看兩邊。這個笑話指出了這樣一個事實,作為一個程序員,你不能假定程序會如何運行,並且總是需要核對一切。舉個例子,如果讓用戶輸入一個數字,優秀的程序員不會只假設用戶輸入的就是一個數字。他們需要檢查得到的是否真是一個數字,而不是一個詞語或一個符號或一片空白。然後,他們需要檢查數字是否在他們期望的區間內(例如,對「有多少人出席了?」,負三 -3 就不是一個有效值)。因此,這個笑話是說,程序員們不能只因為路是單行道,就假定每個人都遵守單向行駛的規則。6.調試猶如大海撈針調試就是程序員把 bug 從程序里移除的過程。找 bug(及其成因)經常是件棘手的事,尤其是代碼量非常多的時候,找到它們就好比在大海里找一根針。因此,調試猶如大海撈針。7. 問:如何惹惱 Web 開發者?這個問題就是該問題的答案。請看問題前後的紅色字元,你會看到「」和」」。它們是 HTML 語言中的「標籤」,而 HTML 是編寫網頁的語言。HTML「標籤」通常包括一個開始標記和一個結束標記。開始標記是在包含在 <> 里(有時還有額外信息)的標記名。那麼,結束標記的標記名和開始標記一樣,不過它的前面有個 /。「Q: How do you annoy a web developer?」, 「Q: How do you annoy a web developer?」, 和「Q: How do you annoy a web developer?」 這 3 個都正確使用標籤。但 和 混起來用就不對了,任何一個 Web 開發者都會想要糾正。所以,這張圖讓人相當煩。8.在這張漫畫中,老師罰學生寫 500 遍「我不會在課堂里扔紙飛機了」。學生覺得他挺聰明,他在黑板上寫了一個 C++ 程序,來替他做事。這個程序是這樣的:第一行代碼是在 C++ 里所有程序通常需要包含進去的。它告訴編譯器去為你寫的程序引入某些額外內建的特性(stdio 庫是標準輸入/輸出的縮寫)。(外行人可以把編譯器理解成把「一種語言」翻譯解釋成「另外一種語言」的程序。)下一行代碼聲明了「main」函數。函數基本上就是一個代碼塊,你可以多次使用該函數。在C++里,所有程序都必須有一個名為」main」的函數,它是程序啟動時調用的第一個函數。main 前面的 int,表示它必須返回一個 integer(也就是整數)。「返回」一個值的意思是,不管什麼函數調用這個函數,在它運行完時,會告訴調用函數這個值。「void」是指函數不必返回任何值。下一行的開括弧(也被認作左花括弧)和最後一行的閉括弧(或右花括弧),配成一對,表示一個代碼塊區間。這個代碼塊屬於開括弧之前的對象(在這裡,就是 main 函數)。下一行的 「int count」。它聲明了一個類型為 「int」 的變數(一個信息容器,很像代數里的變數)。它表示 count 里會存放一個integer(一個整數)。分號(;)表示一條語句的結束。下一行:「for (count = 1; count <= 500; count++)」 是一個 for 循環。循環是指它會多次運行給定的命令。在這裡,我們有「count = 1」,它告訴我們 count 將以 1 為起始值。然後,「count <= 500;」 告訴我們「當 count 小於或等於 500 時一直運行」。最後,「count++」告訴我們,在我們做了 for 循環包含的命令之後,把 count 的值加 1。在這個程序中,for 循環只有一條命令:「printf(「I will not throw paper airplanes in class.」);」。如果它包含不止一行語句,它應該要有它自己的一對花括弧將它們括起來。這一行告訴程序去列印 「I will not throw paper airplnes in class.」 這句話。由於它在 for 循環里,而for循環從 1 計數到 500,每次增加一條短語,這條短語將被列印 500 次。最後,「return 0;」只是表示程序返回整數 0(因為 main 函數那一行說它會返回一個整數)。因此,理解這個程序,我們可以推斷出老師給了什麼樣的懲罰……還有老師為什麼看起來不像被逗樂了。9. 給一台慢電腦加速的最好方法,就是用 9.8m/s2 的加速度來加速。和物理沾邊的電腦笑話,還真不多。9.8m/s2(9.8米每平方秒)是地球重力加速物體到地面的常量。就是說,如果你扔個東西到真空中(即指沒有空氣的環境,因為空氣實際上讓物體落得更慢),每秒鐘它會比上一秒快 9.8 米。基本上,這個笑話是說,如果你被一台慢的要死的電腦煩著,加速它的最快辦法是把它扔出窗外,或者要麼把它從高處扔下去。請注意,這當然是個玩笑。扔掉你的電腦,實際上只會得到一台破電腦哈。:)10.這個笑話跟 SQL 有關。SQL是用來控制資料庫的命令,也是常見的黑客用來攻擊不安全的網站用的命令,這種情況下叫做 SQL 注入。基本概念是,當你從用戶能輸入的地方(像是登錄表格)得到一些信息,你可能會把它用在查詢(一條SQL命令)里,如果你不「凈化」這些輸入信息,或者清除它的不必要的值,用戶可能做出一些惡意的行為。以這條查詢 「SELECT * FROM users WHERE username = $user AND password = $password」 為例。一般來說,這條語句會查看 $user變數里保存了用戶名和 $password 變數里保存了密碼的用戶。因此,如果我輸入「Bob」和「cookiesareyummy」,它會得到這些值,就像這樣:「SELECT * FROM users WHERE username = 『Bob』 AND password = 『cookiesareyummy』」。這都很好。然而,如果我想稍微惡毒一點,我可能說我的用戶名是「Bob』;—」。這會讓查詢語句變成「SELECT * FROM users WHERE username = 『Bob』; –』 AND password = 『cookiesareyummy』」。分號(;) 意味著查詢語句的結束,而 — 意味著它後面的任何字元只是註釋,代碼被忽略了。這個小伎倆可以讓我不知道密碼的前提下以任何人的身份登錄。在健壯的系統里,你會凈化輸入信息,這些信息可能會讓所有人沒辦法正常訪問。這位特別的母親做了更出格的事。她通過給她的兒子取名「Robert』); DROP TABLE Students; –「,加了一條額外的命令。這句「DROP TABLE Students」會drop(或說刪除)包含所有學生的所有信息的表格(數據集)。我猜這所學校通過這種痛苦的方式,學到了該凈化他們得到的輸入信息。

本文由yidianzixun提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦