java 面試 --java 基礎

1 、ArrayList、Vector、LinkedList 之間的 區別?

ArrayList:底層數組,查詢快,增刪慢,線程不安全,效率高
Vector:底層數組,查詢快(因爲線程安全,其實查詢也不快),增刪慢,線程安全,效率低
LinkedList:底層雙重鏈表,查詢慢,增刪快,線程不安全,效率高。數組

三、列舉Collections工具類經常使用方法?

Collections.sort(list);按天然順序排序;
Collections.binarySearch(list,key); 二分查找;
Collections.reverse(list) 反轉;
Collections.shuffle(list) 隨機替換;安全

四、final、finally、finalize的區別?

final:修飾類,不能被繼承,修飾方法不能被重寫,修飾變量是常量
finally:是異常處理的一部分,用於釋放資源,通常來講代碼確定會執行,除非在執行finally以前,jvm退出了。
finalize:是Object的一個方法,用於垃圾回收。多線程


五、若是catch裏有return語句,請問finally還會執行嗎?若是會是在return前仍是return後?

會,在return前執行。不過finally的邏輯不會改變return的返回值。jvm

六、實現多線程有幾種方式?分別是什麼

有三種方式,繼承Thread類,實現runnable接口,實現callable接口工具

七、runnable與callable的區別?

Callable任務執行後能夠有返回值,而runnable不能返回值,call方法能夠拋出異常,而run方法只能try catch,運行callable任務能夠拿到一個Future對象,callable依賴線程池。性能

八、使用線程池的好處?

使用線程池提升系統的性能,減小建立,銷燬線程的資源開銷,由於代碼結束後,線程不會死亡,而是再回到線城池,等待下一個對象的調用。spa

 
 
九、線程的生命週期?

十、sleep()和wait()的區別?

    Sleep  會把執行機會給其餘線程,到時後自動恢復,不會釋放對象鎖,線程

    wait    會釋放對象鎖,只有對象發出notify或notifyAll才準備獲取對象鎖。3d

11 、join()對象


join  單核cpu運行多線程時底層實現原理是多個線程間切換,因爲cpu的處理速度很快,看上去像多個線程同時運行。

         那麼咱們如何實現讓線程T1,T2,T3,在T1執行完成後才執行T2,T2執行完成後才執行T3,

         也就是線程的串行化,經過Thread類的join方法就能夠實現。

 

十一、run()和start()的區別?

 

Run僅僅是調線程執行的普通方法,start首先會啓動線程,由Jvm調用run方法。

相關文章
相關標籤/搜索