备案后修改网站内容/太原网站seo
计网
第一章 计算机网络和因特网
1.1 什么是因特网
回答这个问题有两种方式 其一,我们能够描述因特网的具体构成,即构成因特网的基本硬件和软件组件;其二,我们能够根据为分布式应用提供服务的联网基础设施来描述因特网。
1.1.1 具体构成描述
因特网是一个世界范围的计算机网络,这意味着它互联了数以亿计的计算设备(不仅仅是计算机哦);这些设备包括但不限于传统PC、工作站以及所谓的服务器。现在有更多的设备加入到因特网中,比如便携式计算机、电视机、汽车、传感器等。
用因特网的术语来说,所有连入因特网的设备都叫做主机或者端系统
端系统通过通信链路和分组交换机连接到一起。
-
通信链路由不同的物理媒体组成,传播速度用bit/s或bps来计算
-
分组:当一台端系统要向另一台端系统发送数据时,发送端系统将数据分段,并为每段加上头部字节,由此形成的信息包叫分组
- 分组通过网络发送到接收端系统,在那里被装配成初始数据
-
分组交换机从它的一条入通信链路接收到达的消息,并从它的一条出通信链路转发该条消息
- 最著名的分组交换机:路由器和链路层交换机
- 路由器通常用作网络核心
- 链路层交换机常用在接入网
-
一个分组所经历的一系列的通信链路和分组交换机称为通过网络的路径(路由)
端系统通过因特网服务供应商(ISP)(类比移动联通电信等公司)接入因特网中
- 每个ISP本身就是一个由多台分组交换机和通信链路(光纤等等)组成的网络,各ISP为端系统提供了不同类型的网络接入
ISP也为内容提供者提供因特网接入服务,将Web站点直接接人因特网。
- 低层的ISP通过国家的、国际的高层ISP互联起来
- 高层ISP是由通过高速光纤链路互联的高速路由器组成的。
端系统,分组交换机和其他网络部件都需要运行一系列的协议(详见1.1.3)
- 因特网最重要的协议TCP(传输控制协议)/IP(网际协议)
- IP协议定义了路由器和端系统之间交换的分组格式
1.1.2 服务描述
- 分布式应用程序: 应用程序涉及在多个相互交换数据的端系统,故称他们分布式应用程序。
- 与因特网相连的端系统都有一个套接字接口,该接口规定了运行在端系统上的程序请求在因特网基础设施向另一个端系统上特定的目的程序交付数据的方式
- 因特网套接字接口是一个发送程序必须遵守的规则合集
1.1.3 什么是协议
为了完成一项工作,要求两个(或多个)通信实体运行相同的协议
报文的交换以及发送和接收这些报文时所采取的动作是定义 个协议的关键元素
协议 (protocol) 定义了在两个或多个通信实体之间交换的报文的格式和顺序,以及报文发送和或接收一条报文或其他事件所采取的动作
1.2 网络边缘
通常把与因特网相连的计算机和其他设备称为端系统,因为它们位于因特网的边缘,故而被称为端系统。
端系统也称为主机( host ), 因为它们容纳(即运行)应用程序。
主机有时又被进一步划分为两类 :客户 (client) 和服务器 (server)
- 客户通常是桌面PC,智能手机等(发起请求)
- 服务器是更强大的机器,用于存储和发布Web页面,邮件等(处理请求)
1.2.1 接入网
接入网:是将端系统物理连接到其边缘路由器的网络
- 边缘路由器:是端系统到任何其他远程端系统的路径上的第一台路由器
如下图圈出来的是边缘路由器
接入网的方式:
- 家庭接入:DSL、电缆、FTTH、拨号和卫星(图1-6)
- 企业接入:以太网和WiFi(图1-8)
- 广域无线接入:3G和LTE
1.2.2 物理媒体
- 双绞线:短距离
- 同轴电缆
- 光纤:远距离,高宽带
- 陆地无线电信道
- 卫星无线电信道:同步卫星和近地轨道卫星
1.3 网络核心
网络核心:由互联端系统的分组交换机和链路构成的网状网络
通过网络链路和交换机移动数据有两种基本方法:电路交换和分组交换
1.3.1 分组交换
- 端系统之间彼此交换报文
- 报文能够包含协议设计者需要的任何东西。报文可以执行一种控制功能,也可以包含数据,例如电子邮件数据、JPEG图像或MP3音频文件。
- 为了从源端系统向目的端系统发送一个报文,源将上报文划分为较小的数据块,称为分组
- 在源和目的之间,每个分组都通过通信链路和分组交换机(packet switch)(交换机主要有两类:路由器和链路层交换机)传送。
- 分组以等于该链路最大传输速率的速度传输通过通信链路。因此,如果某源端系统或分组交换机经过一条链路发送一个L比特的分组,链路的传输速率为R比特/秒,则传输该分组的时间为L/R秒。
1,存储转发传输:
- 多数分组交换机在链路的输入端使用存储转发传输,是指在交换机开始向输出链路传输该分组的第一个比特之前,必须接受到整个分组
如上图,报文1,2,3按次序发送到路由器再发送到目的地,但是当报文1到达路由器但报文2没到达路由器时输出链路上是不会有报文发送的。要等到路由器从输入链路上接受到报文1,2,3才会按次序发送到输出链路,从而发送到目的地
2,排队时延和分组丢失
- 每台分组交换机和多个链路连接,对于每条相连的链路,该分组交换机具有一个输出缓存(也称输出队列),它用于存储路由器准备发往那条链路的分组
- 如果该链路正在传输其他分组,那么该分组必须在输出缓存等待(由上一条可知,输出缓存是一种队列,是先进先出的性质,故后面进入队列的需要等待前面进入的先出去),这叫排队时延。这些时延是变化的,变化的程度取决于网络中的拥塞程度。
- 一个到达的分组可能发现输出缓存已经满了的情况,此时将出现分组丢包的情况,可以选择丢弃已满队列中随机一个包或者新到达的分组,主要和输出缓存大小和传输速率有关
3,转发表和路由选择协议
- 每个端系统都有一个IP地址(每个设备的IP是唯一的)。当源主机向目的主机发送一个分组时,源在该分组的首部包含了目的主机的IP地址
- 更特别的是,每台路由器有一个转发表(forwarding table),用于将目的地址(或目的地址的一部分)映射成为输出链路。当某分组到达一台路由器时,路由器检查该地址,并用这个目的地址搜索其转发表,以发现适当的出链路。路由器则将分组导向该出链路。
那转发表如何设置的?
- 因特网具有一些特殊的路由选择协议(routing protocol) ,用于自动地设置这些转发表。
- 例如,一个路由选择协议可以决定从每台路由器到每个目的地的最短路径,并使用这些最短路径结果来配置路由器中的转发表。
1.3.2 电路交换
- 电路交换:在这个发送者可以发送信息之前,电话网络必修要先在发送者和接受者之间建立一条连接。这是条真正的连接,在发送者和接受者之间的交换机都是维持着的。
- 当网络把这个电路建立好之后,在这个网络中的链路的传输速率也是维持好的。所以发送者可以以稳定的速率传输数据给接收者
1,电路交换网络中的复用
- 链路中的电路是通过频分复用FDM和时分复用TDM来实现的
- 对于FDM,链路的频谱由跨越链路创建的所有连接共享。在连接期间链路为每条连结专用一个频率。
- 电话网络中,这个频宽通常是4kHz,该频段的宽度称为带宽
- 对于TDM,时间被划分为固定的帧,每个帧又被划分为固定数量的时隙
2,分组交换与电路交换的对比
- 分组交换的优点
- 它提供了比电路交换更好的带宽共享
- 它比电路交换更简单、更有效、实现成本更低
- 分组交换的缺点
- 分组交换不适合实时服务,因为端到端的时延是可变、不可预测的,这和整个网络的情况相关
- 电路交换的优点
- 提供了端对端传输数据的速率保证
- 电路交换的缺点
- 电路交换存在静默期,这是指专用电路空闲时,其占用的资源并没有得到充分的利用
- 建立连接的过程比较复杂
总体上来说,分组交换的性能要好于电路交换的性能,但是不同类型的分组交换方式有不同的应用场景;比如一些对最低速率有着严格要求的应用,比如实时服务等,为了获得速率保证,牺牲网络的效率也是可以接受的。趋势向着分组交换发展
1.3.3 网络的网络
第三方公司能够创建一个因特网交换点 (Internet Exchange Point, IXP) , IXP是一个汇合点,多个ISP能够在这里一起对等
1.4 分组交换网中的时延、丢包和吞吐量
- 因特网能够看成是一种运行在端系统上的分布式应用提供服务的基础设施
- 计算机网络必定要要限制在端系统之间的吞吐量,故在端系统之间存在时延、丢包
1.4.1 分组交换网中的时延概述
一个分组在沿途每个节点承受不同类型的时延,这些时延中最为重要的是:结点处理时延、排队时延、传输时延和传播时延。这些时延总体累加起来是结点总时延
时延的类型
- 处理时延
处理时延是因为节点需要解析分组的首部信息然后决定其出链路(索引转发表等操作)而产生的,通常在微秒或者更低数量级
- 排队时延(详细可见1.3.1中描述)
排队时延是因为分组所对应的出链路前面有其他分组正在传输,所以分组需要该链路的缓冲队列里等待其他分组传输完毕而产生的;一般来说,排队时延是到达该队列的流量强度和性质的函数,通常可以达到毫秒级到微秒级。如果队列为空且没有其他分组正在传输,则排队时延为0。
- 传输时延
传输时延是将所有分组的比特推向链路所有需要的时间,实际的传输时延通常在毫秒到微秒数量级。用L表示分组的长度,用Rbps表示从路由器A到B的链路传输速率。传输时延是L/R
- 传播时延
传播时延是指比特进入链路后,从该链路的起点到下一个结点所用的时间;一旦分组中的最后一个比特到达路由器就意味着该分组的所有比特都已到达路由器;广域网中,传播时延一般是毫秒级的。传播时延是d/s。d是路由器A到B的距离。s是链路的传播速率。
- 传输时延和传播时延的对比
- 传输时延是路由器将分组推出所需要的时间,它是分组长度和链路传输速率的函数,而与两台路由器之间的距离无关。
- 传播时延是一个比特从一台路由器向另一台路由器传播所需要的时间,它是两台路由器之间距离的函数,而与分组长度或链路传输速率无关。
打个比方就是传输时延是火车过一个站点的时间,其大小只和火车长度和火车通过站点的时间有关。而传播时延则是火车经过两个地点的时间,其大小和距离和速度有关。
1.4.2 排队时延和丢包
**丢包:**到达的分组发现一个满的队列。由于没有地方存储这个分组,路由器将丢弃该分组,该分组将会丢失
排队时延和丢包与网络的状况和结点的缓冲空间大小、处理速度相关;如果分组到达的速度高于结点的处理速度,那么分组就会在缓冲队列里排队等待。当缓冲空间用完后,如果还有到的分组,那么该分组将被迫丢弃
为了描述网络状体,我们引入了流量强度这一概念:流量强度=分组到达的速度/结点的处理速度;流量工程里一个金科玉律就是:设计系统时流量强度不能大于1
当流量强度持续大于1时,就将出现丢包现象
因此,一个结点的性能常常不仅根据时延来度量,而且根据分组丢失的概率来度量。正如我们将在后面各章中讨论的那样,丢失的分组可能基于端到端的原则重传,以确保所有的数据最终从源传送到了目的地。
1.4.3 端到端时延
1.4.4 计算机网络的吞吐量
计算机网络的吞吐量实际上是一个速度指标,它描述了比特经过某个节点的速度。对于某条路径上的结点来说,和该结点有关的速度有两个:接收数据的速度和发送数据的速度,而该结点的吞吐量是这两个速度中较小的一个;对于某条路径来说,该路径的吞吐量则是所有节点的吞吐量的最小值;网络的吞吐量可以衡量网络的性能.
任何时间的瞬时吞吐量是主机B接受到该文件的速率(例如下载文件时显示多少m/s,就是一个瞬时吞吐量)
如果该文件由F比特组成,主机B接受到所有比特用去Ts,则文件的平均吞吐量为F/T bps
吞吐量可以近似为源和目的地之间路径的最小传输速率。最小传输速率的链路为瓶颈链路。
1.5 协议层次及其服务模型
因特网是一个极为复杂的系统,该系统里存在着大量的应用程序和协议、各种类型的端系统、分组交换机和各种类型的链路级媒体。但是它同时也是有着清晰结构的,就像我们前面在网络核心 一节介绍的,我们仍能构建它的结构模型
1.5.1 分层体系结构
为了给网络协议的设计提供一个结构,网络设计者以分层的方式组织协议以及实现这些协议的软硬件软件。每个协议属于这些层次之一,就像图1-22所示的航线体系结构中的每种功能属于某一层一样。我们再次关注某层向它的上一层提供的服务(service),即所谓一层的服务模型(service model)。每层通过在该层中执行某些动作或使用直接下层的服务来提供服务。
将各层的所有协议组合起来,称为协议栈。因特网的协议栈有5个层次组成**:物理层、链路层、网络成、运输层、应用层**
- 应用层
应用层是网络应用程序及它们的应用层协议存留的地方。
应用层协议分布在多个端系统,端系统中的应用程序使用该协议与另一个端系统中的应用程序通信。处于应用层的分组称为报文
- 运输层
传输层在应用程序端点之间传输应用层报文,因特网中有两个传输层协议:TCP和UDP。
- TCP将长报文分成短报文,并提供确保传递、流量控制、拥塞控制机制。
- UDP提供无连接服务,即不提供不必要服务的服务。没有可靠性、没有流量和拥塞控制。
处于传输层的分组称为报文段
- 网络层
网络层将称为数据报的网络层分组从一台主机移动到另一台主机。网络层协议包含著名的IP协议以及其他一些路由选择协议。
- 链路层
网络层通过源和目的地之间的一系列路由器来 路由(注意这是动词) 数据报。为了将分组从一个结点移动到路径上的下一个结点,网络层必须依靠该链路层的服务。
将链路层分组称为帧frame。链路层的任务是将整个帧从一个网络元素移动到邻近的网络元素。该层协议与链路层相关。
- 物理层
物理层的任务是将每个帧中的一个个比特从一个节点移动到下一个节点。该层协议与链路相关,并进一步与链路的实际传输媒体相关,例如双绞铜线、单模光纤等。
OSI模型
在因特网协议栈出现以前,OSI模型是ISO组织研发的计算机网络结构模型。OSI的模型一共有7层,从下到上依次为:物理层,链路层,网络层,传输层,会话层,表示层,应用层。相比因特网体系结构,OSI多了两层。
1.5.2 封装
一个分组,在不同的层次有不同的称谓,是因为它们经过每一层的时候就被该层封装上了属于该层的相关信息,也就是前面提到的必要信息;于是,每一分层的分组有两种类型的字段:首部字段和有效负载;其中有效负载即为来自上一层的分组数据,而首部字段就是该层加上的必要信息;分组不断被封装以实现各层协议规定的相关功能
示层**,应用层。相比因特网体系结构,OSI多了两层。
1.5.2 封装
一个分组,在不同的层次有不同的称谓,是因为它们经过每一层的时候就被该层封装上了属于该层的相关信息,也就是前面提到的必要信息;于是,每一分层的分组有两种类型的字段:首部字段和有效负载;其中有效负载即为来自上一层的分组数据,而首部字段就是该层加上的必要信息;分组不断被封装以实现各层协议规定的相关功能
相关文章:

