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的值儘量不等。
閱讀更多 碼農的小人生 的文章