Day18_Netty

文章目录

  • Netty
      • IO 模型
      • Java有哪些数据类型
      • 零拷贝
      • 深拷贝和浅拷贝的区别是什么?
      • BIO、NIO、AIO的区别是什么?
      • Netty 是什么?
      • Netty 基于 NIO,那为啥不直接用 NIO 呢? / 为什么要用 Netty?
      • Netty 应用场景了解么?
      • 那些开源项目用到了 Netty?
      • Netty的核心组件是什么?
      • 请解释Netty的事件模型是什么样的。
      • 什么是Channel和ChannelPipeline?
      • Netty的ByteBuf是什么,有什么优势?
      • Netty支持哪些协议?
      • 什么是编解码器(Codec)?Netty中有哪些内置的编解码器?
      • Netty的线程模型是什么?为什么它是高效的?
      • Netty 中的线程模型有哪几种?
      • 什么是EventLoop,它的作用是什么?
      • NioEventLoopGroup 默认的构造函数会起多少线程呢?
      • ChannelFuture
      • 如何优化Netty应用的性能?
      • Netty如何处理安全性问题?
      • Netty如何支持WebSocket?
      • Netty对HTTP/2的支持是怎样的?
      • 请分享一下你在项目中使用Netty的经验。
      • Netty如何处理粘包和拆包问题?
      • Netty中的ChannelHandlerContext的作用是什么?
      • 有没有使用Netty实现过高性能的网络应用?
      • Reactor模型
      • Netty 服务端和客户端的启动过程了解么?
      • Netty 长连接、心跳机制了解么?
      • Netty 的零拷贝了解么?
      • 如何将长链接转换成短链接,并发送短信?
      • 长链接和短链接如何互相转换?
      • 长链接和短链接的对应关系如何存储?

Netty

IO 模型

UNIX 系统下, IO 模型一共有 5 种: 同步阻塞 I/O、同步非阻塞 I/O、I/O 多路复用、信号驱动 I/O 和
异步 I/O。

BIO:属于同步阻塞 IO 模型 。数据的读取写入必须阻塞在一个线程内等待其完成。
NIO:属于同步非阻塞的 I/O模型。提供了 Channel , Selector,Buffer 等抽象。NIO 提供了与传统 BIO 模型中的Socket 和 ServerSocket 相对应的 SocketChannel 和 ServerSocketChannel 两种不同的套接字通道实现,两种通道都支持阻塞和非阻塞两种模式。对于高负载、高并发的(网络)应用,应使用NIO 的非阻塞模式来开发
AIO:(Asynchronous I/O)异步的IO模型。应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。目前来说 AIO 的应用还不是很广泛。Netty 之前也尝试使用过 AIO,不过又放弃了。这是因为,Netty使用了 AIO 之后,在 Linux 系统上的性能并没有多少提升。

5种阻塞模型:同步阻塞、同步非阻塞、同步多路复用、异步阻塞(没有此情况)、异步非阻塞

  • 同步:线程自己从头到尾自己把活干完
  • 异步:至少有两个线程的情况下,让另一个线程干活然后把结果告诉你

阻塞 IO:等待数据阶段用户线程被阻塞了,等待数据期间什么活都干不了只能被阻塞在那里

假设你是一个餐厅的服务员,你正在等厨师做好一道菜给顾客。在厨师做菜的过程中,你什么都做不了,只能干等着,直到菜做好了你才能继续服务下一位顾客。这就是阻塞IO,你的工作(服务员的工作)被阻塞在了等待厨师做菜(IO操作)上

非阻塞 IO:等待数据阶段用户线程运行着干其它活

假设你是一个餐厅的服务员,你告诉厨师顾客要什么菜,然后你就去忙其他事情了(比如接待其他顾客)。每隔一段时间,你就去问一下厨师你的菜好了没有。这种方式虽然不会让你一直等着,但你需要不断地去询问,也就是“轮询”,这会消耗你的时间和精力(CPU资源)。

多路复用:有一个selector专门负责监视多个IO操作然后及时反馈给当前线程,以便于当前线程可以专心搞其它事情

现在有一个多路复用器来帮你管理多个订餐请求。你告诉多路复用器你想要哪些餐厅的哪些菜,然后你就去忙其他事情了。多路复用器会帮你盯着这些餐厅,一旦有餐好了,他就会通知你来取。这样,你既可以处理多个订餐请求,又不需要一直等着或不断地去询问,大大提高了效率。
阻塞IO:是一个线程在干活,干活期间不能干别的活,是同步的,所以叫做同步阻塞非阻塞IO:也是一个线程在干活,只不过干活期间可以干别的活,所以也是同步的,所以叫同步非阻塞多路复用:多路复用本质也是当前这一个线程在干活,所以它也是同步的,所以叫同步多路复用异步阻塞(没有此情况)异步非阻塞:有两个线程在干活,让另一个线程干活然后把结果告诉你

Java有哪些数据类型

这里是引用

基本数据类型sout打印出来的是数值, 引用数据类型sout打印出来的是对象的地址值
其中八种基本数据类型:byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double,boolean
所占的空间大小:

	byte(1)
short(2)、char(2)
int(4)、long(8)
float(4)、double(8)

说说这 8 种基本数据类型对应的包装类型?
这八种基本类型都有对应的包装类分别为:Byte、Short、Character、Integer、Long、Float、Double、Boolean

那基本类型和包装类型有啥区别不?
Byte、Short、Character、Integer、Long、Float、Double、Boolean这些包装类的默认值是null,因为它们是对象类型。

基本类型是有默认值的:byte默认值0、short默认值0、char默认值’\u0000’、int默认值0、long默认值0L、float默认值0.0f、double默认值0.0d,boolean默认值false

零拷贝

传统的 IO 将一个文件通过 socket 写出,内部工作流程是这样的:

在传统的数据传输过程中,当应用程序需要从磁盘读取数据并通过网络发送时,通常需要经历以下步骤:

这里是引用

这个过程涉及了多次数据拷贝和上下文切换(用户态和内核态之间的切换),这会导致CPU资源的浪费和数据传输效率的降低。

“零拷贝”这个名字听起来很神奇,好像数据在传输过程中完全没有被拷贝一样。但实际上,这里的“零拷贝”是指减少了数据在用户空间和内核空间之间的拷贝次数,并不是没有拷贝而是减少了拷贝次数,特别是避免了将数据从内核空间拷贝到用户空间,然后再从用户空间拷贝回内核空间(如网络发送缓冲区)的过程。这样,数据的传输变得更加高效,减少了CPU的负担和内存带宽的占用。

深拷贝和浅拷贝的区别是什么?

浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象。
深拷贝:被复制对象的所有变量都含有与原来的对象相同的值.而那些引用其他对象的变量将指向被复制过的新对象.而不再是原有的那些被引用的对象.换言之.深拷贝把要复制的对象所引用的对象都复制了一遍。

BIO、NIO、AIO的区别是什么?

BIO:属于同步阻塞 IO 模型 。数据的读取写入必须阻塞在一个线程内等待其完成。

NIO:属于同步非阻塞的 I/O模型。提供了 Channel , Selector,Buffer 等抽象。NIO 提供了与传统 BIO 模型中的Socket 和 ServerSocket 相对应的 SocketChannel 和 ServerSocketChannel 两种不同的套接字通道实现,两种通道都支持阻塞和非阻塞两种模式。对于高负载、高并发的(网络)应用,应使用NIO 的非阻塞模式来开发

AIO:(Asynchronous I/O)异步的IO模型。应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。目前来说 AIO 的应用还不是很广泛。Netty 之前也尝试使用过 AIO,不过又放弃了。这是因为,Netty使用了 AIO 之后,在 Linux 系统上的性能并没有多少提升。

Netty 是什么?

就简单用 3 点来概括一下 Netty 吧!

  1. Netty 是一个 基于 NIO 的 client-server(客户端服务器)框架,使用它可以快速简单地开发网络应用程序。
  2. 它极大地简化并优化了 TCP 和 UDP 套接字服务器等网络编程,并且性能以及安全性等很多方面甚至都要更好。
  3. 支持多种协议 如 FTP,SMTP,HTTP 以及各种二进制和基于文本的传统协议。
    易于开发,且性能、稳定性和灵活性都非常的好

