小白:你想要的java面試題,含答案的呦

1. 實例方法和靜態方法有什麼不一樣?

2. Java中的異常有哪幾類?分別怎麼使用?

檢出異常,非檢出異常。檢出異常需要try...catch才能編譯通過。非檢出異常不用try...catch也能編譯通過。

RuntimeException是非檢出異常,不需要try...catch也能編譯通過。

IoException,SQLException等等其他所有異常都是檢出異常,必須要try...catach才能編譯通過。

3. 常用的集合類有哪些?比如List如何排序?

分兩種,一種實現Set接口,一種是實現List接口的。

Set:TreeSet,HashSet.

List:ArrayList,LinkedList,Vector(線程安全)。

JDK7以前用collections.sort(list,Comparator).

JDK8直接用List.sort(Comparator).

4. ArrayList和LinkedList內部的實現大致是怎樣的?他們之間的區別和各自適應的場景是什麼?

ArrayList,是數組結構:少用與中間的增刪。多用於查詢,修改。每次增刪元素順序都會操作每個元素。

LinkedList,是鏈表結構:多用於中間,開頭增刪。少用查詢,修改。查詢時會遍歷大量元素。

5. 內存溢出是怎麼回事?

對象有被指向的引用,但是再也用不到它就是內存溢出了。

GC機制:複製回收,標記清除,引用計數(如果有循環引用後,會影響垃圾回收,所以JVM虛擬機沒有采用此方法進行垃圾回收)。

6. ClassLoader有什麼用?

類加載器:所有類都需要Classloader來加載。

BoostrapClassLoader,加載系統(java包下)的類,SystemClassLoader,加載系統擴展類(少用),AppClassloader應用類加載器,還有針對每個項目的類加載器。

7. ==和equals的區別?

==判斷對象物理地址。

equals判斷對象Value是否相等。

8. hashCode方法的作用?

在hashMap中使用,把一個對象變成一個整型。hashCode規範,如果兩個對象的equals返回true,那他們的hashCode必須相等,但是hashCode相等,不一定equals不一定相等。

9. Object類中有哪些方法?列舉3個以上。

構造方法,toString(),equals,hashCode,getClass,finalize,clone,三個wait(),notify,notifyAll.

10. NIO是什麼?適用於何種場景?

NIO是newIO,接口都是異步的,非阻塞的。

12. HashMap數據結構、擴展策略,Hash衝突攻擊如何防範,如何實現線程安全的HashMap?

JDK7以前:數組裡面存linkedList,hash衝突,升級到JDK8。

JDK8,數組裡面加集合,如果對象hashCode相同,不可比較時就是linkedList,可比較就會用TreeSet進行排序處理(紅黑樹先訪問小的)。hash衝突不用防範。如果對象不可比較且hash衝突,我們可適當實現可比較接口。

線程安全:ConcurrentHashMap(系統自帶的線程安全的HashMap),Map<object> synchronizedMap = Collections.synchronizedMap(new HashMap<>()); synchronizedMap 為線程安全的Map./<object>

13. JVM內存結構,GC算法,CMS、G1的原理

14. NIO模型,select/epoll的區別,多路複用的原理

16. Java中一個字符佔多少個字節,擴展再問int, long, double佔多少字節

一個字符兩個字節,int 4 , long double 8

17. 創建一個類的實例都有哪些辦法?

new ,反射。

18. final/finally/finalize的區別?

final是類,變量,方法的修飾。類被修飾後不能再被繼承。變量和方法被修飾不能再被修改

finally是try...catch後執行的finally,

finalize,在Object中的方法名,在此對象被回收前會執行這個方法。(當使用文件流時,如果對象被回收,沒有關閉流,在底層就會實現內存洩露)

19. LinkingBlockingQueue與ArrayBlockingQueue的區別,他們的適用場景?

LinkingBlockQueue 鏈表實現的阻塞隊列,適合一個一個放,一個一個取。

ArrayBlocakingQueue數組實現的阻塞隊列,適合三個放,多個放,只適合多個取,不適合單個取。

20. Session/Cookie的區別?

Session存在服務器端。

Cookie存在客戶端(瀏覽器上)。

21. String/StringBuffer/StringBuilder的區別,擴展再問他們的實現?

String 值不可變

StringBuffer 值可變,線程安全

StringBuilder 值可變,線程不安全

22. Servlet的生命週期?

初始化,服務處理(接收請求,處理請求,返回結果),銷燬。

23. 如何用Java分配一段連續的1G的內存空間?需要注意些什麼?

ByteBuffer.allocateDirect(1024*1024*1024);

24. Java有自己的內存回收機制,但為什麼還存在內存洩露的問題呢?

25. Java裡面用對象作為Key需要注意些什麼? 如何實現hashcode?

對象放進去了hash值不能變。hashCode的值儘量不等。


分享到:


相關文章: