diff --git a/notes/Java 并发.md b/notes/Java 并发.md index 139f4353..031f3290 100644 --- a/notes/Java 并发.md +++ b/notes/Java 并发.md @@ -95,7 +95,7 @@ 睡眠和挂起是用来描述行为,而阻塞和等待用来描述状态。 -阻塞和等待的区别在于,阻塞是被动的,它是在等待获取一个排它锁;而等待是主动的,通过调用 Thread.sleep() 和 Object.wait() 等方法进入。 +阻塞和等待的区别在于,阻塞是被动的,它是在等待获取一个排它锁。而等待是主动的,通过调用 Thread.sleep() 和 Object.wait() 等方法进入。 | 进入方法 | 退出方法 | | --- | --- | @@ -165,7 +165,7 @@ public static void main(String[] args) throws ExecutionException, InterruptedExc ## 继承 Thread 类 -同样也是需要实现 run() 方法,并且最后也是调用 start() 方法来启动线程。 +同样也是需要实现 run() 方法,因为 Thread 类也实现了 Runable 接口。 ```java public class MyThread extends Thread { @@ -193,7 +193,7 @@ public static void main(String[] args) { ## Executor -Executor 管理多个异步任务的执行,而无需程序员显式地管理线程的生命周期。 +Executor 管理多个异步任务的执行,而无需程序员显式地管理线程的生命周期。这里的异步是指多个任务的执行互不干扰,不需要进行同步操作。 主要有三种 Executor: @@ -383,7 +383,7 @@ Java 提供了两种锁机制来控制多个线程对共享资源的互斥访问 **1. 同步一个代码块** ```java -public void func () { +public void func() { synchronized (this) { // ... } @@ -392,7 +392,7 @@ public void func () { 它只作用于同一个对象,如果调用两个对象上的同步代码块,就不会进行同步。 -对于以下代码,使用 ExecutorService 执行了两个线程(这两个线程使用 Lambda 创建),由于调用的是同一个对象的同步代码块,因此这两个线程会进行同步,当一个线程进入同步语句块时,另一个线程就必须等待。 +对于以下代码,使用 ExecutorService 执行了两个线程,由于调用的是同一个对象的同步代码块,因此这两个线程会进行同步,当一个线程进入同步语句块时,另一个线程就必须等待。 ```java public class SynchronizedExample { @@ -445,7 +445,7 @@ public synchronized void func () { } ``` -它和同步代码块一样,只作用于同一个对象。 +它和同步代码块一样,作用于同一个对象。 **3. 同步一个类** @@ -457,7 +457,7 @@ public void func() { } ``` -作用于整个类,也就是说两个线程调用同一个类的不同对象上的这种同步语句,也需要进行同步。 +作用于整个类,也就是说两个线程调用同一个类的不同对象上的这种同步语句,也会进行同步。 ```java public class SynchronizedExample { @@ -533,15 +533,17 @@ ReentrantLock 是 java.util.concurrent(J.U.C)包中的锁,相比于 synchr **1. 等待可中断** -当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情,可中断特性对处理执行时间非常长的同步块很有帮助。 +当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情。 **2. 可实现公平锁** -公平锁是指多个线程在等待同一个锁时,必须按照申请锁的时间顺序来依次获得锁;而非公平锁则不保证这一点,在锁被释放时,任何一个等待锁的线程都有机会获得锁。synchronized 中的锁是非公平的,ReentrantLock 默认情况下也是非公平的,但可以通过带布尔值的构造函数要求使用公平锁。 +公平锁是指多个线程在等待同一个锁时,必须按照申请锁的时间顺序来依次获得锁。 + +synchronized 中的锁是非公平的,ReentrantLock 默认情况下也是非公平的,但可以通过带布尔值的构造函数要求使用公平锁。 **3. 锁绑定多个条件** -一个 ReentrantLock 对象可以同时绑定多个 Condition 对象,而在 synchronized 中,锁对象的 wait() 和 notify() 或 notifyAll() 方法可以实现一个隐含的条件,如果要和多于一个的条件关联的时候,就不得不额外地添加一个锁,而 ReentrantLock 则无须这样做,只需要多次调用 newCondition() 方法即可。 +一个 ReentrantLock 对象可以同时绑定多个 Condition 对象。 ## synchronized 和 ReentrantLock 比较 @@ -551,7 +553,7 @@ synchronized 是 JVM 实现的,而 ReentrantLock 是 JDK 实现的。 **2. 性能** -从性能上来看,新版本 Java 对 synchronized 进行了很多优化,例如自旋锁等。目前来看它和 ReentrantLock 的性能基本持平了,因此性能因素不再是选择 ReentrantLock 的理由。synchronized 有更大的性能优化空间,应该优先考虑 synchronized。 +新版本 Java 对 synchronized 进行了很多优化,例如自旋锁等。目前来看它和 ReentrantLock 的性能基本持平了,因此性能因素不再是选择 ReentrantLock 的理由。synchronized 有更大的性能优化空间,应该优先考虑 synchronized。 **3. 功能** diff --git a/notes/计算机网络.md b/notes/计算机网络.md index d9c86c65..ae1b9064 100644 --- a/notes/计算机网络.md +++ b/notes/计算机网络.md @@ -44,14 +44,13 @@ * [TCP 流量控制](#tcp-流量控制) * [TCP 拥塞控制](#tcp-拥塞控制) * [六、应用层](#六应用层) - * [域名系统 DNS](#域名系统-dns) - * [文件传送协议 FTP](#文件传送协议-ftp) - * [远程终端协议 TELNET](#远程终端协议-telnet) + * [域名系统](#域名系统) + * [文件传送协议](#文件传送协议) + * [远程登录协议](#远程登录协议) * [电子邮件协议](#电子邮件协议) - * [动态主机配置协议 DHCP](#动态主机配置协议-dhcp) - * [点对点传输 P2P](#点对点传输-p2p) - * [Web 页面请求过程](#web-页面请求过程) + * [动态主机配置协议](#动态主机配置协议) * [常用端口](#常用端口) + * [Web 页面请求过程](#web-页面请求过程) * [参考资料](#参考资料) @@ -62,20 +61,19 @@ 网络把主机连接起来,而互联网是把多种不同的网络连接起来,因此互联网是网络的网络。 -

