Java面試系列14
一、ArrayList和Vector的區別,HashMap和Hashtable的區別
就ArrayList與Vector主要從二方面來說:
1.同步性:Vector是執行緒安全的,也就是說是同步的,而ArrayList是執行緒序不安全的,不是同步的
2.資料增長:當需要增長時,Vector預設增長為原來一倍,而ArrayList卻是原來的一半
就HashMap與HashTable主要從三方面來說:
1、歷史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map介面的一個實現
2、同步性:Hashtable是執行緒安全的,也就是說是同步的,而HashMap是執行緒序不安全的,不是同步的
3、值:只有HashMap可以讓你將空值作為一個表的條目的key或value
二、char型變數中能不能存貯一箇中文漢字?為什麼?
是能夠定義成為一箇中文的,因為java中以unicode編碼,一個char佔16個位元組,所以放一箇中文是沒問題的
如果用gbk的本地編碼的話可以.如果用utf-8的話,可能不行。
三、float型float f=3.4是否正確?
答:不正確。精度不準確,應該用強制型別轉換,如下所示:float f=(float)3.4; float f = 3.4f;
四、介紹JAVA中的Collection FrameWork(包括如何寫自己的資料結構)?
答:Collection FrameWork如下:
Collection
List
LinkedList
ArrayList
Vector
Stack
Set
Map
Hashtable
HashMap
WeakHashMap
Collection是最基本的集合介面,一個Collection代表一組Object,即Collection的元素(Elements)
Map提供key到value的對映
五、STRING與STRINGBUFFER的區別
STRING的長度是不可變的,STRINGBUFFER的長度是可變的。
如果你對字串中的內容經常進行操作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffer的toString()方法
六、談談final, finally, finalize的區別
final—修飾符(關鍵字)如果一個類被宣告為final,意味著它不能再派生出新的子類,不能作為父類被繼承。
因此一個類不能既被宣告為abstract的,又被宣告為final的。
將變數或方法宣告為final,可以保證它們在使用中不被改變。
被宣告為final的變數必須在宣告時給定初值,而在以後的引用中只能讀取,不可修改。
被宣告為final的方法也同樣只能使用,不能過載。
finally—再異常處理時提供 finally 塊來執行任何清除操作。
如果丟擲一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)
finalize—方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將物件從記憶體中清除出去之前做必要的清理工作。
這個方法是由垃圾收集器在確定這個物件沒有被引用時對這個物件呼叫的。
它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。
finalize() 方法是在垃圾收集器刪除物件之前對這個物件呼叫的
七、forward和redirect的區別
forward: an internal transfer in servlet
redirect: 重定向,有2次request,第2次request將丟失第一次的attributs/parameters等
forward是伺服器請求資源,伺服器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器,瀏覽器根本不知道伺服器傳送的內容是從哪兒來的,所以它的位址列中還是原來的地址。
redirect就是服務端根據邏輯,傳送一個狀態碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛才請求的所有引數重新請求,所以session,request引數都可以獲取。