Java 面試題集

weixin_34075551發表於2018-01-31

1. 2017 網際網路校園招聘的一些面試題
2. Java程式設計師面試題集(1-50
3.

5. 阿里高階Java面試題(首發,70道,帶詳細答案)

  • 強引用:
    只要引用存在,垃圾回收器永遠不會回收
    Object obj = new Object();
    //可直接通過obj取得對應的物件 如obj.equels(new Object());
    而這樣 obj物件對後面new Object的一個強引用,只有當obj這個引用被釋放之後,物件才會被釋放掉,這也是我們經常所用到的編碼形式。

  • 軟引用:非必須引用,記憶體溢位之前進行回收,可以通過以下程式碼實現
    Object obj = new Object();
    SoftReference<Object> sf = new SoftReference<Object>(obj);
    obj = null;
    sf.get();//有時候會返回null
    這時候sf是對obj的一個軟引用,通過sf.get()方法可以取到這個物件,當然,當這個物件被標記為需要回收的物件時,則返回null;
    軟引用主要使用者實現類似快取的功能,在記憶體足夠的情況下直接通過軟引用取值,無需從繁忙的真實來源查詢資料,提升速度;當記憶體不足時,自動刪除這部分快取資料,從真正的來源查詢這些資料。

  • 弱引用:第二次垃圾回收時回收,可以通過如下程式碼實現
    Object obj = new Object();
    WeakReference<Object> wf = new WeakReference<Object>(obj);
    obj = null;
    wf.get();//有時候會返回null
    wf.isEnQueued();//返回是否被垃圾回收器標記為即將回收的垃圾
    弱引用是在第二次垃圾回收時回收,短時間內通過弱引用取對應的資料,可以取到,當執行過第二次垃圾回收時,將返回null。
    弱引用主要用於監控物件是否已經被垃圾回收器標記為即將回收的垃圾,可以通過弱引用的isEnQueued方法返回物件是否被垃圾回收器標記。

  • 虛引用:垃圾回收時回收,無法通過引用取到物件值,可以通過如下程式碼實現
    Object obj = new Object();
    PhantomReference<Object> pf = new PhantomReference<Object>(obj);
    obj=null;
    pf.get();//永遠返回null
    pf.isEnQueued();//返回是否從記憶體中已經刪除
    虛引用是每次垃圾回收的時候都會被回收,通過虛引用的get方法永遠獲取到的資料為null,因此也被成為幽靈引用。
    虛引用主要用於檢測物件是否已經從記憶體中刪除。

執行緒池

①newSingleThreadExecutor
單個執行緒的執行緒池,即執行緒池中每次只有一個執行緒工作,單執行緒序列執行任務
②newFixedThreadExecutor(n)
固定數量的執行緒池,沒提交一個任務就是一個執行緒,直到達到執行緒池的最大數量,然後後面進入等待佇列直到前面的任務完成才繼續執行
③newCacheThreadExecutor(推薦使用)
可快取執行緒池,當執行緒池大小超過了處理任務所需的執行緒,那麼就會回收部分空閒(一般是60秒無執行)的執行緒,當有任務來時,又智慧的新增新執行緒來執行。
④newScheduleThreadExecutor
大小無限制的執行緒池,支援定時和週期性的執行執行緒
執行緒池的使用(ThreadPoolExecutor詳解)

類載入機制

1. 深入理解Java:類載入機制及反射

相關文章