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

Linux——网络基础(1)

文章目录


目录

文章目录

前言

一、文件传输协议

应用层

传输层

网络层

数据链路层

数据接收与解封装

主机与网卡

数据传输过程示意

二、IP和MAC地址

定义与性质

地址格式

分配方式

作用范围

可见性与可获取性

生活例子

定义

用途

特点

联系

四、TCP和UDP协议

连接特性

数据可靠性

传输效率与应用场景

数据格式

五、网络字节序

定义

与主机字节序对比

作用

应用场景

 六、socket编程接口

基本概念

常用函数

应用场景

总结


前言

linux——网络基础-CSDN博客


一、文件传输协议

这张图展示了 FTP(文件传输协议)通信过程中各层协议的交互逻辑,涉及应用层、传输层、网络层和数据链路层,以下是详细通信逻辑和过程:

应用层

  • FTP 客户发起请求:FTP 客户有文件传输需求,依据 FTP 协议向 FTP 服务器发送请求,比如请求下载或上传文件。此时,FTP 客户生成 FTP 协议数据单元(PDU),包含具体的操作指令(如读取文件列表、下载文件等)。

传输层

  • TCP 封装:FTP 客户的请求数据到达传输层后,TCP 协议对其进行封装。TCP 为 FTP 提供可靠的传输服务,会给数据添加 TCP 首部,其中包含源端口号、目的端口号、序号、确认号等信息,用于建立连接、确保数据按序到达和流量控制等。封装后的 TCP 数据段会传递给网络层。

网络层

  • IP 寻址与封装:网络层的 IP 协议接收 TCP 数据段后,添加 IP 首部,形成 IP 数据报。IP 首部包含源 IP 地址(srcip)和目的 IP 地址(dstip),这些地址用于在不同网络间进行路由寻址。
  • 路由器转发:IP 数据报被发送到路由器。路由器查看目的 IP 地址,依据路由表决定转发路径。在这个过程中,路由器工作在 IP 层,它屏蔽了底层网络(如以太网和令牌环网)的差异,实现不同网络间的互联。

数据链路层

  • 以太网环境:在以太网一侧,IP 数据报到达以太网驱动程序后,以太网协议会给其添加以太网首部,包含源 MAC 地址(mac C ,假设为客户端 MAC 地址)和目的 MAC 地址(mac R ,假设为路由器 MAC 地址),形成以太网帧,然后在以太网中传输。
  • 令牌环网环境:若数据要传输到令牌环网,在路由器处,数据会从以太网协议转换为令牌环协议。令牌环驱动程序会添加令牌环首部,包含相应的源和目的 MAC 地址等信息,封装成令牌环帧在令牌环网中传输。

数据接收与解封装

  • 服务器端数据链路层:在 FTP 服务器端,数据链路层先接收以太网帧或令牌环帧,去除相应的数据链路层首部,将数据交给网络层。
  • 服务器端网络层:网络层去除 IP 首部,将数据交给传输层。
  • 服务器端传输层:传输层去除 TCP 首部,将原始的 FTP 请求数据交给应用层的 FTP 服务器。FTP 服务器处理请求,然后按照上述相反的过程,将响应数据依次经过各层协议的封装,再传输回 FTP 客户,完成整个通信过程。

 

这是一张网络通信基本脉络示意图,展示了网络通信中数据在不同层次的传输过程,以及主机、网卡等设备在其中的作用。以下是详细介绍:

主机与网卡

图中有两台主机(标注为 A 和 B),每台主机都具备上述四层网络结构。主机通过网卡(网络接口卡)与网络连接,网卡是主机与网络进行数据交互的硬件设备,在数据链路层工作,负责将主机的数据转换为适合网络传输的格式,并进行数据的发送和接收。

数据传输过程示意

图中通过线条连接各层和网卡,示意了数据在网络通信中的传输过程:

  • 发送端:数据从主机 A 的应用层产生,依次经过传输层、网络层、数据链路层的封装处理,最后通过网卡发送到网络中。
  • 传输途中:数据在网络中传输,可能会经过多个中间设备(图中未详细展示,但一般包括路由器等),这些设备在网络层对数据进行转发等处理。
  • 接收端:数据到达主机 B 的网卡后,再依次经过数据链路层、网络层、传输层的解封装处理,最终传递到应用层,被用户接收和使用。

整体来看,这张图以简洁的方式展示了网络通信的基本架构和数据传输流程,有助于理解网络中各层次和设备的协同工作机制。

二、IP和MAC地址

IP(Internet Protocol)地址和 MAC(Media Access Control)地址是计算机网络中用于标识设备的两种重要地址,它们在定义、位置、分配方式、作用等方面存在诸多区别,以下是具体介绍:

定义与性质

  • IP 地址:是一种逻辑地址,用于在网络层标识设备在网络中的位置,基于 TCP/IP 协议族,主要用于在不同网络之间进行数据路由和通信。它类似于现实生活中的街道地址,用于在互联网这个庞大的 “数字城市” 中定位和区分不同的设备,使数据能够准确地从源设备传输到目标设备。
  • MAC 地址:是一种物理地址,也称为硬件地址,它是固化在网络设备(如网卡)中的唯一标识符,用于在数据链路层标识设备。可以将其类比为设备的 “身份证号码”,具有全球唯一性,无论设备连接到哪个网络,其 MAC 地址通常是不变的。

地址格式

  • IP 地址:目前常用的 IP 地址有 IPv4 和 IPv6 两种版本。IPv4 地址是由 32 位二进制数组成,通常以点分十进制的形式表示,如 192.168.1.1。IPv6 地址则是 128 位二进制数,采用冒号十六进制表示法,例如 2001:0db8:85a3:0000:0000:8a2e:0370:7334。
  • MAC 地址:MAC 地址通常由 6 个字节(48 位)的十六进制数表示,如 00-16-3e-00-01-02。前 3 个字节代表厂商代码,后 3 个字节是设备的序列号,这种结构确保了全球范围内 MAC 地址的唯一性。

分配方式

  • IP 地址:IP 地址可以分为静态 IP 地址和动态 IP 地址。静态 IP 地址是由网络管理员手动配置给设备的,通常用于需要固定 IP 的服务器等设备;动态 IP 地址则是通过动态主机配置协议(DHCP)由服务器自动分配给设备的,一般家庭用户和移动设备多使用动态 IP 地址,这样可以更有效地利用有限的 IP 地址资源。
  • MAC 地址:MAC 地址一般是在设备生产过程中由厂商固化在网卡等网络设备中的,具有唯一性和不可更改性。不过,在某些特殊情况下,用户也可以通过软件工具对 MAC 地址进行修改,这被称为 MAC 地址克隆或 MAC 地址欺骗。

作用范围

  • IP 地址:主要用于广域网(WAN)和互联网环境,用于在不同网段、不同地区甚至全球范围内实现设备之间的通信和数据传输。它能够跨越多个网络节点和路由器,根据网络拓扑结构和路由协议,将数据准确地从源设备发送到目标设备所在的网络。
  • MAC 地址:主要作用于局域网(LAN)环境,在同一网段内的设备之间进行通信时,用于标识源设备和目标设备。当数据链路层需要将数据帧从一个设备发送到另一个设备时,它会根据目标设备的 MAC 地址进行数据帧的封装和传输,确保数据在本地网络中准确传输。

可见性与可获取性

  • IP 地址:在网络通信中,IP 地址是较为容易被获取和查看的。例如,通过网络命令(如 ping、traceroute 等)或者在网络配置信息中,都可以很方便地获取到设备的 IP 地址。而且,在互联网应用中,服务器通常可以获取到客户端设备的 IP 地址,用于记录访问信息、进行流量控制等。
  • MAC 地址:相对来说,MAC 地址的获取没有 IP 地址那么直接。在局域网中,可以通过一些网络管理工具或者特定的命令(如在 Windows 系统中使用 arp -a 命令)来查看本地网络中设备的 MAC 地址。但在跨网络的情况下,由于 MAC 地址主要在数据链路层起作用,通常不会像 IP 地址那样在网络传输过程中被广泛暴露和获取。
  • 假设你在家中使用手机连接无线路由器上网,想要访问百度网站。

    生活例子

  • 把整个互联网想象成一个巨大的城市,每一个网络设备就像这个城市中的一栋房子或一个单位。

    • IP 地址:相当于城市中的街道地址和门牌号,用于在整个城市范围内定位和区分不同的房子或单位。比如,你在网上购买了一件商品,商家的服务器要把商品信息和订单数据发送给你家附近的快递站点,这个过程中就需要用到你的 IP 地址来确定大致的位置范围。数据在互联网的 “街道” 上传输,经过多个路由器 “交通指挥员” 的指引,根据 IP 地址找到你所在的网络区域,就像快递员根据街道地址找到你所在的小区。

    • MAC 地址:类似于房子或单位内的具体房间号,用于在一个特定的区域或网络内部精确地找到目标设备。当快递员到达你所在的小区后,需要根据具体的房间号把快递送到你家。在网络中也是如此,当数据到达你家所在的局域网(比如家庭网络或公司网络)后,就需要通过 MAC 地址来找到具体的设备,比如你的手机、电脑等。路由器就像小区的物业管理员,它会根据 MAC 地址将数据准确地发送到对应的设备上。

