JAVA面试高频考点:CopyOnWriteArrayList基于写时复制实现线程安全

张开发
2026/4/16 11:41:28 15 分钟阅读

分享文章

JAVA面试高频考点:CopyOnWriteArrayList基于写时复制实现线程安全
问CopyOnWriteArrayList 了解多少答基于写时复制实现的线程安全 List位于并发包写操作复制新数组修改读操作直接访问原数组读写分离读无锁不阻塞写加锁保证安全迭代器安全不会抛出并发修改异常记忆口诀写时复制读写分离线程安全问CopyOnWriteArrayList 的适用场景是什么答读多写少的高并发场景读性能极高迭代频繁的场景迭代器安全无异常不适合写操作频繁、数据量大的场景不适合对数据实时性要求高的场景记忆口诀读多写少迭代频繁问CopyOnWriteArrayList 的优缺点是什么答优点线程安全、读性能高、迭代器安全缺点写操作开销大内存占用高缺点数据存在弱一致性读可能不是最新缺点不适合大数据量、高频写场景记忆口诀读快写慢内存开销大问说下你对红黑树的理解为什么不用二叉树 / 平衡树答红黑树是自平衡二叉查找树通过 5 条规则维持平衡节点非红即黑根节点、叶子节点为黑红节点子节点为黑任意节点到叶子的路径黑色节点数量相同最坏时间复杂度 O (log n)插入删除效率高记忆口诀红黑五规则自平衡 O (log n)问为什么不用普通二叉树答普通二叉树无平衡机制最坏退化为链表最坏时间复杂度 O (n)性能不可靠红黑树保证平衡最坏时间复杂度 O (log n)红黑树查询、插入、删除性能更稳定记忆口诀普通二叉易退化红黑树稳 O (log n)问为什么不用平衡二叉树AVL 树答AVL 树平衡要求更严格维护平衡开销大AVL 树插入删除需多次旋转性能低于红黑树红黑树平衡要求宽松旋转次数少效率更高红黑树在平衡性和性能间取得更好平衡记忆口诀AVL 严格平衡开销大红黑树更高效问红黑树怎么保持平衡的答通过旋转和节点染色两种核心操作维持平衡左旋提升右子树为父节点右旋提升左子树为父节点节点染色调整红黑属性避免连续红节点插入删除时配合操作满足红黑树 5 条规则记忆口诀旋转加染色维持红黑平衡问红黑树的左旋和右旋分别是什么答左旋将节点的右子树提升为其父节点右旋将节点的左子树提升为其父节点旋转用于调整树结构维持高度平衡旋转配合染色保证红黑树规则不被破坏记忆口诀左旋提右右旋提左问红黑树节点染色的作用是什么答调整节点颜色满足红黑树的 5 条规则避免出现连续红节点维持路径黑节点数一致配合旋转操作在插入删除后恢复平衡用染色减少旋转次数提升操作效率记忆口诀染色调属性配合旋转稳平衡问HashMap 的 put 实现是怎样的答计算 key 的哈希值定位数组桶的索引位置桶为空则直接插入桶不为空则处理哈希冲突链表遍历插入长度超 8 且数组≥64 则转红黑树插入后检查容量超过阈值则触发扩容记忆口诀哈希定位链树处理扩容收尾问HashMap 如何处理哈希冲突答采用链地址法冲突元素以链表存储在桶中链表长度超 8 且数组≥64链表转为红黑树红黑树提升查询效率避免链表过长性能下降红黑树节点数 6退化为链表记忆口诀链地址法链树互转问HashMap 的 put 方法中 resize () 的作用答数组容量不足时扩容为原容量的 2 倍重新计算所有元素的哈希索引迁移数据保证数组长度为 2 的幂次优化哈希定位避免哈希冲突过多维持查询性能记忆口诀扩容两倍重哈希迁移

更多文章