一、概述
1、程序员基础知识大致可以分为七种基本科学:计算机组成原理、操作系统、计算机网络、算法和数据结构、图形学、编译原理、编辑技巧。
2、ISP:Internet Service Provider,本地网络服务提供商。
通常,局域网网络从 ISP 接入,然后内部再通过路由器、交换机进行连接,构成一个子网。
3、数据发生交换的时候,会先从一条链路进入交换设备,然后缓存下来,再转发(切换)到另外一条路径,交换技术的本质,就是让“数据切换路径”。因为网络中的数据是以分组或封包(Packet)的形式传输,因此这个技术也被称为“封包交换技术(Packet Switch)”。
4、在网络中,常见的具有交换能力的设备是路由器(Router)和链路层交换机(Link-Layer Switch)。通常情况下,两个网络可以通过路由器进行连接,多台设备可以通过交换机进行连接。
路由器通常也具有交换机的功能。比如在家用网络中,电脑、手机等都可以直接与路由器连接,路由器承担了链路层网关的作用,作为家用电器之间信息的交换设备。
5、在移动网络中,无线信号构成了通信链路,通信的核心被称为蜂窝塔(Cellular Tower),有时候也被称为基站(BaseStation)。ISP 将网络供给处于蜂窝网络边缘的路由器,路由器连接蜂窝塔,再通过蜂窝塔(基站)提供处于六边形地区中的设备。
6、在蜂窝网络一定范围内的区域,离用户较近的地方还可以部署服务器,帮助用户完成计算。这相当于计算资源的下沉,称为 “边缘计算”。相比中心化的计算,边缘计算延迟低、链路短,能够将更好的体验带给距离边缘计算集群最近的节点。从而让用户享受到更优质、延迟更低、算力更强的服务。
移动蜂窝网络因为部署复杂,往往也是由大型 ISP 直接提供。
7、通信链路是一个抽象概念,这里说的抽象,就是面向对象中抽象类和继承类的关系,比如公司网络使用同轴电缆作为通信链路、移动网络使用无线信号的发送接收器作为通信链路、家用网络使用蓝牙信道作为通信链路等;
8、我们可以把网络传输分为两类,一类是端对端(Host-to-Host)的能力,由 TCP/IP 协议群提供;另一类是广播的能力,是一对多、多对多的能力,可以看作端对端(Host-to-Host)能力的延伸。
9、互联网整体结构:
10、光纤是一种透明的导光介质,多束光可以在一个介质中并行传播,不仅信号容量大,重量轻,并行度高而且传播距离远,当然,光纤不能弯曲。
11、TCP/IP 协议群
- 应用层提供的是应用到应用(Application-To-Application)的协议,比如微信和微信服务器;
- 传输层提供的是主机到主机(Host-To-Host)的协议,比如手机、平板、Linux 主机等;
- 网络层提供的是地址到地址(Address-To-Address)的协议,IP 协议就在这一层工作;
- 链路层提供的是设备到设备(Device-To-Device)的协议;
- 当信号在两个设备间传递的时候,科学家又设计出了物理层封装最底层的物理设备、传输介质等,由最下方的物理层提供最底层的传输能力。
二、互联网和传输层协议
1、TCP(Transport Control Protocol)是一个传输层协议,提供 Host-To-Host 数据的可靠传输,支持全双工,是一个连接导向的协议。
2、TCP 上层的应用层协议使用 TCP 能力的时候,需要告知 TCP 是哪个应用 —— 这就是端口号,端口号用于区分应用。
3、连接(Connection)是传输层的概念,是数据传输双方的契约;会话(Session)的应用层的概念,是应用的行为;
4、TCP 是一个双工协议,数据任何时候都可以双向传输,那么什么是双工/单工:
- 单工:在任何一个时刻,数据只能单向发送。单工需要至少一条线路;
- 半双工:在某个时刻数据可以向一个方向传输,也可以向另一个方向反方向传输,而且交替进行。半双工需要至少一条线路;
- 全双工:任何时刻数据都可以双向发送。全双工需要大于一条线路;
5、C10K 问题指的是并发 10000 连接的问题。核心是有三个问题要解决:内核用什么数据结构将事件通知线程(即 BIO、NIO、AIO 问题);用什么编程模型(同步/异步);具体的数据压缩、拷贝、编码解码如何处理;
6、TCP 协议中,数据被拆分成很多个部分,部分增加了协议头,合并成一个 TCP 段进行传输,这个过程,我们俗称 拆包;同时,TCP 协议中,如果发往一个目的地的多个数据太小了,为了防止多次发送占用资源,TCP 协议又可能将他们合并成一个 TCP 段发送,在目的地在还原成多个数据,这个过程,我们俗称 粘包;
传输层的协议为什么不选择将文件一次发送呢?有很多原因,比如为了稳定性,一次发送的数据越多,出错的概念就越大;比如为了效率,网络中有时候存在着并行的路径,拆分数据包就能更好的利用这些并行的路径;再比如如果随意发送很大的数据,可能导致网卡处理不过来,而导致其他应用实时性遭到破坏;
7、假如 TCP 协议不肯拆包,或者拆的包过大,IP 协议就需要拆出大量的包。那么 IP 协议为什么需要拆包呢?这是因为在网络中,每次能够传输的数据不可能太大,这受限于具体的网络传输设备,也就是物理特性。但是 IP 协议,拆分太多的封包并没有意义。因为可能会导致属于同个 TCP 段的封包被不同的网络路线传输,这会加大延迟。同时,拆包还需要消耗硬件和计算资源。
8、TCP 作为一个传输层协议,最核心的能力是传输。传输需要保证可靠性,还需要流速控制,这两个核心能力均由滑动窗口提供。
9、滑动窗口和流速控制是怎么回事?滑动窗口是 TCP 协议控制可靠性的核心。发送方将数据拆包,变成多个分组(即 Segment)。然后将数据放入一个拥有滑动窗口的数组,依次发出,仍然遵循先入先(FIFO)的顺序,但是窗口中的分组会一次性发送。窗口中序号最小的分组如果收到 ACK,窗口就会发生滑动;如果最小序号的分组长时间没有收到 ACK,就会触发整个窗口的数据重新发送。
另一方面,在多次传输中,网络的平均延迟往往是相对固定的,这样 TCP 协议可以通过双方协商窗口大小控制流速。
10、 TCP 协议和 UDP 协议的优势和劣势?TCP 最核心的价值就是提供封装好的一套解决可靠性的优秀方案。TCP 帮助我们在确保吞吐量、延迟、丢包率的基础上,保证可靠性;UDP 则不同,UDP 提供了最小版的实现,其最核心的价值是灵活、轻量、传输速度快。
其实对于我们来说,TCP 协议和 UDP 协议根本不存在什么优势和劣势,只不过是场景不同,选择不同而已。最后还有一个非常重要的考虑因素就是成本,如果没有足够专业的团队解决网络问题,TCP 无疑会是更好的选择。
11、一台内存在 8G 左右的服务器,可以同时维护多少个连接?连接是内存中的状态对象,从理论上分析,连接本身不太占用内存。不同语言连接对象大小不等,但是通常很小。下面我提供一段 Java 程序,你可以感受一下:
代码语言:javascript复制public class Server {
public static void main(String[] argv) throws IOException {
ServerSocket serverSocket = new ServerSocket();
InetSocketAddress addr = new InetSocketAddress(3001);
serverSocket.bind(addr);
List<Socket> list = new LinkedList<>();
while (true) {
Socket client = serverSocket.accept();
list.add(client);
System.out.println(list.size());
}
}
}
public class Client {
public static void main(String[] argv) throws IOException, InterruptedException {
List<Socket> clients = new LinkedList<>();
for (int i = 0; i < 1000000; i ) {
Socket client = new Socket("127.0.0.1", 3001);
clients.add(client);
Thread.sleep(10000);
}
}
}
通过运行上面这段程序,你可以观察到以下这几个现象:创建 100W 连接速度不是很快,这说明 TCP 连接创建有成本(3 次握手,都是网络 IO);用 jps 找到对应的进程的 id,在用 sudo cat /proc/{进程ID}/status | grep VmHWM
(或者用 jvisualvm 工具)可以看到实际的内存占用。按照这种增长趋势,8G 内存空间可以轻轻松松存放 100W 个连接。
但是如果单机建立太多的连接,会报一个 Cannot assign requested address 或者 No buffer space available 的异常,这是因为客户端连接服务端时,操作系统要为每个客户端分配一个端口,上面的程序很快会把端口号用尽,或者直接没有可用的缓冲区。
所以,我们可以得出一个结论:核心的问题是,通信需要缓冲区,通信需要 I/O。这是因为通信占用资源,连接本身占用资源少。
三、网络层协议
1、IP 协议(Internet Protocol)是一个处于垄断地位的网络层协议。IPv4 就是 IP 协议的第 4 个版本,是目前互联网的主要网络层协议。IP 协议并不负责数据的可靠性,可靠性是 IP 协议上方的 Host-To-Host 协议(即传输层协议)保证的。
2、IP 协议接收 IP 协议上方的 Host-To-Host 协议(即传输层协议)传来的数据,然后进行拆分,这个能力叫做分片(Fragmentation);然后 IP 协议为每个分片增加一个 IP 头(Header),组成一个 IP 封包(Datagram);之后,IP 协议调用底层的局域网(数据链路层)传送数据。最后 IP 协议通过寻址和路由能力最终把封包送达目的地。
- 延迟(Latency):1bit 的数据从网络的一个终端传送到另一个终端需要的时间;
- 吞吐量(Throughput):单位时间内可以传输的平均数据量;
- 丢包率(Packet loss):丢包率指的发送出去的封包没有达到目的地的比率;
3、路由和寻址的区别是什么?寻址(Addressing)就是通过地址找到设备;路由(Routing)本质是路径的选择。就好像知道地址,但是到了每个十字路口,还需要选择具体的路径。因此,路由和寻址,是相辅相成的关系。
4、环回地址,是指不离开主机的数据包(也就是说,这些数据包不会通过外部网络接口)。环回地址是主机用于向自身发送通信的一个特殊地址。环回地址为同一台设备上运行的 TCP/IP 应用程序和服务之间相互通信提供了一条捷径。同一台主机上的两项服务若使用环回地址而非分配的主机地址,就可以绕开 TCP/IP 协议栈的下层。通过 ping 环回地址,还可以测试本地主机上的 TCP/IP 配置。
IPv4 的环回地址是保留地址之一 127.0.0.1。尽管只使用 127.0.0.1 这一个地址,但地址 127.0.0.0 到 127.255.255.254 均予以保留。此地址块中的任何地址都将环回到本地主机中。此地址块中的任何地址都绝不会出现在任何网络中。
IPv6 的环回地址必须以 fe80 开头;
7、IPv4 的地址是 4 个 8 位,总共 32 位,用 0-255 的数字标识;IPv6 的地址是 8 个 16 位,总共 128 位,通常用 16 进制表示,IPv6 地址太多,因此不再需要子网掩码,而是直接将 IPv6 的地址分区即可;
8、IPv6 解决的是地址耗尽问题,IPv6 的工作原理和 IPv4 相似,分成切片(Segmentation)、增加封包头、路由(寻址)这样几个阶段去工作。
9、Tunnel 技术是什么?Tunnel 技术是两个网络间用程序定义的一种通道。具体来说,如果两个 IPv6 网络被 IPv4 分隔开,那么两个 IPv6 的出口处(和 IPv4 网络的网关处)就可以用程序(或硬件)实现一个隧道,方便两个网络设备的通信。
10、交换机(或者称为链路层交换机),链路层设备,它的工作就是不断接收数据,然后转发数据。通常意义上,交换机不具有路由功能,路由器往往具有交换功能。
11、设备间通信的本质其实是设备拥有的网络接口(网卡)间的通信。为了区别每个网络接口,互联网工程任务组(IETF)要求每个设备拥有一个唯一的编号,这个就是 MAC 地址。总的来说,IP 地址更像现实生活中的地址,而 MAC 地址更像你的身份证号。
12、ARP(地址解析协议):已知 IP 地址,找到 MAC 地址的协议。发送接口会发送一个广播查询给到交换机,交换机将查询转发给所有接口。如果某个接口发现自己就是对方要查询的接口,则会将自己的 MAC 地址回传。接下来,会在交换机和发送接口的 ARP 表中,增加一个缓存条目。
因此,即使是局域网两台设备通信,也必须通过交换机,来查询 ARP 表获取对方的 MAC 地址。
13、IP 路由器寻址过程
14、NAT(网络地址解析协议):解决的是内外网通信的问题。NAT 通常发生在内网和外网衔接的路由器中,由路由器中的 NAT 模块提供网络地址转换能力。从设计上看,NAT 最核心的能力,就是能够将内网中某个 IP 地址映射到外网 IP,然后再把数据发送给外网的服务器。当服务器返回数据的时候,NAT 又能够准确地判断外网服务器的数据返回给哪个内网 IP。
15、MTU 这个缩写词,它指的是 Maximun Transmission Unit,最大传输单元,意思是链路层网络允许的最大传输数据分组的大小。因此 IP 协议要根据 MTU 拆分封包。
16、总结下,数据的发送方,将自己的 MAC 地址、目的地 MAC 地址,以及数据作为一个分组(Packet),也称作 Frame 或者封包,发送给交换机。交换机再根据目的地 MAC 地址,将数据转发到目的地的网络接口(网卡)。
四、网络编程
1、Socket 首先是文件,存储的是数据。
对服务端而言,分成服务端 Socket 文件和客户端 Socket 文件。服务端 Socket 文件存储的是客户端 Socket 文件描述符;客户端 Socket 文件存储的是传输的数据。读取客户端 Socket 文件,就是读取客户端发送来的数据;写入客户端文件,就是向客户端发送数据。
对客户端而言, Socket 文件存储的是发送给服务端(或接收的)数据,客户端 Socket 是一个双向管道,操作系统将客户端传来的数据写入这个管道,也将线程写入管道的数据发送到客户端。
2、磁盘读取正确的做法是每次读取 2k、4k 这样大小的数据,这是因为操作系统中的内存分页通常是这样的大小,而磁盘的读写往往是会适配页表大小。体现在内存中就是缓冲区的作用,比如设置一个 2k 大小缓冲区,这样读取 2048 次,才会真的发生一次读取。
3、磁盘读取 2k 数据,读取到的不一定是 2k 实际的数据,很有可能会比 2k 少,这是因为文件内容是以日志形式存储,会有冗余。
4、磁盘读取为什么不一次先读取几兆数据或者读取更大的数据呢?这有两个原因。
- 如果是高并发场景下,并发读取数据时内存使用是根据并发数翻倍的,如果同时读取的数据量过大,可能会导致内存不足。
- 读取比 2k/4k……大很多倍的数据,比如 1M/2M 这种远远大于内存分页大小的数据,并不能提升性能。
5、用户空间的程序不可以直接访问内核空间的数据,这是操作系统的一种保护策略。当然也存在一种叫作内存映射的方式,就是内核通过内存映射,直接将内核空间中的一块内存区域分享给用户空间只读使用,这样的方式可以节省一次数据拷贝。这个能力在 Java 的 NIO 中称作 DirectMemory,对应 C 语言是 MMAP。
6、缓冲区的 flip 操作是怎么回事?flip 操作意味翻转,是切换缓冲区的读写状态,在 flip 操作中,通常将 position 指针置 0,limit 指针不变。
7、缓冲区的 rewind 操作是怎么回事?rewind 操作意味倒带(隐含重头操作),使 position 指针置 0,相当于重头读文件。
五、Web 技术
1、为了准确地定位资源,人们发明了统一资源定位符(URL,Uniform Resource Locator),这样我们就可以通过字符串定位一个互联网的资源。
2、域名系统本质是定位资源。DNS(Domain Name System,域名系统)是一个将域名和 IP 地址相互映射的分布式服务。
3、位于最顶层的是根域名服务器(Root Name Server)。人们在全世界范围内搭建了多台根域名服务器,2016 年的统计数据中,全世界目前有 13 台 IPv4 根服务器,25 台 IPv6 根服务器。不过,因为流量、防止单点故障、平衡地理分布等问题,根域名服务器只是一个目录,并不提供具体的数据。
4、域名系统是一个分级的分布式系统,整体设计也是一个树状结构。顶层的根域名服务器和中间的顶级域名服务器,存储的是目录,最终的 DNS 记录由权威域名服务器提供。DNS 记录并不仅仅只有映射 IP 一种能力,DNS 记录还可以设置网站的别名、邮件服务器、DNS 记录位置等能力。
5、CNAME 是一种 DNS 记录,它的作用是将一个域名映射到另一个域名。域名解析的时候,如果看到 CNAME 记录,则会从映射目标重新开始查询。
6、A 是一种 DNS 记录,它的作用是将域名和 IPv4 地址映射;AAAA 是一种 DNS 记录,它的作用是将域名和 IPv6 地址映射。
7、NS(Name Server)是一种 DNS 记录,描述的是 DNS 服务器网址。从 DNS 的存储结构上说,Name Server 中含有权威 DNS 服务的目录。也就是说,NS 记录指定哪台 Server 是回答 DNS 查询的权威域名服务器。当一个 DNS 查询看到 NS 记录的时候,会再去 NS 记录配置的 DNS 服务器查询,得到最终的记录。如下面这个例子:
代码语言:javascript复制a.com. IN NS ns1.a.com.
a.com. IN NS ns2.a.com.
8、内容分发网络(Content Dilivery Network,CDN)是一个专门用来分发内容的分布式应用。CDN 构建在现有的互联网之上,通过在各地部署数据中心,让不同地域的用户可以就近获取内容。这里的内容通常指的是文件、图片、视频、声音、应用程序安装包等,它们具有一个显著的特征——无状态,或者说是静态的。
9、CDN 回源有 3 种情况,一种是 CDN 节点没有对应资源时主动到源站获取资源;另一种是缓存失效后,CDN 节点到源站获取资源;还有一种情况是在 CDN 管理后台或者使用开放接口主动刷新触发回源。
10、Dig 是一个在类 Unix 命令行模式下查询 DNS 包括 NS 记录,A记录,MX 记录等相关信息的工具。
代码语言:javascript复制## 安装
apt-get install dnsutils
yum install bind-utils
## 使用
dig baidu.com ANY noall answer
11、在程序设计当中有一个核心的原则,叫作单一数据源(Single Souce of Truth, SSOT)。这个原则指的是,在程序设计中,应该尽可能地减少数据的来源,最好每个数据来源只有单独一份。这样能够避免大量的数据不一致以及同步数据的问题。
12、万维网(World Wide Web, WWW)是伯纳斯·李对一系列发明,包括 Web 服务、HTTP 协议、HTML 语言等一个体系的综合。
13、HTTP 是不是每次发送一个请求,都建立一个 TCP 连接呢? 当然不能这样,为了节省握手、挥手的时间。当浏览器发送一个请求到 Web 服务器的时候,Web 服务器内部就设置一个定时器。在一定范围的时间内,如果客户端继续发送请求,那么服务器就会重置定时器。如果在一定范围的时间内,服务器没有收到请求,就会将连接断开。这样既防止浪费握手、挥手的资源,同时又避免一个连接占用时间过长无法回收导致内存使用效率下降。这个能力可以利用 HTTP 协议头进行配置,比如下面这条请求头,会告诉 Web 服务器连接的持续时间是 5s,如果 5s 内没有请求,那么连接就会断开。
代码语言:javascript复制Keep-Alive: timeout=5s
14、强制缓存:请求过一次不需要再次发送请求的缓存模式。当一个文件被强制缓存后,下一次请求会直接使用本地版本,而不会真的发出去。使用强制缓存时要注意,千万别把需要动态更新的数据强制缓存。
15、协商缓存:第一次获取接口数据,会将数据缓存到本地,并存储下数据的摘要(digst)。第二次请求时,浏览器检查到本地有缓存,将摘要发送给服务端。服务端会检查服务端数据的摘要和浏览器发送来的是否一致。如果不一致,说明服务端数据发生了更新,服务端会回传全部数据。如果一致,说明数据没有更新,服务端不需要回传数据。https://www.cnblogs.com/cckui/p/11506514.html
16、HTTP 2.0 的多路复用,会将请求返回都切分成小片,这样利用同一个连接,请求相当于并行的发出,互相之间不会有干扰。同样,当一个网站需要加载的资源较多时,浏览器会尝试并发发送请求(利用多线程技术)。浏览器会限制同时发送并发请求的数量,通常是 6 个,这样做一方面是对用户本地体验的一种保护,防止浏览器抢占太多网络资源;另一方面也是对站点服务的保护,防止瞬时流量过大。
17、H264 就是国际标准化组织在推广的一种编码格式。在 H264 的视频编码技术中,有一个叫作宏块的概念。宏块,就是将画面分成大小不等的区域。比如说 8x8、16x16 等。当播放两个连续的画面的时候,你可以理解成两张图片。如果基于图片分析,那么播放的就是很多个宏块。在这连续的两帧画面中,并不是所有的宏块都发生了变化。
18、点对点连接需要解决 NAT 穿透(NAT 穿墙)的问题。所谓 NAT 穿透问题指的是:内网发起连接,对方的 NAT 路由会因为自己内网的机器没有发起过请求而拒绝;反之,如果对方发起请求,会被己方的 NAT 拒绝。这种情况类似于多线程中的“死锁”问题,无法解决。这个时候,就需要一台第三方服务器作为 NAT 模块的辅助功能,帮助双方的 NAT 模块设置本地数据,让双方的 NAT 模块都认为对方已经和自己发起过通信。
19、流媒体,就是把多媒体数据抽象成为流进行传输。视频本质上是一张张图片在播放,因此非常适合流传输。要知道,流是随着时间产生的数据。通常在一个网络中,等价成本下吞吐量、丢包率和延迟 3 者不能兼得。
20、直播网站是如何实现的?一个直播网站通常会有下面 5 个部分组成。
- 录制端:负责录制直播视频,用流的形式上传。
- 计算集群:专门负责编码上传的流数据,然后进行压缩、转码、切片等工作。
- 对象存储:存储原始视频和转码后的视频(相当于 CDN 的源,回源用)。
- CDN:将转码后的内容分发到离用户较近的节点,方便用户获取。
- 直播 App:给用户看直播时使用。
21、反爬虫的手段主要有:robots.txt、用户识别、字符加密算法、数据加密算法。
22、如果你的应用需要智能 DNS 服务,你将如何实现?https://bind9.readthedocs.io/en/latest/configuration.html
- 首先你可以在你的域名解析系统中增加两条(或以上)ns 记录。比如说你的域名是 example.com,那么你可以增加 ns1.exmaple.com, ns2.example.com。当然,指定这两个域名的 IP 还需要配置两个 A 记录。然后你需要两台机器(也可以是容器或者虚拟机),对应 ns1 和 ns2。最好用不在同一个物理机上的两个容器,这样可以避免一台物理机故障导致服务瘫痪。
- 然后在每个容器(虚拟机)上安装一个 Named 服务。Named 是一个专门用来提供 DNS 服务的工具,在虚拟机上安装完成 Named 后,这个虚拟机就变成了一个权威服务器节点。
- 配置好 Named 后,你需要写几个脚本文件,给要提供 DNS 的域名配置信息。Named 配套使用的有个叫作 GeoDNS 的插件,可以提供基于地理位置的智能 DNS 服务。
五、网络安全
1、对称加密:数据加密标准(DES)算法在 1976 年被美国国家标准局定为使用标准,DES 采用的 56 位密钥,每次计算加密 64 位的数据,目前已经被证明可以被暴力破解,所谓暴力破解,就是遍历所有可能的密钥解析数据的方法;为了应对暴力破解等问题,很多团队选择对称加密算法时开始使用高级加密标准(AES),这个加密法用 128 位密钥,并设计了更难破解的算法。
2、非对称加密:目前最常见且广泛使用的非对称加密算法是 RSA 算法。RSA 依赖的是大整数的分解,以及一些和素数相关的算法。目前没有理论可以破译 RSA 算法。总体来说,RSA 密钥越长破解成本就越高,因此仍然被广泛使用。
3、为什么可以相信一个 HTTPS 网站?当用户用浏览器打开一个 HTTPS 网站时,会到目标网站下载目标网站的证书。接下来,浏览器会去验证证书上的签名,一直验证到根证书。如果根证书被预装,那么就会信任这个网站。也就是说,网站的信用是由操作系统的提供商、根证书机构、中间证书机构一起在担保。
4、如何抵御 SYN 拒绝攻击?SYN 攻击是 DDoS 攻击的一种形式。这种形式攻击者伪装成终端不停地向服务器发起 SYN 请求。通常攻击者的“肉鸡”,发送了 SYN 之后,不等给服务端 ACK,就下线了。 这样攻击者不断发送 SYN ,然后下线,而服务端会等待一段时间(通常会在 3s 以上),等待 ACK。这样就导致了大量的连接对象在服务端被积累。
针对这个特点可以实现一个 TCP 代理(防火墙),发现有发送 SYN 但是不给 ACK 的行为就对目标 IP 地址禁用一段时间。这个策略平时可以配置成开关,等到被攻击的时候打开。另一方面,可以适当提升连接数支持。
5、最后,网络安全是高压线,工作中不容忽视,需要你加倍小心,谨慎处理。这里我嘱咐你两件事情:第一,技术岗位其实很容易违法,违法行为坚决不要做;第二,上线前要进行安全扫描,养成习惯。
六、寄语
1、学习能力很大程度是和你已经拥有的知识成正比的。通常情况下,在一个领域学习过的知识越多,那么在这个领域的学习能力就越强。很多同学以为学习是为了获得知识,其实学习很多时候是为了提高学习能力。
2、做一个技术 Leader,主要有两方面事情,一方面是提效,无论是技术重构、研发流程优化,还是招聘员工、代码 Review,提效都是一个重要目标。另一方面就是赚钱,帮公司赚钱。
3、希望你在工作中不要忘记生活,学习中也不要失去韧性。要知道,功夫在诗外。如果感觉自己处于瓶颈期,静下心来去旅旅游,回家乡小住一段时间都是不错的选择。