Skip to content

Commit 1c404b8

Browse files
committed
[docs update]typo
1 parent 7cf404b commit 1c404b8

File tree

3 files changed

+21
-16
lines changed

3 files changed

+21
-16
lines changed

docs/database/mysql/mysql-index.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -508,7 +508,7 @@ MySQL 可以简单分为 Server 层和存储引擎层这两层。Server 层处
508508

509509
MySQL 5.7 可以通过查询 `sys` 库的 `schema_unused_indexes` 视图来查询哪些索引从未被使用。
510510

511-
### 知道如何分析语句是否走索引查询
511+
### 知道如何分析 SQL 语句是否走索引查询
512512

513513
我们可以使用 `EXPLAIN` 命令来分析 SQL 的 **执行计划** ,这样就知道语句是否命中索引了。执行计划是指一条 SQL 语句在经过 MySQL 查询优化器的优化会后,具体的执行方式。
514514

docs/java/basis/java-basic-questions-02.md

+17-12
Original file line numberDiff line numberDiff line change
@@ -779,29 +779,33 @@ String s2 = new String("abc");
779779
780780
### String#intern 方法有什么作用?
781781
782-
`String.intern()` 是一个 native(本地)方法,其作用是将指定的字符串对象的引用保存在字符串常量池中,可以简单分为两种情况
782+
`String.intern()` 是一个 `native` (本地) 方法,用来处理字符串常量池中的字符串对象引用。它的工作流程可以概括为以下两种情况
783783
784-
- 如果字符串常量池中保存了对应的字符串对象的引用,就直接返回该引用。
785-
- 如果字符串常量池中没有保存了对应的字符串对象的引用,那就在常量池中创建一个指向该字符串对象的引用并返回。
784+
1. **常量池中已有相同内容的字符串对象**:如果字符串常量池中已经有一个与调用 `intern()` 方法的字符串内容相同的 `String` 对象,`intern()` 方法会直接返回常量池中该对象的引用。
785+
2. **常量池中没有相同内容的字符串对象**:如果字符串常量池中还没有一个与调用 `intern()` 方法的字符串内容相同的对象,`intern()` 方法会将当前字符串对象的引用添加到字符串常量池中,并返回该引用。
786+
787+
总结:
788+
789+
- `intern()` 方法的主要作用是确保字符串引用在常量池中的唯一性。
790+
- 当调用 `intern()` 时,如果常量池中已经存在相同内容的字符串,则返回常量池中已有对象的引用;否则,将该字符串添加到常量池并返回其引用。
786791
787792
示例代码(JDK 1.8:
788793
789794
```java
790-
// 在堆中创建字符串对象”Java“
791-
// 将字符串对象”Java“的引用保存在字符串常量池中
795+
// s1 指向字符串常量池中的 "Java" 对象
792796
String s1 = "Java";
793-
// 直接返回字符串常量池中字符串对象”Java“对应的引用
797+
// s2 也指向字符串常量池中的 "Java" 对象,和 s1 是同一个对象
794798
String s2 = s1.intern();
795-
// 会在堆中在单独创建一个字符串对象
799+
// 在堆中创建一个新的 "Java" 对象,s3 指向它
796800
String s3 = new String("Java");
797-
// 直接返回字符串常量池中字符串对象”Java“对应的引用
801+
// s4 指向字符串常量池中的 "Java" 对象,和 s1 是同一个对象
798802
String s4 = s3.intern();
799-
// s1 和 s2 指向的是堆中的同一个对象
803+
// s1 和 s2 指向的是同一个常量池中的对象
800804
System.out.println(s1 == s2); // true
801-
// s3 s4 指向的是堆中不同的对象
805+
// s3 指向堆中的对象,s4 指向常量池中的对象,所以不同
802806
System.out.println(s3 == s4); // false
803-
// s1 和 s4 指向的是堆中的同一个对象
804-
System.out.println(s1 == s4); //true
807+
// s1 和 s4 都指向常量池中的同一个对象
808+
System.out.println(s1 == s4); // true
805809
```
806810
807811
### String 类型的变量和常量做“+”运算时发生了什么?
@@ -882,6 +886,7 @@ public static String getStr() {
882886
## 参考
883887
884888
- 深入解析 String#intern:<https://tech.meituan.com/2014/03/06/in-depth-understanding-string-intern.html>
889+
- Java String 源码解读:<http://keaper.cn/2020/09/08/java-string-mian-mian-guan/>
885890
- R 大(RednaxelaFX)关于常量折叠的回答:<https://www.zhihu.com/question/55976094/answer/147302764>
886891
887892
<!-- @include: @article-footer.snippet.md -->

docs/java/collection/linkedhashmap-source-code.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ void afterNodeInsertion(boolean evict) { // possibly remove eldest
454454

455455
## LinkedHashMap 和 HashMap 遍历性能比较
456456

457-
`LinkedHashMap` 维护了一个双向链表来记录数据插入的顺序,因此在迭代遍历生成的迭代器的时候,是按照双向链表的路径进行遍历的。这一点相比于 `HashMap` 那种遍历整个 bucket 的方式来说,高效需多
457+
`LinkedHashMap` 维护了一个双向链表来记录数据插入的顺序,因此在迭代遍历生成的迭代器的时候,是按照双向链表的路径进行遍历的。这一点相比于 `HashMap` 那种遍历整个 bucket 的方式来说,高效许多
458458

459459
这一点我们可以从两者的迭代器中得以印证,先来看看 `HashMap` 的迭代器,可以看到 `HashMap` 迭代键值对时会用到一个 `nextNode` 方法,该方法会返回 next 指向的下一个元素,并会从 next 开始遍历 bucket 找到下一个 bucket 中不为空的元素 Node。
460460

@@ -484,7 +484,7 @@ void afterNodeInsertion(boolean evict) { // possibly remove eldest
484484
}
485485
```
486486

487-
相比之下 `LinkedHashMap` 的迭代器则是直接使用通过 `after` 指针快速定位到当前节点的后继节点,简洁高效需多
487+
相比之下 `LinkedHashMap` 的迭代器则是直接使用通过 `after` 指针快速定位到当前节点的后继节点,简洁高效许多
488488

489489
```java
490490
final class LinkedEntryIterator extends LinkedHashIterator
@@ -550,7 +550,7 @@ System.out.println("linkedHashMap get time: " + (end - start));
550550
System.out.println(num);
551551
```
552552

553-
从输出结果来看,因为 `LinkedHashMap` 需要维护双向链表的缘故,插入元素相较于 `HashMap` 会更耗时,但是有了双向链表明确的前后节点关系,迭代效率相对于前者高效了需多。不过,总体来说却别不大,毕竟数据量这么庞大。
553+
从输出结果来看,因为 `LinkedHashMap` 需要维护双向链表的缘故,插入元素相较于 `HashMap` 会更耗时,但是有了双向链表明确的前后节点关系,迭代效率相对于前者高效了许多。不过,总体来说却别不大,毕竟数据量这么庞大。
554554

555555
```bash
556556
map time putVal: 5880

0 commit comments

Comments
 (0)