1. 程式人生 > 其它 >面試總結之-美團面試總結(三)

面試總結之-美團面試總結(三)

技術標籤:面試面試總結設計模式面試

三面

1、照例自我介紹和專案介紹;

2、上來就讓我手撕一個單例模式。。。答:

public class SingleInstanceDemo {
    private SingleInstanceDemo(){}
    private static volatile SingleInstanceDemo singleInstance;
    public static SingleInstanceDemo getInstance(){
        if (singleInstance == null){
            synchronized (SingleInstanceDemo.class){
                if (singleInstance == null){
                    singleInstance = new SingleInstanceDemo();
                }
            }
        }
       return singleInstance;
   }
}

3、讓我講了講程式碼是啥啥意思?

答:STEP 1. 執行緒A訪問getInstance()方法,因為單例還沒有例項化,所以進入了鎖定塊。STEP 2. 執行緒B訪問getInstance()方法,因為單例還沒有例項化,得以訪問接下來程式碼塊,而接下來程式碼塊已經被執行緒1鎖定。STEP 3. 執行緒A進入下一判斷,因為單例還沒有例項化,所以進行單例例項化,成功例項化後退出程式碼塊,解除鎖定。STEP 4. 執行緒B進入接下來程式碼塊,鎖定執行緒,進入下一判斷,因為已經例項化,退出程式碼塊,解除鎖定。STEP 5. 執行緒A初始化並獲取到了單例例項並返回,執行緒B獲取了線上程A中初始化的單例。大體是這麼回事。

4、由於我的專案中提及到JVM,所以給我出了一個場景題,垃圾會收器中,標記清除多次後,由於採用的是標記清除演算法,那麼你覺得可能會出現什麼問題?

答:由於標記清除演算法清理垃圾物件的同時產生了記憶體碎片(雖然釋放記憶體但不是連續的),所以當分配一個大物件的時候,由於記憶體不連續,那麼會產生full GC。

5、這裡提及到了full gc,問我,哪些情況會產生full GC,哪些情況產生minor GC?

答:minor會產生在eden區滿了,fullGC產生在老年代的剩餘空間不足,以及永久代記憶體不足也會發生fullGC。

6、除了你專案中的記憶體溢位問題,你還知道哪些關於記憶體溢位記憶體洩漏的?

答:這裡之前瞭解過ThreadLocal,ThreadLocal中的鍵值對中的鍵是一個弱引用,那麼在記憶體回收的時候,這個鍵很可能會被回收掉,然後鍵沒了,就無法引用value的值,造成了記憶體洩漏;

如有披露或問題歡迎留言或者入群探討