Skip to content

Commit 4a6b4c2

Browse files
committed
docs: 更新文档
1 parent 45d51bb commit 4a6b4c2

File tree

5 files changed

+14
-14
lines changed

5 files changed

+14
-14
lines changed
51.7 KB
Binary file not shown.
-60 KB
Binary file not shown.

assets/Java/JavaCore/Java_并发_线程.drawio

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

docs/01.Java/01.JavaCore/99.面试/Java_面试_容器(一).md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ Comparator<Person> reverseAge =
187187
- 明确是否需要 `null`,避免滥用导致代码健壮性问题。
188188
- 必要时用 `Optional` 或默认值替代 `null`
189189

190-
### 【简单】对比一下 ArrayList 和 LinkedList?
190+
### 【简单】ArrayList 和 LinkedList 有什么区别
191191

192192
**`ArrayList` vs. `LinkedList`**
193193

@@ -202,9 +202,9 @@ Comparator<Person> reverseAge =
202202
| **空间局部性** | ✅ 更好(CPU 缓存友好) | ❌ 较差(节点分散存储) |
203203

204204
**对比小结**
205-
206-
1. **访问速度**`ArrayList` 随机访问极快(数组索引),`LinkedList` 需遍历链表。
207-
2. **增删效率**`ArrayList` 尾部插入快,中间/头部插入慢;`LinkedList` 头尾插入快,中间插入仍需遍历。
205+
List` 需遍历链表。
206+
2. **增删效率**`ArrayList` 尾部插入快,中间/头部插入慢;`Lin
207+
1. **访问速度**`ArrayList` 随机访问极快(数组索引),`LinkedkedList` 头尾插入快,中间插入仍需遍历。
208208
3. **内存开销**`LinkedList` 每个元素多消耗 2 个指针空间(前驱+后继)。
209209
4. **功能扩展**`LinkedList` 支持队列/栈操作(如 `addFirst()`, `pollLast()`)。
210210

@@ -220,7 +220,7 @@ Comparator<Person> reverseAge =
220220
221221
## Set
222222

223-
### 【简单】比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同
223+
### 【简单】HashSet、LinkedHashSet 和 TreeSet 有什么区别
224224

225225
| 特性 | HashSet | LinkedHashSet | TreeSet |
226226
| ---------------- | -------------------- | ----------------------- | -------------------------------- |
@@ -295,7 +295,7 @@ Set<String> customTreeSet = new TreeSet<>(Comparator.reverseOrder());
295295

296296
## Queue
297297

298-
### 【简单】Queue 与 Deque 的区别
298+
### 【简单】Queue 与 Deque 有什么区别?
299299

300300
::: info Queue vs. Deque
301301
:::
@@ -382,7 +382,7 @@ deque.pop(); // = removeFirst()
382382
Deque<String> safeDeque = new ConcurrentLinkedDeque<>();
383383
```
384384

385-
### 【简单】ArrayDeque 与 LinkedList 的区别
385+
### 【简单】ArrayDeque 与 LinkedList 有什么区别
386386

387387
- **性能优先选 `ArrayDeque`**:队列/栈场景,追求更高吞吐和更低内存。
388388
- **功能灵活选 `LinkedList`**:需要中间操作、随机访问或混合数据结构时。
@@ -535,4 +535,4 @@ PriorityQueue 是自动排序的堆结构队列,默认小顶堆,适用优先
535535

536536
-**高并发**(生产者-消费者模型)。
537537
-**队列大小不固定**(默认几乎无界,但可手动指定容量)。
538-
-**需要更高的吞吐量**(双锁机制减少竞争)。
538+
-**需要更高的吞吐量**(双锁机制减少竞争)。

docs/01.Java/01.JavaCore/99.面试/Java_面试_容器(二).md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ System.gc(); // 仅示例,实际中不推荐显式调用 GC
342342

343343
`ConcurrentHashMap` 是 Java 并发编程中最常用的线程安全 `Map`,其底层实现经历了 **JDK7(分段锁)****JDK8+(CAS + `synchronized` 优化)** 两个重要阶段。以下是核心实现原理:
344344

345-
::: info JDK7 中,`ConcurrentHashMap` 的实现原理是什么?
345+
::: info JDK7 中,ConcurrentHashMap 的实现原理是什么?
346346
:::
347347

348348
JDK7 中,`ConcurrentHashMap` 的核心实现思想是:将整个哈希表分成多个 `Segment`(默认 16 个),每个 `Segment` 是一个独立的 `HashEntry` 数组,**锁粒度细化到`Segment` 级别**,不同 `Segment` 可并发操作。
@@ -369,7 +369,7 @@ ConcurrentHashMap
369369
- 内存占用较高(每个 `Segment` 独立维护数组)。
370370
- 查询时需要两次哈希计算(先定位 `Segment`,再定位 `HashEntry`)。
371371

372-
::: info JDK8 中,`ConcurrentHashMap` 的实现原理是什么?
372+
::: info JDK8 中,ConcurrentHashMap 的实现原理是什么?
373373
:::
374374

375375
JDK8 中,`ConcurrentHashMap` 的核心实现思想是:抛弃 `Segment`,改用 **`Node` 数组 + 链表/红黑树**,锁粒度细化到 **单个桶(链表头节点)**,并引入 **CAS(无锁化)**`synchronized` 结合的方式提升并发性能。
@@ -404,7 +404,7 @@ ConcurrentHashMap
404404
- 使用 `spread()` 方法优化哈希计算,减少冲突。
405405
- `size()` 方法通过 `CounterCell` 分段统计,避免全局锁。
406406

407-
::: info JDK8 中,`ConcurrentHashMap` 关键操作流程是怎样的?
407+
::: info JDK8 中,ConcurrentHashMap 关键操作流程是怎样的?
408408
:::
409409

410410
**(1)PUT 操作(JDK8)**
@@ -424,7 +424,7 @@ ConcurrentHashMap
424424
1. 当元素数量超过阈值(`sizeCtl`),触发扩容。
425425
2. 其他线程检测到扩容时,可协助迁移数据(`transfer` 方法)。
426426

427-
::: info `ConcurrentHashMap` 在 JDK7 和 JDK8 中的实现有哪些差异?
427+
::: info ConcurrentHashMap 在 JDK7 和 JDK8 中的实现有哪些差异?
428428
:::
429429

430430
| **对比项** | **JDK7(分段锁)** | **JDK8+(CAS + `synchronized`** |
@@ -567,4 +567,4 @@ map.putIfAbsent("key", 1);
567567
map.computeIfAbsent("key", k -> 1);
568568
```
569569

570-
总结:ConcurrentHashMap 只保证单个方法的原子性,复合操作需要特别处理才能保证线程安全。
570+
总结:ConcurrentHashMap 只保证单个方法的原子性,复合操作需要特别处理才能保证线程安全。

0 commit comments

Comments
 (0)