Skip to content

Commit

Permalink
替换转好的文件
Browse files Browse the repository at this point in the history
  • Loading branch information
sjsdfg committed Mar 19, 2019
1 parent ed62270 commit 277fc57
Show file tree
Hide file tree
Showing 21 changed files with 413 additions and 395 deletions.
24 changes: 13 additions & 11 deletions convert/Git.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ PDF制作github: https://github.com/sjsdfg/CS-Notes-PDF

Git 属于分布式版本控制系统,而 SVN 属于集中式。

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/fac3dfd6-1656-4329-9a80-7f6c51ef30c5_200.png"/> </div>

集中式版本控制只有中心服务器拥有一份代码,而分布式版本控制每个人的电脑上就有一份完整的代码。

集中式版本控制有安全性问题,当中心服务器挂了所有人都没办法工作了。
Expand All @@ -24,49 +26,49 @@ Github 就是一个中心服务器。

# 工作流

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/a1198642-9159-4d88-8aec-c3b04e7a2563.jpg"/> </div>

新建一个仓库之后,当前目录就成为了工作区,工作区下有一个隐藏目录 .git,它属于 Git 的版本库。

Git 版本库有一个称为 stage 的暂存区,还有自动创建的 master 分支以及指向分支的 HEAD 指针
Git 的版本库有一个称为 Stage 的暂存区以及最后的 History 版本库,History 中存有所有分支,使用一个 HEAD 指针指向当前分支

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/46f66e88-e65a-4ad0-a060-3c63fe22947c.png"/> </div>
<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/0f9b9d2a-c5cc-4a3f-b138-2c1035950f39_200.png"/> </div>

- git add files 把文件的修改添加到暂存区
- git commit 把暂存区的修改提交到当前分支,提交之后暂存区就被清空了
- git reset -- files 使用当前分支上的修改覆盖暂存区,用来撤销最后一次 git add files
- git checkout -- files 使用暂存区的修改覆盖工作目录,用来撤销本地修改

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/17976404-95f5-480e-9cb4-250e6aa1d55f.png"/> </div>
<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/11a786f0-5e02-46a6-92f0-f302c9cf6ca3_200.png"/> </div>

可以跳过暂存区域直接从分支中取出修改,或者直接提交修改到分支中。

- git commit -a 直接把所有文件的修改添加到暂存区然后执行提交
- git checkout HEAD -- files 取出最后一次修改,可以用来进行回滚操作

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/b48b9a7a-f9f8-4cf9-90f1-5cddd685b782_200.png"/> </div>

# 分支实现

使用指针将每个提交连接成一条时间线,HEAD 指针指向当前分支指针。

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/fb546e12-e1fb-4b72-a1fb-8a7f5000dce6.jpg"/> </div>
<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/84d496d7-54b0-4a9b-9499-ce232057e499_200.png"/> </div>

新建分支是新建一个指针指向时间线的最后一个节点,并让 HEAD 指针指向新分支表示新分支成为当前分支。

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/bc775758-89ab-4805-9f9c-78b8739cf780.jpg"/> </div>
<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/7c5bcdbf-e656-4b7c-be82-b247a3589ed5_200.png"/> </div>

每次提交只会让当前分支指针向前移动,而其它分支指针不会移动。

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/5292faa6-0141-4638-bf0f-bb95b081dcba.jpg"/> </div>
<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/13783e94-b481-4aea-9fa2-9d1973abd47e_200.png"/> </div>

合并分支也只需要改变指针即可。

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/1164a71f-413d-494a-9cc8-679fb6a2613d.jpg"/> </div>
<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/15699a17-5a69-4fbe-852e-9d2b7cf05e80_200.png"/> </div>

# 冲突

当两个分支都对同一个文件的同一行进行了修改,在分支合并时就会产生冲突。

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/58e57a21-6b6b-40b6-af85-956dd4e0f55a.jpg"/> </div>
<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/7e82ce01-2afb-4c15-b720-b81049c875c2_200.png"/> </div>

Git 会使用 <<<<<<< ,======= ,>>>>>>> 标记出不同分支的内容,只需要把不同分支中冲突部分修改成一样就能解决冲突。