Netty 基于 NIO,那为啥不直接用 NIO 呢? / 为什么要用 Netty?

不用 NIO 主要是因为 NIO 的编程模型复杂而且对编程功底要求比较高。
NIO 在面对断连重连、包丢失、粘包等问题时处理过程非常复杂。

Netty 具有下面这些优点:

  • 简单而强大的线程模型。
  • 自带编解码器解决 TCP 粘包/拆包问题。
  • Netty支持多种常见的网络协议,包括TCP、UDP、HTTP、WebSocket等。这使得它适用于各种应用场景
  • 比直接使用 Java 核心 API 有更高的吞吐量、更低的延迟、更低的资源消耗和更少的内存复制。
  • 经历了大型项目的使用和考验,而且很多开源项目都使用到了 Netty, 比如我们经常接触的 Dubbo、RocketMQ 等等。
  • 异步事件驱动:Netty采用基于事件驱动的模型,通过异步的方式处理网络操作。这允许在单线程上处理大量的并发连接,提高了系统的吞吐量和性能。
  • 高性能:Netty通过优化的事件循环、内存管理和零拷贝等技术,实现了出色的性能表现。
  • 支持并发和多连接:Netty通过使用多线程和高效的事件处理机制,能够轻松处理数千甚至数万个并发连接,适用于高并发场景。

Netty 应用场景了解么?

Netty 主要用来做网络通信 :

  1. 作为 RPC 框架的网络通信工具 : 我们在分布式系统中,不同服务节点之间经常需要相互调用,这个时候就需要 RPC 框架了。不同服务节点的通信是如何做的呢?可以使用 Netty 来做。
  2. 实现一个即时通讯系统 : 使用 Netty 我们可以实现一个可以聊天类似微信的即时通讯系统
  3. 物联网(IoT): 在物联网领域,设备之间的通信需要高效、可靠的网络框架,Netty的异步IO模型和卓越的性能使其成为物联网系统的理想选择。

那些开源项目用到了 Netty?

用到了 Netty:Dubbo、RocketMQ、Elasticsearch等

没用用到Netty的:Zookeeper使用Java的原生NIO(非阻塞IO)进行网络通信。

Netty的核心组件是什么?

Netty的核心组件包括以下几个主要部分:

  1. Channel(通道): Channel是Netty中用于处理数据的通道。它负责所有的I/O操作,包括读取、写入、连接和绑定等。Netty提供了不同类型的Channel,用于支持TCP、UDP等不同的传输协议。
  2. EventLoop(事件循环): EventLoop是Netty异步事件处理的核心。每个Channel都与一个EventLoop关联,它负责处理该Channel上的所有事件。EventLoop采用单线程或多线程的方式,负责处理I/O事件、执行任务和定时任务等。
  3. ChannelPipeline(通道管道): ChannelPipeline是一个由一系列ChannelHandler组成的处理链。每个Channel都有一个关联的ChannelPipeline,用于处理入站和出站的数据。ChannelHandler负责处理特定类型的事件,如数据编解码、业务逻辑处理等。
  4. ChannelHandler(通道处理器): ChannelHandler是用于处理I/O事件的组件。开发者可以编写自定义的ChannelHandler来实现特定的业务逻辑,例如数据编解码、业务处理等。ChannelHandler可添加到ChannelPipeline中,形成一个处理链。
  5. ByteBuf(字节缓冲区): ByteBuf是Netty中用于存储和操作字节数据的缓冲区。它提供了灵活的API,支持池化、切片等高级特性,有助于提高性能和内存管理效率。
  6. ChannelFuture(通道未来): ChannelFuture表示异步操作的结果,例如I/O操作的成功、失败或取消。通过ChannelFuture,开发者可以注册监听器以处理操作完成时的回调。
  7. Bootstrap(引导类): Bootstrap是Netty用于启动客户端的引导类。它负责配置和启动Netty的客户端组件,包括设置Channel类型、EventLoop组、ChannelPipeline等。
  8. ServerBootstrap(服务器引导类): ServerBootstrap是Netty用于启动服务器的引导类。它包含了一些服务器独有的配置选项,如处理客户端连接请求、设置TCP参数等。

这些核心组件共同构建了Netty的基础架构,使得开发者能够通过简单而强大的API构建高性能的网络应用和服务。

