1,hashMap與hashTable區(qū)別
????使用Entry數組來實現(xiàn)hash表
????hashTable是線程安全的婚夫,hashMap不是澄步,但是hashTable已基本廢棄裸违,如果要使用同步的話可以使用concurrenthashmap或者使用其他方法呢岗,這里可以深入探究湃鹊;
????hashMap支持null鍵和null值
2儒喊,JVM啟動過程
一:JVM裝入環(huán)境,JVM提供的方式是操作系統(tǒng)的動態(tài)連接文件.
二:裝載JVM.dll
三:初始化JVM币呵,獲得本地調用接口
四:運行Java程序
這方面需要加深理解
3怀愧,怎么避免死鎖
1,加鎖順序
2余赢,加鎖限時
3芯义,死鎖檢測
4,synchronized同步方法和同步代碼塊的區(qū)別
同步代碼塊獲取一個對象的監(jiān)視器妻柒,更加靈活扛拨;
同步方法相當于在獲取this這個對象的監(jiān)視器;
非靜態(tài)的同步方法是鎖定類的實例举塔,靜態(tài)的同步方法是鎖定類的绑警。
5,java new 一個對象的的過程
分配內存空間央渣;
初始化對象置為0计盒;
設置必要的對象信息(對象頭中的一些信息);
?Java程序執(zhí)行init進行初始化賦值芽丹。
6北启,如何判斷一個單向鏈表是不是循環(huán)鏈表(不能更改鏈表的狀態(tài))
用兩個指針,一個指針一次跳一步,另一個指針一次跳兩步咕村,如果它們能相遇场钉,說明存在環(huán)。
如何將一個單向鏈表反轉懈涛?
8惹悄,排序算法代碼實現(xiàn)過程
9,sleep(),wait(),notify(),notifyAll()
sleep()不會釋放對象鎖,wait()會釋放對象鎖肩钠。
notify()喚醒wait()阻塞住的線程,但并不立即釋放對象鎖暂殖,需要等synchronized代碼塊執(zhí)行完或者wait()方法調用來釋放對象鎖价匠。
notifyAll()喚醒所有等待的線程。
10呛每,StringBuffer和StringBuilder的區(qū)別
12踩窖,如何書寫一個單例模式
public class Singleton4 {//我們通過volatile聲明變量來禁止指令重排序
????private Singleton4(){}
????private static volatile Singleton4 single;
????public static Singleton4 getInstance(){
????????if(single==null){
????????synchronized (Singleton4.class) {
????????if(single==null)
????????single=new Singleton4();
????????}
????}
????????return single;
????}
}
13,ArrayList和LinkedList比較以及適用于什么場景
ArrayList查詢更快晨横,LinkedList插入刪除更快洋腮。
原因:ArrayList是基于索引的數據結構,插入刪除需要更新索引手形,更改數組大小等啥供,盡量給定合適的初始大小,
14,equals()和hashcode()的關系库糠。
? ? ? ?equals()方法未重寫的話伙狐,比較的是兩個對象地址是否相等,即是否是同一個對象瞬欧,和==效果一樣贷屎。
? ? ????一般我們覆蓋equals()方法,來比較兩個對象的內容是否相等艘虎。
? ? ? ? hashCode(),獲取對象hash碼唉侄,確定對象在散列表中的存儲位置,散列表包括hashMap,hashTable,hashSet.
????????hashCode()只有在對象需要存儲在散列表中才起作用野建。
????????如果對象不存儲在散列表的數據結構中属划,equals()和hashcode()沒有任何關系,
????????如果需要存儲在散列表的數據結構中贬墩,重寫equals方法榴嗅,一定也要重寫hashcode方法。
原因:在散列表中陶舞,hashcode相同的兩個對象嗽测,equals不一定相同
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? equals相同,hashcode一定要相同
hashcode相同是equals相同的必要條件,那么在散列表添加的時候先判斷一下hashcode是否相同唠粥,如果hashcode不相同疏魏,equals即使相同也不起作用,例如hashSet中可能存在重復元素晤愧。
? ??????當equals方法被重寫時大莫,通常有必要重寫?hashCode?方法,以維護?hashCode?方法的常規(guī)協(xié)定官份,該協(xié)定聲明相等對象必須具有相等的哈希碼只厘。
15,哪些Java集合不允許具有重復元素
Set < E > 是一個不包含重復元素的 collection舅巷。更確切地講羔味,set 不包含滿足 e1.equals(e2) 的元素對 e1 和 e2,并且最多包含一個 null 元素钠右。
16赋元,字符串常量池,運行時常量池飒房,class文件常量池搁凸,intern()方法,它們之間的關系
????????直接使用雙引號聲明出來的String對象會直接存儲在字符串常量池中.
API中描述如下:
public?String?intern()
????????返回字符串對象的規(guī)范化表示形式狠毯。
????????一個初始為空的字符串池护糖,它由類?String?私有地維護。
????????當調用 intern 方法時垃你,如果池已經包含一個等于此?String?對象的字符串(用?equals(Object)?方法確定)椅文,則返回池中的字符串。否則惜颇,將此?String?對象添加到池中皆刺,并返回此?String?對象的引用。
????????它遵循以下規(guī)則:對于任意兩個字符串?s?和?t凌摄,當且僅當?s.equals(t)?為?true?時羡蛾,s.intern()?==?t.intern()?才為?true。
????????所有字面值字符串和字符串賦值常量表達式都使用 intern 方法進行操作锨亏。字符串字面值在?Java Language Specification?的 §3.10.5 定義痴怨。
返回:
????????一個字符串,內容與此字符串相同器予,但一定取自具有唯一字符串的池浪藻。
注意:jdk7 以后字符常量池不在Perm區(qū)域了,這塊做了調整乾翔。字符串常量池中不需要再存儲一份對象了爱葵,可以直接存儲堆中的引用施戴。
18,java異常分類萌丈,RuntimeException和Exception關系
runtimeException(運行時異常):是未檢查異常赞哗,程序員的錯,不需要try..catch...或者throws處理辆雾。
19,final關鍵字的作用及用法
? ? ? ? 修飾類:該類不能被繼承
? ? ? ? 修飾方法:明確禁止該方法在子類中被覆蓋
? ? ? ? 修飾變量:對于一個final變量肪笋,如果是基本數據類型的變量,則其數值一旦在初始化之后便不能更改度迂;如果是引用類型的變量藤乙,則在對其初始化之后便不能再讓其指向另一個對象。
20惭墓,靜態(tài)代碼塊湾盒,構造代碼塊,構造函數诅妹。
靜態(tài)代碼塊在類加載時被執(zhí)行,只執(zhí)行一次毅人;構造代碼塊依托構造函數吭狡,但先于構造函數執(zhí)行。
單個類時:靜態(tài)代碼塊>構造代碼塊>構造函數
?父子類使用時:1丈莺,new一個父類對象(代碼在子類中執(zhí)行划煮,會加載子類),父類靜態(tài)代碼塊缔俄,子類靜態(tài)代碼塊弛秋,父類構造代碼塊俐载,父類構造函數
? ? ? ? ? ? ? ? ? ? ? ? 2蟹略,new一個子類對象遏佣,父類靜態(tài)代碼塊,子類靜態(tài)代碼塊状婶,父類構造代碼塊意敛,父類構造函數,子類構造代碼塊膛虫,子類構造函數。
? ? ? ? ? ? ? ? ? ? 3稍刀,new一個父類對象,接著new一個子類對象。父類靜態(tài)代碼塊跌榔,子類靜態(tài)代碼塊异雁,父類構造代碼塊,父類構造函數僧须,父類構造代碼塊,父類構造函數担平,子類構造代碼塊,子類構造函數