1. 程式人生 > 其它 >小米Java面經-2

小米Java面經-2

一面

1、static關鍵字:類成員,程式碼塊、靜態內部類、靜態導包

2、ThreadLocal是什麼?
執行緒的區域性變數,當使用ThreadLocal維護變數時,ThreadLocal為每個使用該變數的執行緒提供獨立的變數副本,所以每一個執行緒都可以獨立地改變自己的副本,而不會影響其它執行緒所對應的副本
從執行緒的角度看,目標變數就象是執行緒的本地變數,這也是類名中“Local”所要表達的意思
原理:在ThreadLocal類中有一個Map,用於儲存每一個執行緒的變數副本,Map中元素的鍵為執行緒物件,而值對應執行緒的變數副本

3、wait()與sleep()方法的區別
wait();執行緒通訊方式的一種
是什麼?--》Object的一個方法;
作用:--》當前執行緒釋放資源,進入阻塞狀態,等待被notify() 或 notifyAll()方法喚醒
sleep();
是?--》Thread類中的一個方法,讓當前正在執行的方法等待指定時間,進入阻塞狀態,不釋放鎖,等到了時間,再次進入就緒狀態

4、介面與抽象類的區別:
相同點:1、不例項化;2、含抽象方法
不同點:
1、大的層面:介面強調的功能的實現;抽象類強調的是所屬關係
2、變數常量:介面中只能定義靜態常量,不能定義普通成員變數;抽象類都可以
3、繼承與實現:一個類可以實現多個介面,但只能繼承一個類

二面

1、equals() 與 “ == ”的區別
先講是什麼
區別(作用上的區別),

2、String類有哪些常用方法
length():字串長度
charAt():求某一位置上的字元
concat():連線兩個字串
equals():判斷內容是否相等
hashCode():獲得雜湊碼
indexOf(char c):字元c第一次出現的位置
split(String regex):拆分字串

3、實現多執行緒的方式
繼承Thread類
實現Runnable介面、Callable介面
執行緒池

4、垃圾回收機制
在Java中採取了 可達性分析法來進行垃圾標記,該方法的基本思想是通過一系列的“GC Roots”物件作為起點進行搜尋,如果在“GC Roots”和一個物件之間沒有可達路徑,則稱該物件是不可達的,不過要注意的是被判定為不可達的物件不一定就會成為可回收物件。被判定為不可達的物件要成為可回收物件必須至少經歷兩次標記過程,如果在這兩次標記過程中仍然沒有逃脫成為可回收物件的可能性,則基本上就真的成為可回收物件了

GC Roots物件有哪些:

垃圾收集演算法:1、標記-清除;2、複製、3、標記-整理;4、分代收集演算法
垃圾收集器:1、Serial / Serial Old;2、ParNew;3、Parallel Scavenge;4、Parallel Old、5、CMS;6、G1

5、新生代與老年代
物件的記憶體分配:
物件的記憶體分配,往大方向上講就是在堆上分配,物件主要分配在新生代的Eden Space和From Space,少數情況下會直接分配在老年代。如果新生代的Eden Space和From Space的空間不足,則會發起一次GC,在GC的過程中,會將Eden Space和From Space中的存活物件移動到To Space,然後將Eden Space和From Space進行清理。如果在清理的過程中,To Space無法足夠來儲存某個物件,就會將該物件移動到老年代中。在進行了GC之後,使用的便是Eden space和To Space了,下次GC時會將存活物件複製到From Space,如此反覆迴圈。當物件在Survivor區躲過一次GC的話,其物件年齡便會加1,預設情況下,如果物件年齡達到15歲,就會移動到老年代中。

  一般來說,大物件會被直接分配到老年代,所謂的大物件是指需要大量連續儲存空間的物件,最常見的一種大物件就是大陣列

  byte[] data = new byte[410241024]

  這種一般會直接在老年代分配儲存空間