日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

StackOverflow 上面最流行的 7 个 Java 问题!| 值得一看

發布時間:2024/4/11 java 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 StackOverflow 上面最流行的 7 个 Java 问题!| 值得一看 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方“朱小廝的博客”,選擇“設為星標”

后臺回復"加群",加入新技術

StackOverflow發展到目前,已經成為了全球開發者的金礦。它能夠幫助我們找到在各個領域遇到的問題的最有用的解決方案,同時我們也會從中學習到很多新的東西。

這篇文章是在我們審閱了StackOverflow上最流行的Java問題以及答案后從中挑出來的。即使你是一個有豐富經驗的開發者,也能從中學到不少東西。

一、分支預測

問題鏈接:

https://stackoverflow.com/questions/11227809/why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-array

StackOverflow上最多投票的一個Java問題是:為什么處理一個排序數組要比非排序數組快的多。

為了回答這個問題,你需要使用分支預測(branch prediction)。分支預測是一種架構,旨在通過在真實的路徑發生前猜測某一分支的下一步來提升處理過程。

分支在這里即一個if語句。這樣的話,如果是一個排序數組,那么分支預測將會進行,否則不會進行。

StackOverflow上的一個回答者,鏈接:

http://stackoverflow.com/questions/11227809/why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-array/11227902#11227902

試圖使用鐵路和火車來簡單介紹這個概念。假設你在鐵軌連接處要決定火車要走哪條路,你會選擇左邊還是右邊?

你可以攔住火車,然后問司機該往哪里,但是這樣會讓整個過程變慢。因此你只能去猜正確的方向,那么如何去猜呢?最好的辦法就是通過觀察目前這個火車每次經過時的路線,推測出正確的方向。

這就是分支預測:識別模式并使用它。

不幸的是,這個問題的提問者是分支預測失敗的受害者。因為他的分支沒有任何可以識別出的模式,所以預測出的行為是隨機的。

二、Java中的安全

問題鏈接:

http://stackoverflow.com/questions/8881291/why-is-char-preferred-over-string-for-passwords-in-java

另一個流行的Java問題是:為什么在Java中有關密碼的地方更加喜歡使用char[]而不是String?其實原始的問題更加具體一些,就是問的在Swing中,password控件有一個getPassword方法(返回char[]而不是getText()返回的String)。

其實這里不用驚訝-這是一個安全問題。String是不可變的,意味著一旦它被創建了,那么你就不可能去修改它。

這也意味著在GC之前,你對這些數據不能做任何處理。因此,只要有人能夠訪問你的內存,那么String就有可能被他獲取到。這也就是為什么要使用char數組。你可以顯示地清除數據或者覆蓋它。這樣密碼這種敏感數據即使GC還沒有進行也不會再在系統留下痕跡。

三、異常

問題鏈接:

http://blog.takipi.com/the-top-10-exceptions-types-in-production-java-applications-based-on-1b-events/

即使很多開發者傾向于忽略對受檢異常的處理,StackOverflow上仍然有很多關于異常的問題。

其中一個最流行的問題是:什么是NullPointerException,我該怎么處理它?對此,我們并沒有感到驚訝,因為這個問題也是在生產環境的Java應用中排名第一的異常。

實際上,當NullPointerException(或者其他exception)在系統出現的時候,我們可以發出一個告警。因為這種異常一般情況下都是業務代碼邏輯有問題造成(筆者注)。

四、為什么這段代碼使用隨機字符串打印出了”hello world”

問題鏈接:

http://stackoverflow.com/questions/15182496/why-does-this-code-using-random-strings-print-hello-world

這個問題給出了下面的代碼,并打印出了”hello world”:

public static String randomString(int i){Random ran = new Random(i);StringBuilder sb = new StringBuilder();while (true){int k = ran.nextInt(27);if (k == 0)break;sb.append((char)('`' + k));}return sb.toString(); }

其實,選擇一組隨機的整數并不是隨機的。給定一個seed參數(在這個例子中是-229985452和-147909649), 那么每次隨機,同樣的seed則會產生同樣的輸出。

Random(-229985452).nextInt(27)產生的前六個數字:8, 5, 12, 12, 15, 0