+

## ISP 互联网服务提供商 ISP 可以从互联网管理机构获得许多 IP 地址,同时拥有通信线路以及路由器等联网设备,个人或机构向 ISP 缴纳一定的费用就可以接入互联网。 -

+

目前的互联网是一种多层次 ISP 结构,ISP 根据覆盖面积的大小分为第一层 ISP、区域 ISP 和接入 ISP。 互联网交换点 IXP 允许两个 ISP 直接相连而不用经过第三个 ISP。 -

- +

## 主机之间的通信方式 @@ -87,9 +85,7 @@ ## 电路交换与分组交换 -

- -(以上分别为:电路交换、报文交换以及分组交换) +

### 1. 电路交换 @@ -109,17 +105,17 @@ ## 时延 -总时延 = 发送时延 + 传播时延 + 处理时延 + 排队时延 +总时延 = 传输时延 + 传播时延 + 处理时延 + 排队时延

-### 1. 发送时延 +### 1. 传输时延 -主机或路由器发送数据帧所需要的时间。 +主机或路由器传输数据帧所需要的时间。

-其中 l 表示数据帧的长度,v 表示发送速率。 +其中 l 表示数据帧的长度,v 表示传输速率。 ### 2. 传播时延 @@ -186,26 +182,32 @@ TCP/IP 协议族是一种沙漏形状,中间小两边大,IP 协议在其中 ## 通信方式 -- 单向通信,又称为单工通信; -- 双向交替通信,又称为半双工通信; -- 双向同时通信,又称为全双工通信。 +根据信息在传输线上的传送方向,分为以下三种通信方式: + +- 单工通信:单向传输 +- 半双工通信:双向交替传输 +- 全双工通信:双向同时传输 ## 带通调制 模拟信号是连续的信号,数字信号是离散的信号。带通调制把数字信号转换为模拟信号。 -

+

