面試大廠90%會被問到的Java面試題(附答案)

面向?qū)ο蟮娜齻€特征
封裝,繼承,多態(tài)
多態(tài)的好處,代碼中如何實現(xiàn)多態(tài),虛擬機(jī)中如何實現(xiàn)多態(tài)
允許不同類對象對同一消息作出相應(yīng),好處如下:
可替換性:多態(tài)對已存在的代碼具有可替換性
可擴(kuò)充性:增加新的子類不會影響已經(jīng)存在的類結(jié)構(gòu)
接口性:多態(tài)是超類通過方法簽名,向子類提供一個接口,由子類完善或重寫來實現(xiàn)
靈活性
簡化性
代碼中:接口實現(xiàn),繼承父類重寫方法,同一類中方法重載
虛擬機(jī)中:動態(tài)綁定技術(shù)(dynamic binding),執(zhí)行期間判斷所引用對象的實際類型,根據(jù)實際類型調(diào)用對應(yīng)的方法
接口的意義,抽象類的意義
接口:規(guī)范,拓展,回調(diào)
抽象類:為其他子類提供一個公共的類型;封裝子類中重復(fù)定義個內(nèi)容;定義抽象方法,子類雖然有不同的實現(xiàn),但是定義時是一致的
父類的靜態(tài)方法能否被子類重寫
不能。重寫只適用于實例方法,不能用于靜態(tài)方法,而子類當(dāng)中含有和父類相同簽名的靜態(tài)方法,我們一般稱之為隱藏。
什么是不可變對象
不可變對象指對象一旦被創(chuàng)建,狀態(tài)就不能再改變。任何修改都會創(chuàng)建一個新的對象,如String,Integer等其他包裝類。
靜態(tài)變量和實例變量的區(qū)別
靜態(tài)變量存在方法區(qū),屬于類所有。實例變量存儲在堆中,其引用存在當(dāng)前線程棧。
能否創(chuàng)建一個包含可變對象的不可變對象
可以,需要注意不要共享可變對象的引用,如果需要變化時,就返回原對象的一個拷貝。舉例:日期對象。
Java創(chuàng)建對象的幾種方式
new,反射,clone(),通過序列化機(jī)制
Switch能否使用String做參數(shù),能否作用在byte,long上
Java7以前不能使用String做參數(shù),可以使用byte,short,char,int及封裝類和枚舉,Java7之后可以使用String,一直不能用long
說說string的intern()方法
intern()方法會先從常量池中查詢是否存在該常量值,如果不存在則創(chuàng)建,否則直接放回
Object有哪些公用方法
euqals(),toString(),clone(),wait(),notify(),nofifyAll(),getClass()
Java中的四種引用
強(qiáng)引用,軟引用,弱引用,虛引用。不同的引用類型主要體現(xiàn)在GC上:
強(qiáng)引用:如果一個對象具有強(qiáng)引用,它就不會被垃圾回收器回收。即使當(dāng)前內(nèi)存空間不足,JVM也不會回收它,而是拋出 OutOfMemoryError 錯誤,使程序異常終止。如果想中斷強(qiáng)引用和某個對象之間的關(guān)聯(lián),可以顯式地將引用賦值為null,這樣一來的話,JVM在合適的時間就會回收該對象。
軟引用:在使用軟引用時,如果內(nèi)存的空間足夠,軟引用就能繼續(xù)被使用,而不會被垃圾回收器回收,只有在內(nèi)存不足時,軟引用才會被垃圾回收器回收。
弱引用:具有弱引用的對象擁有的生命周期更短暫。因為當(dāng) JVM 進(jìn)行垃圾回收,一旦發(fā)現(xiàn)弱引用對象,無論當(dāng)前內(nèi)存空間是否充足,都會將弱引用回收。不過由于垃圾回收器是一個優(yōu)先級較低的線程,所以并不一定能迅速發(fā)現(xiàn)弱引用對象。
虛引用:顧名思義,就是形同虛設(shè),如果一個對象僅持有虛引用,那么它相當(dāng)于沒有引用,在任何時候都可能被垃圾回收器回收。
WeakReference與SoftReference的區(qū)別
雖然 WeakReference 與 SoftReference 都有利于提高 GC 和 內(nèi)存的效率,但是 WeakReference ,一旦失去最后一個強(qiáng)引用,就會被 GC 回收,而軟引用雖然不能阻止被回收,但是可以延遲到 JVM 內(nèi)存不足的時候。
為什么要有不同的引用類型
不像C語言,我們可以控制內(nèi)存的申請和釋放,在Java中有時候我們需要適當(dāng)?shù)目刂茖ο蟊换厥盏臅r機(jī),因此就誕生了不同的引用類型,可以說不同的引用類型實則是對GC回收時機(jī)不可控的妥協(xié)。有以下幾個使用場景可以充分的說明:
利用軟引用和弱引用解決OOM問題:用一個HashMap來保存圖片的路徑和相應(yīng)圖片對象關(guān)聯(lián)的軟引用之間的映射關(guān)系,在內(nèi)存不足時,JVM會自動回收這些緩存圖片對象所占用的空間,從而有效地避免了OOM的問題.
通過軟引用實現(xiàn)Java對象的高速緩存:比如我們創(chuàng)建了一Person的類,如果每次需要查詢一個人的信息,哪怕是幾秒中之前剛剛查詢過的,都要重新構(gòu)建一個實例,這將引起大量Person對象的消耗,并且由于這些對象的生命周期相對較短,會引起多次GC影響性能。此時,通過軟引用和 HashMap 的結(jié)合可以構(gòu)建高速緩存,提供性能。
Java中==和equals()的區(qū)別,equals()和hashcode()的區(qū)別及聯(lián)系
==是運(yùn)算符,比較兩個變量是否相等,而equals是Object類的方法,用來比較兩個對象是否相等。
默認(rèn)equals方法比較兩個對象的地址,此時結(jié)果相同,如果要比較內(nèi)容,則要重寫equals方法
hashcode()是Object類的一個方法,返回一個hash值,如果equals()相同則hashcode()相同,反之不然。
有沒有可能兩個不相等的對象有相同的hashcode
有可能,兩個不相等的對象可能有相同的hashcode值,只就是hashmap中會有沖突,如果對象相等,則hashcode相等,反之不然
可以在hashcode中使用隨機(jī)數(shù)字嗎
不可以,hashcode必須是相同的值
a==b與a.equals(b)有什么區(qū)別
如果a和b都是對象,a==b比較的是引用,只有當(dāng)a和b指向堆中同一個對象才會返回true,而a.equals(b)進(jìn)行邏輯比較,通常呀哦重寫該方法提供邏輯性一個的比。
3*0.1==0.3返回值是什么
false,因為有些浮點數(shù)不能精確的表示出來
a=a+b與a+=b有什么區(qū)別嗎
+= 操作符會隱式轉(zhuǎn)換,例如下題
short s1 = 1;s1 = s1 +1;該代碼是否有錯誤,如果有錯誤怎么修改
有錯誤,s1 = (short)(s1+1);
short s1 = 1;s1+= 1是否有錯誤,如果有錯誤怎么修改
+=操作符會自動對右邊的表達(dá)式結(jié)果強(qiáng)轉(zhuǎn)匹配左邊的數(shù)據(jù)類型,所以沒錯
&與&&的區(qū)別
前者是位操作,后者是邏輯運(yùn)算符
一個Java內(nèi)部可以有類?(非內(nèi)部類)
一個Java內(nèi)部只能有一個public的類,可以有多個default的類
如何正確的退出多層嵌套循環(huán)
使用標(biāo)號和break;
內(nèi)部類的作用
內(nèi)部類提供了更好的封裝,除了該外圍類,其他類都不能訪問
final,finally,finalize的不同之處
fianl是一個修飾符,可以修飾類,方法,變量的。finally是一個關(guān)鍵字,捕獲異常是與try連用的,一定會執(zhí)行。finalize是在對象被回收之前調(diào)用的方法,給對象自己最后一個復(fù)活的機(jī)會,但是什么時候調(diào)用finalize沒有保證
clone()是哪個類的方法
java.lang.Cloneable的一個標(biāo)示性接口,不包含任何方法,clone方法在object中定義,clone()方法是一個本地方法,是由c或c++實現(xiàn)的
深拷貝和淺拷貝的區(qū)別是什么
淺拷貝:僅僅復(fù)制所考慮的對象,而不復(fù)制它引用的對象
深拷貝:所有的對象都復(fù)制
static有哪些用法
靜態(tài)變量和靜態(tài)方法,被類實例所共享。
靜態(tài)塊,初始化操作。
修飾內(nèi)部類,為靜態(tài)內(nèi)部類
導(dǎo)包,指定導(dǎo)入某個類中的靜態(tài)資源,并且不需要使用類名
final有哪些用法
被final修飾的方法不能被繼承,修飾的方法不能被重寫,修飾的變量不能被改變。被final修飾的方法,JVM會嘗試將其內(nèi)關(guān)聯(lián),以提高運(yùn)行效率,被修飾的變量會在編譯階段存在常量池中。
編譯器對final域要遵守兩個重排規(guī)則:
1,在構(gòu)造器內(nèi)對一個final域的寫入,與隨后把這個構(gòu)造對象的引用賦值給一個引用變量,這兩個操作之間不能重排序
2,初次讀一個包含final域?qū)ο蟮囊?,與隨后初次讀這個final域,這兩個操作之間不能重排序
到此這篇關(guān)于面試大廠90%會被問到的Java面試題(附答案)的文章就介紹到這了,更多相關(guān)Java面試題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
三年經(jīng)驗網(wǎng)易、滴滴、點我Java崗面試經(jīng)驗匯總
這篇文章主要介紹了三年經(jīng)驗網(wǎng)易、滴滴、點我Java崗面試經(jīng)驗匯總,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-06-12- 本文是小編給大家收藏整理的關(guān)于java基礎(chǔ)面試題小結(jié),在面試中經(jīng)常會被問題,今天小編特此整理把內(nèi)容分享到腳本之家平臺,需要的朋友參考下吧2020-05-19
史上最全阿里Java面試題目大匯總(強(qiáng)烈建議收藏)
這篇文章主要介紹了史上最全阿里Java面試題目大匯總,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-05-08- 這篇文章主要介紹了最全Java面試208題,涵蓋大廠必考范圍,熟悉本文中列出的知識點會大大增加通過前兩輪技術(shù)面試的幾率,感興趣的可以了解一下2020-05-07
- 這篇文章主要介紹了2020年最新版Java面試題大全,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-04-16
- 這篇文章主要介紹了100+經(jīng)典Java面試題及答案解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)2020-04-09
- 這篇文章主要介紹了面試百度、阿里、騰訊,這134道Java面試題你會多少,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-03-26
- 這篇文章主要介紹了85道Java微服務(wù)面試題整理,助力2020面試 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-03-13
最新115道華為、京東、滴滴、美團(tuán)精選Java面試題整理
這篇文章主要介紹了最新115道華為、京東、滴滴、美團(tuán)精選Java面試題整理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-03-042萬字Java并發(fā)編程面試題整理(含答案,建議收藏)
這篇文章主要介紹了2萬字Java并發(fā)編程面試題整理(含答案,建議收藏),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-02-13