溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

經(jīng)常被問(wèn)的JAVA面試題有哪些

發(fā)布時(shí)間:2022-01-12 21:57:19 來(lái)源:億速云 閱讀:140 作者:iii 欄目:編程語(yǔ)言

這篇文章主要介紹了經(jīng)常被問(wèn)的JAVA面試題有哪些的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇經(jīng)常被問(wèn)的JAVA面試題有哪些文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。

什么是值傳遞和引用傳遞?

值傳遞是對(duì)基本型變量而言的,傳遞的是該變量的一個(gè)副本,改變副本不影響原變量. 引用傳遞一般是對(duì)于對(duì)象型變量而言的,傳遞的是該對(duì)象地址的一個(gè)副本, 并不是原對(duì)象本身 。 一般認(rèn)為,java內(nèi)的傳遞都是值傳遞. java中實(shí)例對(duì)象的傳遞是引用傳遞 。

是否可以在static環(huán)境中訪問(wèn)非static變量?

static變量在Java中是屬于類的,它在所有的實(shí)例中的值是一樣的。當(dāng)類被Java虛擬機(jī)載入的時(shí)候,會(huì)對(duì)static變量進(jìn)行初始化。如果你的代碼嘗試不用實(shí)例來(lái)訪問(wèn)非static的變量,編譯器會(huì)報(bào)錯(cuò),因?yàn)檫@些變量還沒有被創(chuàng)建出來(lái),還沒有跟任何實(shí)例關(guān)聯(lián)上。

解釋內(nèi)存中的棧(stack)、堆(heap)和方法區(qū)(method area)的用法。

通常我們定義一個(gè)基本數(shù)據(jù)類型的變量,一個(gè)對(duì)象的引用,還有就是函數(shù)調(diào)用的現(xiàn)場(chǎng)保存都使用JVM中的??臻g;而通過(guò)new關(guān)鍵字和構(gòu)造器創(chuàng)建的對(duì)象則放在堆空間,堆是垃圾收集器管理的主要區(qū)域,由于現(xiàn)在的垃圾收集器都采用分代收集算法,所以堆空間還可以細(xì)分為新生代和老生代,再具體一點(diǎn)可以分為Eden、Survivor(又可分為From Survivor和To Survivor)、Tenured;方法區(qū)和堆都是各個(gè)線程共享的內(nèi)存區(qū)域,用于存儲(chǔ)已經(jīng)被JVM加載的類信息、常量、靜態(tài)變量、JIT編譯器編譯后的代碼等數(shù)據(jù);程序中的字面量(literal)如直接書寫的100、”hello”和常量都是放在常量池中,常量池是方法區(qū)的一部分,。棧空間操作起來(lái)最快但是棧很小,通常大量的對(duì)象都是放在堆空間,棧和堆的大小都可以通過(guò)JVM的啟動(dòng)參數(shù)來(lái)進(jìn)行調(diào)整,??臻g用光了會(huì)引發(fā)StackOverflowError,而堆和常量池空間不足則會(huì)引發(fā)OutOfMemoryError。

接口和抽象類的區(qū)別是什么?

從設(shè)計(jì)層面來(lái)說(shuō),抽象是對(duì)類的抽象,是一種模板設(shè)計(jì),接口是行為的抽象,是一種行為的規(guī)范。

Java提供和支持創(chuàng)建抽象類和接口。它們的實(shí)現(xiàn)有共同點(diǎn),不同點(diǎn)在于: **接口中所有的方法隱含的都是抽象的。而抽象類則可以同時(shí)包含抽象和非抽象的方法。 **

類可以實(shí)現(xiàn)很多個(gè)接口,但是只能繼承一個(gè)抽象類 類可以不實(shí)現(xiàn)抽象類和接口聲明的所有方法,當(dāng)然,在這種情況下,類也必須得聲明成是抽象的。

抽象類可以在不提供接口方法實(shí)現(xiàn)的情況下實(shí)現(xiàn)接口。 **Java接口中聲明的變量默認(rèn)都是final的。抽象類可以包含非final的變量。 Java接口中的成員函數(shù)默認(rèn)是public的。抽象類的成員函數(shù)可以是private,protected或者是public。 **

接口是絕對(duì)抽象的,不可以被實(shí)例化。抽象類也不可以被實(shí)例化,但是,如果它包含main方法的話是可以被調(diào)用的。 也可以參考JDK8中抽象類和接口的區(qū)別。

String和StringBuilder、StringBuffer的區(qū)別?

Java平臺(tái)提供了兩種類型的字符串:String和StringBuffer/StringBuilder,它們可以儲(chǔ)存和操作字符串。其中String是只讀字符串,也就意味著String引用的字符串內(nèi)容是不能被改變的。而StringBuffer/StringBuilder類表示的字符串對(duì)象可以直接進(jìn)行修改。StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,區(qū)別在于它是在單線程環(huán)境下使用的,因?yàn)樗乃蟹矫娑紱]有被synchronized修飾,因此它的效率也比StringBuffer要高。

如果兩個(gè)鍵的hashcode相同,你如何獲取值對(duì)象?

當(dāng)我們調(diào)用get()方法,HashMap會(huì)使用鍵對(duì)象的hashcode找到bucket位置,然后會(huì)調(diào)用keys.equals()方法去找到鏈表中正確的節(jié)點(diǎn),最終找到要找的值對(duì)象。

HashMap和Hashtable有什么區(qū)別?

1、HashMap是非線程安全的,HashTable是線程安全的。

2、HashMap的鍵和值都允許有null值存在,而HashTable則不行。

3、因?yàn)榫€程安全的問(wèn)題,HashMap效率比HashTable的要高。

4、Hashtable是同步的,而HashMap不是。因此,HashMap更適合于單線程環(huán)境,而Hashtable適合于多線程環(huán)境。

一般現(xiàn)在不建議用HashTable, ①是HashTable是遺留類,內(nèi)部實(shí)現(xiàn)很多沒優(yōu)化和冗余。②即使在多線程環(huán)境下,現(xiàn)在也有同步的ConcurrentHashMap替代,沒有必要因?yàn)槭嵌嗑€程而用HashTable。

如何決定選用HashMap還是TreeMap?

對(duì)于在Map中插入、刪除和定位元素這類操作,HashMap是最好的選擇。然而,假如你需要對(duì)一個(gè)有序的key集合進(jìn)行遍歷,TreeMap是更好的選擇?;谀愕腸ollection的大小,也許向HashMap中添加元素會(huì)更快,將map換為TreeMap進(jìn)行有序key的遍歷。

關(guān)于“經(jīng)常被問(wèn)的JAVA面試題有哪些”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“經(jīng)常被問(wèn)的JAVA面試題有哪些”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI