“面试不败计划”: java语言基础面试题(二)
點擊上方“好好學java”,選擇“置頂公眾號”
優秀學習資源、干貨第一時間送達!
好好學java
java知識分享/學習資源免費分享
關注
?精彩內容?
java實戰練習項目教程
全網最全電子圖書分享
你所需要的大數據視頻教程
java全套學習視頻教程及源碼
1、你對String對象的intern()熟悉么?
intern()方法會首先從常量池中查找是否存在該常量值,如果常量池中不存在則現在常量池中創建,如果已經存在則直接返回. 比如 String s1=”aa”; String s2=s1.intern(); System.out.print(s1==s2);//返回true
2、Object中有哪些公共方法?
equals()
clone()
getClass()
notify(),notifyAll(),wait()
toString
3、java當中的四種引用
強引用,軟引用,弱引用,虛引用.不同的引用類型主要體現在GC上:
強引用:如果一個對象具有強引用,它就不會被垃圾回收器回收。即使當前內存空間不足,JVM也不會回收它,而是拋出 OutOfMemoryError 錯誤,使程序異常終止。如果想中斷強引用和某個對象之間的關聯,可以顯式地將引用賦值為null,這樣一來的話,JVM在合適的時間就會回收該對象
軟引用:在使用軟引用時,如果內存的空間足夠,軟引用就能繼續被使用,而不會被垃圾回收器回收,只有在內存不足時,軟引用才會被垃圾回收器回收。
弱引用:具有弱引用的對象擁有的生命周期更短暫。因為當 JVM 進行垃圾回收,一旦發現弱引用對象,無論當前內存空間是否充足,都會將弱引用回收。不過由于垃圾回收器是一個優先級較低的線程,所以并不一定能迅速發現弱引用對象
虛引用:顧名思義,就是形同虛設,如果一個對象僅持有虛引用,那么它相當于沒有引用,在任何時候都可能被垃圾回收器回收。
4、WeakReference與SoftReference的區別?
這點在四種引用類型中已經做了解釋,這里簡單說明一下即可:
雖然 WeakReference 與 SoftReference 都有利于提高 GC 和 內存的效率,但是 WeakReference ,一旦失去最后一個強引用,就會被 GC 回收,而軟引用雖然不能阻止被回收,但是可以延遲到 JVM 內存不足的時候。
5、為什么要有不同的引用類型
不像C語言,我們可以控制內存的申請和釋放,在Java中有時候我們需要適當的控制對象被回收的時機,因此就誕生了不同的引用類型,可以說不同的引用類型實則是對GC回收時機不可控的妥協.有以下幾個使用場景可以充分的說明:
利用軟引用和弱引用解決OOM問題:用一個HashMap來保存圖片的路徑和相應圖片對象關聯的軟引用之間的映射關系,在內存不足時,JVM會自動回收這些緩存圖片對象所占用的空間,從而有效地避免了OOM的問題.
通過軟引用實現Java對象的高速緩存:比如我們創建了一Person的類,如果每次需要查詢一個人的信息,哪怕是幾秒中之前剛剛查詢過的,都要重新構建一個實例,這將引起大量Person對象的消耗,并且由于這些對象的生命周期相對較短,會引起多次GC影響性能。此時,通過軟引用和 HashMap 的結合可以構建高速緩存,提供性能.
6、java中==和eqauls()的區別,equals()和`hashcode的區別
==是運算符,用于比較兩個變量是否相等,而equals是Object類的方法,用于比較兩個對象是否相等.默認Object類的equals方法是比較兩個對象的地址,此時和==的結果一樣.換句話說:基本類型比較用==,比較的是他們的值.默認下,對象用==比較時,比較的是內存地址,如果需要比較對象內容,需要重寫equal方法
7、equals()和hashcode()的聯系
hashCode()是Object類的一個方法,返回一個哈希值.如果兩個對象根據equal()方法比較相等,那么調用這兩個對象中任意一個對象的hashCode()方法必須產生相同的哈希值.
如果兩個對象根據eqaul()方法比較不相等,那么產生的哈希值不一定相等(碰撞的情況下還是會相等的)
8、a.hashCode()有什么用?與a.equals(b)有什么關系
hashCode() 方法是相應對象整型的 hash 值。它常用于基于 hash 的集合類,如 Hashtable、HashMap、LinkedHashMap等等。它與 equals() 方法關系特別緊密。根據 Java 規范,使用 equal() 方法來判斷兩個相等的對象,必須具有相同的 hashcode。
將對象放入到集合中時,首先判斷要放入對象的hashcode是否已經在集合中存在,不存在則直接放入集合.如果hashcode相等,然后通過equal()方法判斷要放入對象與集合中的任意對象是否相等:如果equal()判斷不相等,直接將該元素放入集合中,否則不放入.
9、有沒有可能兩個不相等的對象有相同的hashcode
有可能,兩個不相等的對象可能會有相同的 hashcode 值,這就是為什么在 hashmap 中會有沖突。如果兩個對象相等,必須有相同的hashcode 值,反之不成立.
10、可以在hashcode中使用隨機數字嗎?
不行,因為同一對象的 hashcode 值必須是相同的
11、a==b與a.equals(b)有什么區別
如果a 和b 都是對象,則 a==b 是比較兩個對象的引用,只有當 a 和 b 指向的是堆中的同一個對象才會返回 true,而 a.equals(b) 是進行邏輯比較,所以通常需要重寫該方法來提供邏輯一致性的比較。例如,String 類重寫 equals() 方法,所以可以用于兩個不同對象,但是包含的字母相同的比較。
12、3*0.1==0.3返回值是什么
false,因為有些浮點數不能完全精確的表示出來。
13、a=a+b與a+=b有什么區別嗎?
+=操作符會進行隱式自動類型轉換,此處a+=b隱式的將加操作的結果類型強制轉換為持有結果的類型,而a=a+b則不會自動進行類型轉換.如:
byte a = 127;
byte b = 127;
b = a + b; // error : cannot convert from int to byte
b += a; // ok
(譯者注:這個地方應該表述的有誤,其實無論 a+b 的值為多少,編譯器都會報錯,因為 a+b 操作會將 a、b 提升為 int 類型,所以將 int 類型賦值給 byte 就會編譯出錯)
14、short s1= 1; s1 = s1 + 1; 該段代碼是否有錯,有的話怎么改?
有錯誤,short類型在進行運算時會自動提升為int類型,也就是說s1+1的運算結果是int類型.
附上熱門QQ群,存放資源和歷史資料,500容量(低門檻付費群),長按二維碼入群
????????????????????????????????????????????? ? ? ? 長按二維碼關注
總結
以上是生活随笔為你收集整理的“面试不败计划”: java语言基础面试题(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea + Maven + Sprin
- 下一篇: “面试不败计划”:面试题基础三