2018年JAVA開發工程師面試題蒐集

一、JAVA  Object類的常用方法

java.lang.Object

類object是類層次結構的根類。每個類都使用Object作爲超類。所有對象(包括數組)都實現這個類的方法。

類型 方法名 作用
protected Object clone() 創建並返回此對象的一個副本。
boolean equals(Object obj) equals()比較的是對象的引用是否指向同一塊內存地址。
protected void finalize() 當垃圾回收器確定不存在該對象的更多引用時,由對象的垃圾回收器調用此方法。
  getClass() 返回此Object的運行時類。
int hashCode() 返回該對象的哈希碼值。
void notify() 喚醒在此對象監視器上等待的單個線程。
void notifyAll() 喚醒在此對象監視器上等待的所有線程。
String toString() 返回該對象的字符串表示。
void wait() 在其他線程調用此對象的notify()方法或notifyAll()方法前,導致當前線程等待
void wait(long timeout) 在其他線程調用此對象的notify()方法或notifyAll()方法,或者超過指定的時間量前,導致當前線程等待。
void wait(long timeout, int nanos) 在其他線程調用此對象的notify()方法或notifyAll()方法,或者其他某個線程中斷當前線程,或者已超過某個實際時間量前,導致當前線程等待。

二、JAVA垃圾回收機制

【1】意義

Java語言中一個顯著的特點就是引入了垃圾回收機制,它使得Java程序員在編寫程序的時候不再需要考慮內存管理。由於有個垃圾回收機制,Java中的對象不再有“作用域”的概念,只有對象的引用纔有“作用域”。垃圾回收可以有效的防止內存泄露,有效的使用空閒的內存。

PS:內存泄露是指該內存空間使用完畢之後未回收,在不涉及複雜數據結構的一般情況下,Java的內存泄露表現爲一個內存對象的聲明週期超出了程序需要它的時間長度,我們有時也將其稱爲“對象遊離”。

【2】垃圾回收機制中的算法

Java語言規範沒有明確地說明JVM使用哪種垃圾回收算法,但是任何一種垃圾回收算法一般要做兩件事:

(1)發現無用信息對象

(2)回收被無用對象佔用的內存空間,使該空間可被程序再次使用。

1、引用計數算法(Reference Counting Collector)

引用計數是垃圾收集齊中的早期策略。在這種方法中,堆中每個對象實例都有一個引用計數。當一個對象被創建時,且將該對象實例分配給一個變量,該變量計數設置爲1。當任何其他變量被賦值爲這個對象的引用時,計數加1(a=b, 則b引用的對象實例的計數器 +1),但當一個對象實例的某個引用超過了生命週期或者被設置爲一個新值時,對象實例的引用計數器 -1。任何引用計數器爲0的對象實例可以被當做垃圾收集。當一個對象實例被垃圾收集時,它引用的任何對象實例的引用計數器 -1。

優點:

引用計數收集器可以很快的執行,交織在程序運行中。對程序需要不被長時間打斷的實時環境比較有利。

缺點:

無法檢測出循環引用。如父對象有一個對子對象的引用,子對象反過來引用父對象。這樣,他們的引用計數永遠不可能爲0.

引用計數算法無法解決循環引用問題,例如:

1

2

3

4

5

6

7

8

9

10

11

12

public class Main {

    public static void main(String[] args) {

        MyObject object1 = new MyObject();

        MyObject object2 = new MyObject();

          

        object1.object = object2;

        object2.object = object1;

          

        object1 = null;

        object2 = null;

    }

}

最後面兩句將object1和object2賦值爲null,也就是說object1和object2指向的對象已經不可能再被訪問,但是它們互相引用對方,導致它們的引用計數都不爲0,那麼垃圾收集器永遠不會回收它們。

2、tracing算法(Tracing Collector)或 標記-清楚算法(mark and sweep)

根搜索算法

根搜索算法是從離散數學中的圖論引入的,程序把所有的引用關係看作一張圖,從一個節點GC ROOT開始,尋找對應的引用節點,找到這個節點以後,繼續尋找這個節點的引用節點,當所有的引用節點尋找完畢之後,剩餘的節點則被認爲是沒有被引用到的節點,即無用的節點。

java中可作爲GC Root的對象有

1.虛擬機棧中引用的對象(本地變量表)

2.方法區中靜態屬性引用的對象

3. 方法區中常量引用的對象

4.本地方法棧中引用的對象(Native對象)

 

三、SpringMVC Bean是如何實現的

--------------------------------------持續更新--------------------------------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章