Java基礎(chǔ)面試題面經(jīng)整理(持續(xù)更新)

前提

臨近秋招,本博文主要整理最近各大企業(yè)面經(jīng)里的那些Java基礎(chǔ)面試題,并通過對比整合給出一份參考答案。并無按照特定順序,僅僅是提供了復(fù)習(xí)了之后測試掌握。文章的答案不一定絕對正確,如果有錯(cuò)誤的地方還望指出!

1、equals 和 == 的區(qū)別?

最直接,我們點(diǎn)開equals的源碼

publicbooleanequals(Object obj){return(this== obj);? ? }

我們可以發(fā)現(xiàn)equals也是用的==?來比較的,但是為什么還要說它們之間的區(qū)別呢?因?yàn)閑quals的方法可以根據(jù)我們的需要重寫。==如果比較的是兩個(gè)值類型的話,那么就是比較它們之間是否相等,如果是引用類型的話,那么就是比較它們之間的地址了。

2、為什么重寫equals一定要重寫hashcode?

默認(rèn)的hashcode方法是根據(jù)對象的內(nèi)存地址經(jīng)哈希算法得到的,如果不重寫的話,那么在兩個(gè)相同的對象在使用equals方法的時(shí)候就有可能不同。這在我們的map中的話,如果以對象為key的話,就會導(dǎo)致我們邏輯上的key相同卻有著不同的值!

3、Integer與int的==比較是怎么樣的?

首先看一下下面的比較

publicstaticvoidmain(String[] args){? ? ? ? Integer a =3;intb =3;? ? ? ? Integer c = Integer.valueOf(3);? ? ? ? Integer d =newInteger(3);? ? ? ? System.out.println(a == b);//輸出trueSystem.out.println(b == c);//輸出trueSystem.out.println(b == d);//輸出trueSystem.out.println(a == c);//輸出trueSystem.out.println(c == d);//輸出false}

我們的Integer在int比較的時(shí)候,會自動拆箱,再做值比較,所以返回true;

Integer之間的比較的話,除了new Integer()之外,其他比較都是同一段地址,而new的新對象則不是,所以返回的false。

4、接口和抽象類的區(qū)別?

接口中的所有方法都是抽象的,而抽象類可以有抽象的和非抽象的

類可以實(shí)現(xiàn)很多個(gè)接口,但只能繼承一個(gè)抽象類

類可以不實(shí)現(xiàn)抽象類和接口聲明的所有方法,但是該類必須聲明成抽象的

接口的成員方法默認(rèn)是public,而抽象類的成員可以是private,protected,public

JDK1.8開始,接口中可以包含default方法(可以進(jìn)行實(shí)現(xiàn)),但是抽象類沒有。

5、Java的異常處理機(jī)制,Error和Exception的區(qū)別?

二者都有共同的父類——Throwable!

Error:表示程序發(fā)生錯(cuò)誤,是程序無法處理的,不可恢復(fù)的,如OutOfMemoryError

Exception: 表示程序可處理的異常,又分為CheckedException(受檢異常)、UncheckedException(非受檢異常),受檢異常發(fā)生在編譯期,必須要使用try...catch 或者 throws捕獲或者拋出異常,否則編譯不通過(如IOException之類,多線程之類的);非受檢異常發(fā)生在運(yùn)行期,具有不確定性,主要由程序的邏輯問題引起的,在程序設(shè)計(jì)的時(shí)候要認(rèn)真考慮,盡量處理異常。(如NullPointException 參數(shù)值為null(空指針),IndexOutOfBoundsException 下標(biāo)參數(shù)值越界)

6、++和--操作是否為原子操作,為什么?

不是原子性操作。原子性的意思是操作不可分割,但是我們的++和--確實(shí)可以分為三個(gè)步驟(讀寫改)

從棧讀取我們的值

進(jìn)行加1的操作

將我們的值壓回棧

所以再多線程情況下,就會導(dǎo)致我們的自增或者自減不準(zhǔn)確!

7、面向?qū)ο蟮娜筇匦允鞘裁??請簡單介紹一下!

封裝、繼承、多態(tài)

