diff --git a/network/2_http/https_optimize.md b/network/2_http/https_optimize.md index 20c5e8f7..907e5719 100644 --- a/network/2_http/https_optimize.md +++ b/network/2_http/https_optimize.md @@ -70,7 +70,7 @@ 如果公司预算充足对于新的服务器是可以考虑购买更好的 CPU,但是对于已经在使用的服务器,硬件优化的方式可能就不太适合了,于是就要从软件的方向来优化了。 -软件的优化方向可以分层两种,一个是**软件升级**,一个是**协议优化**。 +软件的优化方向可以分成两种,一个是**软件升级**,一个是**协议优化**。 先说第一个软件升级,软件升级就是将正在使用的软件升级到最新版本,因为最新版本不仅提供了最新的特性,也优化了以前软件的问题或性能。比如: diff --git a/network/2_http/https_rsa.md b/network/2_http/https_rsa.md index 55cfe29f..34d77f38 100644 --- a/network/2_http/https_rsa.md +++ b/network/2_http/https_rsa.md @@ -87,7 +87,7 @@ TLS 协议是如何解决 HTTP 的风险的呢? 这个密码套件看起来真让人头晕,好一大串,但是其实它是有固定格式和规范的。基本的形式是「**密钥交换算法 + 签名算法 + 对称加密算法 + 摘要算法**」,一般 WITH 单词前面有两个单词,第一个单词是约定密钥交换的算法,第二个单词是约定证书的验证算法。比如刚才的密码套件的意思就是: -- 由于 WITH 单词只有一个 RSA,则说明握手时密钥交换算法和签名算法都是使用 RSA; +- 由于 WITH 单词前只有一个 RSA,则说明握手时密钥交换算法和签名算法都是使用 RSA; - 握手后的通信使用 AES 对称算法,密钥长度 128 位,分组模式是 GCM; - 摘要算法 SHA256 用于消息认证和产生随机数; diff --git a/network/4_ip/ip_base.md b/network/4_ip/ip_base.md index eda6d40d..9f83f438 100644 --- a/network/4_ip/ip_base.md +++ b/network/4_ip/ip_base.md @@ -581,7 +581,7 @@ IPv6 可用范围非常大,以至于每台设备都可以配置一个公有 IP *第二种 NAT 穿透技术* -NAT 穿越技术拥有这样的功能,它能够让网络应用程序主动发现自己位于 NAT 设备之后,并且会主动获得 NAT 设备的公有 IP,并为自己建立端口映射条目,注意这些都是 NAT 设备后的应用程序自动完成的。 +NAT 穿透技术拥有这样的功能,它能够让网络应用程序主动发现自己位于 NAT 设备之后,并且会主动获得 NAT 设备的公有 IP,并为自己建立端口映射条目,注意这些都是 NAT 设备后的应用程序自动完成的。 也就是说,在 NAT 穿透技术中,NAT 设备后的应用程序处于主动地位,它已经明确地知道 NAT 设备要修改它外发的数据包,于是它主动配合 NAT 设备的操作,主动地建立好映射,这样就不像以前由 NAT 设备来建立映射了。 diff --git a/network/4_ip/ping.md b/network/4_ip/ping.md index 7b5a913c..4c8774e3 100644 --- a/network/4_ip/ping.md +++ b/network/4_ip/ping.md @@ -293,7 +293,7 @@ traceroute 还有一个作用是**故意设置不分片,从而确定路径的 这样做的目的是为了**路径 MTU 发现**。 -因为有的时候我们并不知道路由器的 `MTU` 大小,以太网的数据链路上的 `MTU` 通常是 `1500` 字节,但是非以外网的 `MTU` 值就不一样了,所以我们要知道 `MTU` 的大小,从而控制发送的包大小。 +因为有的时候我们并不知道路由器的 `MTU` 大小,以太网的数据链路上的 `MTU` 通常是 `1500` 字节,但是非以太网的 `MTU` 值就不一样了,所以我们要知道 `MTU` 的大小,从而控制发送的包大小。 ![MTU 路径发现(UDP 的情况下)](https://cdn.jsdelivr.net/gh/xiaolincoder/ImageHost/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/ping/18.jpg) diff --git a/os/4_process/deadlock.md b/os/4_process/deadlock.md index 11b4da34..e070e547 100644 --- a/os/4_process/deadlock.md +++ b/os/4_process/deadlock.md @@ -1,6 +1,6 @@ # 5.4 怎么避免死锁? -面试过程中,死锁也是高频的考点,因为如果线上环境真多发生了死锁,那真的出大事了。 +面试过程中,死锁也是高频的考点,因为如果线上环境真的发生了死锁,那真的出大事了。 这次,我们就来系统地聊聊死锁的问题。 diff --git a/os/4_process/process_commu.md b/os/4_process/process_commu.md index 9ea4b5c5..18300d91 100644 --- a/os/4_process/process_commu.md +++ b/os/4_process/process_commu.md @@ -72,7 +72,7 @@ int pipe(int fd[2]) ![](https://cdn.xiaolincoding.com/gh/xiaolincoder/ImageHost/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E8%BF%9B%E7%A8%8B%E9%97%B4%E9%80%9A%E4%BF%A1/5-%E7%AE%A1%E9%81%93-pipe.jpg) -其实,**所谓的管道,就是内核里面的一串缓存**。从管道的一段写入的数据,实际上是缓存在内核中的,另一端读取,也就是从内核中读取这段数据。另外,管道传输的数据是无格式的流且大小受限。 +其实,**所谓的管道,就是内核里面的一串缓存**。从管道的一端写入的数据,实际上是缓存在内核中的,另一端读取,也就是从内核中读取这段数据。另外,管道传输的数据是无格式的流且大小受限。 看到这,你可能会有疑问了,这两个描述符都是在一个进程里面,并没有起到进程间通信的作用,怎么样才能使得管道是跨过两个进程的呢? diff --git a/os/6_file_system/pagecache.md b/os/6_file_system/pagecache.md index f6e55395..25643ca5 100644 --- a/os/6_file_system/pagecache.md +++ b/os/6_file_system/pagecache.md @@ -80,7 +80,7 @@ page 是内存管理分配的基本单位,Page Cache 由多个 page 构成。p Linux 系统上供用户可访问的内存分为两个类型,即: - File-backed pages:文件备份页也就是 Page Cache 中的 page,对应于磁盘上的若干数据块;对于这些页最大的问题是脏页回盘; -- Anonymous pages:匿名页不对应磁盘上的任何磁盘数据块,它们是进程的运行是内存空间(例如方法栈、局部变量表等属性); +- Anonymous pages:匿名页不对应磁盘上的任何磁盘数据块,它们是进程的运行时内存空间(例如方法栈、局部变量表等属性); **为什么 Linux 不把 Page Cache 称为 block cache,这不是更好吗?** @@ -193,11 +193,11 @@ Linux 提供多种机制来保证数据一致性,但无论是单机上的内 上述两种方式最终都依赖于系统调用,主要分为如下三种系统调用: -| 方法 | 含义 | -| :---------------- | :----------------------------------------------------------- | -| fsync(intfd) | fsync(fd):将 fd 代表的文件的脏数据和脏元数据全部刷新至磁盘中。 | +| 方法 | 含义 | +| :---------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| fsync(intfd) | fsync(fd):将 fd 代表的文件的脏数据和脏元数据全部刷新至磁盘中。 | | fdatasync(int fd) | fdatasync(fd):将 fd 代表的文件的脏数据刷新至磁盘,同时对必要的元数据刷新至磁盘中,这里所说的必要的概念是指:对接下来访问文件有关键作用的信息,如文件大小,而文件修改时间等不属于必要信息 | -| sync() | sync():则是对系统中所有的脏的文件数据元数据刷新至磁盘中 | +| sync() | sync():则是对系统中所有的脏的文件数据元数据刷新至磁盘中 | 上述三种系统调用可以分别由用户进程与内核进程发起。下面我们研究一下内核线程的相关特性。