大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 兩道Java中常見面試題,快來挑戰下吧

兩道Java中常見面試題,快來挑戰下吧

更新時間:2020-04-30 11:17:46 來源:動力節點 瀏覽2138次

    為什么char數組比Java中的String更適合存儲密碼?

    另一個基于String的棘手Java問題,相信我只有很少的Java程序員可以正確回答這個問題。這是一個真正艱難的核心Java面試問題,并且需要對String的扎實知識才能回答這個問題。

    這是最近在Java面試中向我的一位朋友詢問的問題。他正在接受技術主管職位的面試,并且有超過6年的經驗。如果你還沒有遇到過這種情況,那么字符數組和字符串可以用來存儲文本數據,但是選擇一個而不是另一個很難。但正如我的朋友所說,任何與String相關的問題都必須對字符串的特殊屬性有一些線索,比如不變性,他用它來說服訪提問的人。在這里,我們將探討為什么你應該使用char[]存儲密碼而不是String的一些原因。

    字符串:

    1)由于字符串在Java中是不可變的,如果你將密碼存儲為純文本,它將在內存中可用,直到垃圾收集器清除它.并且為了可重用性,會存在String在字符串池中,它很可能會保留在內存中持續很長時間,從而構成安全威脅。

    由于任何有權訪問內存轉儲的人都可以以明文形式找到密碼,這是另一個原因,你應該始終使用加密密碼而不是純文本。由于字符串是不可變的,所以不能更改字符串的內容,因為任何更改都會產生新的字符串,而如果你使用char[],你就可以將所有元素設置為空白或零。因此,在字符數組中存儲密碼可以明顯降低竊取密碼的安全風險。

    2)Java本身建議使用JPasswordField的getPassword()方法,該方法返回一個char[]和不推薦使用的getTex()方法,該方法以明文形式返回密碼,由于安全原因。應遵循Java團隊的建議,堅持標準而不是反對它。

    3)使用String時,總是存在在日志文件或控制臺中打印純文本的風險,但如果使用Array,則不會打印數組的內容而是打印其內存位置。雖然不是一個真正的原因,但仍然有道理。

    StringstrPassword=“Unknown”;

    char[]charPassword=newchar[]{'U','n','k','w','o','n'};

    System.out.println(“字符密碼:”+strPassword);

    System.out.println(“字符密碼:”+charPassword);

    輸出

    字符串密碼:Unknown

    字符密碼:[C@110b053

    如何使用雙重檢查鎖定在Java中創建線程安全的單例?

    這個Java問題也常被問:什么是線程安全的單例,你怎么創建它。好吧,在Java5之前的版本,使用雙重檢查鎖定創建單例Singleton時,如果多個線程試圖同時創建Singleton實例,則可能有多個Singleton實例被創建。從Java5開始,使用Enum創建線程安全的Singleton很容易。但如果面試官堅持雙重檢查鎖定,那么你必須為他們編寫代碼。記得使用volatile變量。

    為什么枚舉單例在Java中更好

    枚舉單例是使用一個實例在Java中實現單例模式的新方法。雖然Java中的單例模式存在很長時間,但枚舉單例是相對較新的概念,在引入Enum作為關鍵字和功能之后,從Java5開始在實踐中。本文與之前關于Singleton的內容有些相關,其中討論了有關Singleton模式的面試中的常見問題,以及10個Java枚舉示例,其中我們看到了如何通用枚舉可以。這篇文章是關于為什么我們應該使用Eeame作為Java中的單例,它比傳統的單例方法相比有什么好處等等。

    Java枚舉和單例模式

    Java中的枚舉單例模式是使用枚舉在Java中實現單例模式。單例模式在Java中早有應用,但使用枚舉類型創建單例模式時間卻不長.如果感興趣,你可以了解下構建者設計模式和裝飾器設計模式。

    1)枚舉單例易于書寫

    這是迄今為止最大的優勢,如果你在Java5之前一直在編寫單例,你知道,即使雙檢查鎖定,你仍可以有多個實例。雖然這個問題通過Java內存模型的改進已經解決了,從Java5開始的volatile類型變量提供了保證,但是對于許多初學者來說,編寫起來仍然很棘手。與同步雙檢查鎖定相比,枚舉單例實在是太簡單了。如果你不相信,那就比較一下下面的傳統雙檢查鎖定單例和枚舉單例的代碼:

    在Java中使用枚舉的單例

    這是我們通常聲明枚舉的單例的方式,它可能包含實例變量和實例方法,但為了簡單起見,我沒有使用任何實例方法,只是要注意,如果你使用的實例方法且該方法能改變對象的狀態的話,則需要確保該方法的線程安全。默認情況下,創建枚舉實例是線程安全的,但Enum上的任何其他方法是否線程安全都是程序員的責任。