这里是引用

请解释Netty的事件模型是什么样的。

  1. 事件与事件处理器(Handler)
    在Netty中,网络操作(如连接、读取数据、写入数据等)都被视为事件。当这些事件发生时,Netty会将这些事件传递给相应的事件处理器(Handler)。事件处理器就像是处理网络事件的“工人”,它们负责根据事件的具体类型执行相应的操作。

  2. 事件处理链(ChannelPipeline)
    Netty中的事件处理器并不是单独工作的,它们被组织成一个链(ChannelPipeline)。这个链就像是一个流水线,每个事件都会按顺序通过链中的每个处理器。

  3. 异步与回调
    Netty的I/O操作是异步的,这意味着当你发起一个I/O操作时(如读取数据),Netty会立即返回一个结果(通常是一个Future对象),而不会阻塞当前线程等待操作完成。你可以在结果上注册一个回调(Callback),当操作完成时,Netty会自动调用这个回调,并传入操作的结果。这种方式大大提高了程序的并发处理能力。

  4. EventLoop(事件循环)
    EventLoop负责处理连接上的各种事件,包括接收数据、发送数据、处理IO事件等。Netty使用EventLoop来处理网络事件。它负责处理分配给它的所有Channel(通道)的事件。EventLoop会不断地轮询注册在其上的Channel,处理这些Channel上的IO事件,这样可以确保Channel的所有事件都在同一个线程中按顺序处理,从而避免了多线程并发带来的复杂性。一个EventLoop可能处理着多个channel的事件。一个EventLoop通常关联一个线程,而一个Netty应用可能有多个EventLoop,每个EventLoop运行在独立的线程上

网络事件传递给事件处理器链进行处理,事件处理器链里面有事件处理器来处理,并利用异步和回调机制来提高程序的并发性能。同时,通过EventLoop来管理事件的处理线程,保证了事件处理的顺序性和一致性。

什么是Channel和ChannelPipeline?

  1. Channel(通道):
    • Channel代表了一个网络连接,可以是客户端到服务器的连接,也可以是服务器之间的连接。每个Channel都由一个EventLoop负责处理,而一个EventLoop可以管理多个Channel。Channel中可以执行I/O操作,如读取、写入、连接和绑定等。
  2. ChannelPipeline(通道管道):
    • ChannelPipeline是一个由一系列ChannelHandler组成的处理链。ChannelHandler如进行数据编解码、业务逻辑处理等。ChannelPipeline将这些ChannelHandler串联起来,形成一个处理链。
    • 每个Channel都有一个关联的ChannelPipeline,用于处理入站和出站的数据。

Netty的ByteBuf是什么,有什么优势?

Netty里面有ByteBuf,而NIO里面是ByteBuffer

ByteBuf是对ByteBuffer的增强,是对字节数据的封装。

ByteBuf是可以动态扩容的,而ByteBuffer一旦指定了容量就固定了,所以ByteBuf是对ByteBuffer的增强

bytebuffer是读写共用一个指针,所以需要读写的切换;现在bytebuf就不用

ByteBuf的设计允许进行零拷贝操作,例如,可以直接将ByteBuf的底层字节数组传递给其他组件,避免了中间的数据拷贝,提高了数据传输的效率。

Netty支持哪些协议?

  1. TCP和UDP: Netty提供了对TCP和UDP协议的支持,可以用于构建各种基于这两个传输协议的网络应用。
  2. HTTP和HTTPS: Netty可以用于构建支持HTTP和HTTPS协议的Web服务器和客户端。
  3. WebSocket: Netty支持WebSocket协议,可以用于实现实时、双向通信的Web应用。
  4. SMTP和IMAP: Netty可以用于构建支持邮件协议(如SMTP和IMAP)的服务器和客户端。
  5. DNS: Netty可以用于构建支持域名系统(DNS)的应用。
  6. MQTT: Netty提供了对MQTT(Message Queuing Telemetry Transport)协议的支持,可以用于构建支持物联网设备通信的应用。
  7. Custom Protocols: 由于Netty的灵活性,开发者可以根据需要自定义协议栈,构建适用于特定场景的自定义协议。