## 信道复用技术 ### 1. 频分复用、时分复用 -频分复用的所有用户在相同的时间占用不同的频率带宽资源;时分复用的所有用户在不同的时间占用相同的频率带宽资源。 +频分复用的所有用户在相同的时间占用不同的频率带宽资源。 + +

+ +时分复用的所有用户在不同的时间占用相同的频率带宽资源。 + +

使用这两种方式进行通信,在通信的过程中用户会一直占用一部分信道资源。但是由于计算机数据的突发性质,通信过程没必要一直占用信道资源而不让出给其它用户使用,因此这两种方式对信道的利用率都不高。 -

- ### 2. 统计时分复用 是对时分复用的一种改进,不固定每个用户在时分复用帧中的位置,只要有数据就集中起来组成统计时分复用帧然后发送。 @@ -752,9 +754,9 @@ TCP 主要通过四种算法来进行拥塞控制:慢开始、拥塞避免、 # 六、应用层 -## 域名系统 DNS +## 域名系统 -是一个分布式数据库,提供了主机名和 IP 地址之间的转换。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。 +DNS 是一个分布式数据库,提供了主机名和 IP 地址之间的转换。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。 域名具有层次结构,从上到下依次为:根域名、顶级域名、第二级域名。 @@ -765,7 +767,7 @@ DNS 可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。大 - 因为 UDP 最大只支持 512 字节的数据,如果返回的响应超过的 512 字节就改用 TCP 进行传输。 - 区域传送是主域名服务器向辅助域名服务器传送变化的那部分数据,区域传送需要使用 TCP 进行传输。 -## 文件传送协议 FTP +## 文件传送协议 FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件: @@ -776,7 +778,7 @@ FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件: - 主动模式:服务器端主动建立数据连接,其中服务器端的端口号为 20,客户端的端口号随机,但是必须大于 1024,因为 0\~1023 是熟知端口号。 -

+

- 被动模式:客户端主动建立数据连接,其中客户端的端口号由客户端自己指定,服务器端的端口号随机。 @@ -784,7 +786,7 @@ FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件: 主动模式要求客户端开放端口号给服务器端,需要去配置客户端的防火墙。被动模式只需要服务器端开放端口号即可,无需客户端配置防火墙。但是被动模式会导致服务器端的安全性减弱,因为开放了过多的端口号。 -## 远程终端协议 TELNET +## 远程登录协议 TELNET 用于登录到远程主机上,并且远程主机上的输出也会返回。 @@ -792,7 +794,9 @@ TELNET 可以适应许多计算机和操作系统的差异,例如不同操作 ## 电子邮件协议 -一个电子邮件系统由三部分组成:用户代理、邮件服务器以及邮件发送协议和读取协议。其中发送协议常用 SMTP,读取协议常用 POP3 和 IMAP。 +一个电子邮件系统由三部分组成:用户代理、邮件服务器以及邮件协议。 + +邮件协议包含发送协议和读取协议,发送协议常用 SMTP,读取协议常用 POP3 和 IMAP。

@@ -802,7 +806,7 @@ POP3 的特点是只要用户从服务器上读取了邮件,就把该邮件删 ### 2. IMAP -IMAP 协议中客户端和服务器上的邮件保持同步,如果不去手动删除邮件,那么服务器上的邮件也不会被删除。IMAP 这种做法可以让用户随时随地去访问服务器上的邮件。IMAP 协议也支持创建自定义的文件夹。 +IMAP 协议中客户端和服务器上的邮件保持同步,如果不去手动删除邮件,那么服务器上的邮件也不会被删除。IMAP 这种做法可以让用户随时随地去访问服务器上的邮件。 ### 3. SMTP @@ -810,27 +814,34 @@ SMTP 只能发送 ASCII 码,而互联网邮件扩充 MIME 可以发送二进

