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背包问题
      • 完全背包:可重复利用
posted @ 2019-01-11 15:34  李怕怕  阅读(1597)  评论(0编辑  收藏  举报