三、端口号和PID 

端口号(Port Number)和 PID(Process ID,进程标识符)是计算机领域中两个不同但又相关的概念,以下从定义、用途、特点等方面阐述它们的区别和联系:

定义

  • 端口号:是传输层协议(如 TCP 和 UDP)的一个概念,用于标识同一台主机上的不同应用程序或服务。它是一个 16 位的无符号整数,取值范围是 0 - 65535 ,可看作是应用程序或服务在网络通信中的 “门牌号”。
  • PID:是操作系统为正在运行的进程分配的唯一标识符。在操作系统中,每一个正在运行的程序实例都对应一个进程,系统通过 PID 来识别、管理和控制这些进程,就像每个人有独一无二的身份证号一样。

用途

  • 端口号:在网络通信里,当一台主机向另一台主机发送数据时,不仅要知道目标主机的 IP 地址,还得明确数据要交给目标主机上的哪个应用程序。端口号就是用于在接收方主机上区分不同应用程序或服务的。比如,HTTP 服务默认使用 80 端口,当我们在浏览器中访问网页时,浏览器发送的请求就会发往服务器的 80 端口,让服务器知道是 HTTP 请求。
  • PID:主要用于操作系统内部的进程管理。操作系统依靠 PID 来执行诸如进程调度、资源分配(如 CPU 时间、内存等)、进程间通信、结束进程等操作。比如,当我们在任务管理器中想要结束某个程序进程时,系统就是根据 PID 来定位并终止对应的进程。

特点

  • 端口号:一些端口号被标准化,作为特定服务的默认端口,这就是众所周知的 “知名端口”(0 - 1023),比如 21 端口用于 FTP 服务、22 端口用于 SSH 服务等;1024 - 49151 是注册端口,分配给用户进程或应用程序;49152 - 65535 是动态 / 私有端口,一般由操作系统在需要时随机分配给应用程序。
  • PID:在进程的生命周期内是唯一的,但进程结束后,其 PID 可能会被操作系统回收并重新分配给新的进程。而且不同的操作系统对 PID 的取值范围和管理方式可能有所不同。

联系

在网络编程和多进程应用中,端口号和 PID 存在一定关联。当一个应用程序开启一个网络服务并绑定到某个端口号时,操作系统会为这个运行的应用程序进程分配一个 PID。通过 PID 可以找到对应的进程,进而对绑定特定端口号的服务进行管理。例如,当我们要停止一个占用特定端口的网络服务时,可以先通过端口号找到对应的进程 PID,然后使用操作系统命令根据 PID 来终止该进程。

四、TCP和UDP协议

  • 端口号:在网络通信里,当一台主机向另一台主机发送数据时,不仅要知道目标主机的 IP 地址,还得明确数据要交给目标主机上的哪个应用程序。端口号就是用于在接收方主机上区分不同应用程序或服务的。比如,HTTP 服务默认使用 80 端口,当我们在浏览器中访问网页时,浏览器发送的请求就会发往服务器的 80 端口,让服务器知道是 HTTP 请求。
  • PID:主要用于操作系统内部的进程管理。操作系统依靠 PID 来执行诸如进程调度、资源分配(如 CPU 时间、内存等)、进程间通信、结束进程等操作。比如,当我们在任务管理器中想要结束某个程序进程时,系统就是根据 PID 来定位并终止对应的进程。
  • 端口号:一些端口号被标准化,作为特定服务的默认端口,这就是众所周知的 “知名端口”(0 - 1023),比如 21 端口用于 FTP 服务、22 端口用于 SSH 服务等;1024 - 49151 是注册端口,分配给用户进程或应用程序;49152 - 65535 是动态 / 私有端口,一般由操作系统在需要时随机分配给应用程序。
  • PID:在进程的生命周期内是唯一的,但进程结束后,其 PID 可能会被操作系统回收并重新分配给新的进程。而且不同的操作系统对 PID 的取值范围和管理方式可能有所不同。

