牛客網錯題集系列(二)
目錄
1.在開發中使用泛型取代非泛型的資料型別(比如用ArrayList取代ArrayList),程式的執行時效能會變得更好。()
3.list是一個ArrayList的物件,哪個選項的程式碼填到//todo delete處,可以在Iterator遍歷的過程中正確並安全的刪除一個list中儲存的物件?()
5.在Java語言中,下列關於字符集編碼(Character set encoding)和國際化(i18n)的問題,哪些是正確的?
6.多個執行緒可同時操作一個數據,為了保證該資料的準確性,可將操作該資料的部分改為 ()
9.下面幾個關於Java裡queue的說法哪些是正確的()?
1.在開發中使用泛型取代非泛型的資料型別(比如用ArrayList<String>取代ArrayList),程式的執行時效能會變得更好。()
錯誤,在編譯階段,虛擬機器就會將泛型擦除還原成沒有泛型的程式碼,並沒有提高執行時的效能。
2.關於異常丟擲
雖然會在try/catch語句中寫很多的異常用來捕獲,但是隻會丟擲一個異常。
下列程式的執行結果 1 2 3 4 5 6 7 8 9 10 11 public void getCustomerInfo() { try { // do something that may cause an Exception } catch (java.io.FileNotFoundException ex) { System.out.print("FileNotFoundException!"); } catch (java.io.IOException ex) { System.out.print("IOException!"); } catch (java.lang.Exception ex) { System.out.print("Exception!"); } }
結果是FileNotFoundException IOException Exception中的一個被丟擲
3.list是一個ArrayList的物件,哪個選項的程式碼填到//todo delete處,可以在Iterator遍歷的過程中正確並安全的刪除一個list中儲存的物件?()
Iterator it = list.iterator(); int index = 0; while (it.hasNext()) { Object obj = it.next(); if (needDelete(obj)) //needDelete返回boolean,決定是否要刪除 { //todo delete } index ++; }
it.remove();
list.remove(obj);
list.remove(index);
list.remove(obj,index);
迭代器支援從原集合中刪除安全地刪除元素,當開啟迭代器的同時也可以對原集合進行修改。如果你想在迴圈語句中刪除集合中的某個元素,就要用迭代器iterator的remove()方法,因為它的remove()方法不僅會刪除元素,還會維護一個標誌,用來記錄目前是不是可刪除狀態。
4.一道Java記憶體分析的題目
static String str0="0123456789";
static String str1="0123456789";
String str2=str1.substring(5);
String str3=new String(str2);
String str4=new String(str3.toCharArray());
str0=null;
假定str0,...,str4後序程式碼都是隻讀引用。 Java 7中,以上述程式碼為基礎,在發生過一次FullGC後,上述程式碼在Heap空間(不包括PermGen)保留的字元數為()
堆區,只有new出來的物件會放到堆區。所以首先substring是一次new的過程,加上str3和str4一共是5+5+5= 15
5.在Java語言中,下列關於字符集編碼(Character set encoding)和國際化(i18n)的問題,哪些是正確的?
每個中文字元佔用2個位元組,每個英文字元佔用1個位元組
假設資料庫中的字元是以GBK編碼的,那麼顯示資料庫資料的網頁也必須是GBK編碼的。
Java的char型別,通常以UTF-16 Big Endian的方式儲存一個字元。
實現國際化應用常用的手段是利用ResourceBundle類
CD
A: 無論是中文還是英文字元都是佔兩個位元組
B: 不同的編碼之間是可以相互轉換的。
6.多個執行緒可同時操作一個數據,為了保證該資料的準確性,可將操作該資料的部分改為 ()
同步,也就是把資料放到同步程式碼塊中
7.HashMap和HashTable的描述,錯誤的是?
他們都實現了Map介面。
HashMap非執行緒安全,在多個執行緒訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap就必須為之提供額外同步。
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。
通過contains方法可以判斷一個物件是否存在於HashMap或者Hashtable中。
HashTable不允許將null作為value值,HashMap沒有contains方法
8.單例模式中,兩個基本要點是
建構函式私有和唯一例項
9.下面幾個關於Java裡queue的說法哪些是正確的()?
LinkedBlockingQueue是一個可選有界佇列,不允許null值
PriorityQueue,LinkedBlockingQueue都是執行緒不安全的
PriorityQueue是一個無界佇列,不允許null值,入隊和出隊的時間複雜度是O(log(n))
PriorityQueue,ConcurrentLinkedQueue都遵循FIFO原則
LinkedBlockQueue是執行緒安全的,ConcurrentLinkedQueue遵循的是優先順序高的優先原則