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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

收集20个经典的Java面试题

發(fā)布時(shí)間:2023/12/10 java 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 收集20个经典的Java面试题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

編輯搜圖

請(qǐng)點(diǎn)擊輸入圖片描述

1.什么是線程局部變量?

線程局部變量是局限于線程內(nèi)部的變量,屬于線程自身所有,不在多個(gè)線程間共享。Java 提供 ThreadLocal 類來(lái)支持線程局部變量,是一種實(shí)現(xiàn)線程安全的方式。但是在管理環(huán)境下(如 web 服務(wù)器)使用線程局部變量的時(shí)候要特別小心,在這種情況下,工作線程的生命周期比任何應(yīng)用變量的生命周期都要長(zhǎng)。任何線程局部變量一旦在工作完成后沒(méi)有釋放,Java 應(yīng)用就存在內(nèi)存泄露的風(fēng)險(xiǎn)。

2.用 wait-notify 寫一段代碼來(lái)解決生產(chǎn)者-消費(fèi)者問(wèn)題?

請(qǐng)參考答案中的示例代碼。只要記住在同步塊中調(diào)用 wait() 和 notify()方法,如果阻塞,通過(guò)循環(huán)來(lái)測(cè)試等待條件。

3. 用 Java 寫一個(gè)線程安全的單例模式(Singleton)?

請(qǐng)參考答案中的示例代碼,這里面一步一步教你創(chuàng)建一個(gè)線程安全的 Java 單例類。當(dāng)我們說(shuō)線程安全時(shí),意思是即使初始化是在多線程環(huán)境中,仍然能保證單個(gè)實(shí)例。Java 中,使用枚舉作為單例類是最簡(jiǎn)單的方式來(lái)創(chuàng)建線程安全單例模式的方式。

4.Java 中 sleep 方法和 wait 方法的區(qū)別?

雖然兩者都是用來(lái)暫停當(dāng)前運(yùn)行的線程,但是 sleep() 實(shí)際上只是短暫停頓,因?yàn)樗粫?huì)釋放鎖,而 wait() 意味著條件等待,這就是為什么該方法要釋放鎖,因?yàn)橹挥羞@樣,其他等待的線程才能在滿足條件時(shí)獲取到該鎖。

5.什么是不可變對(duì)象(immutable object)?Java 中怎么創(chuàng)建一個(gè)不可變對(duì)象?

不可變對(duì)象指對(duì)象一旦被創(chuàng)建,狀態(tài)就不能再改變。任何修改都會(huì)創(chuàng)建一個(gè)新的對(duì)象,如 String、Integer及其它包裝類。詳情參見(jiàn)答案,一步一步指導(dǎo)你在 Java 中創(chuàng)建一個(gè)不可變的類。

6.我們能創(chuàng)建一個(gè)包含可變對(duì)象的不可變對(duì)象嗎?

是的,我們是可以創(chuàng)建一個(gè)包含可變對(duì)象的不可變對(duì)象的,你只需要謹(jǐn)慎一點(diǎn),不要共享可變對(duì)象的引用就可以了,如果需要變化時(shí),就返回原對(duì)象的一個(gè)拷貝。最常見(jiàn)的例子就是對(duì)象中包含一個(gè)日期對(duì)象的引用。

編輯搜圖

請(qǐng)點(diǎn)擊輸入圖片描述

7.Java 中應(yīng)該使用什么數(shù)據(jù)類型來(lái)代表價(jià)格?

如果不是特別關(guān)心內(nèi)存和性能的話,使用BigDecimal,否則使用預(yù)定義精度的 double 類型。

8.怎么將 byte 轉(zhuǎn)換為 String?

可以使用 String 接收 byte[] 參數(shù)的構(gòu)造器來(lái)進(jìn)行轉(zhuǎn)換,需要注意的點(diǎn)是要使用的正確的編碼,否則會(huì)使用平臺(tái)默認(rèn)編碼,這個(gè)編碼可能跟原來(lái)的編碼相同,也可能不同。

9.Java 中怎樣將 bytes 轉(zhuǎn)換為 long 類型?

????1.不借助其他任何已經(jīng)有的類,直接進(jìn)行轉(zhuǎn)換。

????2.借助java.nio.ByteBuffer實(shí)現(xiàn),只要將byte[]轉(zhuǎn)換為ByteBuffer就可以實(shí)現(xiàn)所有primitive類型的數(shù)據(jù)讀取。

????3.借助java.io.DataInputStream實(shí)現(xiàn),只要將byte[]轉(zhuǎn)換為DataInputStream就可以實(shí)現(xiàn)所有primitive類型的數(shù)據(jù)讀取。