TCP(传输控制协议,Transmission Control Protocol )协议,以下介绍 TCP 协议和 UDP(用户数据报协议,User Datagram Protocol )协议:

连接特性


TCP 协议:是面向连接的协议。就像打电话,在数据传输前,发送方和接收方需要通过 “三次握手” 建立连接,确定双方准备好传输数据,传输结束后还需 “四次挥手” 断开连接。这种连接机制确保了数据传输的有序性和可靠性。

UDP 协议:是无连接的协议。类似于邮寄信件,发送方无需事先与接收方沟通确认,直接将数据报发送出去,不用建立和维护连接,所以传输速度相对较快。

数据可靠性

  • TCP 协议:提供可靠的数据传输服务。它会对发送的数据进行编号和确认,接收方收到数据后会向发送方发送确认信息。如果发送方在规定时间内未收到确认,就会重发数据;同时,TCP 还具备流量控制和拥塞控制功能,能根据网络状况调整数据发送速率,避免网络拥塞,保证数据无差错、不丢失、不重复且按序到达。
  • UDP 协议:不保证数据传输的可靠性。发送方将数据报发出后,不关心数据是否能正确、完整地到达接收方,也没有重传机制、流量控制和拥塞控制等,可能会出现数据丢失、重复或乱序的情况。

传输效率与应用场景

  • TCP 协议:由于要建立连接、进行确认、重传等操作,会有一定的额外开销,传输效率相对较低。适用于对数据准确性要求极高的场景,比如文件传输(FTP)、网页浏览(HTTP)、电子邮件(SMTP、POP3 等),这些场景不允许数据出现错误。
  • UDP 协议:没有连接建立和复杂控制机制,传输效率高、延迟低。常用于对实时性要求高、能容忍一定数据丢失的场景,例如视频直播、在线游戏、语音通话等,这些场景更注重数据的及时传输,少量数据丢失对整体体验影响较小。

数据格式

  • TCP 协议:首部较长,通常为 20 字节(不包含选项字段),包含源端口号、目的端口号、序号、确认号、控制位等众多字段,用于实现连接管理、可靠性传输等功能。
  • UDP 协议:首部简单,仅 8 字节,包含源端口号、目的端口号、长度、校验和,数据传输相对简单直接。

五、网络字节序

  • TCP 协议:提供可靠的数据传输服务。它会对发送的数据进行编号和确认,接收方收到数据后会向发送方发送确认信息。如果发送方在规定时间内未收到确认,就会重发数据;同时,TCP 还具备流量控制和拥塞控制功能,能根据网络状况调整数据发送速率,避免网络拥塞,保证数据无差错、不丢失、不重复且按序到达。
  • UDP 协议:不保证数据传输的可靠性。发送方将数据报发出后,不关心数据是否能正确、完整地到达接收方,也没有重传机制、流量控制和拥塞控制等,可能会出现数据丢失、重复或乱序的情况。
  • TCP 协议:由于要建立连接、进行确认、重传等操作,会有一定的额外开销,传输效率相对较低。适用于对数据准确性要求极高的场景,比如文件传输(FTP)、网页浏览(HTTP)、电子邮件(SMTP、POP3 等),这些场景不允许数据出现错误。
  • UDP 协议:没有连接建立和复杂控制机制,传输效率高、延迟低。常用于对实时性要求高、能容忍一定数据丢失的场景,例如视频直播、在线游戏、语音通话等,这些场景更注重数据的及时传输,少量数据丢失对整体体验影响较小。
  • TCP 协议:首部较长,通常为 20 字节(不包含选项字段),包含源端口号、目的端口号、序号、确认号、控制位等众多字段,用于实现连接管理、可靠性传输等功能。
  • UDP 协议:首部简单,仅 8 字节,包含源端口号、目的端口号、长度、校验和,数据传输相对简单直接。
    • TCP 协议:由于要建立连接、进行确认、重传等操作,会有一定的额外开销,传输效率相对较低。适用于对数据准确性要求极高的场景,比如文件传输(FTP)、网页浏览(HTTP)、电子邮件(SMTP、POP3 等),这些场景不允许数据出现错误。
    • UDP 协议:没有连接建立和复杂控制机制,传输效率高、延迟低。常用于对实时性要求高、能容忍一定数据丢失的场景,例如视频直播、在线游戏、语音通话等,这些场景更注重数据的及时传输,少量数据丢失对整体体验影响较小。
  • TCP 协议:首部较长,通常为 20 字节(不包含选项字段),包含源端口号、目的端口号、序号、确认号、控制位等众多字段,用于实现连接管理、可靠性传输等功能。
  • UDP 协议:首部简单,仅 8 字节,包含源端口号、目的端口号、长度、校验和,数据传输相对简单直接。