Expand All @@ -88,7 +90,7 @@ Creating a new branch is quick AND simple.
$ git merge --no-ff -m "merge with no-ff" dev
```

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/dd78a1fe-1ff3-4bcf-a56f-8c003995beb6.jpg"/> </div>
<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/fa1dc552-8501-439e-b85a-3d9eac704880_200.png"/> </div>

# 分支管理策略

Expand Down
18 changes: 9 additions & 9 deletions convert/HTTP.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ URI 包含 URL 和 URN。
- URL(Uniform Resource Locator,统一资源定位符)
- URN(Uniform Resource Name,统一资源名称)

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/766d401b-3cf6-475c-8ced-ea8c8db8edc5.png" /> </div>
<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/1_2001550415765493.png" width="500px"> </div>

## 请求和响应报文

Expand Down Expand Up @@ -597,17 +597,17 @@ HTTP/1.1 使用虚拟主机技术,使得一台服务器拥有多个域名,

使用 SSL 等加密手段,在客户端和服务器之间建立一条安全的通信线路。

# 六、HTTPs
# 六、HTTPS

HTTP 有以下安全性问题:

- 使用明文进行通信,内容可能会被窃听;
- 不验证通信方的身份,通信方的身份有可能遭遇伪装;
- 无法证明报文的完整性,报文有可能遭篡改。

HTTPs 并不是新协议,而是让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,也就是说 HTTPs 使用了隧道进行通信。
HTTPS 并不是新协议,而是让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,也就是说 HTTPS 使用了隧道进行通信。

通过使用 SSL,HTTPs 具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。
通过使用 SSL,HTTPS 具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/ssl-offloading.jpg" /> </div>

Expand Down Expand Up @@ -635,9 +635,9 @@ HTTPs 并不是新协议,而是让 HTTP 先和 SSL(Secure Sockets Layer)

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/39ccb299-ee99-4dd1-b8b4-2f9ec9495cb4.png" /> </div>

### 3. HTTPs 采用的加密方式
### 3. HTTPS 采用的加密方式

HTTPs 采用混合的加密机制,使用非对称密钥加密用于传输对称密钥来保证传输过程的安全性,之后使用对称密钥加密进行通信来保证通信过程的效率。(下图中的 Session Key 就是对称密钥)
HTTPS 采用混合的加密机制,使用非对称密钥加密用于传输对称密钥来保证传输过程的安全性,之后使用对称密钥加密进行通信来保证通信过程的效率。(下图中的 Session Key 就是对称密钥)

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/How-HTTPS-Works.png" /> </div>

Expand All @@ -649,7 +649,7 @@ HTTPs 采用混合的加密机制,使用非对称密钥加密用于传输对

服务器的运营人员向 CA 提出公开密钥的申请,CA 在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公开密钥证书后绑定在一起。

进行 HTTPs 通信时,服务器会把证书发送给客户端。客户端取得其中的公开密钥之后,先使用数字签名进行验证,如果验证通过,就可以开始通信了。
进行 HTTPS 通信时,服务器会把证书发送给客户端。客户端取得其中的公开密钥之后,先使用数字签名进行验证,如果验证通过,就可以开始通信了。

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/2017-06-11-ca.png" /> </div>

Expand All @@ -659,9 +659,9 @@ SSL 提供报文摘要功能来进行完整性保护。

HTTP 也提供了 MD5 报文摘要功能,但不是安全的。例如报文内容被篡改之后,同时重新计算 MD5 的值,通信接收方是无法意识到发生了篡改。

HTTPs 的报文摘要功能之所以安全,是因为它结合了加密和认证这两个操作。试想一下,加密之后的报文,遭到篡改之后,也很难重新计算报文摘要,因为无法轻易获取明文。
HTTPS 的报文摘要功能之所以安全,是因为它结合了加密和认证这两个操作。试想一下,加密之后的报文,遭到篡改之后,也很难重新计算报文摘要,因为无法轻易获取明文。

## HTTPs 的缺点
## HTTPS 的缺点

- 因为需要进行加密解密等过程,因此速度会更慢;
- 需要支付证书授权的高额费用。
Expand Down
6 changes: 3 additions & 3 deletions convert/Java IO.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ Java I/O 使用了装饰者模式来实现。以 InputStream 为例,
- FileInputStream 是 InputStream 的子类,属于具体组件,提供了字节流的输入操作;
- FilterInputStream 属于抽象装饰者,装饰者用于装饰组件,为组件提供额外的功能。例如 BufferedInputStream 为 FileInputStream 提供缓存的功能。

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/DP-Decorator-java.io.png" /> </div>
<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/c2c2b633-c03a-426e-b436-5719a194667b.png"/> </div>

实例化一个具有缓存功能的字节流对象时,只需要在 FileInputStream 对象上再套一层 BufferedInputStream 对象即可。

Expand Down Expand Up @@ -250,7 +250,7 @@ public static void main(String[] args) throws IOException {
- Socket:客户端类
- 服务器和客户端通过 InputStream 和 OutputStream 进行输入输出。

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/ClienteServidorSockets1521731145260.jpg"/> </div>
<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/f77f06b6-7359-4066-b85d-3f6c09ddf425.jpg"/> </div>

## Datagram

Expand Down Expand Up @@ -386,7 +386,7 @@ NIO 实现了 IO 多路复用中的 Reactor 模型,一个线程 Thread 使用

应该注意的是,只有套接字 Channel 才能配置为非阻塞,而 FileChannel 不能,为 FileChannel 配置非阻塞也没有意义。

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/4d930e22-f493-49ae-8dff-ea21cd6895dc.png"/> </div>
<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/8fdbb8f5-2cf8-41dc-b5f1-99d98abb52d9.jpg"/> </div>

### 1. 创建选择器

Expand Down
74 changes: 69 additions & 5 deletions convert/Java 基础.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,23 @@ PDF制作github: https://github.com/sjsdfg/CS-Notes-PDF

# 一、数据类型

## 包装类型

八个基本类型:
## 基本类型

- boolean/1
- byte/8
- char/16
- short/16
- int/32
- float/32
- long/64
- double/64
- boolean/\~

boolean 只有两个值:true、false,可以使用 1 bit 来存储,但是具体大小没有明确规定。JVM 会在编译时期将 boolean 类型的数据转换为 int,使用 1 来表示 true,0 表示 false。JVM 并不支持 boolean 数组,而是使用 byte 数组来表示 int 数组来表示。

- [Primitive Data Types](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)
- [The Java® Virtual Machine Specification](https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf)

## 包装类型

基本类型都有对应的包装类型,基本类型与其对应的包装类型之间的赋值使用自动装箱与拆箱完成。

Expand Down Expand Up @@ -148,7 +153,7 @@ value 数组被声明为 final,这意味着 value 数组初始化之后就不

如果一个 String 对象已经被创建过了,那么就会从 String Pool 中取得引用。只有 String 是不可变的,才可能使用 String Pool。

<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/f76067a5-7d5f-4135-9549-8199c77d8f1c.jpg" /> </div>
<div align="center"> <img src="https://github.com/CyC2018/CS-Notes/raw/master/docs/notes/pics/474e5579-38b1-47d2-8f76-a13ae086b039.jpg"/> </div>

**3. 安全性**

Expand Down Expand Up @@ -640,6 +645,65 @@ SuperExtendExample.func()

应该注意的是,返回值不同,其它都相同不算是重载。

**3. 实例**

```java
class A {
public String show(D obj) {
return ("A and D");
}

public String show(A obj) {
return ("A and A");
}
}

class B extends A {
public String show(B obj) {
return ("B and B");
}

public String show(A obj) {
return ("B and A");
}
}

class C extends B {
}

class D extends B {
}
```

```java
public class Test {

public static void main(String[] args) {
A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D();
System.out.println(a1.show(b)); // A and A
System.out.println(a1.show(c)); // A and A
System.out.println(a1.show(d)); // A and D
System.out.println(a2.show(b)); // B and A
System.out.println(a2.show(c)); // B and A
System.out.println(a2.show(d)); // A and D
System.out.println(b.show(b)); // B and B
System.out.println(b.show(c)); // B and B
System.out.println(b.show(d)); // A and D
}
}
```

涉及到重写时,方法调用的优先级为:

- this.show(O)
- super.show(O)
- this.show((super)O)
- super.show((super)O)

# 五、Object 通用方法

## 概览
Expand Down
Loading

0 comments on commit 277fc57

Please sign in to comment.