1.為什么重寫equals方法必須重寫hashcode方法毁靶?
hash的時候需要保證equals的對象映射到同一個位置
2.重載和重寫的區(qū)別
重載是在同一個類里胧奔,主要是參數(shù)個數(shù)或者參數(shù)類型不同形成的;重寫是在繼承的類里预吆,主要是子類對父類方法的復(fù)寫龙填。
3.static關(guān)鍵字的使用
a: 如果用在變量上,這個變量的值就是屬于這個類的而不是屬于這個類的實例的拐叉,并且每個實例的操作的都是同一個對象岩遗。
b: 如果用在方法上,這個方法通過類就可以直接調(diào)用不需要新建實例凤瘦。
c: 如果用在類上宿礁,這個類就是靜態(tài)內(nèi)部類,一般寫單例的時候能夠用到蔬芥。
d:靜態(tài)代碼塊梆靖,如果是靜態(tài)代碼塊的話,在對象初始化之前就會被執(zhí)行笔诵。
4.final和finally和finalize的區(qū)別
a:final 是一個關(guān)鍵字返吻,如果修飾一個變量,那么這個變量的值是不可以修改的乎婿;如果修飾一個方法那么這個方法是不可以被重寫的思喊;如果修飾一個類那么這個類是不可以被繼承的。
b: finally一般是和try配合使用的次酌,主要是用于最終的收尾工作恨课,比如關(guān)閉線程池資源,關(guān)閉io等岳服。
c:finalize主要是在object對象里面的一個方法剂公,這個方法主要是用于對象的銷毀,不過gc是不會因為你調(diào)用了這個方法就銷毀這個對象吊宋。
5.String和Stringbuffer和Stringbuild的區(qū)別
a:String是一個字符串常量纲辽,是一個不可以改變的字符常量,例如String s = a, String s = a +b ; 第一個s和第二個s在內(nèi)存里面分配了兩次璃搜;Stringbuffer是一個可以變的字符常量拖吼,之所以說他可以變是因為他可以動態(tài)擴容的,StringBuffer sb = new StringBuffer("a"); sb = sb.append("b");這個在內(nèi)存里其實是只分配了一次對象这吻,第二次只是對第一次的擴容吊档;Stringbuffer是線程安全的,在每一個方法上面都加了synchronized 唾糯,而Stringbuild是非線程安全的怠硼,因此Stringbuild是比Stringbuffer更高效的鬼贱,不過如果你對安全性要求高的話最好還是使用Stringbuffer。
6.wait和sleep的區(qū)別
wait是object里面的方法香璃,是屬于某個對象所有的这难,wait一般配合notify或者notifyall來使用的,他必須是獲取鎖了之后才可以的葡秒,并且當(dāng)他執(zhí)行之后立馬就釋放了鎖姻乓;sleep是Thread里面的方法,他的執(zhí)行并不需要獲取鎖眯牧,并且如果sleep在有鎖的情況下執(zhí)行了糖权,也不好釋放鎖的。
7.hashmap的實現(xiàn)原理
a:hashmap是通過數(shù)組加鏈表來實現(xiàn)的炸站。
b:hashmap不是線程安全的星澳,在多線程的環(huán)境里,如果hashmap擴容的話可以造成環(huán)形結(jié)構(gòu)旱易,導(dǎo)致CPU被打滿禁偎。
c:hashmap是通過拉鏈法來解決hash沖突的,但是如果沖突比較嚴重的話阀坏,JDK8會轉(zhuǎn)化為紅黑樹來解決如暖。
d:hashmap的hash算法,以及hashmap的put操作忌堂,get操作盒至,remove操作,以及遍歷操作士修,可以看一下hashmap的源碼枷遂。
8.synchronized關(guān)鍵的解釋
synchronize關(guān)鍵字是用來解決多線程競爭的,當(dāng)方法或者代碼庫用synchronize修飾之后棋嘲,就可以達到順序執(zhí)行的目的酒唉。需要注意的是synchronize的鎖的是對象。需要特別注意的是synchronize修飾的方法有static和沒有static是有很大區(qū)別的沸移,如果沒有static那么他鎖的就是當(dāng)前對象痪伦,如果有static那么他鎖的就是當(dāng)前class,但是在一個方法里同時有static和非static的方法被synchronize修飾他們之間是不會有競爭關(guān)系的雹锣,因為他們鎖的東西不一樣网沾。
9.volatile關(guān)鍵字的解釋
volatile是一個輕量級的synchronize,但volatile和synchronize是有區(qū)別的蕊爵,volatile是只能保證內(nèi)存可見性的辉哥,不能保證一致性的。volatile的底層原理簡單來說就是禁止指令重排序在辆,強制讀主內(nèi)存证薇。
10.死鎖的四個條件
a:不可剝奪,已獲得的資料匆篓,再沒有使用完之前不可以被剝奪
b:互斥條件浑度,一個資源每次只能被一個線程使用
c:請求與保持,一個進程因請求資源而阻塞時鸦概,對已獲得的資源保持不放
d:循環(huán)等待條件,若干進程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系
11.泛型的原理
一言以蔽之箩张,泛型的原理是類型擦除。