JAVA面試——數據結構&算法

    • Queue
      • 繼承Collection接口,Deque、LinkedList、PriorityQueue、BlockingQueue
      • 用於緩衝、併發訪問等場景
    • Set
      • 繼承Collection接口,HashSet(哈希表)、TreeSet(紅黑樹)
      • 判斷重複元素調用hashCode()和equal()方法實現
    • List
      • ArrayList、LinkedList、Vector、Stack
    • Map
      • HashMap、ConcurrentHashMap
    • Tree
      • 紅黑樹
        • 根是黑色的
        • 葉子節點是黑色的空節點
        • 紅色節點子節點是黑色的
        • 包含相同數目的黑色節點
        • TreeMap、TreeSet、HashMap
        • 解決二叉查找樹會退化成線性結構的缺點
      • B樹、B+樹、B*樹
        • B+樹不維護關鍵字具體信息,不考慮Value的存儲,全部須要信息在葉子節點
        • B*樹在非葉子節點兄弟之間增長指針,關鍵字個數至少爲(2/3)* M
      • LSM樹
        • 大樹分紅多個小樹
 
  • HashMap HashTable區別
    • HashTable方法同步,方法用synchronized修飾,多線程場合
    • HashTable不容許null值
    • 遍歷方式,HashTable使用Enumeration遍歷,HashMap使用Iterator遍歷
    • 哈希值使用不一樣,HashTable直接使用hashCode
    • hash數組大小默認11,HshTable增長爲old*2 + 1,HashMap默認16,增長爲2的指數倍
    • HashTable線程安全,可是須要得到對象鎖,通常使用CurrentHashMap
      • HashTable競爭同一把鎖,ConcurrentHashMap分段加鎖
  • HashMap Concurrent HashMap區別
    • 非線程安全&線程安全
    • 1.7ConcurrentHashMap對Hash桶分段segment(鎖),1.8Node數組+鏈表+紅黑樹,併發控制使用Synchronized和CAS來操做
    • HashTable使用Synchronized保證線程安全,效率低
    • ConcurrentHashMap鎖粒度更精細,併發性能好
  • LinkedList ArrayList區別
    • 雙向鏈表&Object數組
    • 插入刪除&隨機查找
    • 都是不一樣步的,不保證線程安全
    • 內存空間佔用,ArrayList在結尾預留容量空間,LinkedList每個元素消耗更多的空間
  • ArrayList Vector區別
    • Vector類全部方法同步,ArrayList不是同步的
  • HashMap實現
    • 數組+鏈表,鏈表長度大於8時轉化爲紅黑樹
  • comparable和comparator區別
    • comparable有一個compareTo(Object obj)方法用來排序
    • comparator接口有一個compare(Object obj1,Object obj2)方法用來排序
  • 數組排序用Arrays.sort(),集合排序用Collections.sort()

  • 排序
    • 快速排序
      • 求解Kth Element問題
    • 堆排序
      • 求解TopK Element問題
    • 桶排序
      • 出現頻率最多的K個數
  • 搜索
    • 廣度優先
      • 求解最短路徑問題
      • 用隊列實現
      • 標記遍歷過的節點
    • 深度優先
      • 求解可達性問題
      • 使用遞歸棧實現
      • 標記遍歷過的節點
    • 回溯法(Backtracking)
      • 求解排列組合問題
      • 進入遞歸時標記爲已訪問,遞歸返回時標記爲未訪問
  • 動態規劃
    • 0-1揹包問題
      • 徹底揹包:可重複利用
相關文章
相關標籤/搜索