Skip to content

Commit 8aece39

Browse files
authored
Merge pull request #2 from CyC2018/master
2018.4.19合并
2 parents fdbeca2 + b3b7819 commit 8aece39

24 files changed

+269
-265
lines changed

README.md

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,28 @@
11
<!-- ![](https://img.shields.io/badge/update-today-blue.svg) ![](https://img.shields.io/badge/gitbook-making-lightgrey.svg)</br> -->
22
|||||||||||
33
| :--------: | :---------: | :---------: | :---------: | :---------: | :---------:| :---------: | :-------: | :-------:| :------:|
4-
|网络[:cloud:](#网络-cloud) |操作系统[:computer:](#操作系统-computer)| 算法[:pencil2:](#数据结构与算法-pencil2)| 面向对象[:couple:](#面向对象-couple) |数据库[:floppy_disk:](#数据库-floppy_disk)| Java [:coffee:](#java-coffee)| 分布式[:sweat_drops:](#分布式-sweat_drops)| 工具[:hammer:](#工具-hammer)| 编码实践[:speak_no_evil:](#编码实践-speak_no_evil)| 后记[:memo:](#后记-memo) |
4+
| 算法[:pencil2:](#算法-pencil2) | 操作系统[:computer:](#操作系统-computer)|网络[:cloud:](#网络-cloud) | 面向对象[:couple:](#面向对象-couple) |数据库[:floppy_disk:](#数据库-floppy_disk)| Java [:coffee:](#java-coffee)| 分布式[:sweat_drops:](#分布式-sweat_drops)| 工具[:hammer:](#工具-hammer)| 编码实践[:speak_no_evil:](#编码实践-speak_no_evil)| 后记[:memo:](#后记-memo) |
55
</br>
66

77
:loudspeaker: 本仓库不参与商业行为,不向读者收取任何费用。
88

99
:loudspeaker: This repository is not engaging in business activities, and does not charge readers any fee.
1010
</br></br>
1111

12-
## 网络 :cloud:
12+
## 算法 :pencil2:
1313

14-
> [计算机网络](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/计算机网络.md)
1514

16-
整理自《计算机网络 第七版》,重点内容会在标题后面加 \*
15+
> [剑指 Offer 题解](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/剑指%20offer%20题解.md)
1716
18-
> [HTTP](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/HTTP.md)
17+
《剑指 Offer 第二版》的最优解,在牛客网在线编程中出现的题目都已 AC。
1918

20-
整理自《图解 HTTP》
19+
> [Leetcode 题解](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Leetcode%20题解.md)
20+
21+
对题目做了一个分类,并对每种题型的解题思路做了总结。
22+
23+
> [算法](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/算法.md)
24+
25+
整理自《算法 第四版》
2126

2227
## 操作系统 :computer:
2328

@@ -29,19 +34,17 @@
2934
3035
整理自《鸟哥的 Linux 私房菜》
3136

32-
## 数据结构与算法 :pencil2:
3337

34-
> [算法](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/算法.md)
38+
## 网络 :cloud:
3539

36-
整理自《算法 第四版》
40+
> [计算机网络](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/计算机网络.md)
3741
38-
> [剑指 Offer 题解](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/剑指%20offer%20题解.md)
42+
整理自《计算机网络 第七版》,重点内容会在标题后面加 \*
3943

40-
《剑指 Offer 第二版》的最优解,在牛客网在线编程中出现的题目都已 AC。
44+
> [HTTP](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/HTTP.md)
4145
42-
> [Leetcode 题解](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Leetcode%20题解.md)
46+
整理自《图解 HTTP》
4347

44-
对题目做了一个分类,并对每种题型的解题思路做了总结。
4548

4649
## 面向对象 :couple:
4750

notes/HTTP.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ HTTP/1.1 使用虚拟主机技术,使得一台服务器拥有多个域名,
507507

508508
### 3. 隧道
509509

510-
使用 SSL 等加密手段,为客户端和服务器之间建立一条安全的通信线路。隧道本身不去解析 HTTP 请求。
510+
使用 SSL 等加密手段,为客户端和服务器之间建立一条安全的通信线路。
511511

512512
# 六、HTTPs
513513

@@ -810,17 +810,19 @@ DELETE /idX/delete HTTP/1.1 -> Returns 404
810810

811811
## HTTP/1.1 与 HTTP/2.0 的区别
812812

813+
> [HTTP/2 简介](https://developers.google.com/web/fundamentals/performance/http2/?hl=zh-cn)
814+
813815
### 1. 多路复用
814816

815-
HTTP/2.0 使用多路复用技术,使用同一个 TCP 连接来处理多个请求
817+
HTTP/2.0 使用多路复用技术,同一个 TCP 连接可以处理多个请求
816818

817819
### 2. 首部压缩
818820

819821
HTTP/1.1 的首部带有大量信息,而且每次都要重复发送。HTTP/2.0 要求通讯双方各自缓存一份首部字段表,从而避免了重复传输。
820822

821823
### 3. 服务端推送
822824

823-
在客户端请求一个资源时,会把相关的资源一起发送给客户端,客户端就不需要再次发起请求了。例如客户端请求 index.html 页面,服务端就把 index.js 一起发给客户端。
825+
HTTP/2.0 在客户端请求一个资源时,会把相关的资源一起发送给客户端,客户端就不需要再次发起请求了。例如客户端请求 index.html 页面,服务端就把 index.js 一起发给客户端。
824826

825827
### 4. 二进制格式
826828

@@ -848,3 +850,5 @@ HTTP/1.1 的解析是基于文本的,而 HTTP/2.0 采用二进制格式。
848850
- [XMLHttpRequest](https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest)
849851
- [XMLHttpRequest (XHR) Uses Multiple Packets for HTTP POST?](https://blog.josephscott.org/2009/08/27/xmlhttprequest-xhr-uses-multiple-packets-for-http-post/)
850852
- [Symmetric vs. Asymmetric Encryption – What are differences?](https://www.ssl2buy.com/wiki/symmetric-vs-asymmetric-encryption-what-are-differences)
853+
- [Web 性能优化与 HTTP/2](https://www.kancloud.cn/digest/web-performance-http2)
854+
- [HTTP/2 简介](https://developers.google.com/web/fundamentals/performance/http2/?hl=zh-cn)

notes/Java 基础.md

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ private 方法隐式地被指定为 final,如果在子类中定义的方法和
6565

6666
**1. 静态变量**
6767

68-
静态变量在内存中只存在一份,只在类第一次实例化时初始化一次
68+
静态变量在内存中只存在一份,只在类初始化时赋值一次
6969

7070
- 静态变量:类所有的实例都共享静态变量,可以直接通过类名来访问它;
7171
- 实例变量:每创建一个实例就会产生一个实例变量,它与该实例同生共死。
@@ -83,11 +83,23 @@ public class A {
8383

8484
**3. 静态语句块**
8585

86-
静态语句块和静态变量一样在类第一次实例化时运行一次
86+
静态语句块在类初始化时运行一次
8787

88-
**4. 初始化顺序**
88+
**4. 静态内部类**
8989

90-
静态数据优先于其它数据的初始化,静态变量和静态语句块哪个先运行取决于它们在代码中的顺序。
90+
内部类的一种,静态内部类不依赖外部类,且不能访问外部类的非 static 变量和方法。
91+
92+
**5. 静态导包**
93+
94+
```source-java
95+
import static com.xxx.ClassName.*
96+
```
97+
98+
在使用静态变量和方法时不用再指明 ClassName,从而简化代码,但可读性大大降低。
99+
100+
**6. 变量赋值顺序**
101+
102+
静态变量的赋值和静态语句块的运行优先于实例变量的赋值和普通语句块的运行,静态变量的赋值和静态语句块的运行哪个先执行取决于它们在代码中的顺序。
91103

92104
```java
93105
public static String staticField = "静态变量";
@@ -99,8 +111,6 @@ static {
99111
}
100112
```
101113

102-
实例变量和普通语句块的初始化在静态变量和静态语句块初始化结束之后。
103-
104114
```java
105115
public String field = "实例变量";
106116
```
@@ -111,7 +121,7 @@ public String field = "实例变量";
111121
}
112122
```
113123

114-
最后才是构造函数中的数据进行初始化
124+
最后才运行构造函数
115125

116126
```java
117127
public InitialOrderTest() {
@@ -121,25 +131,13 @@ public InitialOrderTest() {
121131

122132
存在继承的情况下,初始化顺序为:
123133

124-
1. 父类(静态变量、静态语句块块
134+
1. 父类(静态变量、静态语句块
125135
2. 子类(静态变量、静态语句块)
126136
3. 父类(实例变量、普通语句块)
127137
4. 父类(构造函数)
128138
5. 子类(实例变量、普通语句块)
129139
6. 子类(构造函数)
130140

131-
**5. 静态内部类**
132-
133-
内部类的一种,静态内部类不依赖外部类,且不能访问外部类的非 static 变量和方法。
134-
135-
**6. 静态导包**
136-
137-
```source-java
138-
import static com.xxx.ClassName.*
139-
```
140-
141-
在使用静态变量和方法时不用再指明 ClassName,从而简化代码,但可读性大大降低。
142-
143141
# 二、Object 通用方法
144142

145143
## 概览
@@ -324,7 +322,7 @@ public class CloneExample {
324322

325323
```java
326324
CloneExample e1 = new CloneExample();
327-
CloneExample e2 = e1.clone(); // 'clone()' has protected access in 'java.lang.Object'
325+
// CloneExample e2 = e1.clone(); // 'clone()' has protected access in 'java.lang.Object'
328326
```
329327

330328
接下来覆盖 Object 的 clone() 得到以下实现:
@@ -510,7 +508,7 @@ protected 用于修饰成员,表示在继承体系中成员对于子类可见
510508

511509
如果子类的方法覆盖了父类的方法,那么子类中该方法的访问级别不允许低于父类的访问级别。这是为了确保可以使用父类实例的地方都可以使用子类实例,也就是确保满足里式替换原则。
512510

513-
字段决不能是公有的,因为这么做的话就失去了对这个实例域修改行为的控制,客户端可以对其随意修改。可以使用共有的 getter 和 setter 方法来替换共有字段。
511+
字段决不能是公有的,因为这么做的话就失去了对这个字段修改行为的控制,客户端可以对其随意修改。可以使用共有的 getter 和 setter 方法来替换共有字段。
514512

515513
```java
516514
public class AccessExample {
@@ -634,9 +632,9 @@ System.out.println(InterfaceExample.x);
634632

635633
**3. 比较**
636634

637-
- 从设计层面上看,抽象类提供了一种 IS-A 关系,那么就必须满足里式替换原则,即子类对象必须能够替换掉所有父类对象。而接口更像是一种 LIKE-A 关系,它只是提供一种方法实现契约,并不要求子类和父类具有 IS-A 关系
635+
- 从设计层面上看,抽象类提供了一种 IS-A 关系,那么就必须满足里式替换原则,即子类对象必须能够替换掉所有父类对象。而接口更像是一种 LIKE-A 关系,它只是提供一种方法实现契约,并不要求接口和实现接口的类具有 IS-A 关系
638636
- 从使用上来看,一个类可以实现多个接口,但是不能继承多个抽象类。
639-
- 接口的字段只能是 static 和 final 类型的,而抽象类的域可以有多种访问权限
637+
- 接口的字段只能是 static 和 final 类型的,而抽象类的字段可以有多种访问权限
640638
- 接口的方法只能是 public 的,而抽象类的方法可以由多种访问权限。
641639

642640
**4. 使用选择**
@@ -652,7 +650,7 @@ System.out.println(InterfaceExample.x);
652650
- 需要让不相关的类都实现一个方法,例如不相关的类都可以实现 Compareable 接口中的 compareTo() 方法;
653651
- 需要使用多重继承。
654652

655-
在很多情况下,接口优先于抽象类,因为接口没有抽象类严格的类层次接口要求,可以灵活地为一个类添加行为。并且从 Java 8 开始,接口也可以有默认的方法实现,使得修改接口的成本也变的很低。
653+
在很多情况下,接口优先于抽象类,因为接口没有抽象类严格的类层次结构要求,可以灵活地为一个类添加行为。并且从 Java 8 开始,接口也可以有默认的方法实现,使得修改接口的成本也变的很低。
656654

657655
> [深入理解 abstract class 和 interface](https://www.ibm.com/developerworks/cn/java/l-javainterface-abstract/) </br> [When to Use Abstract Class and Interface](https://dzone.com/articles/when-to-use-abstract-class-and-intreface)
658656
@@ -773,7 +771,7 @@ String s5 = "bbb";
773771
System.out.println(s4 == s5); // true
774772
```
775773

776-
Java 虚拟机将堆划分成新生代、老年代和永久代(PermGen Space)。在 Java 7 之前,字符串常量池被放在永久代中,而在 Java 7,它被放在堆的其它位置。这是因为永久代的空间有限,如果大量使用字符串的场景下会导致 OutOfMemoryError 错误。
774+
Java 虚拟机将堆划分成新生代、老年代和永久代(PermGen Space)。在 Java 7 之前,字符串常量池被放在永久代中,而在 Java 7,它被放在堆的其它位置。这是因为永久代的空间有限,在大量使用字符串的场景下会导致 OutOfMemoryError 错误。
777775

778776
> [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)
779777

0 commit comments

Comments
 (0)