《计算机网络:自顶向下方法》学习笔记——第一章:计算机网络和因特网
计网 第一章 计算机网络和因特网 1.1 什么是因特网 回答这个问题有两种方式 其一,我们能够描述因特网的具体构成,即构成因特网的基本硬件和软件组件;其二,我们能够根据为分布式应用提供服务的联网基础设施来描述因特网。 1.1.…...

PDF 解析格式化输出 API 数据接口
PDF 解析格式化输出 API 数据接口 支持输出 TEXT HTML XML TAG,多种格式输出,超精准识别率。 1. 产品功能 通用的识别接口, 支持标准 PDF 文件解析;多种格式输出,支持 TEXT HTML XML TAG;HTML 包含完美排…...

RL笔记:基于策略迭代求CliffWaking-v0最优解(python实现)
目录 1. 概要 2. 实现 3. 运行结果 1. 概要 CliffWalking-v0是gym库中的一个例子[1],是从Sutton-RLbook-2020的Example6.6改编而来。不过本文不是关于gym中的CliffWalking-v0如何玩的,而是关于基于策略迭代求该问题最优解的实现例。 CliffWalking-v0的…...

350. 两个数组的交集 II
两个数组的交集 II 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结…...

Android仿微信选择图片
效果展示首先先添加用到的权限<uses-permission android:name"android.permission.INTERNET" /><!--获取手机存储卡权限--><uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:nam…...

python+嵌入式——串口通信篇(收发解包)
目录前言安装pyserialpyserial大致概括整体流程硬件连接例子(简单版)详细使用serial初始化参数发包收包收包检查包并解包python struct模块结语前言 这几年,自己也做了一些嵌入式机器人。在整个开发的过程中,调通信通常会花费一段比较长的时间ÿ…...

剖析G1 垃圾回收器
简单回顾 在Java当中,程序员在编写代码的时候只需要创建对象,从来不需要考虑将对象进行释放,这是因为Java中对象的垃圾回收全部由JVM替你完成了(所有的岁月静好都不过是有人替你负重前行)。 而JVM的垃圾回收由垃圾回收器来负责,在…...

如何打造一款专属于自己的高逼格电脑桌面
作为一名电脑重度使用者,你是否拥有一款属于你自己的高逼格电脑桌面呢?你是不是也像大多数同学一样,会把所有的内容全部都堆积到电脑桌面,不仅找东西困难,由于桌面内容太多还会导致C盘空间不足,影响电脑的反…...

【C++】string的使用及其模拟实现
文章目录1. STL的介绍1.1 STL的六大组件1.2 STL的版本1.3 STL的缺陷2. string的使用2.1 为什么要学习string类?2.2 常见构造2.3 Iterator迭代器2.4 Capacity2.5 Modifiers2.6 String operations3. string的模拟实现3.1 构造函数3.2 拷贝构造函数3.3 赋值运算符重载和…...

