1.final 關鍵字的作用?
被 final 修飾的類不可以被繼承被 final 修飾的方法不可以被重寫被 final 修飾的變量不可以被改變.如果修飾引用,那麼表示引用不可變,引用指向的內容可變.被 final 修飾的方法,JVM 會嘗試將其內聯,以提高運行效率,被 final 修飾的變量,在編譯階段會存入常量池中.
2.abstract class 和 interface 有什麼區別?
抽象類(abstract class):一個類中出現了抽象方法,就是抽象類不能創建abstract類的實例,可以創建一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例不能有抽象構造函數或抽象靜態方法抽象方法:只有方法主體,沒有具體代碼的方法Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現這樣的接口而獲得。接口只可以定義 static final 成員變量。除了該實現類不能從接口定義中繼承行為。可以在實現了該接口的類的任何對象上調用接口的方法。由於有抽象類,它允許使用接口名作為引用變量的類型instanceof 運算符可以用來決定某對象的類是否實現了接口
3. Java 集合類:list、set、queue、map、stack 的特點與用法?
MapMap 是鍵值對,鍵 Key 是唯一不能重複的,一個鍵對應一個值,value值可以重複。TreeMap 可以保證順序,HashMap 不保證順序,即為無序的,Map 中可以將 Key 和 Value 單獨抽取出來KeySet()方法可以將所有的 keys 抽取成一個 SetValues()方法可以將 map 中所有的 values 抽取成一個集合。 Set(去重無序)不包含重複元素的集合set 中最多包含一個 null 元素只能用 Iterator 實現單項遍歷, Set 中沒有同步方法。List(有序)有序的可重複集合可以在任意位置增加刪除元素用 Iterator 實現單向遍歷,也可用ListIterator 實現雙向遍歷。Queue(隊列)Queue 遵從先進先出原則使用時儘量避免 add()和 remove()方法,而是使用 offer()來添加元素,使用 poll()來移除元素優點是可以通過返回值來判斷是否成功LinkedList實現了 Queue 接口,Queue 通常不允許插入 null 元素。StackStack 遵從後進先出原則Stack 繼承自 Vector通過五個操作對類 Vector 進行擴展允許將向量視為堆棧提供 push 和 pop 操作,取堆棧頂點的 peek()方法、測試堆棧是否為空的 empty 方法用法如果涉及堆棧,隊列等操作,建議使用 List對於快速插入和刪除元素的,建議使用 LinkedList。如果需要快速隨機訪問元素的,建議使用ArrayList。
4.說出 ArrayList,Vector, LinkedList 的存儲性能和特性?
ArrayList (Vector )都是使用數組方式存儲數據此數組元素數大於實際存儲的數據以便增加和插入元素都允許直接按序號索引元素插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢Vector 由於使用了 synchronized 方法(線程安全),通常性能上較 ArrayList 差,LinkedList 使用雙向鍊表實現存儲按序號索引數據需要進行前向或後向遍歷,插入數據時只需要記錄本項的前後項即可,所以插入速度較快。
5.內存洩漏和內存溢出?
內存洩漏(memoryleak)應用程式在申請內存後,無法釋放已經申請的內存空間,一次內存洩漏危害可以忽略如果任其發展最終會導致內存溢出(outofmemory)。如讀取文件後流要進行及時的關閉以及對資料庫連接的釋放。內存溢出(outofmemory)應用程式在申請內存時,沒有足夠的內存空間供其使用。如我們在項目中對於大批量數據的導入,採用分批量提交的方式。
若認為不準確,請自行查詢正確答案,此處僅供參考