10.我們能將 int 強(qiáng)制轉(zhuǎn)換為 byte 類型的變量嗎?如果該值大于 byte 類型的范圍,將會(huì)出現(xiàn)什么現(xiàn)象?

是的,我們可以做強(qiáng)制轉(zhuǎn)換,但是 Java 中 int 是 32 位的,而 byte 是 8 位的,所以,如果強(qiáng)制轉(zhuǎn)化是,int 類型的高 24 位將會(huì)被丟棄,byte 類型的范圍是從 -128 到 128。

11.存在兩個(gè)類,B 繼承 A,C 繼承 B,我們能將 B 轉(zhuǎn)換為 C 么?如 C = (C) B;

不可以

12.哪個(gè)類包含 clone 方法?是 Cloneable 還是 Object?

java.lang.Cloneable 是一個(gè)標(biāo)示性接口,不包含任何方法,clone 方法在 object 類中定義。并且需要知道 clone() 方法是一個(gè)本地方法,這意味著它是由 c 或 c++ 或 其他本地語(yǔ)言實(shí)現(xiàn)的。

13.Java 中 ++ 操作符是線程安全的嗎?

不是線程安全的操作。它涉及到多個(gè)指令,如讀取變量值,增加,然后存儲(chǔ)回內(nèi)存,這個(gè)過(guò)程可能會(huì)出現(xiàn)多個(gè)線程交差。

14.a = a + b 與 a += b 的區(qū)別

+= 隱式的將加操作的結(jié)果類型強(qiáng)制轉(zhuǎn)換為持有結(jié)果的類型。如果兩這個(gè)整型相加,如 byte、short 或者 int,首先會(huì)將它們提升到 int 類型,然后在執(zhí)行加法操作。如果加法操作的結(jié)果比 a 的最大值要大,則 a+b 會(huì)出現(xiàn)編譯錯(cuò)誤,但是 a += b 沒(méi)問(wèn)題,如下:

byte a = 127;

byte b = 127;

b = a + b; // error : cannot convert from int to byte

b += a; // ok

(譯者注:這個(gè)地方應(yīng)該表述的有誤,其實(shí)無(wú)論 a+b 的值為多少,編譯器都會(huì)報(bào)錯(cuò),因?yàn)?a+b 操作會(huì)將 a、b 提升為 int 類型,所以將 int 類型賦值給 byte 就會(huì)編譯出錯(cuò))

15.我能在不進(jìn)行強(qiáng)制轉(zhuǎn)換的情況下將一個(gè) double 值賦值給 long 類型的變量嗎?

不行,你不能在沒(méi)有強(qiáng)制類型轉(zhuǎn)換的前提下將一個(gè) double 值賦值給 long 類型的變量,因?yàn)?double 類型的范圍比 long 類型更廣,所以必須要進(jìn)行強(qiáng)制轉(zhuǎn)換。

16. 3*0.1 == 0.3 將會(huì)返回什么?true 還是 false?

false,因?yàn)橛行└↑c(diǎn)數(shù)不能完全精確的表示出來(lái)。

17.int 和 Integer 哪個(gè)會(huì)占用更多的內(nèi)存?

Integer 對(duì)象會(huì)占用更多的內(nèi)存。Integer 是一個(gè)對(duì)象,需要存儲(chǔ)對(duì)象的元數(shù)據(jù)。但是 int 是一個(gè)原始類型的數(shù)據(jù),所以占用的空間更少。

18.為什么 Java 中的 String 是不可變的(Immutable)?

Java 中的 String 不可變是因?yàn)?Java 的設(shè)計(jì)者認(rèn)為字符串使用非常頻繁,將字符串設(shè)置為不可變可以允許多個(gè)客戶端之間共享相同的字符串。更詳細(xì)的內(nèi)容參見(jiàn)答案。

19.我們能在 Switch 中使用 String 嗎?

從 Java 7 開(kāi)始,我們可以在 switch case 中使用字符串,但這僅僅是一個(gè)語(yǔ)法糖。內(nèi)部實(shí)現(xiàn)在 switch 中使用字符串的 hash code。

20.Java 中的構(gòu)造器鏈?zhǔn)鞘裁?#xff1f;

當(dāng)你從一個(gè)構(gòu)造器中調(diào)用另一個(gè)構(gòu)造器,就是Java 中的構(gòu)造器鏈。這種情況只在重載了類的構(gòu)造器的時(shí)候才會(huì)出現(xiàn)。

文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠(yuǎn)程辦公:常用的遠(yuǎn)程協(xié)助軟件,你都知道嗎?51單片機(jī)程序下載、ISP及串口基礎(chǔ)知識(shí)硬件:斷路器、接觸器、繼電器基礎(chǔ)知識(shí)

總結(jié)

以上是生活随笔為你收集整理的收集20个经典的Java面试题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。