怀念在青鸟的日子
时间过的可真快,一转眼来到了2023年!我初中上完就没有在念,下了学门步入社会,那时的我一片迷茫,不知道该去干什 么,父母说要不去学挖掘机、理发、修车...我思考再三,一个都没有我喜欢的…...

学习记录---Python内置类型
文章目录字符串split()列表常见操作列表相减字典创建普通创建eval(s)添加或更新元素d[t] 1d.update({c: 3}){**d1, **d2} **字典解包装运算符删除元素 d.pop(c)属性d.items()d.keys()d.values()访问元素d[Name]d.get(score)遍历字典for key in dictfor key, values in dict.it…...

Python笔记 -- 列表
文章目录1、列表简介2、修改、添加、删除元素2.1、添加2.2、删除3、排序、倒序4、遍历列表5、创建数值列表6、列表切片7、列表复制8、元组1、列表简介 在Python中用方括号[]表示列表,用逗号隔开表示其元素 通过索引访问列表 names [aa,bb,cc,dd]print(names[0]) …...

谈谈UVM中的uvm_info打印
uvm_info宏的定义如下: define uvm_info(ID,MSG,VERBOSITY) \begin \if (uvm_report_enabled(VERBOSITY,UVM_INFO,ID)) \uvm_report_info (ID, MSG, VERBOSITY, uvm_file, uvm_line); \end 从这里可以看出uvm_info由两部分组成:uvm_report_enabled(VER…...

矩阵理论1 集合上的等价关系(equivalence relations on a set S)
定义 对于一个集合S, 如果集合E⊂SS\mathcal{E} \subset S\times SE⊂SS满足以下条件 自反性: 对于∀s∈S,都有(s,s)∈E\forall s\in S, 都有 (s, s) \in \mathcal{E}∀s∈S,都有(s,s)∈E对称性: (s,t)∈E⇔(t,s)∈E(s,t) \in \mathcal{E} \Leftrightarrow (t,s)\in \mathcal…...

【网络监控】Zabbix详细安装部署(最全)
文章目录Zabbix详细安装部署环境准备安装依赖组件访问初始化配置Zabbix详细安装部署 Zabbix 是一个高度集成的网络监控解决方案,可以提供企业级的开源分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用,运作…...

阿里云轻量服务器--Docker--Nacos安装(使用外部Mysql数据存储)
前言:docker 安装nacos 如果不设置外部的mysql 默认使用内嵌的内嵌derby为数据源,这个时候如果,重新部署nacos 则会造成原有数据丢失情况; 1 默认安装的nacos 启动后使用的是内嵌的存储: 2 使用外部mysql 作为存储&a…...

unity开发知识点小结01
unity对象生命周期函数 Awake():最早调用,所以可以实现单例模式 OnEnable():组件激活后调用,在Awake后调用一次 Stat():在Update()之前,OnEnable…...

软件系统[软件工程]
What’s the link? They all involve outdated (legacy) software technology. All have had huge socio-economical impact. Prompting national lockdowns. Spreadsheet workflow error led to thousands of preventable infections and deaths. Huge losses of citizen dat…...

电力系统稳定性的定义与分类
1电力系统稳定性的定义与分类 IEEE给出电力系统稳定性定义:电力系统稳定性是指电力系统这样的一种能力—对于给定的初始运行状态,经历物理扰动后,系统能够重新获得运行平衡点的状态,同时绝大多数系统变量有界,因此整个…...

基于java的俱乐部会员管理系统
技术:Java、JSP等摘要:随着科学技术的飞速发展,科学技术在人们日常生活中的应用日益广泛,也给各行业带来发展的机遇,促使各个行业给人们提供更加优质的服务,有效提升各行业的管理水平。俱乐部通过使用一定的…...

线程池执行父子任务,导致线程死锁
前言, 一次线程池的不当使用,导致了现场出现了线程死锁,接口一直不返回。而且由于这是一个公共的线程池,其他使用了次线程池的业务也一直阻塞,系统出现了OOM,不过是幸好是线程同事测试出来的,没…...

Ubuntu系统新硬盘挂载
Ubuntu系统新硬盘挂载 服务器通常会面临存储不足的问题,大部分服务器都是ubuntu系统,该篇博客浅浅记载一下在ubuntu系统上挂载新硬盘的步骤。本篇博文仅仅记载简单挂载一块新的硬盘,而没有对硬盘进行分区啥的。如果需要更加完善的教程&#…...

【亲测】Centos7系统非管理(root)权限编译NCNN
前言 由于使用的是集群,自己不具有管理员权限,所以以下所有的情况均在非管理员权限下进行安装,即该安装策略仅适用于普通用户构建自己的环境。 什么是NCNN ncnn是一款非常高效易用的深度学习推理框架,支持各种神经网络模型&#x…...

四种常见的异步请求方式
四种常见的异步请求方式 一、xhr异步老祖 XMLHttpRequest(简称XHR)是一种在JavaScript中创建异步请求的技术。XHR对象可以向服务器发送请求,并获取服务器返回的数据,而不会使页面刷新。 XHR对象的创建方式通常是通过构造…...

Linux操作系统学习(进程间通信)
文章目录进程间通信进程通信的意义进程通信的方式1.基于文件的方式匿名管道命名管道2.基于内存的通信方式共享内存验证内核相关的数据结构了解进程间通信 进程通信的意义 当我们和另一个人打电话时两部手机都是独立的,通过基站传递信号等等复杂的过程就实现了通…...

单目标追踪——【相关滤波】C-COT原理与ECO基于C-COT的改进
目录C-COT:Continuous Convolution Operator Tracker文章侧重点连续卷积算子目标追踪框架初始化过滤器:追踪流程ECO文章侧重点因式卷积因子生成采样空间模型模型更新策略论文链接:C-COT:Beyond Correlation Filters: Learning Con…...

C++中栈是如何实现,以及常用的栈函数都有哪些
什么是栈? 栈 是一种特殊的数据结构,它是一种按照 Last-In-First-Out (LIFO) 访问模式存储和访问数据的特殊结构。 换句话说,栈中的最后一个元素将成为最先出栈的元素,这也意味着新增加的元素在栈的顶部,而出栈的元素…...

我就不信你还不懂HashSet/HashMap的底层原理
💥注💥 💗阅读本博客需备的前置知识如下💗 🌟数据结构常识🌟👉1️⃣八种数据结构快速扫盲🌟Java集合常识🌟👉2️⃣Java单列集合扫盲 ⭐️本博客知识点收录于…...

Qt中调用gtest进行单元测试及生成覆盖率报告
一.环境配置 googletest地址:https://github.com/google/googletest 我下载的是1.12.1,这是最后一个支持C++11的版本。 首先编译gtest,在windows上的编译方式和编译gRPC一模一样,详见Qt中调用gRPC,编译完了会生成几个静态库,如下图所示 本文主要用到了libgtest.a 下载ms…...

ChatGPT vs Bard 背后的技术对比分析和未来发展趋势
ChatGPT vs Bard 背后的技术对比分析和未来发展趋势 目录 ChatGPT vs Bard 背后的技术对比分析和未来发展趋势...