提交 64aed604 编写于 作者: C CyC2018

auto commit

上级 0633ee3b
...@@ -803,7 +803,7 @@ DELETE /idX/delete HTTP/1.1 -> Returns 404 ...@@ -803,7 +803,7 @@ DELETE /idX/delete HTTP/1.1 -> Returns 404
2. HTTP/1.1 支持管线化处理 2. HTTP/1.1 支持管线化处理
3. HTTP/1.1 支持虚拟主机 3. HTTP/1.1 支持虚拟主机
4. HTTP/1.1 新增状态码 100 4. HTTP/1.1 新增状态码 100
5. HTTP/1.1 只是分块传输编码 5. HTTP/1.1 支持分块传输编码
6. HTTP/1.1 新增缓存处理指令 max-age 6. HTTP/1.1 新增缓存处理指令 max-age
具体内容见上文 具体内容见上文
......
...@@ -44,11 +44,11 @@ java.awt.Desktop#getDesktop() ...@@ -44,11 +44,11 @@ java.awt.Desktop#getDesktop()
## 2. 简单工厂模式 ## 2. 简单工厂模式
在不对用户暴露对象内部逻辑的前提下创建对象;使用通用的接口来创建对象; 在不对用户暴露对象内部逻辑的前提下创建对象
## 3. 工厂方法模式 ## 3. 工厂方法模式
定义创建对象的接口,但是让子类来决定应该使用哪个类来创建;使用通用的接口来创建对象; 定义创建对象的接口,但是让子类来决定应该使用哪个类来创建
```java ```java
java.lang.Proxy#newProxyInstance() java.lang.Proxy#newProxyInstance()
...@@ -120,7 +120,7 @@ javax.swing.Action ...@@ -120,7 +120,7 @@ javax.swing.Action
## 3. 解释器模式 ## 3. 解释器模式
为语言创建解释器,通常由语言的语法和语法分析来定义。 为语言创建解释器,通常由语言的语法和语法分析来定义。
```java ```java
java.util.Pattern java.util.Pattern
java.text.Normalizer java.text.Normalizer
...@@ -229,7 +229,7 @@ JDBC ...@@ -229,7 +229,7 @@ JDBC
## 3. 组合模式 ## 3. 组合模式
将对象组合成树形结构来表示整-部分层次关系,允许用户以相同的方式处理单独对象和组合对象。 将对象组合成树形结构来表示整-部分层次关系,允许用户以相同的方式处理单独对象和组合对象。
```java ```java
javax.swing.JComponent#add(Component) javax.swing.JComponent#add(Component)
......
...@@ -255,9 +255,9 @@ public class EqualExample { ...@@ -255,9 +255,9 @@ public class EqualExample {
## hashCode() ## hashCode()
hasCode() 返回散列值,而 equals() 是用来判断两个实例是否相等。相等的两个实例散列值一定要相同,但是散列值相同的两个实例不一定相等 hasCode() 返回散列值,而 equals() 是用来判断两个实例是否等价。等价的两个实例散列值一定要相同,但是散列值相同的两个实例不一定等价
在覆盖 equals() 方法时应当总是覆盖 hashCode() 方法,保证相等的两个实例散列值也相等 在覆盖 equals() 方法时应当总是覆盖 hashCode() 方法,保证相等的两个实例散列值也等价
下面的代码中,新建了两个等价的实例,并将它们添加到 HashSet 中。我们希望将这两个实例当成一样的,只在集合中添加一个实例,但是因为 EqualExample 没有实现 hasCode() 方法,因此这两个实例的散列值是不同的,最终导致集合添加了两个等价的实例。 下面的代码中,新建了两个等价的实例,并将它们添加到 HashSet 中。我们希望将这两个实例当成一样的,只在集合中添加一个实例,但是因为 EqualExample 没有实现 hasCode() 方法,因此这两个实例的散列值是不同的,最终导致集合添加了两个等价的实例。
...@@ -710,7 +710,7 @@ SuperExtendExample.func() ...@@ -710,7 +710,7 @@ SuperExtendExample.func()
- 覆盖(Override)存在于继承体系中,指子类实现了一个与父类在方法声明上完全相同的一个方法; - 覆盖(Override)存在于继承体系中,指子类实现了一个与父类在方法声明上完全相同的一个方法;
- 重载(Overload)存在于同一个类中,指一个方法与已经存在的方法名称上相同,但是参数类型、个数、顺序至少有一个不同。应该注意的是,返回值不同,其它都相同不算是重载。 - 重载(Overload)存在于同一个类中,指一个方法与已经存在的方法名称上相同,但是参数类型、个数、顺序至少有一个不同。应该注意的是,返回值不同,其它都相同不算是重载。
# 五、String # 五、String
...@@ -739,7 +739,7 @@ SuperExtendExample.func() ...@@ -739,7 +739,7 @@ SuperExtendExample.func()
如果一个 String 对象已经被创建过了,那么就会从 String Pool 中取得引用。只有 String 是不可变的,才可能使用 String Pool。 如果一个 String 对象已经被创建过了,那么就会从 String Pool 中取得引用。只有 String 是不可变的,才可能使用 String Pool。
<div align="center"> <img src="../pics//f76067a5-7d5f-4135-9549-8199c77d8f1c.jpg"/> </div><br> <div align="center"> <img src="../pics//f76067a5-7d5f-4135-9549-8199c77d8f1c.jpg" width=""/> </div><br>
**3. 安全性** **3. 安全性**
...@@ -773,7 +773,7 @@ String s5 = "bbb"; ...@@ -773,7 +773,7 @@ String s5 = "bbb";
System.out.println(s4 == s5); // true 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) </br> [深入解析 String#intern](https://tech.meituan.com/in_depth_understanding_string_intern.html) > [What is String interning?](https://stackoverflow.com/questions/10578984/what-is-string-interning) </br> [深入解析 String#intern](https://tech.meituan.com/in_depth_understanding_string_intern.html)
...@@ -946,7 +946,7 @@ Throwable 可以用来表示任何可以作为异常抛出的类,分为两种 ...@@ -946,7 +946,7 @@ Throwable 可以用来表示任何可以作为异常抛出的类,分为两种
1. **受检异常** :需要用 try...catch... 语句捕获并进行处理,并且可以从异常中恢复; 1. **受检异常** :需要用 try...catch... 语句捕获并进行处理,并且可以从异常中恢复;
2. **非受检异常** :是程序运行时错误,例如除 0 会引发 Arithmetic Exception,此时程序奔溃并且无法恢复。 2. **非受检异常** :是程序运行时错误,例如除 0 会引发 Arithmetic Exception,此时程序奔溃并且无法恢复。
<div align="center"> <img src="../pics//PPjwP.png"/> </div><br> <div align="center"> <img src="../pics//PPjwP.png" width="600"/> </div><br>
> [Java 入门之异常处理](https://www.tianmaying.com/tutorial/Java-Exception) </br> [Java 异常的面试问题及答案 -Part 1](http://www.importnew.com/7383.html) > [Java 入门之异常处理](https://www.tianmaying.com/tutorial/Java-Exception) </br> [Java 异常的面试问题及答案 -Part 1](http://www.importnew.com/7383.html)
......
...@@ -307,7 +307,7 @@ InnoDB 的 MVCC 使用到的快照存储在 Undo 日志中,该日志通过回 ...@@ -307,7 +307,7 @@ InnoDB 的 MVCC 使用到的快照存储在 Undo 日志中,该日志通过回
### 4. UPDATE ### 4. UPDATE
将系统版本号作为更新后的数据行快照的创建版本号,同时将系统版本号作为作为更新前的数据行快照的删除版本号。可以理解为先执行 DELETE 后执行 INSERT。 将系统版本号作为更新后的数据行快照的创建版本号,同时将系统版本号作为更新前的数据行快照的删除版本号。可以理解为先执行 DELETE 后执行 INSERT。
## 快照读与当前读 ## 快照读与当前读
...@@ -401,7 +401,7 @@ SELECT c FROM t WHERE c BETWEEN 10 and 20 FOR UPDATE; ...@@ -401,7 +401,7 @@ SELECT c FROM t WHERE c BETWEEN 10 and 20 FOR UPDATE;
1. 冗余数据,例如学生-2 出现了两次。 1. 冗余数据,例如学生-2 出现了两次。
2. 修改异常,修改了一个记录中的信息,但是另一个记录中相同的信息却没有被修改。 2. 修改异常,修改了一个记录中的信息,但是另一个记录中相同的信息却没有被修改。
3. 删除异常,删除一个信息,那么也会丢失其它信息。例如如果删除了课程-1,需要删除第行和第三行,那么学生-1 的信息就会丢失。 3. 删除异常,删除一个信息,那么也会丢失其它信息。例如如果删除了课程-1,需要删除第行和第三行,那么学生-1 的信息就会丢失。
4. 插入异常,例如想要插入一个学生的信息,如果这个学生还没选课,那么就无法插入。 4. 插入异常,例如想要插入一个学生的信息,如果这个学生还没选课,那么就无法插入。
## 范式 ## 范式
......
...@@ -276,13 +276,12 @@ public class ConcreteFactory2 extends Factory { ...@@ -276,13 +276,12 @@ public class ConcreteFactory2 extends Factory {
抽象工厂模式创建的是对象家族,也就是很多对象而不是一个对象,并且这些对象是相关的,也就是说必须一起创建出来。而工厂模式只是用于创建一个对象,这和抽象工厂模式有很大不同。 抽象工厂模式创建的是对象家族,也就是很多对象而不是一个对象,并且这些对象是相关的,也就是说必须一起创建出来。而工厂模式只是用于创建一个对象,这和抽象工厂模式有很大不同。
抽象工厂模式用到了工厂模式来创建单一对象,在类图左部,AbstractFactory 中的 createProductA 和 createProductB 方法都是让子类来实现,这两个方法单独来看就是在创建一个对象,这符合工厂模式的定义。 抽象工厂模式用到了工厂模式来创建单一对象,AbstractFactory 中的 createProductA 和 createProductB 方法都是让子类来实现,这两个方法单独来看就是在创建一个对象,这符合工厂模式的定义。
至于创建对象的家族这一概念是在 Client 体现,Client 要通过 AbstractFactory 同时调用两个方法来创建出两个对象,在这里这两个对象就有很大的相关性,Client 需要同时创建出这两个对象。 至于创建对象的家族这一概念是在 Client 体现,Client 要通过 AbstractFactory 同时调用两个方法来创建出两个对象,在这里这两个对象就有很大的相关性,Client 需要同时创建出这两个对象。
从高层次来看,抽象工厂使用了组合,即 Cilent 组合了 AbstractFactory,而工厂模式使用了继承。 从高层次来看,抽象工厂使用了组合,即 Cilent 组合了 AbstractFactory,而工厂模式使用了继承。
## 代码实现 ## 代码实现
```java ```java
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册