什么是编解码器(Codec)?Netty中有哪些内置的编解码器?

编解码器(Codec)是负责将数据在不同表示形式之间进行转换的组件。主要用于处理二进制数据与Java对象之间的相互转换。

内置的编解码器:

  1. ByteToMessageDecoder: 这是一个抽象类,用于将字节数据解码为消息对象。开发者可以继承这个类并实现decode方法,以实现特定协议的解码逻辑。
  2. MessageToByteEncoder: 同样是一个抽象类,用于将消息对象编码为字节数据。开发者可以继承这个类并实现encode方法,以实现特定协议的编码逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/409126.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang | Leetcode Golang题解之第371题两整数之和

题目&#xff1a; 题解&#xff1a; func getSum(a, b int) int {for b ! 0 {carry : uint(a&b) << 1a ^ bb int(carry)}return a }

汇编知识MOV,MRS,MSR,PUSH和POP指令

处理器做得最多的事情就是在处理器内部来回的进行数据传递 1) 将数据从一个寄存器传递到另一个寄存器中 2) 将数据从一个寄存器传递到特殊寄存器&#xff0c;例如CPSR,SPSR寄存器 3) 将立即数传递到寄存器。 数据传输常用的三个指令&#xff1a;MOV,MRS,MSR指令 常用的…

清华计算几何-线段求交与BO算法

单轴线段求交 给定单边轴下, N定线段&#xff0c;检查出相交的线段. 解法一: 暴力求解 遍历所有线段对&#xff0c;进行相交判断, 算法复杂度为O(n2) 解法二: LR扫描 把每条线段的头尾认定为L和R。对所有点进行排序&#xff0c;如果每两个点满足LL或者RR&#xff0c;则对应…

嵌入式UI开发-lvgl+wsl2+vscode系列:11、SSD202移植运行评估demo程序

一、前言 接下来我们根据开发板的LVGL指南移植lvgl的demo程序到开发板上&#xff0c;以及将一个评估的项目移植到开发板上&#xff0c;你将会发现移植lvgl到ssd2xx的板子上似乎很简单&#xff0c;但通过评估程序你将更加方便了解lvgl是否可以满足你的开发需求&#xff0c;除了…

使用了LSTM的数据预测

记录一下&#xff0c;这个是在national university of singapore,黄教授给我们布置的任务&#xff0c;做了一个北京的已知十年的打印量&#xff0c;预测100天的打印机大作业&#xff0c;我们使用了lstm模型&#xff0c;就是两层神经网络&#xff0c;同时dropout的加入为了防止过…

k8s跨节点后pod无法访问

场景 k8s在node1节点部署nginx后&#xff0c; 除node1外&#xff0c;主节点以及node2节点都无法正常访问nginx 并且主节点以及node2节点都无法ping通node1节点上的pod 网络插件为calico 并且也没有相关路由信息 解决方案 启动tunl0接口&#xff0c;因为calico需要使用tunl0网…

【解析几何笔记】8.向量的投影与内积

8. 向量的投影与内积 复习前面的知识&#xff1a;&#xff0c;若BCE三点共线&#xff0c;则 A E ⃗ ( 1 − s ) A B ⃗ s A C ⃗ , ( B , C , E ) μ ⇒ s μ 1 μ , 1 − s 1 1 μ \vec{AE}(1-s)\vec{AB}s\vec{AC},(B,C,E)\mu\Rightarrow s\frac{\mu}{1\mu},1-s\frac…

【学习笔记】时间序列模型(ARIMA)

文章目录 前言一、时间序列时间序列数据 二、ARIMA 模型大纲模型前提平稳性检验 差分整合移动平均自回归模型 ARIMA(p,q,d)自回归模型 (AR( p ))移动平均模型 (MA( q ))自回归移动平均模型(ARMA(p,q))差分自回归移动平均模型 ARIMA(p,d,q) 确定 p&#xff0c;q结果分析和模型检…

EVE-NG安装部署使用

EVE-NG安装部署使用 一、EVE的虚拟化安装1、下载EVE-NG(社区版)2、导入虚拟机-配置-登录二、EVE中设备的连接sercureCRT连接wireshark连接一、EVE的虚拟化安装 1、下载EVE-NG(社区版) 官网下载地址(科学上网): https://www.eve-ng.net/index.php/download/ 中文网下载…

