Java面經1

Java基礎

1、爲什麼重寫equals還要重寫hashcode
1)需要保證hashcode不同,equals一定不同;equals相同,hashcode一定相同。
對於Set、Hash集合,首先判斷hashcode是否相等,來作爲是否是equals的必要條件來加速判斷(比較hashcode(int),比equals而言快很多),若不重寫hashcode方法,當equals爲相等對象時,hashcode不同,會導致加入Set和Hash集合的對象不能被read。
2、說一下map的分類和常見的情況
HashTable、HashMap、ConcurrentHashMap
3、Object若不重寫hashCode()的話,hashCode()如何計算出來的?
本地方法、類似於內存地址
4、==比較的是什麼?
地址
5、若對一個類不重寫,它的equals()方法是如何比較的?
用Object的,比較地址
6、java8新特性
1)lambda
2)元空間
3)接口新增default方法,集合foreach,兼容
7、說說Lamda表達式的優缺點。
1)代碼量少了,可讀性降低
2)不止一個抽象方法的時候無法使用
8、一個十進制的數在內存中是怎麼存的?
二進制、補碼
9、爲啥有時會出現4.0-3.6=0.40000001這種現象?
用二進制無法精確的表示小數。BigDecimal
10、Java支持的數據類型有哪些?什麼是自動拆裝箱?
整型:byte(8bit)、char(0~216)、short(-215 ~ 215-1)、int(32bit)
11、什麼是值傳遞和引用傳遞?
值傳遞:基本數據類型
引用傳遞:對象
12、數組(Array)和列表(ArrayList)有什麼區別?什麼時候應該使用Array而不是ArrayList?
Array:支持基本數據類型
ArrayList:對Array的封裝、會自動擴展數組
除非要創建基本類型的數組以及追求效率,否則都用ArrayList。
13、你瞭解大O符號(big-O notation)麼?你能給出不同數據結構的例子麼?
O(n) 複雜度(時間、空間),基於要操作的數據的數量
14、String是最基本的數據類型嗎?
不是,char[]
15、int 和 Integer 有什麼區別
int基本數據類型、Integer包裝類型。
自動裝箱:jvm對int類型的數據使用Integer.valueOf(),自動裝箱成Integer類型
自動拆箱:jvm對Integer的類型使用intValue(),自動拆箱成int類型
16、String 和StringBuffer的區別
String:char[] length和當前的字符串長度一致,不會擴展字符串長度。是一個不可變的類,線程安全的。如果對字符串進行改變,則相當於重新生成一個char[]。
StringBuffer:char[] 會預留16個長度,會自動擴展長度;線程安全的。
17、我們在web應用開發過程中經常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個某種編碼的字符串?
new String(str.getBytes(“ISO-8859-1”), “GBK”) //ISO-8859->GBK,try
19、&和&&的區別?
&是位運算符也可以作爲boolean符,但不會短路運算,
&&是boolean的運算符、短路運算
20、在Java中,如何跳出當前的多重嵌套循環?
可以爲循環命名,break:XX。或者用個flag變量。
21、你能比較一下Java和JavaSciprt嗎?
JavaScirpt:嵌入Web 頁面中的基於對象和事件驅動的解釋性語言,無法獨立運行,解釋性編程語言,其源代碼不需經過編譯,由瀏覽器解釋執行
Java:面向對象的、經過編譯、需要JVM。
22、簡述正則表達式及其用途。
用作字符串格式校驗,比如電話號碼和email
23、Java中是如何支持正則表達式操作的?
String類提供了支持正則表達式操作的方法,包括:matches()、replaceAll()、replaceFirst()、split();
Pattern、Matcher(提供詳細信息)。
1)Pattern.matcher(reg,input);//不能重用Patter
2)Pattern p=Pattern.compile(reg);
Matcher m=p.matchers(input);
boolean result=m.matchs();

關鍵字

1、介紹一下Synchronized鎖,如果用這個關鍵字修飾一個靜態方法,鎖住了什麼?如果修飾成員方法,鎖住了什麼?
synchronized是一個可重入鎖,對對象加鎖,實現是通過爲對象生成一個monitor,將對象的阻塞的monitor加入等待隊列。
靜態方法:鎖住這XX.Class這個對象
成員方法:鎖住實例化之後的這個對象
2、介紹一下volatile?
保證了程序的一致性和順序性。不會重排指令,對volatile對象的讀和寫均從主內存操作,而不會通過工作內存。
3、鎖有了解嘛,說一下Synchronized和lock
synchronized可重入鎖,通過jvm實現,jvm爲每個對象均生產了對象頭,在申請鎖的時候生成monitor,通過對monitor的申請和釋放實現鎖。
lock的是java中的一個接口,通過AQS實現鎖。
AQS實現了同步的隊列,通過volatile關鍵字表示頭尾節點與是否阻塞的狀態,鏈表。
4、講一講Java裏面的final關鍵字怎麼用的?
修飾變量,表示初始化之後不可以被改變。
修飾方法,表示不可以被重寫。
修飾類,表示不可以被繼承。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章