封裝:?所謂封裝,也就是把客觀事物封裝成抽象的類,并且類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對象操作,對不可信的進(jìn)行信息隱藏。封裝是面向?qū)ο蟮奶卣髦?,是對象和類概念的主要特性?簡單的說,一個(gè)類就是一個(gè)封裝了數(shù)據(jù)以及操作這些數(shù)據(jù)的代碼的邏輯實(shí)體。在一個(gè)對象內(nèi)部,某些代碼或某些數(shù)據(jù)可以是私有的,不能被外界訪問。通過這種方式,對象對內(nèi)部數(shù)據(jù)提供了不同級別的保護(hù),以防止程序中無關(guān)的部分意外的改變或錯(cuò)誤的使用了對象的私有部分。

繼承:?所謂繼承是指可以讓某個(gè)類型的對象獲得另一個(gè)類型的對象的屬性的方法。它支持按級分類的概念。繼承是指這樣一種能力:它可以使用現(xiàn)有類的所有功能,并在無需重新編寫原來的類的情況下對這些功能進(jìn)行擴(kuò)展。 通過繼承創(chuàng)建的新類稱為“子類”或“派生類”,被繼承的類稱為“基類”、“父類”或“超類”。繼承的過程,就是從一般到特殊的過程。要實(shí)現(xiàn)繼承,可以通過“繼承”(Inheritance)和“組合”(Composition)來實(shí)現(xiàn)。繼承概念的實(shí)現(xiàn)方式有二類:實(shí)現(xiàn)繼承與接口繼承。實(shí)現(xiàn)繼承是指直接使用基類的屬性和方法而無需額外編碼的能力;接口繼承是指僅使用屬性和方法的名稱、但是子類必須提供實(shí)現(xiàn)的能力;

多態(tài):?所謂多態(tài)就是指一個(gè)類實(shí)例的相同方法在不同情形有不同表現(xiàn)形式。多態(tài)機(jī)制使具有不同內(nèi)部結(jié)構(gòu)的對象可以共享相同的外部接口。這意味著,雖然針對不同對象的具體操作不同,但通過一個(gè)公共的類,它們(那些操作)可以通過相同的方式予以調(diào)用。

8、Java中是如何具體實(shí)現(xiàn)多態(tài)的?

9、面向?qū)ο蠛兔嫦蜻^程的區(qū)別?

面向?qū)ο蠓椒ㄖ?,把?shù)據(jù)和數(shù)據(jù)操作放在一起,組成對象;對同類的對象抽 象出其共性組成類;類通過簡單的接口與外界發(fā)生聯(lián)系,對象和對象之間通過消 息進(jìn)行通信。而面向過程方法是以過程為中心的開發(fā)方法,它自頂向下順序進(jìn)行, 程序結(jié)構(gòu)按照功能劃分成若干個(gè)基本模塊,這些模塊形成樹狀結(jié)構(gòu)。

(過程)優(yōu)點(diǎn):性能比面向?qū)ο蟾撸驗(yàn)轭愓{(diào)用時(shí)需要實(shí)例化,開銷比較大,比較消耗源;比如嵌入式開發(fā)、Linux/Unix等一般采用面向過程開發(fā),性能是最重要的因素。缺點(diǎn):沒有面向?qū)ο笠拙S護(hù)、易復(fù)用、易擴(kuò)展。

(對象)優(yōu)點(diǎn):易維護(hù)、易復(fù)用、易擴(kuò)展,由于面向?qū)ο笥蟹庋b、繼承、多態(tài)性的特性,可以設(shè)計(jì)出低耦合的系統(tǒng)。缺點(diǎn):性能比面向過程低。

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

String:不可變字符序列

StringBuffer:可變字符序列、效率低、線程安全(使用Synchronized修飾)

StringBuilder:可變字符序列、效率高、線程不安全

字符串直接相加本質(zhì)也是轉(zhuǎn)換成StringBuilder調(diào)用append,但是因?yàn)闀a(chǎn)生大量的StringBuilder對象所以不如直接new一個(gè)StringBuilder來用效率高!

11、什么是面向函數(shù)式編程?

12、談?wù)剆tatic,final關(guān)鍵字?

13、談?wù)剉olatile、synchronized關(guān)鍵字?

談到這兩個(gè)關(guān)鍵字需要了解到JMM和內(nèi)存模型,可以看看我的另一篇【https://mp.weixin.qq.com/s/le8My8lmRMV_8rn7BTmKPA】

14、談?wù)勆羁截惡蜏\拷貝?

15、Java線程和系統(tǒng)線程的區(qū)別?

16、開多個(gè)Java進(jìn)程和多個(gè)線程的區(qū)別?

17、什么是同步與異步,阻塞與非阻塞?

18、多進(jìn)程之間如何進(jìn)行通信?

待更新

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容