定义

网络字节序采用大端字节序(Big - Endian),即把数据的高位字节存放在低地址位,低位字节存放在高地址位。比如对于一个 16 位整数 0x1234,在网络字节序下,其在内存中的存储顺序是先存 0x12(高位字节),再存 0x34(低位字节) 。

与主机字节序对比

主机字节序指的是计算机内部存储数据的字节顺序,不同的计算机架构可能采用不同的主机字节序,主要有大端字节序和小端字节序(Little - Endian,低位字节存放在低地址位,高位字节存放在高地址位)。例如,x86 架构的计算机通常采用小端字节序。当在网络中进行数据传输时,由于不同主机的字节序可能不同,就需要统一的字节序标准,这便是网络字节序存在的意义。

作用

网络字节序的作用是确保不同主机之间在网络通信时数据能够被正确解析。发送方在发送数据前,需要将主机字节序的数据转换为网络字节序;接收方在收到数据后,要把网络字节序的数据转换为主机字节序,这样才能保证数据在不同主机间的准确传输和理解。例如,在 TCP/IP 协议栈中,所有在网络上传输的多字节数据(如 IP 地址、端口号等)都需要按照网络字节序进行组织和传输。

应用场景

在网络编程中,如使用 Socket 进行编程时,涉及到多字节数据的传输都要遵循网络字节序。比如在设置 Socket 地址结构中的端口号和 IP 地址等字段时,需要调用相应的函数(如 htons、htonl 等)将主机字节序转换为网络字节序(h 表示主机字节序,n 表示网络字节序,s 表示 short,l 表示 long );在接收数据时,也要使用 ntohs、ntohl 等函数将网络字节序转换为主机字节序。

 六、socket编程接口

基本概念

Socket(套接字)可看作是网络通信的端点,就像电话系统中的电话接口,通过它不同的程序能在网络中发送和接收数据。它既可以用于同一台计算机上不同进程间的通信(如 UNIX 域套接字),也能用于不同计算机之间的网络通信(如基于 TCP/IP 协议的套接字) 。

常用函数

  • socket():用于创建一个套接字描述符,确定套接字的类型(如流式套接字 SOCK_STREAM,基于 TCP 协议,提供可靠的面向连接的通信;数据报套接字 SOCK_DGRAM,基于 UDP 协议,提供无连接的通信 )、协议族(如 AF_INET 表示 IPv4 协议族)等。示例代码:
  • int sockfd = socket(AF_INET, SOCK_STREAM, 0);
  • ,若成功则返回一个非负整数的套接字描述符,失败返回 - 1。
  • bind():将套接字与特定的地址和端口绑定。在服务器端,通常需要绑定一个众所周知的端口,以便客户端能够连接到它。对于 IPv4 地址,需要构建一个 struct sockaddr_in 结构体来指定地址和端口信息。示例代码:
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8888);
server_addr.sin_addr.s_addr = INADDR_ANY;
bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
  • listen():仅用于服务器端,使套接字进入监听状态,准备接受客户端的连接请求。第二个参数指定了等待连接的最大队列长度。示例:
  • listen(sockfd, 5); 。
  • accept():服务器端使用该函数接受客户端的连接请求。当有客户端连接时,它会返回一个新的套接字描述符,用于与该客户端进行通信,而原来的套接字仍继续监听其他连接请求。示例:
  • int client_sockfd = accept(sockfd, (struct sockaddr *)&client_addr, &client_addr_len);
  • 其中 client_addr 用于存储客户端地址信息。
  • connect():客户端使用此函数发起与服务器的连接。参数与 bind 类似,用于指定要连接的服务器地址和端口。示例:
  • connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)); 。
  • send()/recv():用于在已经建立连接的套接字上发送和接收数据。send 用于发送数据,recv 用于接收数据。示例:
  • send(sockfd, buffer, strlen(buffer), 0);recv(sockfd, buffer, sizeof(buffer), 0); 。
  • close():用于关闭套接字,释放相关资源。示例:close(sockfd); 。

