1. 程式人生 > >牛客網錯題集系列(二)

牛客網錯題集系列(二)

目錄

1.在開發中使用泛型取代非泛型的資料型別(比如用ArrayList取代ArrayList),程式的執行時效能會變得更好。()

2.關於異常丟擲

3.list是一個ArrayList的物件,哪個選項的程式碼填到//todo delete處,可以在Iterator遍歷的過程中正確並安全的刪除一個list中儲存的物件?()

4.一道Java記憶體分析的題目

5.在Java語言中,下列關於字符集編碼(Character set encoding)和國際化(i18n)的問題,哪些是正確的?

6.多個執行緒可同時操作一個數據,為了保證該資料的準確性,可將操作該資料的部分改為 ()

7.HashMap和HashTable的描述,錯誤的是?

8.單例模式中,兩個基本要點是

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遵循的是優先順序高的優先原則