天天看點

面試題面試

面試

後期繼續更新

面試寶典01-Java基礎

1、Java類型是什麼?基本類型和引用類型,Java8大基本資料類型是什麼?

byte 有1個位元組、short 有2個位元組、int 有4個位元組、long 有8個位元組、

float 有4個位元組、double 有8個位元組、boolean 有1個位元組、char 有2個位元組、1個位元組=8位 byte 最小值負128、最大值正127

2、引用類型是什麼?

類、接口、數組、枚舉、字元串

強,弱,虛,軟是java執行gc也就是垃圾回收機制判斷對象是否存活, 在jdk1.2之後把對象的引用分為這四個等級來判斷是否回收主要是這個作用

3.int 與 Integer 的差別?

int 是8大基本資料類型,預設值是0

Integer 是包裝類,預設值是null

int 不能用在泛型裡面,而Integer 可以使用在泛型裡面

4、什麼是裝箱?什麼是裝箱?

裝箱就是 自動将基本資料類型轉換為包裝器類型

拆箱就是 自動将包裝器類型轉換為基本資料類型

5、& 和 雙& 差別?

& : 如果A表達式為false, 也會判斷B表達式, 再傳回false

&& : 如果A表達式為false, 則不再判斷B表達式, 直接傳回false//有短路效果

5、== 和 equals 方法究竟有什麼差別?

如果用==去比較倆個基本資料類型int a 和int b, 它是判斷這倆個值的結果是否相等, 如果是引用類型String a 和String b, 它是判斷記憶體位址是否相同

equals是判斷string a 和string b 的值内容是否相等,不比較記憶體位址

6、hashcode與equals的差別?

如果比較倆個值他們的HashCode相等, 對象内容不一定相等

如果使用equals比較2個對象的内容相同,那麼HashCode一定相等

7、為什麼重寫equals方法後,一定要重寫hashcode?

因為隻重寫equals,不重寫hashcode的話,就算比較這倆個值的内容相等, HashCode也不一定相等

8、使用 final關鍵字修飾一個變量時,是引用不能變,還是引用的對象不能變?(A=10)

在堆記憶體當中記憶體位址是不能改變的,但是對象的内容是可以改變的

9、final, finally, finalize 的差別是什麼?

final 它是用于聲明屬性不可變,方法不可被重寫,類不可被繼承

内部類如果要通路局部變量的話,它局部變量必須定義成 final 類型

finally 它是寫在try{}cache{}後面的,表示有異常總是執行

finalize 是Object 類的一個方法, 當垃圾回收機制他不定時去回收垃圾的時候,它就會調用這個方法

10、靜态變量和執行個體變量的差別?(意思就是private static String A 和private String B的差別?)

靜态變量可以直接用類名.點來引用, 執行個體變量必須建立對象才能使用

11、static修飾的方法能否調用非static方法的?

static方法不能通路非static方法, 非static方法可以通路static方法

12、請說出作用域 public, private, protected,以及不寫(friendly)時的差別?

不寫為預設修飾符 friendly 修飾。

  • public 在目前類、同一包下、子孫類、其他包 都可以使用
  • protected 在目前類、同一包下、子孫類 可使用
  • friendly 在目前類、同一包下、可使用
  • private 在僅目前類中可使用。

13、面向對象的三種狀态?

封裝,繼承,多态

14、重載與重寫差別?

重載是指同一類中, 方法名相同, 但是參數或者個數不同

重寫是指子類重寫父類的方法

15、接口與抽象類的差別?

  • 接口的關鍵字是interface, 抽象類的關鍵字是abstract
  • 接口和抽象類都不能被執行個體化(new)
  • 接口中不能有私有成員, 抽象類中可以有私有成員//private int a
  • 接口中定義成員都是public static final 修飾的, 抽象類沒有
  • 接口中不能有靜态方法和構造函數, 抽象類中可以有靜态方法和構造函數

16、String、StringBuffer與StringBuilder的差別?

  • String 是字元串常量,是不可變的,是以對于每一次+=指派都會建立一個新的對象
  • StringBuffer 和StringBuilder 是字元串變量, 都是可變的,當進行字元串拼接時采用append 方法,在原來的基礎上進行追加,是以性能比String 要高
  • StringBuffer 是線程安全的, 執行效率低
  • StringBuilder 是線程非安全的, 執行效率高

17、所有的類都繼承于object類,你用過的object類的直接子類有哪些,object類常用的方法有哪些?

  • 1.clone方法
  • 2.getClass方法
  • 3.toString方法
  • 4.finalize方法
  • 5.equals方法

18、數組有沒有length() 這個方法? String有沒有length() 這個方法?

答:數組沒有length() 這個方法,有length的屬性。String有length() 這個方法。

hashCode方法

wait方法

notify方法

notifyAll方法

19、反射了解嗎?反射如何擷取方法?

有3種

  • 第1種是類型.class
  • 第2種是對象.getClass
  • 第3種是class.forname(權限類名)

20、反射的作用是什麼?

  • 在運作狀态中, 反射可以動态擷取一個類的所有方法和屬性

    反射的優點

  • 可以動态擷取, 提高程式的靈活性和擴充性, 解耦合

    反射的缺點

    性能差, 反射不安全, 别人可以通過反序列化攻擊你的程式

21、Java序列化的作用是什麼?

序列化是将一個對象序列化到硬碟中

反序列化是從硬碟中反序列化對象

Java序列化的協定有哪些?

json、hessian

22、Error 和Exception的差別是什麼?

  • Error和Exception都是繼承Throwable類, java中隻有Throwable類型的執行個體才可以被抛出或者被捕獲
  • Error是java運作中不可預料異常情況, 比如系統中的錯誤,程式是無法處理這些錯誤的,比如系統崩潰,虛拟機錯誤,記憶體溢出
  • Exception是指java程式運作中可以預料的異常情況, 我們可以捕獲這個異常, 并且對這個異常進行業務處理, 使我們程式恢複運作

23、CheckedException 和RuntimeException有什麼差別?

  • Exception也分為檢查異常CheckedException和非檢查異常RuntimeException
  • 檢查異常CheckedException是指編譯時異常, 我們需要顯示的捕獲
  • 非檢查異常RuntimeException是指運作時異常, 我們不需要捕獲

24、throws 和throw有什麼差別?

  • throws是用在方法上的, 表示可能會出現異常
  • throw是用在函數裡的, 表示抛出異常

25、運作時異常和一般異常有什麼異常?

  • 運作時異常就是在代碼運作時報錯
  • 一般異常就是編譯時報錯