diff --git a/notes/HTTP.md b/notes/HTTP.md
index cf6ae204962664ed0dd61554c92cf134bc3a3008..7238542e72b45c0f92acba20326ef5190d603cf4 100644
--- a/notes/HTTP.md
+++ b/notes/HTTP.md
@@ -803,7 +803,7 @@ DELETE /idX/delete HTTP/1.1 -> Returns 404
2. HTTP/1.1 支持管线化处理
3. HTTP/1.1 支持虚拟主机
4. HTTP/1.1 新增状态码 100
-5. HTTP/1.1 只是分块传输编码
+5. HTTP/1.1 支持分块传输编码
6. HTTP/1.1 新增缓存处理指令 max-age
具体内容见上文
diff --git "a/notes/JDK \344\270\255\347\232\204\350\256\276\350\256\241\346\250\241\345\274\217.md" "b/notes/JDK \344\270\255\347\232\204\350\256\276\350\256\241\346\250\241\345\274\217.md"
index 8e2161cc82ced15e715976b8d45292818abf415d..92f53cb3b92726f2cf058483de88e7b8f2729758 100644
--- "a/notes/JDK \344\270\255\347\232\204\350\256\276\350\256\241\346\250\241\345\274\217.md"
+++ "b/notes/JDK \344\270\255\347\232\204\350\256\276\350\256\241\346\250\241\345\274\217.md"
@@ -44,11 +44,11 @@ java.awt.Desktop#getDesktop()
## 2. 简单工厂模式
-在不对用户暴露对象内部逻辑的前提下创建对象;使用通用的接口来创建对象;
+在不对用户暴露对象内部逻辑的前提下创建对象。
## 3. 工厂方法模式
-定义创建对象的接口,但是让子类来决定应该使用哪个类来创建;使用通用的接口来创建对象;
+定义创建对象的接口,但是让子类来决定应该使用哪个类来创建。
```java
java.lang.Proxy#newProxyInstance()
@@ -120,7 +120,7 @@ javax.swing.Action
## 3. 解释器模式
为语言创建解释器,通常由语言的语法和语法分析来定义。
-
+
```java
java.util.Pattern
java.text.Normalizer
@@ -229,7 +229,7 @@ JDBC
## 3. 组合模式
-将对象组合成树形结构来表示整理-部分层次关系,允许用户以相同的方式处理单独对象和组合对象。
+将对象组合成树形结构来表示整体-部分层次关系,允许用户以相同的方式处理单独对象和组合对象。
```java
javax.swing.JComponent#add(Component)
diff --git "a/notes/Java \345\237\272\347\241\200.md" "b/notes/Java \345\237\272\347\241\200.md"
index bc863655e6879d594400020c708590eabcaecb5b..b67e749bea77ecd9fc097388fe0ddf32420284cd 100644
--- "a/notes/Java \345\237\272\347\241\200.md"
+++ "b/notes/Java \345\237\272\347\241\200.md"
@@ -255,9 +255,9 @@ public class EqualExample {
## hashCode()
-hasCode() 返回散列值,而 equals() 是用来判断两个实例是否相等。相等的两个实例散列值一定要相同,但是散列值相同的两个实例不一定相等。
+hasCode() 返回散列值,而 equals() 是用来判断两个实例是否等价。等价的两个实例散列值一定要相同,但是散列值相同的两个实例不一定等价。
-在覆盖 equals() 方法时应当总是覆盖 hashCode() 方法,保证相等的两个实例散列值也相等。
+在覆盖 equals() 方法时应当总是覆盖 hashCode() 方法,保证相等的两个实例散列值也等价。
下面的代码中,新建了两个等价的实例,并将它们添加到 HashSet 中。我们希望将这两个实例当成一样的,只在集合中添加一个实例,但是因为 EqualExample 没有实现 hasCode() 方法,因此这两个实例的散列值是不同的,最终导致集合添加了两个等价的实例。
@@ -710,7 +710,7 @@ SuperExtendExample.func()
- 覆盖(Override)存在于继承体系中,指子类实现了一个与父类在方法声明上完全相同的一个方法;
-- 重载(Overload)也存在于同一个类中,指一个方法与已经存在的方法名称上相同,但是参数类型、个数、顺序至少有一个不同。应该注意的是,返回值不同,其它都相同不算是重载。
+- 重载(Overload)存在于同一个类中,指一个方法与已经存在的方法名称上相同,但是参数类型、个数、顺序至少有一个不同。应该注意的是,返回值不同,其它都相同不算是重载。
# 五、String
@@ -739,7 +739,7 @@ SuperExtendExample.func()
如果一个 String 对象已经被创建过了,那么就会从 String Pool 中取得引用。只有 String 是不可变的,才可能使用 String Pool。
-
+
**3. 安全性**
@@ -773,7 +773,7 @@ String s5 = "bbb";
System.out.println(s4 == s5); // true
```
-Java 虚拟机将堆划分成新生代、老年代和永久代(PermGen Space)。在 Java 6 之前,字符串常量池被放在永久代中,而在 Java 7 时,它被放在堆的其它位置。这是因为永久代的空间有限,如果大量使用字符串的场景下会导致 OutOfMemoryError 错误。
+Java 虚拟机将堆划分成新生代、老年代和永久代(PermGen Space)。在 Java 7 之前,字符串常量池被放在永久代中,而在 Java 7,它被放在堆的其它位置。这是因为永久代的空间有限,如果大量使用字符串的场景下会导致 OutOfMemoryError 错误。
> [What is String interning?](https://stackoverflow.com/questions/10578984/what-is-string-interning) [深入解析 String#intern](https://tech.meituan.com/in_depth_understanding_string_intern.html)
@@ -946,7 +946,7 @@ Throwable 可以用来表示任何可以作为异常抛出的类,分为两种
1. **受检异常** :需要用 try...catch... 语句捕获并进行处理,并且可以从异常中恢复;
2. **非受检异常** :是程序运行时错误,例如除 0 会引发 Arithmetic Exception,此时程序奔溃并且无法恢复。
-
+
> [Java 入门之异常处理](https://www.tianmaying.com/tutorial/Java-Exception) [Java 异常的面试问题及答案 -Part 1](http://www.importnew.com/7383.html)
diff --git "a/notes/\346\225\260\346\215\256\345\272\223\347\263\273\347\273\237\345\216\237\347\220\206.md" "b/notes/\346\225\260\346\215\256\345\272\223\347\263\273\347\273\237\345\216\237\347\220\206.md"
index 46b5e1b831ef3cfc3cbbb59b92dab8caaa36af6f..134c60fa33e0fd3c8ffcb54bdd9540a0288ce90a 100644
--- "a/notes/\346\225\260\346\215\256\345\272\223\347\263\273\347\273\237\345\216\237\347\220\206.md"
+++ "b/notes/\346\225\260\346\215\256\345\272\223\347\263\273\347\273\237\345\216\237\347\220\206.md"
@@ -307,7 +307,7 @@ InnoDB 的 MVCC 使用到的快照存储在 Undo 日志中,该日志通过回
### 4. UPDATE
-将系统版本号作为更新后的数据行快照的创建版本号,同时将系统版本号作为作为更新前的数据行快照的删除版本号。可以理解为先执行 DELETE 后执行 INSERT。
+将系统版本号作为更新后的数据行快照的创建版本号,同时将系统版本号作为更新前的数据行快照的删除版本号。可以理解为先执行 DELETE 后执行 INSERT。
## 快照读与当前读
@@ -401,7 +401,7 @@ SELECT c FROM t WHERE c BETWEEN 10 and 20 FOR UPDATE;
1. 冗余数据,例如学生-2 出现了两次。
2. 修改异常,修改了一个记录中的信息,但是另一个记录中相同的信息却没有被修改。
-3. 删除异常,删除一个信息,那么也会丢失其它信息。例如如果删除了课程-1,需要删除第二行和第三行,那么学生-1 的信息就会丢失。
+3. 删除异常,删除一个信息,那么也会丢失其它信息。例如如果删除了课程-1,需要删除第一行和第三行,那么学生-1 的信息就会丢失。
4. 插入异常,例如想要插入一个学生的信息,如果这个学生还没选课,那么就无法插入。
## 范式
diff --git "a/notes/\350\256\276\350\256\241\346\250\241\345\274\217.md" "b/notes/\350\256\276\350\256\241\346\250\241\345\274\217.md"
index 21ce516feda8731e06a995738d255749176306c4..b7e6c76a5f148c770f120387a60aab13c36a07f3 100644
--- "a/notes/\350\256\276\350\256\241\346\250\241\345\274\217.md"
+++ "b/notes/\350\256\276\350\256\241\346\250\241\345\274\217.md"
@@ -276,13 +276,12 @@ public class ConcreteFactory2 extends Factory {
抽象工厂模式创建的是对象家族,也就是很多对象而不是一个对象,并且这些对象是相关的,也就是说必须一起创建出来。而工厂模式只是用于创建一个对象,这和抽象工厂模式有很大不同。
-抽象工厂模式用到了工厂模式来创建单一对象,在类图左部,AbstractFactory 中的 createProductA 和 createProductB 方法都是让子类来实现,这两个方法单独来看就是在创建一个对象,这符合工厂模式的定义。
+抽象工厂模式用到了工厂模式来创建单一对象,AbstractFactory 中的 createProductA 和 createProductB 方法都是让子类来实现,这两个方法单独来看就是在创建一个对象,这符合工厂模式的定义。
至于创建对象的家族这一概念是在 Client 体现,Client 要通过 AbstractFactory 同时调用两个方法来创建出两个对象,在这里这两个对象就有很大的相关性,Client 需要同时创建出这两个对象。
从高层次来看,抽象工厂使用了组合,即 Cilent 组合了 AbstractFactory,而工厂模式使用了继承。
-
## 代码实现
```java