应用场景

  • 客户端 - 服务器模型:是最常见的应用场景。服务器通过上述函数绑定端口并监听,等待客户端连接;客户端则使用 connect 连接到服务器,双方建立连接后,通过 send 和 recv 进行数据交互,如 Web 服务器与浏览器之间的通信、文件服务器与客户端的文件传输等。
  • 分布式系统:在分布式系统中,不同节点之间通过 Socket 编程接口进行通信和数据交换,实现分布式计算、数据共享等功能。
  • 实时通信:如在线游戏、视频会议等应用,通过 Socket 编程接口实现实时的数据传输,虽然可能会结合 UDP 协议以满足低延迟要求,但也会使用一些机制来提高数据可靠性。

总结

  1. 文件传输与网络架构:FTP 通信依应用层、传输层、网络层和数据链路层交互,经封装、转发、解封装完成。网络通信中主机靠网卡经各层实现数据传输,各层与设备协同保障通信。
  2. 网络标识:IP 地址是网络层逻辑地址,分 IPv4 和 IPv6,有静态与动态分配方式,用于广域网通信;MAC 地址是数据链路层物理地址,固化于设备,全球唯一,用于局域网通信。
  3. 进程与服务标识:端口号是传输层概念,标识主机应用程序或服务,有知名、注册、动态端口之分;PID 是操作系统为进程分配的唯一标识符,用于进程管理,二者在网络编程中有联系。
  4. 传输协议:TCP 面向连接,可靠,有额外开销,适用于对准确性要求高场景;UDP 无连接,不可靠,效率高、延迟低,适用于实时性要求高场景。
  5. 字节序:网络字节序采用大端字节序,与主机字节序可能不同,在网络通信中用于保障数据解析准确,网络编程需按其组织和转换多字节数据。
  6. socket 编程:Socket 是网络通信端点,其编程接口有创建、绑定、监听、连接、收发、关闭等函数,广泛应用于客户端 - 服务器模型、分布式系统和实时通信等场景。

相关文章:

Linux——网络基础(1)

文章目录 目录 文章目录 前言 一、文件传输协议 应用层 传输层 网络层 数据链路层 数据接收与解封装 主机与网卡 数据传输过程示意 二、IP和MAC地址 定义与性质 地址格式 分配方式 作用范围 可见性与可获取性 生活例子 定义 用途 特点 联系 四、TCP和UDP协…...

【记录】日常|从零散记录到博客之星Top300的成长之路

文章目录 shandianchengzi 2024 年度盘点概述写作风格简介2024年的创作内容总结 shandianchengzi 2024 年度盘点 概述 2024年及2025年至今我创作了786即84篇文章,加上这篇就是85篇。 很荣幸这次居然能够入选博客之星Top300,这个排名在我之前的所有年份…...

【二分查找】力扣373. 查找和最小的 K 对数字

给定两个以 非递减顺序排列 的整数数组 nums1 和 nums2 , 以及一个整数 k 。 定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2 。 请找到和最小的 k 个数对 (u1,v1), (u2,v2) … (uk,vk) 。 示例 1: 输入: nums1 [1,7,11], nums2 …...

池化层Pooling Layer

1. 定义 池化是对特征图进行的一种压缩操作,通过在一个小的局部区域内进行汇总统计,用一个值来代表这个区域的特征信息,常用于卷积神经网络(CNN)中。 2. 作用 提取代表性信息的同时降低特征维度,具有平移…...

力扣算法题——11.盛最多水的容器

目录 💕1.题目 💕2.解析思路 本题思路总览 借助双指针探索规律 从规律到代码实现的转化 双指针的具体实现 代码整体流程 💕3.代码实现 💕4.完结 二十七步也能走完逆流河吗 💕1.题目 💕2.解析思路…...

自由学习记录(32)

