
读书笔记
文章平均质量分 92
读书笔记
carroll18
你想要拥有你从未有过的东西,你必须去做你从未做过的事情。
展开
-
JVM内存模型及JAVA程序运行原理
JVM------Java Virtual Machine.JVM是Java平台的基础,与实际机器一样,他有自己的指令集(类似CPU通过指令操作程序运行),并在运行时操作不同的内存区域(JVM内存体系)。Java虚拟机位于操作系统之上(如下图所示),将通过JAVAC命令编译后的字节码加载到其内存区域,通过解释器将字节码翻译成CPU能识别的机器码行。每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。JVM是运行在操作系统之上的,它与硬件没有直接交互。原创 2023-06-23 10:34:49 · 700 阅读 · 0 评论 -
编译原理之目标代码的生成和优化
文章目录目标代码生成正确的指令分配寄存器指令重排序LLVM 的实现Maximal Munch 算法目标代码生成一个正式的编译器后端,代码生成部分需要考虑得更加严密才可以。那么具体要考虑哪些问题呢?其实主要有三点:指令的选择。同样一个功能,可以用不同的指令或指令序列来完成,而我们需要选择比较优化的方案。寄存器分配。每款 CPU 的寄存器都是有限的,我们要有效地利用它。指令重排序。计算执行的次序会影响所生成的代码的效率。在不影响运行结果的情况下,我们要通过代码重排序获得更高的效率。正确的指令我原创 2020-11-03 10:37:50 · 3071 阅读 · 0 评论 -
编译原理之代码优化
文章目录代码优化的目标、对象、范围和策略代码优化的目标代码优化的对象代码优化的范围代码优化的策略一些优化的场景数据流分析实例图示半格理论代码优化的目标、对象、范围和策略代码优化的目标代码优化的目标,是优化程序对计算机资源的使用。我们平常最关心的就是 CPU 资源,最大效率地利用 CPU 资源可以提高程序的性能。代码优化有时候还会有其他目标,比如代码大小、内存占用大小、磁盘访问次数、网络通讯次数等等。代码优化的对象从代码优化的对象看,大多数的代码优化都是在 IR 上做的,而不是在前一阶段的 AS原创 2020-11-03 09:50:21 · 2563 阅读 · 0 评论 -
编译原理之后端技术
文章目录生成汇编代码LLVM生成汇编代码在存在操作系统的情况下,程序逻辑上可使用的内存一般大于实际的物理内存。程序在使用内存的时候,操作系统会把程序使用的逻辑地址映射到真实的物理内存地址。有的物理内存区域会映射进多个进程的地址空间。对于静态编译型语言,比如 C 语言和 Go 语言,编译器后端的任务就是生成汇编代码,然后再由汇编器生成机器码,生成的文件叫目标文件,最后再使用链接器就能生成可执行文件或库文件了。Java 的字节码,在运行时通常也会通过 JIT 机制编译成机器码。而汇编语言是完原创 2020-10-31 15:55:45 · 1056 阅读 · 0 评论 -
编译原理之语义分析
作用域(Scope)作用域是指计算机语言中变量、函数、类等起作用的范围变量的作用域有大有小,外部变量在函数内可以访问,而函数中的本地变量,只有本地才可以访问。变量的作用域,从声明以后开始。在函数里,我们可以声明跟外部变量相同名称的变量,这个时候就覆盖了外部变量。生存期(Extent)生存期是变量可以访问的时间段,也就是从分配内存给它,到收回它的内存之间的时间。Java 对象所采用的内存超出了申请内存时所在的作用域,所以也就没有办法自动收回。所以 Java 采用的是自动内存管理机制原创 2020-10-28 13:55:09 · 2843 阅读 · 0 评论 -
编译原理之语法分析
文章目录解析变量声明语句解析变量声明语句语法分析的结果是生成 AST。算法分为自顶向下和自底向上算法,其中,递归下降算法是一种常见的自顶向下算法。“int age = 45”这个语句,语法分析算法的示意图:首先把变量声明语句的规则,用形式化的方法表达一下。它的左边是一个非终结符(Non-terminal)。右边是它的产生式(Production Rule)。在语法解析的过程中,左边会被右边替代。如果替代之后还有非终结符,那么继续这个替代过程,直到最后全部都是终结符(Terminal),也就是原创 2020-10-28 13:54:38 · 1175 阅读 · 0 评论 -
编译原理之正则文法和有限自动机
先来解析一下“age >= 45”这个关系表达式,这样就能理解有限自动机的概念,知道它是做词法解析的核心机制了。解析 age >= 45原创 2020-10-25 15:13:38 · 1623 阅读 · 0 评论 -
网络协议之关键问题
当网络包到达一个城关的时候,可以通过路由表得到下一个城关的 IP 地址,直接通过 IP 地址找就可以了,为什么还要通过本地的 MAC 地址呢?在网络包里,有源 IP 地址和目标 IP 地址、源 MAC 地址和目标 MAC 地址。从路由表中取得下一跳的 IP 地址后,应该把这个地址放在哪里呢?如果放在目标 IP 地址里面,到了城关,谁知道最终的目标在哪里呢?所以要用 MAC 地址。所谓的下一跳,看起来是 IP 地址,其实是要通过 ARP 得到 MAC 地址,将下一跳的 MAC 地址放在目标 MAC .原创 2020-10-22 11:41:17 · 194 阅读 · 0 评论 -
网络协议之容器和微服务的网络
容器网络容器需要的封闭环境主要使用了两种技术,一种是看起来是隔离的技术,称为namespace,也即每个 namespace 中的应用看到的是不同的 IP 地址、用户空间、程号等。另一种是用起来是隔离的技术,称为cgroup,也即明明整台机器有很多的 CPU、内存,而一个应用只能用其中的一部分。容器内部的客户端访问外部网络中的服务器容器是一种比虚拟机更加轻量级的隔离方式,主要通过 namespace 和 cgroup 技术进行资源的隔离,namespace 用于负责看起来隔离,cgroup 用原创 2020-10-22 10:34:34 · 357 阅读 · 0 评论 -
网络协议之数据中心
文章目录DNSCDNVPNDNSDNS 服务器,一定要设置成高可用、高并发和分布式的。树状的层次结构根 DNS 服务器 :返回顶级域 DNS 服务器的 IP 地址顶级域 DNS 服务器:返回权威 DNS 服务器的 IP 地址权威 DNS 服务器 :返回相应主机的 IP 地址DNS 是网络世界的地址簿,可以通过域名查地址,因为域名服务器是按照树状结构组织的,因而域名查找是使用递归的方法,并通过缓存的方式增强性能;DNS 的解析过程在域名和 IP 的映射过程中,给了应用基于域原创 2020-10-21 10:35:28 · 565 阅读 · 0 评论 -
网络协议之应用层
文章目录HTTP协议HTTPS协议流媒体协议HTTP协议HTTP 的请求格式HTTP 的返回报文格式HTTP 的报文大概分为三大部分。第一部分是请求行,第二部分是请求的首部,第三部分才是请求的正文实体。HTTP 请求的发送HTTP 协议是基于 TCP 协议的,所以它使用面向连接的方式发送请求,通过 stream 二进制流的方式传给对方。当然,到了 TCP 层,它会把二进制流变成一个的报文段发送给服务器。在发送给每个报文段的时候,都需要对方有一个回应 ACK,来保证报文可靠地到达了对方原创 2020-10-20 23:44:55 · 388 阅读 · 0 评论 -
网络协议之传输层
UDP协议QUIC(全称Quick UDP Internet Connections,快速 UDP 互联网连接)是 Google 提出的一种基于 UDP 改进的通信协议,其目的是降低网络通信的延迟,提供更好的用户互动体验。UDP 继承了 IP 包的特性,基于数据报的,一个一个地发,一个一个地收,不保证不丢失,不保证按顺序到达。UDP 包头TCP协议TCP 包头源端口号和目标端口号:如果没有这两个端口号。数据就不知道应该发给哪个应用。包的序号:为了解决乱序的问题。不编号怎么确认哪个原创 2020-10-19 18:58:10 · 239 阅读 · 0 评论 -
网络协议之通信协议综述
文章目录协议三要素无类型域间选路(CIDR)MAC 地址网络设备的状态标识DHCP协议三要素协议的三要素语法,就是这一段内容要符合一定的规则和格式。例如,括号要成对,结束要使用分号等。语义,就是这一段内容要代表某种意义。例如数字减去数字是有意义的,数字减去文本一般来说就没有意义。顺序,就是先干啥,后干啥。例如,可以先加上某个数值,然后再减去某个数值。只有通过网络协议,才能使一大片机器互相协作、共同完成一件事。网络为什么要分层?网络包的格式很复杂,这个程序也很复杂。复杂的程序都要分层,原创 2020-10-19 10:58:40 · 414 阅读 · 0 评论 -
Linux操作系统之容器化
文章目录容器NamespaceCGroup数据中心操作系统容器容器实现封闭的环境主要要靠两种技术,一种是看起来是隔离的技术,称为namespace(命名空间)。在每个 namespace 中的应用看到的,都是不同的 IP 地址、用户空间、进程 ID 等。另一种是用起来是隔离的技术,称为cgroup(网络资源限制),即明明整台机器有很多的 CPU、内存,但是一个应用只能用其中的一部分。多个容器运行在一台机器上,不会相互影响吗?如何限制 CPU 和内存的使用呢?Docker 可以限制对于 CPU原创 2020-10-17 11:26:04 · 1000 阅读 · 0 评论 -
网络协议之从二层到三层
文章目录无类型域间选路(CIDR)MAC 地址网络设备的状态标识ping:查询报文类型的使用转发网关NAT 网关UDP协议TCP协议套接字SocketDNSIP 地址是一个网卡在网络世界的通讯地址,相当于我们现实世界的门牌号码。A、B、C 三类地址所能包含的主机的数量无类型域间选路(CIDR)无类型域间选路,简称CIDR,将 32 位的 IP 地址一分为二,前面是网络号,后面是主机号。例如:10.100.122.2/24,这个 IP 地址中有一个斜杠,斜杠后面有个数字 24。这种地址表示形原创 2020-08-30 09:32:37 · 865 阅读 · 0 评论 -
编译原理随笔记录
文章目录编译器的结构词法分析器语法分析器语义分析器中间代码生成器编译器的结构词法分析器语法分析器语义分析器中间代码生成器原创 2020-08-30 09:30:10 · 259 阅读 · 0 评论 -
HTTP协议之总结展望篇
文章目录HTTP/2HTTP/2内核HTTP/2HTTP/1、HTTPS 和 HTTP/2 的协议栈HTTP 协议取消了小版本号,所以 HTTP/2 的正式名字不是 2.0;HTTP/2 在“语义”上兼容 HTTP/1,保留了请求方法、URI 等传统概念;HTTP/2 使用“HPACK”算法压缩头部信息,消除冗余数据节约带宽;HTTP/2 的消息不再是“Header+Body”的形式,而是分散为多个二进制“帧”;HTTP/2 使用虚拟的“流”传输消息,解决了困扰多年的“队头阻塞”问题,同时原创 2020-08-30 09:28:55 · 617 阅读 · 0 评论 -
HTTP协议之安全篇
文章目录HTTPSSSL/TLSHTTPS的优化什么样的通信过程才是安全的呢?通常认为,如果通信过程具备了四个特性,就可以认为是“安全”的,这四个特性是:机密性、完整性,身份认证和不可否认。HTTPSHTTPS 名字里的“S”,它把 HTTP 下层的传输协议由 TCP/IP 换成了 SSL/TLS,由“HTTP over TCP/IP”变成了“HTTP over SSL/TLS”,让 HTTP 运行在了安全的 SSL/TLS 协议上,收发报文不再使用 Socket API,而是调用专门的安全接原创 2020-08-30 09:27:43 · 2273 阅读 · 0 评论 -
HTTP协议之进阶篇
文章目录短连接与长连接Cookie机制Cookie 的属性HTTP的缓存控制短连接与长连接HTTP 传输大文件相关的知识压缩 HTML 等文本文件是传输大文件最基本的方法;分块传输可以流式收发数据,节约内存和带宽,使用响应头字段“Transfer-Encoding: chunked”来表示,分块的格式是 16 进制长度头 + 数据块;范围请求可以只获取部分数据,即“分块请求”,实现视频拖拽或者断点续传,使用请求头字段“Range”和响应头字段“Content-Range”,响应状态码必须是 20原创 2020-08-30 09:27:11 · 198 阅读 · 0 评论 -
HTTP协议之基础篇
键入网址再按下回车,后面究竟发生了什么?HTTP报文请求行状态行头部字段安全与幂等URI 的基本组成状态码HTTP的特点HTTP的优点和缺点原创 2020-08-30 09:26:36 · 1230 阅读 · 0 评论 -
HTTP协议之入门篇
文章目录你能把它们都解释清楚吗?用 Nginx 搭建 Web 服务器,照着网上的文章配好了,但里面那么多的指令,什么 keepalive、rewrite、proxy_pass 都是怎么回事?为什么要这么配置?用 Python 写爬虫,URI、URL“傻傻分不清”,有时里面还会加一些奇怪的字符,怎么处理才好?都说 HTTP 缓存很有用,可以大幅度提升系统性能,可它是怎么做到的?又应该用在何时何地?HTTP 和 HTTPS 是什么关系?还经常听说有 SSL/TLS/SNI/OCSP/ALPN……这么原创 2020-08-30 09:25:36 · 503 阅读 · 0 评论 -
编译原理之编译器的前端技术
文章目录编译器的前端技术编译器的前端技术“前端”指的是编译器对程序代码的分析和理解过程。它通常只跟语言的语法有关,跟目标机器无关。而与之对应的“后端”则是生成目标代码的过程,跟目标机器有关。程序也有定义良好的语法结构,它的语法分析过程,就是构造这么一棵树。一个程序就是一棵树,这棵树叫做抽象语法树(Abstract Syntax Tree,AST)。树的每个节点(子树)是一个语法单元,这个单元的构成规则就叫“语法”。每个节点还可以有下级节点。词法分析是把程序分割成一个个 Token 的过程原创 2020-08-30 09:23:05 · 4010 阅读 · 1 评论 -
Linux操作系统之虚拟化
文章目录虚拟机CPU 的虚拟化过程存储虚拟化的场景下,整个写入的过程网络虚拟化场景下网络包的发送过程虚拟机虚拟化的本质是用 qemu 的软件模拟硬件,但是模拟方式比较慢,需要加速;虚拟化主要模拟 CPU、内存、网络、存储,分别有不同的加速办法;CPU 和内存主要使用硬件辅助虚拟化进行加速,需要配备特殊的硬件才能工作;网络和存储主要使用特殊的半虚拟化驱动加速,需要加载特殊的驱动程序。CPU 的虚拟化过程首先,我们要定义 CPU 这种类型的 TypeInfo 和 TypeImpl、继承关系原创 2020-08-28 17:36:06 · 985 阅读 · 0 评论 -
Linux操作系统之网络系统
文章目录SocketSocketMAC 地址的定位功能局限在一个网络里面,也即同一个网络号下的 IP 地址之间,可以通过 MAC 进行定位和通信。从 IP 地址获取 MAC 地址要通过 ARP 协议,是通过在本地发送广播包,也就是“吼”,获得的 MAC 地址。应用层和内核互通的机制,就是通过 Socket 系统调用。两者需要跨内核态和用户态通信,就需要一个系统调用完成这个衔接,这就是 Socket。发送数据包在 Linux 服务器 B 上部署的服务端 Nginx 和 Tomcat,都是通过原创 2020-08-28 17:35:25 · 535 阅读 · 0 评论 -
Linux操作系统之进程间通信
文章目录进程间通信的各种模式信号管道IPC(Inter-Process Communication,进程间通信)进程间通信的各种模式管道模型:类似瀑布开发模式的管道消息队列模型:类似邮件模式的消息队列共享内存模型:类似会议室联合开发的共享内存加信号量信号量:类似应急预案的信号信号量其实是一个计数器,主要用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。将信号量初始化为一个数值,来代表某种资源的总体数量。对于信号量来讲,会定义两种原子操作,一个是P 操作,我们称为申请资源操作。原创 2020-08-28 17:33:13 · 736 阅读 · 0 评论 -
Linux操作系统之输入输出系统
输入输出设备我们大致可以分为两类:块设备(Block Device)和字符设备(Character Device)块设备将信息存储在固定大小的块中,每个块都有自己的地址。硬盘就是常见的块设备。字符设备发送或接受的是字节流。而不用考虑任何块结构,没有办法寻址。鼠标就是常见的字符设备。原创 2020-08-28 17:32:34 · 605 阅读 · 0 评论 -
Linux操作系统之文件系统
文章目录文件系统硬盘文件系统虚拟文件系统文件缓存文件系统在规划文件系统的时候,需要考虑到以下几点第一点,文件系统要有严格的组织形式,使得文件能够以块为单位进行存储。第二点,文件系统中也要有索引区,用来方便查找一个文件分成的多个块都存放在了什么位置。第三点,如果文件系统中有的文件是热点文件,近期经常被读取和写入,文件系统应该有缓存层。第四点,文件应该用文件夹的形式组织起来,方便管理和查询。第五点,Linux 内核要在自己的内存里面维护一套数据结构,来保存哪些文件被哪些进程打开和使用。不同的原创 2020-08-28 17:31:27 · 703 阅读 · 0 评论 -
Linux操作系统之内存管理
文章目录内存管理进程空间管理物理内存管理用户态内存映射内核态内存映射内存管理操作系统的内存管理,主要分为三个方面第一,物理内存的管理,相当于会议室管理员管理会议室。第二,虚拟地址的管理,也即在项目组的视角,会议室的虚拟地址应该如何组织。第三,虚拟地址和物理地址如何映射,也即会议室管理员如果管理映射表。查看进程内存空间的布局的命令:cat /proc/进程id/maps分段机制的原理分段机制下的虚拟地址由两部分组成,段选择子和段内偏移量。段选择子就保存在咱们前面讲过的段寄存器里面原创 2020-08-28 17:30:48 · 633 阅读 · 0 评论 -
计算机组成原理之指令和运算(二)
文章目录动态链接动态链接程序的链接,是把对应的不同文件内的代码段,合并到一起,成为最后的可执行文件。原创 2020-08-13 15:33:52 · 423 阅读 · 0 评论 -
计算机组成原理之指令和运算(一)
文章目录从编译到汇编,代码怎么变成机器码?解析指令和机器码CPU 是如何执行指令的?从 if…else 来看程序的执行和跳转ELF和静态链接程序装载内存分段内存分页从编译到汇编,代码怎么变成机器码?我们平时编写的代码,到底是怎么变成一条条计算机指令,最后被 CPU 执行的呢?拿一小段真实的 C 语言程序来看看。// test.cint main(){ int a = 1; int b = 2; a = a + b;}要让这一段代码在Linux操作系统上面跑起来,我们需要把原创 2020-08-13 15:32:22 · 1763 阅读 · 0 评论 -
Linux操作系统之进程管理
文章目录进程线程线程的数据进程进程从代码到二进制到运行时的一个过程首先通过图右边的文件编译过程,生成 so 文件和可执行文件,放在硬盘上。下图左边的用户态的进程 A 执行 fork,创建进程 B,在进程 B 的处理逻辑中,执行 exec 系列系统调用。这个系统调用会通过 load_elf_binary 方法,将刚才生成的可执行文件,加载到进程 B 的内存中执行。线程一个普通线程的创建和运行过程线程的数据第一类是线程栈上的本地数据第二类数据就是在整个进程里共享的全局数据:Mutex,原创 2020-08-15 15:19:24 · 350 阅读 · 0 评论 -
Linux操作系统之概述和系统初始化
文章目录文件操作在各个层的数据结构的关联原创 2020-08-15 15:18:43 · 627 阅读 · 0 评论 -
计算机组成原理之结尾
文章目录大型的 DMP 系统大型的 DMP 系统DMP 系统的全称叫作数据管理平台(Data Management Platform),目前广泛应用在互联网的广告定向(Ad Targeting)、个性化推荐(Recommendation)这些领域。DMP 系统会通过处理海量的互联网访问数据以及机器学习算法,给一个用户标注上各种各样的标签。然后,在我们做个性化推荐和广告投放的时候,再利用这些这些标签,去做实际的广告排序、推荐等工作。...原创 2020-08-13 15:37:12 · 198 阅读 · 0 评论 -
计算机组成原理之存储于IO系统(二)
文章目录输入输出设备海明码分布式计算输入输出设备机械硬盘的硬件,主要由盘面、磁头和悬臂三部分组成。我们的数据在盘面上的位置,可以通过磁道、扇区和柱面来定位。实际的一次对于硬盘的访问,需要把盘面旋转到某一个“几何扇区”,对准悬臂的位置。然后,悬臂通过寻道,把磁头放到我们实际要读取的扇区上。受制于机械硬盘的结构,我们对于随机数据的访问速度,就要包含旋转盘面的平均延时和移动悬臂的寻道时间。通过这两个时间,我们能计算出机械硬盘的 IOPS。DMA 技术,也就是直接内存访问(Direct Memory原创 2020-08-13 15:36:32 · 356 阅读 · 0 评论 -
计算机组成原理之存储于IO系统(一)
文章目录存储器CPU Cache理解内存解析TLB和内存保护总线存储器SRAM(Static Random-Access Memory,静态随机存取存储器)的芯片,SRAM 之所以被称为“静态”存储器,是因为只要处在通电状态,里面的数据就可以保持存在。而一旦断电,里面的数据就会丢失了。在 CPU 里,通常会有 L1、L2、L3 这样三层高速缓存。L1 的 Cache 往往就嵌在 CPU 核心的内部。每个 CPU 核心都有一块属于自己的 L1 高速缓存,通常分成指令缓存和数据缓存,分开存放 CPU 使原创 2020-08-13 15:35:55 · 701 阅读 · 0 评论 -
计算机组成原理之处理器
文章目录数据通路为什么循环嵌套的改变会影响性能?数据通路计算机每执行一条指令的过程,可以分解成这样几个步骤Fetch(取得指令),也就是从 PC 寄存器里找到对应的指令地址,根据指令地址从内存里把具体的指令,加载到指令寄存器中,然后把 PC 寄存器自增,好在未来执行下一条指令。Decode(指令译码),也就是根据指令寄存器里面的指令,解析成要进行什么样的操作,是 R、I、J 中的哪一种指令,具体要操作哪些寄存器、数据或者内存地址。Execute(执行指令),也就是实际运行对应的 R、I、J 这原创 2020-08-09 21:39:35 · 1505 阅读 · 3 评论 -
计算机组成原理之入门篇
文章目录冯·诺依曼体系结构学习应用层的各种语言、框架,好比在练拳法招式,可以短期给予你回报,而深入学习“底层知识”,就是在练扎马步、核心肌肉力量,是在提升你自己的“根骨”和“资质”。整个计算机组成原理,就是围绕着计算机是如何组织运作展开的。冯·诺依曼体系结构任何一台计算机的任何一个部件都可以归到运算器、控制器、存储器、输入设备和输出设备中,而所有的现代计算机也都是基于这个基础架构来设计开发的。...原创 2020-08-09 21:38:01 · 523 阅读 · 0 评论 -
《网络编程实战》专栏阅读笔记之性能篇
文章目录I/O 多路复用selectpoll 函数非阻塞I/Oepoll阻塞I/O和进程模型阻塞I/O和线程模型I-O多路复用和线程主 - 从 reactor 模式主 - 从 reactor+worker threads 模式阻塞 / 非阻塞 VS 同步 / 异步I/O 多路复用selectselect 函数就是这样一种常见的 I/O 多路复用技术,我们将在后面继续讲解其他的多路复用技术。使用 select 函数,通知内核挂起进程,当一个或多个 I/O 事件发生后,控制权返还给应用程序,由应用程序进原创 2020-08-03 14:51:10 · 239 阅读 · 0 评论 -
《网络编程实战》专栏阅读笔记之提高篇
文章目录TCP 的四次挥手TIME_WAITTIME_WAIT 的作用TIME_WAIT 的危害如何优化 TIME_WAIT?总结TCP协议中的动态数据传输拥塞控制和数据传输UDP connect 的作用TCP 的四次挥手TCP 连接终止时,主机 1 先发送 FIN 报文,主机 2 进入 CLOSE_WAIT 状态,并发送一个 ACK 应答,同时,主机 2 通过 read 调用获得 EOF,并将此结果通知应用程序进行主动关闭操作,发送 FIN 报文。主机 1 在接收到 FIN 报文后发送 ACK 应原创 2020-08-03 14:50:25 · 310 阅读 · 0 评论 -
《网络编程实战》专栏阅读笔记之基础篇
文章目录TCP/IP和Linux客户端-服务器网络模型的基本概念套接字和地址TCP三次握手如果我问你一些关于网络编程方面的问题,你会怎样回答呢?大家经常说的四层、七层,分别指的是什么?TCP 三次握手是什么,TIME_WAIT 是怎么发生的?CLOSE_WAIT 又是什么状态?Linux 下的 epoll 解决的是什么问题?如何使用 epoll 写出高性能的网络程序?什么是网络事件驱动模型?Reactor 模式又是什么?理论是基石,框架则是站在一个更为抽象的角度来看待网络编程问题。学习原创 2020-08-03 14:49:47 · 377 阅读 · 0 评论