兩道Java中常見面試題,快來挑戰下吧

    你可以通過EasySingleton.INSTANCE來處理它,這比在單例上調用getInstance()方法容易得多。

    具有雙檢查鎖定的單例示例

    下面的代碼是單例模式中雙重檢查鎖定的示例,此處的getInstance()方法檢查兩次,以查看INSTANCE是否為空,這就是為什么它被稱為雙檢查鎖定模式,請記住,雙檢查鎖定是代理之前Java5,但Java5內存模型中易失變量的干擾,它應該工作完美。

兩道Java中常見面試題,快來挑戰下吧

    你可以調用DoubleCheckedLockingSingleton.getInstance()來獲取此單例類的訪問權限。

    現在,只需查看創建延遲加載的線程安全的Singleton所需的代碼量。使用枚舉單例模式,你可以在一行中具有該模式,因為創建枚舉實例是線程安全的,并且由JVM進行。

    人們可能會爭辯說,有更好的方法來編寫Singleton而不是雙檢查鎖定方法,但每種方法都有自己的優點和缺點,就像我最喜歡在類加載時創建的靜態字段Singleton,如下面所示,但請記住,這不是一個延遲加載單例:

    單例模式用靜態工廠方法

    這是我最喜歡的在Java中影響Singleton模式的方法之一,因為Singleton實例是靜態的,并且最后一個變量在類首次加載到內存時初始化,因此實例的創建本質上是線程安全的。

兩道Java中常見面試題,快來挑戰下吧

    你可以調用Singleton.getSingleton()來獲取此類的訪問權限。

    2)枚舉單例自行處理序列化

    傳統單例的另一個問題是,一旦實現可序列化接口,它們就不再是Singleton,因為readObject()方法總是返回一個新實例,就像Java中的構造函數一樣。通過使用readResolve()方法,通過在以下示例中替換Singeton來避免這種情況:

    兩道Java中常見面試題,快來挑戰下吧

    如果Singleton類保持內部狀態,這將變得更加復雜,因為你需要標記為transient(不被序列化),但使用枚舉單例,序列化由JVM進行。

    3)創建枚舉實例是線程安全的

    如第1點所述,因為Enum實例的創建在默認情況下是線程安全的,你無需擔心是否要做雙重檢查鎖定。

    總之,在保證序列化和線程安全的情況下,使用兩行代碼枚舉單例模式是在Java5以后的世界中創建Singleton的最佳方式。你仍然可以使用其他流行的方法,如你覺得更好,歡迎討論。

 以上就是動力節點java培訓機構的小編針對“兩道Java中常見面試題,快來挑戰下吧”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 成人区精品一区二区毛片不卡 | 狠狠做狠狠做综合日日 | h片在线免费 | 特大毛片| 国产精品久久亚洲不卡动漫 | 中文字幕日韩欧美一区二区三区 | 日韩1| a毛片全部免费播放 | 日日摸夜夜添夜夜添97 | 亚洲一区二区中文字幕 | 日韩中文字幕精品 | 66av99精品福利视频在线 | 四虎影视永久费观看在线 | 国产一区二区亚洲精品 | 中文字幕免费视频 | 午夜私人影院粉色视频我要 | 国产欧美在线播放 | 亚洲伊人久久综合一区二区 | 成人日批视频 | 亚洲精品一区二区在线观看 | 亚洲久本草在线中文字幕 | 青青青视频自偷自拍视频1 青青青手机版视频在线观看 | 国产精品久久久久久久久鸭 | 一级特级欧美午夜片免费观看 | 国产色产综合色产在线观看视频 | 免费国产一区二区三区 | 日韩国产欧美精品综合二区 | 欧美一欧美一区二三区性 | 久久人人爽人人爽 | 亚洲午夜久久影院 | 欧美一级特黄毛片免费 | 久久伊人中文字幕 | 美美女高清毛片视频黄的一免费 | 亚洲成人免费在线视频 | 国产一区二区不卡免费观在线 | 国产精品毛片一区 | 奇米影视999| 在线视频一区二区三区四区 | 久久一日本道色综合久久 | 精品国免费一区二区三区 | 91精品国产综合成人 |