当前位置: 首页 > news >正文

【Linux】网络原理

本篇博客让我们一起来了解一下网络的基本原理

1.网络发展背景

关于网络发展的历史背景这种东西就不多bb了,网上很容易就能找到参考资料,我的专业性欠缺,文章参考意义也不大。这里只做简单说明。

网络发展经过了如下几个模式

  • 独立模式:计算机之间相互独立,靠人移动数据
  • 互联模式:多台计算机连接到一起,实现数据共享
  • 局域网LAN:计算机数量增多,通过交换机/路由器连接到一起
  • 广域网WAN:将相隔距离非常远的计算机连在一起

交换机是啥?简单来说就是一个有很多网口的设备,将设备插上去后(一般用的都是RJ45网线)就能相互交流信息。

我们家用的WIFI路由器其实已经集成了交换机的功能!

1.1 计算机设备之间是怎么交流的?

计算机内部有非常多的设备,在设备和设备之间一定要用“线”进行连接。这样这些设备才能相互通信。比如主板上的总线,链接硬盘的sata线等等。

而这个计算机的结构本质上也能被看作一个小型网络。

此时我们将计算机A和B用数据线连接起来,就能在物理层面上,让A和B相互通信(此时暂且不考虑通过何种方式通信,只要用数据线连起来了,那就一定能通信)

  • 在主机内,线短
  • 跨主机,线长

当数据线长了之后,线路和线路之间就容易产生信号的干扰,导致数据的错误/丢失。此时我们就需要一个更可靠、高效的方式来实现远距离计算机之间的通信,这就是网络的意义

1.2 集群

进一步扩大,实际上,还可以用多台主机相连,实现单一的功能。这时候,这一堆主机被称为集群

  • 存储集群:硬盘
  • 缓存集群:内存
  • 计算集群:Cpu/Gpu

不同的集群干不同的事,再用数据线连起来,就成了一台由多个主机共同构成的电脑

image-20230130191810628

在大型的数据中心里面,就是用这种方式来处理海量的数据的。

2.协议

协议是一种约定,约定好两台设备要用什么方式来交流。

比如我们都是中国人,可以用普通话这个协议来交流;而广东地区的人,可以用粤语来交流。

计算机之间想交流,肯定也需要确定好一个行业通用的协议

否则不同计算机的架构/操作系统/硬件设备不一样,若协议不统一,也就无法正常交流。这就好比一个说英语的人听不懂普通话一样。

2.1 分层

网络的协议是分层的

2.1.1 为什么要分层

软件分层,就好比将主代码和功能代码给分开

  • 此时只要功能代码提供的接口不变,主代码的调用方式就不变
  • 主代码无须关心功能代码是如何处理的,只关心其处理的结果(返回值)
  • 工程师修改代码的时候,只需要定位到具体模块进行修改,不会出现牵一发动全身的情况

这样,就实现了主模块和功能模块的解耦

由于网络涉及到了软件到硬件各种层面的设备操作,所以其必须采用分层的协议。不同设备采用不同的协议,才能最大层面的保证网络系统整体不出bug

网络协议有一个特点:同层设备都可以认为自己在直接和对方通信

2.1.2 电话机例子

以下图为例,当俩个人用座机打电话的时候,他们会认为自己在直接和对方交流,而不会认为自己是在和电话机交流

image-20230130201915187

此时,就可以把这个系统分3层:分别是两人之间的语言协议,电话机和电话机之间读取数据的协议,以及最底层用于传输信号的通信协议

  • 用户不会去关心电话机用的是什么协议,而是关心自己应该用什么语言和对方交流
  • 电话机不会去关心用户是用什么语言交流的,其只负责把收到的声音转换成电信号
  • 通信协议不管电话机是怎么封装的,其只负责传输数据

这里就能看出来,不仅同层的设备可以认为自己是直接和对方交流,而且它还不需要管其他层用的是什么协议!

  • 电话机不会因为你说英语而用不了

这就是分层实现解耦的效果,也算是每一层都实现了自己的封装

2.2 OSI七层模型

  • OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型, 是一个逻辑上的定义和规范;
  • 它把网络从逻辑上分为了7层。每一层都有相关、相对应的物理设备,比如路由器,交换机;
  • OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
  • 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。 通过七 个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯

image-20230130203221920

可以用下面的这个表格来简单了解一下每一层的功能

分层名称功能概览
应用针对特定应用的协议STMP邮件/远程登录/文件传输
表示数据固有格式和网络标准格式的转换接收不同表现形式的信息
会话通信管理,负责建立/断开通信连接,维持不同应用程序的通信何时建立/何时断开/建立多久
传输两个节点之间的数据传输维持传输可靠性
网络地址管理/路由选择(逻辑寻址确定最佳路径
数据链路互联设备之间传送和识别数据将数据组合成字节
物理以01二进制进行数据传输网线

但是OSI七层模型相对比较复杂,我们主要关注的还是TCP/IP模型

2.3 TCP/IP

TCP/IP是一组协议的代名词,它其中包括很多协议,组成了一个整体

TCP/IP模型可以认为是4/5层,每一层也有自己不同的功能。每一层都会调用另外一层,来实现自己的需求

  • 物理层: 负责光/电信号的传递方式。 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆 (现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决 定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层
  • 数据链路层: 负责设备之间的数据帧的传送和识别。 例如网卡设备的驱动、帧同步(就是说从网线上检测 到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。 有以太 网、令牌环网, 无线LAN等标准。交换机(Switch)工作在数据链路层
  • 网络层: 负责地址管理和路由选择。 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规 划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层
  • 传输层: 负责两台主机之间的数据传输。 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标 主机
  • 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问 协议(Telnet)等。 我们的网络编程主要就是针对应用层。

为啥这里有5层,却有时候又说是4层呢?😏

因为物理层关注的较少,所以一般都只注重于剩下的4层

3.网络和操作系统之间的关系

用户的网络请求要想成功发送给对方,那就一定要经过网卡这个硬件;而要经过网卡,那就肯定要经过操作系统——只有操作系统能直接访问硬件!

所以,数据在主机内流动的时候,就一定会从用户走到内核,再最终走到物理层进行传输!

image-20230131175320289

因为计算机的体系结构决定了数据流动的时候,一定要经过操作系统,所以肯定会是自顶向下/自底向上进行流动的!

  • 这就引出了二者的关系

网络协议栈是属于操作系统的:在操作系统中,有一个模块就是专门来处理tcp/ip协议的。


前面提到,每一层都可以认为自己是在和对方同层的用户直接通信。这样做是有一定代价的,且听我细细道来。

3.1 快递例子

当我们网购商品的时候,我们作为用户,是直接和商家联系的。下了订单后,商家要去做一系列的操作,最终我们从快递小哥处拿到了商品

客户商家
在商家处下订单接收到用户订单
从快递员处收到货物将货物交给快递员
货物运输到集散点货物运输到集散点

但,我们收到的快递并不是只有我们要的商品,往往这里面都会多出一些东西

如图,我们的商品被一个盒子包裹着,外头还多了一个快递单

客户商家
在商家处下订单接收到用户订单给出收件地址
从快递员处收到货物将货物交给快递员添加外箱并填写邮寄单
货物运输到集散点货物运输到集散点开始运输

在这个例子中,每一层其实都给出了自己的独有协议。我们可以把最下面的运输当作物理层

快递小哥在包装快递的时候,就会给快递增加一个外箱,并填写好邮寄单。当另外一边的快递小哥收到这个货物的时候,就可以更具邮寄单上的信息,将快递送到用户手上。

3.2 报头/解包

此过程中,为了维护快递的出发地/终点地信息,快递员给货物添加上了客户不需要的东西。

  • 在网络协议中,每一层协议,都会给我们要传输的数据添加上独有的协议信息,再交付给下一层;这些信息是用来维护数据的(就好比快递单号上的地址)
    • 多出来的协议数据被称为:报头
  • 收到信息后,同层协议会取出自己的那份协议信息进行分析,再交付给上一层
    • 拆开数据的过程被称为:解包

image-20230131183936370

不知道快递的例子能否帮助你理解这个过程

QQ图片20220413084241

3.3 报头的作用

数据会有不同的应用,也对应了不同的协议。在封包的时候,添加的报头信息里面就应包含目标的协议信息

  • 比如我的信息是SMTP邮箱信息,那么在目标主机接收到进行解包了以后,也需要将这个信息交给支持SMTP的邮箱软件进行处理
  • 报头属性里面就需要包含支持分用👆的属性(还有一些公共属性)
  • 报头属性里面还需要包含区分有效载荷和报头的属性,也就是将要发送的数据,和这一层的报头给拆开,不能到时候分不出来,无法正常解包了

这个过程就是一个分用的过程,我们传送的信息,被称为有效载荷

image-20230131211927995

快递点也是一样,如果快递点收到的都是商品而没有快递单,快递小哥也就无法知道快递应该送给谁了

4.局域网

以太网的命名来自物理学中的以太,这部分的故事可以百度😶‍🌫️大学物理课上也讲过。

  • 如果两台主机,处于同一局域网中,他们之间能通信吗?
  • 和同学开手机热点联机MC的经历告诉我😏,是可以的

4.1 MAC地址

局域网就好比一个餐厅,里面有很多人在聊天。当你在餐厅里面和张三聊天的时候,旁边的人也能听到你们俩交流的内容。局域网内也是如此。

要想在局域网内准确地找到一个设备,那就需要一个唯一标识码。就好比想在教室里面找到一个人,需要知道名字一样(排除同名问题)

每台主机唯一的标识码,就是该主机对应的MAC地址

  • MAC地址用来识别数据链路层中相连的节点
  • 长度为48位, 及6个字节。 一般用16进制数字加上冒号的形式来表示(例如: 08:01:27:04:fb:19)
  • MAC地址在网卡出厂时就确定了,不能修改! 且mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突;也有些网卡支持用户配置mac地址)

局域网内没有发送限制,任何一台主机随时都可发送消息。此时还需要引入碰撞检测机制,在没有人发送信号的时候,本设备再发送信号。避免多台主机通信时,出现信号撞到一起(碰撞域)而导致的信息丢失。

以系统编程的角度来看,此时的局域网可以认为是一个临界资源。保证数据不被碰撞,就是保护临界资源的一致性!😛

4.2 通信原理

和前面提到的报头/解包一样,局域网内的数据,也是自顶向下、自底向上流动的。

每一层都有自己的协议,也需要加上自己的报头

5.广域网

在广域网内通信就没有那么简单了。这就好比唐僧去西天取经,不是直接走到西天的,而是需要经过多个驿站(中途地点)

在广域网内通信,我们则是通过ip地址来做驿站,来查找目标主机的

  • 在局域网内用的是mac来标识目标的唯一性
  • 广域网内采用ip来标识目标的唯一性

5.1 IP地址

IP协议有两个版本,IPv4和IPv6(本文只关注v4)

IP地址是在IP协议中,用来标识网络中不同主机的地址;

对于IPv4来说,IP地址是一个4字节,32位的整数。通常使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1;用点分割的每一个数字表示一个字节, 范围是 0 - 255;

因ipv4的规定的局限性,ipv4的ip现在已经逐渐枯竭,很多地方的运营商已经不提供家用宽带的公网IP地址。

5.2 通信过程

在广域网通信的时候,每次都需要提供源IP和目标IP,这就是从哪儿来/到哪儿去;同时,还需要提供源MAC和目标MAC进行标识。

在通信过程中,会有路由器来告诉你应该去哪儿。在这期间,我们的数据会在不同的局域网内进行切换。

image-20230131211716493

在切换过程中,路由器会更新你的源IP/MAC(目标IP不变)并提供目标的MAC地址

唐僧去西天取经,他的目的地是不会变的,但是上一站/下一站会不断变化

以下图为例,当我们的数据走到IP这一层时,就会加上IP协议的报头。并在路由器内进行解包,再换上新的IP报头。

此时IP一层就可以和其他层区分开,因为在IP层之上,发送/接收主机收到的数据是完全一样的!

IP层是一个软件层,任何底层的差异,都可以通过加一层软件层来解决。这是一种软件虚拟化技术,linux的文件系统也使用了这种技术

也就是说,通过IP层,可以屏蔽底层网络的差距。在通过ip通信的时候,不需要关注底层的路由等硬件信息以及数据传输的实现。

5.3 端口

一台主机里面有非常多的进程,每一个进程都能访问网络发送信息。

光用IP地址,我们实际上只能找到对应的主机,却无法确定是这台主机里面的xx应用发出的信息。

此时,就需要利用端口号来确定我们要访问的进程是什么了。

  • IP:确保主机唯一性
  • 端口port:确保该主机上的进程唯一性

如果你有用过docker,那肯定就知道端口号这一存在。大部分docker都需要映射一个端口以对外提供服务。

网络间的通信,本质上是不同主机上的进程通信

  • 端口号是一个2字节的整数,限定了端口范围(1-65,536)
  • 端口号用于标识一个进程,告诉系统,当前的数据应交给哪一个进程去运行
  • 同一个进程可以使用多个端口号
  • 但是一个端口号只能对应一个进程

网络通信中,有源IP和目标IP,也有源端口和目标端口。我们把这一对IP+端口被称为socket对

5.3.1 端口/PID的关系

在一台主机里面,PID也可以用于标识唯一的进程。但是,端口号和PID是属于两个完全不同的概念。

假设餐厅里有一个扫把,餐厅雇了个保洁员A,让他来打扫餐厅的卫生。此时就可以把扫把认为是端口,保洁员A是一个进程。

有一天,保洁员A生病了,请假一周。于是老板又请了一个保洁员B,让他来打扫一周的卫生。此时,保洁员B也能使用餐厅里面已有的扫把,来进行打扫工作

  • 保洁员A/保洁员B干的工作是完全一致的
  • 他们使用的是同一个扫把

我们知道,在linux中,一个同一个可执行程序,每一次执行的时候,它的进程PID都是不同的;但同一个可执行程序,干的活肯定是一样的。

保洁员A和B就可以看作是同一个可执行程序,他们用的也是同一个端口(扫把),但保洁员A和B的进程PID是不一样的!

所以,在网络通信的时候,采用了端口这个扫把来标识需要进行网络通信的进程,而不是继续采用PID来标识👻

操作系统只需要维护一个端口号和进程的哈希表,就能快速地通过端口号找到对应的进程

5.4 TCP/UDP

TCP(Transmission Control Protocol 传输控制协议)

  • 传输层协议
  • 有链接(必须要和目标建立连接,才能开始数据传输)
  • 可靠传输(检查是否有丢包,需要保证数据完全被传输到目标主机)
  • 面向字节流

UDP(User Datagram Protocol 用户数据报协议)

  • 传输层协议
  • 无连接(无须建立连接,比如所有人都能给你的电子邮箱发送邮件)
  • 不可靠传输(不检查丢包)
  • 面向数据报

6.网络字节序

在之前学习int类型的存储的时候,提到过大端/小端的概念

6.1 说明

在网络中,数据流同样有大端小端之分。TCP/IP协议规定,网络数据流应该采用大端字节序(低地址高字节)后发出的数据是高地址

image-20211203231627550

如上图的1为例,当网络中发送这个数字1的时候,会先发送00 00 00,最后发送的是01。这样能够方便数据的拼接

  • 发送主机将缓冲区中的数据按内存地址从低到高的顺序发出
  • 接受主机把数据依次保存到缓存区中,也是按地址从低到高的顺序保存

这个规定更重要的意思是,如果不对网络字节数据的大小端做出限制,那么网络里面就会出现既有大端又有小端的情况,得写俩套代码来处理这个问题。

限制为大端之后,小端机器就需要在发送信息之前将数据转为大端,在接收到数据之后,将数据转换为小端。此时的处理就是操作系统的工作了,和TCP/IP协议本身没有关系了😛

6.2 转换接口

为了提高可以移植性,有以下的这个接口将网络字节序和主机字节序进行转换

#include <arpa/inet.h>uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t hostlong);
uint16_t ntohs(uint16_t hostshort);

在命名中,n代表network,h代表host,l代表long,s代表short。

如果主机就是大端,这些函数什么都不会做。如果主机是小端,则会将主机字节序转换成网络字节序(或反之)

更多…

关于网络原理的前置知识暂时就记录这么多,后续有新增会来更新本文

相关文章:

【Linux】网络原理

本篇博客让我们一起来了解一下网络的基本原理 1.网络发展背景 关于网络发展的历史背景这种东西就不多bb了&#xff0c;网上很容易就能找到参考资料&#xff0c;我的专业性欠缺&#xff0c;文章参考意义也不大。这里只做简单说明。 网络发展经过了如下几个模式 独立模式&…...

list模拟实现

list模拟实现list原理讲解节点结构list类设计push_backIterators:begin与endconst对象的迭代器重载->运算符反向迭代器迭代器所有代码迭代器总结constructor:clear~listfront与backinsert与erasesize与empty与swappop_back()总代码:节点类正向迭代器类反向迭代器类list类lis…...

CSS看这一篇就够啦,CSS基础大全,可用于快速回顾知识,面试首选

1 CSS简介 CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称。 CSS 是也是一种标记语言&#xff0c;主要用于设置 HTML 页面中的文本内容&#xff08;字体、大小、对齐方式等&#xff09;、图片的外形&#xff08;宽高、边框样式、 边距等&#xff09;以及版面的布局和外观…...

Canvas详细使用方法(一)

Canvas Canvas的注意事项 < canvas > 和 < img > 元素很相像&#xff0c;唯一的不同就是它并没有 src 和 alt 属性。 -< canvas > 标签只有两个属性——width和height( 单位默认为px )。当没有设置宽度和高度时&#xff0c;canvas 会初始化宽为 300px 和高…...

CentOS定时任务——crontab

crontab Linux crontab 是用来定期执行程序的命令。 crond 命令每分钟会定期检查是否有要执行的工作&#xff0c;如果有要执行的工作便会自动执行该工作。 注意&#xff1a;新创建的 cron 任务&#xff0c;不会马上执行&#xff0c;至少要过 2 分钟后才可以&#xff0c;当然你…...

C51---蓝牙模块---连接软件---控制LED灯

1.器件&#xff1a;C51、HC-08蓝牙模块、Ty-C数据线、杜邦线 2.软件&#xff1a;HC蓝牙助手 3.接线&#xff1a;VCC-VCC、GND-GND、RXD-TXD、TXD-RXD 4.烧写&#xff1a;STC-ISP串口助手 5.代码&#xff1a; #include "reg52.h" #include "intrins.h" …...

Linux 学习笔记——二、主机规划与磁盘分区

一、Linux 与硬件的搭配 Linux 中所有设备均被视为文件&#xff0c;其命名规则如下&#xff1a; 设备文件名SCSI/SATA/USB 硬盘机/dev/sd[a-p]USB 闪存盘/dev/sd[a-p]&#xff08;与 SATA 相同&#xff09;Virtl/O 界面/dev/vd[a-p]&#xff08;用于虚拟机内&#xff09;软盘…...

麒麟服务器V10 版本 安装 Anaconda教程,也就是安装Python环境的教程(亲测有效)

目录1 Anaconda 是什么2 安装1 Anaconda 是什么 你可以理解为一个软件&#xff0c;和QQ一样的软件&#xff0c;你安装之后&#xff0c;里面就有naconda包括Conda、Python以及一大堆安装好的工具包&#xff0c;比如&#xff1a;numpy、pandas等 1&#xff09;包含conda&#x…...

【3维视觉】网格细分Mesh Subdivision算法介绍(Loop, Catmull-Clark, Doo-Sabin)

引言 介绍了Loop, Catmull-Clark, Doo-Sabin细分。 算法介绍 1. Loop细分 Loop细分是Charles Loop在1987年在硕士论文中提出的一种对三角网格的细分算法。 Loop细分是递归定义的&#xff0c;每一个三角形一分为四&#xff0c;对于新生成的点和旧点以不同的规则更新。 点的…...

自学大数据第六天~HDFS命令

HDFS常用命令 查看hadoop版本 version hadoop version注意,没有 ‘-’ [hadoopmaster ~]$ hadoop version Hadoop 3.3.4 Source code repository https://github.com/apache/hadoop.git -r a585a73c3e02ac62350c136643a5e7f6095a3dbb Compiled by stevel on 2022-07-29T12:3…...

maven仓库的配置

下载 官网下载&#xff1a;https://maven.apache.org/download.cgi 2. 配置maven环境 右键电脑 ->属性 -> 高级系统设置 -> 环境变量 -> 系统变量-新建 变量名&#xff1a;MAVEN_HOME 变量值为maven的文件安装地址 编辑Path系统变量 新建&#xff1a;%MAVE…...

医院信息管理云平台源码 云HIS系统源码 4级电子病历系统

基层医院云HIS系统源码 高端商业his源码 有演示&#xff0c;可直接项目运营。 一款满足基层医院各类业务需要的云HIS系统。该系统能帮助基层医院完成日常各类业务&#xff0c;提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生站和护士站等一系列常规…...

JS学习第9天——ES6中面向对象(类class、constructor构造函数、类的继承extends、super关键字、面向对象tab栏切换案例)

目录一、面向对象1、面向过程2、面向对象3、两者对比二、ES6中的类和对象1、面向对象的思维特点2、对象3、类class4、类constructor构造函数三、类的继承1、继承2、super()关键字3、注意点四、面向对象案例一、面向对象 两大编程思想&#xff1a;① 面向过程 ② 面向对象 1、…...

K8S核心秘术学习总纲

学习 Kubernetes (简称 K8S) 可以采取以下步骤&#xff1a; 了解 K8S 的基本知识&#xff1a;K8S 是一个负责管理容器的开源平台。 在学习 K8S 之前&#xff0c;需要先掌握 Linux 基础知识和 Docker 容器基础知识。 搭建 K8S 环境&#xff1a;为了学习 K8S&#xff0c;你需要有…...

【PTA-训练day27】L2-038 病毒溯源 + L2-039 清点代码库 + L2-040 哲哲打游戏

目录 L2-038 病毒溯源 - dfs求树最大深度及路径 L2-039 清点代码库 - STL嵌套使用结构体自定义排序 L2-040 哲哲打游戏 - vector建图 L2-038 病毒溯源 - dfs求树最大深度及路径 PTA | 程序设计类实验辅助教学平台 思路&#xff1a; 用链表建树 找到根节点dfs根节点寻找最大…...

新一代跨平台云备份工具Duplicacy

什么是 Duplicacy &#xff1f; Duplicacy 是一款云备份软件&#xff0c;通过 Duplicacy 可以将视频&#xff0c;图片&#xff0c;文件&#xff0c;注册表等数据备份到云端。Duplicacy 通过客户端加密和最高级别的重复数据删除功能&#xff0c;将您的文件备份到许多云存储。 安…...

考研复试——概率论

文章目录概率论1. 大数定律2. 中心极限定理3. 大数定律和中心极限定理的区别&#xff1f;4. 最大似然估计5. 古典概型6. 几何概型7. 全概率公式8. 贝叶斯公式9. 先验概率、后验概率10. 数学期望因为初试考的数二&#xff0c;没有学概率论&#xff0c;要从头学习时间也不够&…...

Web学习4_JavaScript常用库

常用库 jQuery 使用方式 在元素中添加&#xff1a; <script src"https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"> </script> 按jQuery官网提示下载 选择器 $(selector)&#xff0c;例如&#xff1a; $(div);$(.big-div); $(div > p)s…...

C++回顾(二十)—— vector容器 和 deque容器

20.1 vector容器 20.1.1 vector容器简介 vector是将元素置于一个动态数组中加以管理的容器。vector可以随机存取元素&#xff08;支持索引值直接存取&#xff0c; 用[]操作符或at()方法&#xff09;。vector尾部添加或移除元素非常快速。但是在中部或头部插入元素或移除元素比…...

httpd使用记录

httpd使用记录 Busybox用一个httpd的程序&#xff0c;尝试用起来。 简单测试 启动服务 # 启动服务 mkdir /var/www/html httpd -p 8080 -h /var/www/html &编写html文件 在/var/www/html下放一个测试网页index.html文件。 <!DOCTYPE html> <html><hea…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...