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