运用Archimate为 智慧文旅搭建 数字化架构体系【系统架构】

ArchiMate是一种用于企业架构建模的开放、独立且详细的语言&#xff0c;它提供了一套丰富的概念和关系来描述、分析和可视化企业架构的不同领域。以下是ArchiMate建模的一些关键功能&#xff1a; 多视图建模&#xff1a;ArchiMate定义了23个示例视图&#xff0c;分为四类&#…

VMware-Ubuntu共享文件找不到

正常的流程我们实现设置共享目录 然后安装vmware-tool工具 我们先看一下vmware-tool的获取方式&#xff0c;系统安装好了以后&#xff0c;关闭系统将虚拟机设置改成图中配置&#xff0c;然后重启 鼠标右键会看到重新安装vmware-tool不再是灰色&#xff0c;点击重新安装 以1…

OpenCV几何图像变换(5)旋转和缩放计算函数getRotationMatrix2D()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算二维旋转的仿射矩阵。 该函数计算以下矩阵&#xff1a; [ α β ( 1 − α ) ⋅ center.x − β ⋅ center.y − β α β ⋅ center.x ( …

【TB作品】MSP430F149单片机,数字时钟万年历程序,滚动显示特效

一、 万年历 任务要求&#xff1a; 制作一个万年历&#xff0c;具有显示时间、日期、温度、湿度、闹钟功能。 1、OLED显示屏上显示日期和时钟&#xff08;显示到秒&#xff0c;时间可走动&#xff09;&#xff1b;&#xff08;20分&#xff09; 2、通过开发板上的温度传感器采集…

8月25日笔记

IOX的使用 iox是一款功能强大的端口转发&内网代理工具&#xff0c;该工具的功能类似于lcx和ew&#xff0c;但是iox的功能和性能都更加强大。 实际上&#xff0c;lcx和ew都是非常优秀的工具&#xff0c;但还是有地方可以提升的。在一开始使用这些工具的一段时间里&#xff…

前端常见**MS题 [3]

css部分 1、简单说明一下盒模型 CSS盒模型定义了盒的每个部分包含&#xff1a; margin, border, padding, content 。根据盒子大小的计算方式不同盒模型分成了两种&#xff0c;标准盒模型和怪异盒模型。 标准模型&#xff0c;给盒设置 width 和 height&#xff0c;实际设置的是…

C语言 | Leetcode C语言题解之第373题查找和最小的K对数字

题目&#xff1a; 题解&#xff1a; #define MIN(a, b) ((a) > (b) ? (b) : (a))int** kSmallestPairs(int* nums1, int nums1Size, int* nums2, int nums2Size, int k, int* returnSize, int** returnColumnSizes) {if (nums1Size 0 || nums2Size 0 || k < 0) {*ret…

Gerapy 分布式爬虫管理框架

什么是 Gerapy Gerapy 是一个基于 Scrapy 的分布式爬虫管理框架。它提供了一个图形化的用户界面&#xff0c;使得用户可以更方便地进行 Scrapy 项目的管理和调度。Gerapy 支持项目的创建、编辑、部署以及调度任务的管理。 功能作用 项目管理&#xff1a;Gerapy 允许用户通过 W…

数据结构系列-归并排序

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 归并排序 递归版本 首先&#xff0c;我们来看一下归并的示意图&#xff1a; 这是归并排序当中分解的过程。 然后便是两个两个进行排序&#xff0c;组合的过程。 归并完美的诠释…

C++类和对象(2)——拷贝构造函数

拷贝构造函数的语法 拷贝构造函数是构造函数的重载&#xff0c; 用于这种情况&#xff1a;用已经构造好的对象去给另一个对象初始化。 int main() {Date d1(2024, 8, 1);Date d2(d1);//用d1初始化d2return 0; } 我们以Date类为例子讲解一下。 class Date { public://全缺省…

【计算机网络】计算机网络的概念

什么是计算机网络&#xff1f; 计算机网络&#xff08;Computer networking&#xff09;是一个将众多分散的、自治的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。 计算机网络、互连网、互联网的区别 计算机…