-## 动态主机配置协议 DHCP +## 动态主机配置协议 -DHCP 提供了即插即用的连网方式,用户不再需要去手动配置 IP 地址等信息。 +DHCP (Dynamic Host Configuration Protocol) 提供了即插即用的连网方式,用户不再需要去手动配置 IP 地址等信息。DHCP 配置的内容不仅是 IP 地址,还包括子网掩码、网关 IP 地址。 -DHCP 配置的内容不仅是 IP 地址,还包括子网掩码、默认路由器 IP 地址、域名服务器的 IP 地址。 +DHCP 工作过程如下: -工作方式如下:需要 IP 地址的主机广播发送 DHCP 发现报文(将目的地址置为全 1,即 255.255.255.255:67,源地址设置为全 0,即 0.0.0.0:68),DHCP 服务器收到发现报文之后,则在 IP 地址池中取一个地址,发送 DHCP 提供报文给该主机。 +1. 客户端发送 Discover 报文,该报文的目的地址为 255.255.255.255:67,源地址为 0.0.0.0:68,被放入 UDP 中,该报文被广播到同一个子网的所有主机上。 +2. DHCP 服务器收到 Discover 报文之后,发送 Offer 报文给客户端,该报文包含了客户端所需要的信息。因为客户端可能收到多个 DHCP 服务器提供的信息,因此客户端需要进行选择。 +3. 如果客户端选择了某个 DHCP 服务器提供的信息,那么就发送 Request 报文给该 DHCP 服务器。 +4. DHCP 服务器发送 Ack 报文,表示客户端此时可以使用提供给它的信息。 -## 点对点传输 P2P +

