java 面試知識點筆記(十四)異常體系

問:Error和Exception的區別?java

ps:Throwable上層是Object算法

  • Error:程序沒法處理的系統錯誤,編譯器不作檢查
  • Exception:程序能夠處理的異常,捕獲後可能恢復

RuntimeException:不可預知的,程序應當自行避免(好比加入if(name!=null))數組

非RuntimeException:可預知的,從編譯器校驗的異常安全

從責任角度看:數據結構

  1. Error屬於JVM須要負擔的責任
  2. RuntimeException是程序應該負擔的責任
  3. CheckedException可檢查異常是java編譯器應該負擔的責任

RuntimeException常見的異常:框架

  1. NullPointerException - 空指針引用異常
  2. ClassCastException - 類型強制轉換異常
  3. IllegalArgumentException - 傳遞非法參數異常
  4. IndexOutOfBoundsException - 下標越界異常
  5. NumberFormatException - 數字格式異常
  6. ArithmeticException - 算術運算異常
  7. ArrayStoreException - 向數組中存放與聲明類型不兼容對象異常
  8. NegativeArraySizeException - 建立一個大小爲負數的數組錯誤異常
  9. SecurityException - 安全異常
  10. UnsupportedOperationException - 不支持的操做異常 

非RuntimeException常見異常:優化

  1. ClassNotFoundException 找不到指定class的異常
  2. IOexception IO操做異常
  3. FileNotFoundException 找不到指定文件的異常

Error常見的異常:spa

  1. NoClassDefFoundError 找不到class定義的異常(class或jar不存在、類文件存在可是在不一樣的域中、大小寫問題,javac無視大小寫)
  2. StackOverflowError 深遞歸致使棧被消耗盡而拋出的異常
  3. OutOfMemoryError 內存溢出異常

 

數據結構考點:指針

  1. 數組和鏈表的區別
  2. 鏈表的操做,如反轉、鏈表環路檢測、雙向鏈表、循環鏈表相關操做
  3. 隊列、棧的應用
  4. 二叉樹的遍歷方式(前序中序後序)以及遞歸和非遞歸的實現
  5. 紅黑樹旋轉

 

算法考點:orm

  1. 內部排序:如遞歸排序、交換排序(冒泡、快排)、選擇排序、插入排序
  2. 外部排序:應掌握如何利用有限的內存配合海量的歪脖存儲來處理超大的數據集,寫不出來也要有相關思路(歸併排序)

算法常問的問題:

  1. 哪些排序是不穩定的,穩定意味着什麼?(快排、堆排)
  2. 不一樣數據量級,各類排序最好或者最差的狀況(算法的時間、空間複雜度)
  3. 如何優化算法(空間換時間)

java集合框架 主要集中在java.util包中 其中最關鍵的是juc包

集合中set和list:

總結就是:

  1. list:有序可重複(可經過索引直接查找元素)
    1. 底層是數組ArrayList和Vector。查找第n個數據時間複雜度是O(1),插入或者刪除時間複雜度是O(N),在數組的任意位置插入或者刪除,後面的數據都要移動(最好的狀況是O(1)最壞O(N)),因此整體的時間複雜度仍然是O(N)
    2. 底層是鏈表 LinkedList。在鏈表中查找第n個數據的時間複雜度是 O(N),可是插入和刪除數據的時間複雜度是O(1) ,由於只要改指針就好了
  2. list:無序不重複(查找只能經過遍歷整個集合)
    1. 底層是hashMap的hashSet 時間複雜度爲O(1)  
    2. 底層是二叉樹 TreeSet 時間複雜度爲O(log(n))

經常使用數據結構的時間複雜度:

Data Structure Add Find Delete GetByIndex
Array (T[]) O(n) O(n) O(n) O(1)
Linked list (LinkedList<T>) O(1) O(n) O(n) O(n)
Resizable array list (List<T>) O(1) O(n) O(n) O(1)
Stack (Stack<T>) O(1) - O(1) -
Queue (Queue<T>) O(1) - O(1) -
Hash table (Dictionary<K,T>) O(1) O(1) O(1) -
Tree-based dictionary(SortedDictionary<K,T>) O(log n) O(log n) O(log n) -
Hash table based set (HashSet<T>) O(1) O(1) O(1) -
Tree based set (SortedSet<T>) O(log n) O(log n) O(log n) -
相關文章
相關標籤/搜索