数据结构与算法之——常见面试题及解答2
一 概述
- 为什么 HashMap 线程不安全?如何解决?
- ConcurrentHashMap 具体实现(JDK1.8)
- LRU 缓存原理(必问经典设计题)
- HashMap 的扩容机制?
- 二叉树遍历方式(递归 + 非递归)
- 红黑树 vs AVL树?
- 数组与链表的区别?
- Java 的 Stack 和 Deque 区别?
二 面试题解答(仅供参考)
2.1 为什么 HashMap 线程不安全?如何解决?
1 | 1、问题背景: |
2.2 ConcurrentHashMap 具体实现(JDK1.8)
1 | 1、简要原理: |
2.3 LRU 缓存原理(必问经典设计题)
1 | 面试官:请你实现一个 O(1) 时间复杂度的 LRU 缓存? |
2.4 HashMap 的扩容机制?
1 | 1、触发时机: |
2.5 二叉树遍历方式(递归 + 非递归)
遍历 | 顺序 | 用途 |
---|---|---|
前序遍历 | 根→左→右 | 构建树 |
中序遍历 | 左→根→右 | 排序输出(BST) |
后序遍历 | 左→右→根 | 删除节点、释放内存 |
层序遍历 | 一层一层(BFS) | 最短路径等题目 |
2.6 红黑树 vs AVL树?
特性 | 红黑树 | AVL 树 |
---|---|---|
平衡性 | 相对平衡 | 严格平衡 |
插入/删除复杂度 | O(log n),少量旋转 | O(log n),旋转次数多 |
使用场景 | Java TreeMap / TreeSet | 数据库索引(读多写少) |
2.7 数组与链表的区别?
特性 | 数组 | 链表 |
---|---|---|
内存连续性 | 是 | 否 |
插入/删除 | 慢(O(n)) | 快(O(1)) |
查找 | 快(O(1)) | 慢(O(n)) |
随机访问 | 支持 | 不支持 |
应用场景 | 顺序读写 | 频繁增删元素 |
2.8 Java 的 Stack 和 Deque 区别?
1 | -Stack 是同步的,底层是 Vector,已不推荐使用 |