文件里找到切换颜色空间 fgui中的 颜色空间是一种总体使用前的设定 颜色空间,和半透明混合产生的效果有差异,这种问题一般可以产生联系 动效就是在fgui里可以编辑好,然后在unity中也准备了对应的调用手段,可以详细的使用每一个具…...

VScode+Latex (Recipe terminated with fatal error: spawn xelatex ENOENT)

使用VSCode编辑出现Recipe terminated with fatal error: spawn xelatex ENOENT问题咋办? 很好解决,大概率的原因是因为latex没有添加到系统环境变量中,所有设置的编译工具没有办法找到才出现的这种情况。 解决方法: winR 然后输…...

「蓝桥杯题解」蜗牛(Java)

题目链接 这道题我感觉状态定义不太好想,需要一定的经验 import java.util.*; /*** 蜗牛* 状态定义:* dp[i][0]:到达(x[i],0)最小时间* dp[i][1]:到达 xi 上方的传送门最小时间*/public class Main {static Scanner in new Scanner(System.in);static f…...

PHP EOF (Heredoc) 详解

PHP EOF (Heredoc) 详解 PHP 中的 EOF(End Of File)是一种非常有用的语法特性,允许开发者创建多行字符串。它特别适合于创建格式化文本,如配置文件、HTML 模板等。本文将详细讲解 PHP EOF 的用法、优势以及注意事项。 什么是 EOF? EOF 是一种特殊的字符串定义方式,它允…...

pyautogui操控Acrobat DC pro万能PDF转Word,不丢任何PDF格式样式

为了将PDF转换脚本改为多进程异步处理,我们需要确保每个进程独立操作不同的Acrobat窗口。以下是实现步骤: 实现代码 import os import pyautogui import time import subprocess import pygetwindow as gw from multiprocessing import Pooldef conver…...

Day32:字符串的复制

在 Python 中,字符串的复制是指创建一个新的字符串,它的内容与原字符串相同。字符串是不可变的对象,这意味着你不能直接修改字符串的内容,但是可以通过复制来创建新的字符串进行操作。字符串的复制在一些情况下非常有用&#xff0…...

基于Mybatis继承AbstractRoutingDataSource使用自定义注解实现动态数据源

一:实现 方式一:继承AbstractRoutingDataSource使用自定义注解实现 环境:springboot3 MyBatis3 mysql-connector8 DataSourceKeyEnum枚举类 有几个数据源就配置几个枚举类,和数据源数量一一对应 class DataSourceKeyEnum{D…...

ZooKeeper 数据模型

ZooKeeper 数据模型 ZooKeeper 拥有层次化的命名空间,类似分布式文件系统,但每个节点不仅能有子节点,还可关联数据。节点路径为规范的绝对路径,用斜杠分隔,无相对引用。路径命名有如下约束: 路径名不能包…...

【VUE】Vue2中Vue.extend方法

在 Vue.js 2.x 版本中,Vue.extend() 方法被用于创建一个新的 Vue 子类,可以在该子类上扩展一些属性、指令和组件选项等,然后进行实例化。 比如,可以在创建一些类似 loading 式的函数式插件时,使用: 在 Vue…...

MaskGAE论文阅读

What’s Behind the Mask: Understanding Masked Graph Modeling for Graph Autoencoders 碎碎念:一篇论文看四天,效率也没谁了(捂脸) 看一点忘一点,虽然在本子上有记录,但还是忘,下次看一点在博客上记一点启发 本来很…...

Mybatis-plus 更新 Null 的策略踩坑记

一个bug 在一个管理页面,有一个非必填字段被设置成空了并提交更新,再次打开的时候,发现字段还在,并没有被更新成功。 使用的数据库映射框架是 Mybatis-plus ,对于Mybatis 在更新字段的时候会对空进行校验,…...

Oracle迁移DM数据库

Oracle迁移DM数据库 本文记录使用达梦官方数据迁移工具DTS,将Oracle数据库的数据迁移至达梦数据库。 1 数据准备 2 DTS工具操作步骤 2.1 创建工程 打开DTS迁移工具,点击新建工程,填写好工程信息,如图: 2.2 新建迁…...

HTML特殊符号的使用示例

目录 一、基本特殊符号的使用 1、空格符号: 2、小于号 和 大于号: 3、引号: 二、版权、注册商标符号的使用 1、版权符号:© 2、注册商标符号: 三、数学符号的使用 四、箭头符号的使用 五、货币符号的使用…...

数据结构基础之《(15)—排序算法小结》

一、排序算法的稳定性 1、稳定性是指同样大小的样本再排序之后不会改变相对次序 2、对基础类型来说,稳定性毫无意义 比如:3和3没有区别。《潜伏》里说同样两个一百元大钞,你能告诉我哪一个是高尚的那一个是龌龊的么 3、对非基础类型来说&a…...

Linux系统下速通stm32的clion开发环境配置

陆陆续续搞这个已经很久了。 因为自己新电脑是linux系统无法使用keil,一开始想使用vscode里的eide但感觉不太好用;后面想直接使用cudeide但又不想妥协,想趁着这个机会把linux上的其他单片机开发配置也搞明白;而且非常想搞懂cmake…...

【2024年 CSDN博客之星】我的2024年创作之旅:从C语言到人工智能,个人成长与突破的全景回顾

我的2024年创作之旅:从C语言到人工智能,个人成长与突破的全景回顾 引言 回望2024年,我不仅收获了技术上的成长,更收获了来自CSDN平台上无数粉丝、朋友以及网友们的支持与鼓励。在这条创作之路上,CSDN不仅是我展示技术成…...

Python 轻松扫描,快速检测:高效IP网段扫描工具全解析

Python 轻松扫描,快速检测:高效IP网段扫描工具全解析 相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着…...

go入门Windows环境搭建

简介 Go 即 Golang,是 Google 公司 2009 年 11 月正式对外公开的一门编程语言。 根据 Go 语言开发者自述,近 10 多年,从单机时代的 C 语言到现在互联网时代的 Java,都没有令人满意的开发语言,而 C往往给人的感觉是&a…...

安装Ubuntu22.04

1.引用教程 如何安装Ubuntu Server 22.04 LTS_ubuntu22.04 server-CSDN博客 2.空间分配 要使用 docker 比较多所以分别的 docker 空间大...

对比OpenAI的AI智能体Operator和智谱的GLM-PC,它们有哪些不同?

OpenAI 的 AI 智能体 Operator 和智谱的 GLM-PC 有以下不同: 功能侧重 Operator:主要侧重于网页操作,能在网页上模拟人类进行点击、输入等操作,完成如预订旅行住宿、餐厅预约、在线购物、在 Arxiv 上进行论文分类搜索等任务123。…...

Git Bash 配置 zsh

博客食用更佳 博客链接 安装 zsh 安装 Zsh 安装 Oh-my-zsh github仓库 sh -c "$(curl -fsSL https://install.ohmyz.sh/)"让 zsh 成为 git bash 默认终端 vi ~/.bashrc写入: if [ -t 1 ]; thenexec zsh fisource ~/.bashrc再重启即可。 更换主题 …...

美格智能AIMO智能体+DeepSeek-R1模型,AI应用的iPhone时刻来了

导语: 当AI大模型从云端下沉至终端设备,一场关于效率、隐私与智能化的革命悄然展开。作为全球领先的无线通信模组及解决方案提供商,美格智能凭借其高算力AI模组矩阵与端侧大模型部署经验,结合最新发布的AIMO智能体产品&#xff0…...

Python标准库 - os (1) 环境变量、进程的用户和组

文章目录 1 访问和修改环境变量1.1 访问环境变量1.2 修改环境变量 2 进程的用户和组2.1 进程的ID2.2 进程的用户2.3 进程组 os模块提供了各种操作系统接口。包括环境变量、进程管理、进程调度、文件操作等方面。 这里整理了环境变量、进程的用户和用户组相关的控制方法。 参考…...

QT 通过ODBC连接数据库的好方法:

效果图: PWD使用自己的,我的这是自己的,所以你用不了。 以下是格式。 // 1. 设置数据库连接 QSqlDatabase db QSqlDatabase::addDatabase("QODBC");// 建立和QMYSQL数据库的连接 // 设置数据库连接名称(DSN&am…...

机器学习 - 初学者需要弄懂的一些线性代数的概念

一、单位矩阵 在数学中,单位矩阵是一个方阵,其主对角线上的元素全为1,其余元素全为0。单位矩阵在矩阵乘法中起到类似于数字1在数值乘法中的作用,即任何矩阵与单位矩阵相乘,结果仍为原矩阵本身。 单位矩阵的定义&…...