Random(-147909649).nextInt(27)產生的前六個數字:23, 15, 18, 12, 4, 0

這樣,最終輸出的就是”hello world”。

五、為什么兩個時間戳相減(in 1927)得出一個奇怪的結果?

問題鏈接:

http://stackoverflow.com/questions/6841333/why-is-subtracting-these-two-times-in-1927-giving-a-strange-result

public static void main(String[] args) throws ParseException {SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String str3 = "1927-12-31 23:54:07";String str4 = "1927-12-31 23:54:08";Date sDt3 = sf.parse(str3);Date sDt4 = sf.parse(str4);long ld3 = sDt3.getTime() /1000;long ld4 = sDt4.getTime() /1000;System.out.println(ld4-ld3); }

按說上面的代碼最后的結果應該是1,但實際的輸出卻是353。其實,這是一個時區的問題。

1927年12月31號24:00,上海時間往回調整了5分鐘52秒,因此”1927-12-31 23:54:08”發生了兩次,Java將后面一次實例化成了本地的這個時間。因此和前一秒的差距成了353。

我們需要指出,如果你試著來運行這段代碼,結果并不一定是353。Jon Skeet指出了這一點,鏈接:

http://stackoverflow.com/a/6841479/5982245

在時區數據庫項目2014版中,這個改變的時間點改到了1900-12-31,因此成了344秒的差距。

六、無法被捕獲的ChuckNorrisException

問題鏈接:

http://stackoverflow.com/questions/13883166/uncatchable-chucknorrisexception

這里有一個很明顯的問題:如果有exception被拋出,但是沒有任何辦法去catch,那么應用會崩潰嗎?或者如這個問題所問:是否可以寫一段Java代碼讓一個假設的java.lang.ChuckNorrisException無法被捕獲。

答案是可以,但是這里有一個”但是”。你可以編譯一段代碼拋出一個ChuckNorrisException,但是在Runtime時動態生成一個并不繼承于Throwable接口的ChuckNorrisException類。當然,為了讓這個過程可以進行,你需要關閉掉字節碼驗證。jtahlborn給出了完整的解決辦法。鏈接:

http://stackoverflow.com/a/13883510/5982245

七、哈希表

哈希表是另外一個在StackOverflow上流行的問題系列。許多用戶都想要知道所有集合類之間的區別,什么時候該使用哪種集合。

迭代順序是主要考慮的因素。使用HashMap則忽略了所有的順序信息,也就是獲取元素的順序和你插入元素的順序是沒有任何關系的;使用TreeMap則會得到一個排序好的迭代集合;使用LinkedHashMap則是一個FIFO的順序。

如果你還是對這些感到困惑,這里有一個相關說明的圖表可以參考(Rebel Labs制作。鏈接:

http://zeroturnaround.com/wp-content/uploads/2016/04/Java-Collections-cheat-sheet.png

八、總結

對于Java,其實關鍵的不在于你懂多少,而是在于你可以一直學到更多的東西。

StackOverflow不僅在code上的一些問題可以幫助我們,也有助于我們回過頭來去深入地學習一些我們已經知道的知識。

原文:https://dwz.cn/Boy5tcHJ 譯文:https://dwz.cn/j1hgReGd

想知道更多?描下面的二維碼關注我

后臺回復”加群“獲取公眾號專屬群聊入口

【原創系列 | 精彩推薦】

  • Paxos、Raft不是一致性算法嘛?

  • 越說越迷糊的CAP

  • 分布式事務科普——初識篇

  • 分布式事務科普——終結篇

  • 面試官居然問我Raft為什么會叫做Raft!

  • 面試官給我挖坑:URI中的//有什么用

  • 面試官給我挖坑:a[i][j]和a[j][i]有什么區別?

  • 面試官給我挖坑:單機并發TCP連接數到底有多少?

  • 網關Zuul科普

  • 網關Spring Cloud?Gateway科普

  • Nginx架構原理科普

  • OpenResty概要及原理科普

  • 微服務網關 Kong 科普

  • 云原生網關Traefik科普

點個在看少個 bug?????

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的StackOverflow 上面最流行的 7 个 Java 问题!| 值得一看的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。