-把某个文件分发的所有对等集合称为一个洪流。文件的数据单元称为文件块,它的大小是固定的。一个新的对等方加入某个洪流,一开始并没有文件块,但是能够从其它对等方中逐渐地下载到一些文件块,与此同时,它也为别的对等方上传一些文件块。 +如果客户端和 DHCP 服务器不在同一个子网,就需要使用中继代理。 -每个洪流都有一个基础设施,称为追踪器。当一个对等方加入洪流时,必须向追踪器登记,并周期性地通知追踪器它仍在洪流中。可以在任何时间加入和退出某个洪流。 +## 常用端口 -一个新的对等方加入洪流时,追踪器会随机从洪流中选择若干个对等方,并让新对等方与这些对等方建立连接,把这些对等方称为相邻对等方。接收和发送文件块都是在相邻对等方中进行。 - -当一个对等方需要很多文件块时,通过使用最稀有优先的策略来取得文件块,也就是一个文件块在相邻对等方中副本最少,那么就优先请求这个文件块。 - -当很多对等方向同一个对等方请求文件块时,该对等方优先选择以最高速率向其发送文件块的对等方。 - -P2P 是一个分布式系统,任何时候都有对等方加入或者退出。使用分布式散列表 DHT,可以查找洪流中的资源和 IP 地址映射。 +|应用| 应用层协议 | 端口号 | 运输层协议 | 备注 | +| :---: | :--: | :--: | :--: | :--: +| 域名解析 | DNS | 53 | UDP/TCP | 长度超过 512 字节时使用 TCP | +| 动态主机配置协议 | DHCP | 67/68 | UDP | | +| 简单网络管理协议 | SNMP | 161/162 | UDP | | +| 文件传送协议 | FTP | 20/21 | TCP | 控制连接 21,数据连接 20 +| 远程终端协议 | TELNET | 23 | TCP | | +| 超文本传送协议 | HTTP | 80 | TCP | | +| 简单邮件传送协议 | SMTP | 25 | TCP | | +| 邮件读取协议 | POP3 | 110 | TCP | | +| 网际报文存取协议 | IMAP | 143 | TCP | | ## Web 页面请求过程 @@ -892,20 +903,6 @@ P2P 是一个分布式系统,任何时候都有对等方加入或者退出。 - 浏览器收到 HTTP 响应报文后,抽取出 Web 页面内容,之后进行渲染,显示 Web 页面。 -## 常用端口 - -|应用| 应用层协议 | 端口号 | 运输层协议 | 备注 | -| :---: | :--: | :--: | :--: | :--: -| 域名解析 | DNS | 53 | UDP/TCP | 长度超过 512 字节时使用 TCP | -| 动态主机配置协议 | DHCP | 67/68 | UDP | | -| 简单网络管理协议 | SNMP | 161/162 | UDP | | -| 文件传送协议 | FTP | 20/21 | TCP | 控制连接 21,数据连接 20 -| 远程终端协议 | TELNET | 23 | TCP | | -| 超文本传送协议 | HTTP | 80 | TCP | | -| 简单邮件传送协议 | SMTP | 25 | TCP | | -| 邮件读取协议 | POP3 | 110 | TCP | | -| 网际报文存取协议 | IMAP | 143 | TCP | | - # 参考资料 @@ -914,6 +911,9 @@ P2P 是一个分布式系统,任何时候都有对等方加入或者退出。 - W.RichardStevens. TCP/IP 详解. 卷 1, 协议 [M]. 机械工业出版社, 2006. - [Active vs Passive FTP Mode: Which One is More Secure?](https://securitywing.com/active-vs-passive-ftp-mode/) - [Active and Passive FTP Transfers Defined - KB Article #1138](http://www.serv-u.com/kb/1138/active-and-passive-ftp-transfers-defined) +- [How DHCP works and DHCP Interview Questions and Answers](http://webcache.googleusercontent.com/search?q=cache:http://anandgiria.blogspot.com/2013/09/windows-dhcp-interview-questions-and.html) +- [What is process of DORA in DHCP?](https://www.quora.com/What-is-process-of-DORA-in-DHCP) +- [What is DHCP Server ?](https://tecadmin.net/what-is-dhcp-server/) - [Tackling emissions targets in Tokyo](http://www.climatechangenews.com/2011/html/university-tokyo.html) - [What does my ISP know when I use Tor?](http://www.climatechangenews.com/2011/html/university-tokyo.html) - [Technology-Computer Networking[1]-Computer Networks and the Internet](http://www.linyibin.cn/2017/02/12/technology-ComputerNetworking-Internet/) diff --git a/pics/03f47940-3843-4b51-9e42-5dcaff44858b.jpg b/pics/03f47940-3843-4b51-9e42-5dcaff44858b.jpg new file mode 100644 index 00000000..9a6f75c6 Binary files /dev/null and b/pics/03f47940-3843-4b51-9e42-5dcaff44858b.jpg differ diff --git a/pics/168e893c-e4a0-4ba4-b81f-9d993483abd0.jpg b/pics/168e893c-e4a0-4ba4-b81f-9d993483abd0.jpg new file mode 100644 index 00000000..cbb68f98 Binary files /dev/null and b/pics/168e893c-e4a0-4ba4-b81f-9d993483abd0.jpg differ diff --git a/pics/b0c97118-8f30-4619-9c22-a141f627db39.png b/pics/b0c97118-8f30-4619-9c22-a141f627db39.png new file mode 100644 index 00000000..e3cf245b Binary files /dev/null and b/pics/b0c97118-8f30-4619-9c22-a141f627db39.png differ diff --git a/pics/bf16c541-0717-473b-b75d-4115864f4fbf.jpg b/pics/bf16c541-0717-473b-b75d-4115864f4fbf.jpg new file mode 100644 index 00000000..a83ba275 Binary files /dev/null and b/pics/bf16c541-0717-473b-b75d-4115864f4fbf.jpg differ diff --git a/pics/c4c14368-519c-4a0e-8331-0a553715e3e7.jpg b/pics/c4c14368-519c-4a0e-8331-0a553715e3e7.jpg new file mode 100644 index 00000000..0cb4f0a0 Binary files /dev/null and b/pics/c4c14368-519c-4a0e-8331-0a553715e3e7.jpg differ diff --git a/pics/f0a31c04-6e26-408c-8395-88f4e2ae928b.jpg b/pics/f0a31c04-6e26-408c-8395-88f4e2ae928b.jpg new file mode 100644 index 00000000..99eb3168 Binary files /dev/null and b/pics/f0a31c04-6e26-408c-8395-88f4e2ae928b.jpg differ diff --git a/pics/fa2273c3-1b5f-48ce-8e8b-441a4116c1c4.jpg b/pics/fa2273c3-1b5f-48ce-8e8b-441a4116c1c4.jpg new file mode 100644 index 00000000..42d3c743 Binary files /dev/null and b/pics/fa2273c3-1b5f-48ce-8e8b-441a4116c1c4.jpg differ