网络udp及ipc内存共享

news2024/9/22 23:31:01

大字符串找小字符串

调试

1. 信号处理函数注册:•一旦使用 signal 函数注册了信号处理函数,该函数就会一直有效,直到程序结束或者显式地取消注册。2. 注册多次的影响:•如果多次注册同一信号的处理函数,最后一次注册的处理函数将成为有效的处理函数。•重复注册同一信号的处理函数并不会累加效果,而是覆盖之前的注册。3. 取消注册:•如果想要取消信号处理函数的注册,可以再次调用 signal 函数,并将 handler 参数设置为 SIG_DFL 或 SIG_IGN。

2.在Linux系统中,每个共享内存段都通过一个唯一的键值来标识。当进程想要访问某个共享内存段时,它会通过shmget函数并传入该共享内存段的键值来请求系统分配或返回该内存段的标识符(shmid)。系统会根据键值来查找对应的共享内存段,如果找到,就返回该内存段的标识符给进程;如果找不到,且进程请求的是创建新的共享内存段,那么系统会根据键值(如果使用的是非IPC_PRIVATE的键值)检查是否已经存在一个同名的共享内存段,如果不存在,则创建一个新的共享内存段并返回其标识符。

由于键值的唯一性,不同的进程如果想要访问不同的共享内存段,就需要使用不同的键值。这样,即使多个进程都在请求共享内存段,它们也能够通过各自的键值来访问到正确的内存段,而不会发生误操作或数据冲突。

当然,如果两个或多个进程想要共享同一个内存段,它们就需要使用相同的键值来访问该内存段。这通常是通过在进程之间共享这个键值来实现的,比如通过环境变量、配置文件或命令行参数等方式传递。

需要注意的是,虽然键值确保了共享内存段的唯一性,但在使用共享内存进行进程间通信时,还需要注意同步和互斥问题,以避免数据竞争和不一致性。这通常需要通过信号量、互斥锁等同步机制来实现。

数据传输过程1. 数据包的封装与解封装:•当数据从发送方传输到接收方时,它会经历一个封装过程,然后在网络中传输,最后进行解封装。•在封装过程中,数据会被添加头部信息,形成数据包。2. 网络层与链路层:•网络层:负责将数据包从源主机路由到目的主机,使用 IP 地址。•链路层:负责在局域网内将数据包从源设备传输到目的设备,使用 MAC 地址。IP 地址与 MAC 地址的关系

1. IP 地址:•IP 地址用于在网络层标识设备。•当数据包需要从一个网络传输到另一个网络时,路由器使用 IP 地址进行路由决策。

2. MAC 地址:•MAC 地址用于在链路层标识设备。•当数据包需要在同一局域网内传输时,使用 MAC 地址将数据包从源设备发送到目的设备。

3. ARP 协议:•在局域网中,ARP 协议用于将 IP 地址映射到 MAC 地址。•当设备需要向另一台设备发送数据时,它首先查询 ARP 缓存以查找目标 IP 地址对应的 MAC 地址。•如果找不到,则发送一个 ARP 请求广播,询问目标 IP 地址对应的 MAC 地址。•目标设备会回复一个 ARP 应答,包含其 MAC 地址。

为什么需要 MAC 地址虽然 IP 地址已经足够标识网络中的设备,但在局域网内,数据包的实际传输是通过 MAC 地址完成的。这是因为:1. 链路层转发:•数据包在局域网内的传输是由链路层完成的,而链路层使用 MAC 地址进行转发。•MAC 地址确保数据包能够在局域网内准确地从一个设备传输到另一个设备。2. 局域网内的直接通信:•在同一局域网内,设备之间的通信不需要通过路由器,直接通过 MAC 地址进行。3. 提高效率:•使用 MAC 地址可以提高数据包在局域网内的传输效率。•MAC 地址的使用减少了对路由器的依赖,加快了数据包的转发速度。

示例假设有一台设备 A 需要向同一局域网内的设备 B 发送数据:1. 查找 IP 地址:•设备 A 已知设备 B 的 IP 地址为 192.168.1.3。2. 查找 MAC 地址:•设备 A 查询 ARP 缓存,如果找到了设备 B 的 MAC 地址,则直接使用。•如果没有找到,则发送一个 ARP 请求广播,询问 192.168.1.3 对应的 MAC 地址。•设备 B 回复 ARP 应答,包含其 MAC 地址 00:1F:2G:3H:4I:5J。3. 发送数据:•设备 A 在数据帧中使用设备 B 的 MAC 地址 00:1F:2G:3H:4I:5J 发送数据。

帧数据(Frame Data)是计算机网络中链路层(第二层)的数据单位。在数据从发送方传输到接收方的过程中,数据在每一层都会被封装成不同的格式。在链路层,数据被封装成帧(Frames)。帧数据的组成帧数据通常包含以下几个部分:1. 帧头(Header):•包含控制信息,如源 MAC 地址、目的 MAC 地址、帧类型等。•帧头还包括一些用于确保数据完整性、同步等的信息。2. 数据字段(Data Field):•包含来自上一层(通常是网络层)的数据,如 IP 数据报。3. 帧尾(Trailer):•通常包含校验和(Checksum)或循环冗余校验(CRC)等用于检测传输错误的信息。帧数据的格式帧数据的具体格式可能因使用的链路层协议而异,但大多数帧数据格式遵循类似的结构。下面是一个通用的帧数据格式示例:+----------------+----------------+----------------+----------------+
| Preamble | Start Frame Delimiter | Destination MAC |
+----------------+----------------+----------------+----------------+
| Source MAC | Length / Type | Data | Frame Check Sequence |
+----------------+----------------+----------------+----------------+
plaintext1. Preamble:•一系列的位,用于帮助接收端设备同步。•通常由多个 10101010 的序列组成。2. Start Frame Delimiter (SFD):•标志帧的开始。3. Destination MAC:•目的设备的 MAC 地址。4. Source MAC:•发送设备的 MAC 地址。5. Length / Type:•数据字段的长度或类型。6. Data:•包含来自网络层的数据。7. Frame Check Sequence (FCS):•用于检测传输错误的校验和或 CRC。

示例假设有一条从发送方传输到接收方的数据,这条数据在网络层被封装成 IP 数据报,然后在链路层被封装成帧数据:1. 网络层:•IP 数据报包含源 IP 地址、目的 IP 地址、协议类型等信息。2. 链路层:•IP 数据报被封装成帧数据。•帧数据包括帧头、数据字段(IP 数据报)和帧尾。

总结•帧数据:链路层的数据单位。•组成:帧头、数据字段、帧尾。•用途:确保数据在局域网内的准确传输。

1. 应用层数据:•原始数据,例如一段文本或图像。

2. 传输层:•数据被分割成较小的部分,并添加 TCP 或 UDP 头部,形成传输层数据段。

3. 网络层:•传输层数据段被封装成数据包,添加 IP 地址等信息。

4. 链路层:•数据包被封装成帧数据,添加 MAC 地址等信息。

5. 物理层:•帧数据被转换为比特流,在物理介质上传输。

6. 接收方:•物理层接收到比特流,并将其转换为帧数据。•链路层解封装帧数据,提取出数据包。•网络层解封装数据包,提取出传输层数据段。•传输层解封装数据段,重组原始数据。

OSI 七层模型OSI(Open Systems Interconnection)七层模型是一种理论模型,用于描述计算机网络中不同层次的功能。

它将网络通信分解为七个不同的层次,每个层次负责不同的功能。下面是 OSI 七层模型各层的具体含义:

1. 应用层(Layer 7)•功能: •提供应用程序和服务之间的接口。•支持文件传输、电子邮件、打印服务等功能。•为用户提供访问网络资源的方法。•常见协议:HTTP, FTP, SMTP, Telnet, SSH, SNMP 等。

2. 表示层(Layer 6)•功能: •负责数据的编码和解码。•处理数据压缩、加密和解密等。•常见协议:JPEG, MPEG, ASCII, DES, RSA 等。

3. 会话层(Layer 5)•功能: •建立、管理和终止会话。•控制数据交换的同步。•提供会话恢复和检查点等机制。•常见协议:SQL, RPC, NCP, NetBIOS, ASP 等。

4. 传输层(Layer 4)•功能: •提供端到端的数据传输服务。•确保数据的可靠传输,包括错误检测、纠正和流量控制。•分割和重组数据。•常见协议:TCP, UDP 等。

5. 网络层(Layer 3)•功能: •负责路由选择和数据包的转发。•提供逻辑寻址(如 IP 地址)。•控制拥塞和数据包的排序。•常见协议:IP, ICMP, ARP, RARP, OSPF, BGP 等。

6. 数据链路层(Layer 2)•功能: •负责在相邻节点之间传输数据帧。•提供物理地址(如 MAC 地址)。•进行错误检测和流量控制。•常见协议:Ethernet, Token Ring, PPP, HDLC 等。

7. 物理层(Layer 1)•功能: •负责在物理介质上进行比特流的传输。•定义电气特性、机械特性、功能特性和过程特性。•提供物理连接的建立、维护和释放。•常见协议:RS-232, V.35, RJ-45, BNC, AUI 等。

各层之间的关系1. 数据封装:•当数据从高层向低层传输时,每层都会添加自己的头部信息,形成数据单元。•数据单元在不同层有不同的名称: •应用层:数据•表示层:数据•会话层:会话数据单元 (SDU)•传输层:数据段 (Segment)•网络层:数据包 (Packet)•数据链路层:数据帧 (Frame)•物理层:比特流 (Bit Stream)2. 数据解封装:•当数据从低层向高层传输时,每层都会去除自己添加的头部信息,还原原始数据。•数据在接收方的每个层次被解封装,直至恢复为原始数据。示例假设有一条从发送方传输到接收方的数据,这条数据在网络的不同层次中被封装的过程如下:1. 应用层:•原始数据,例如一段文本或图像。

2. 表示层:•数据被编码或加密。

3. 会话层:•数据被封装成会话数据单元 (SDU)。

4. 传输层:•SDU 被分割成较小的部分,并添加 TCP 或 UDP 头部,形成数据段。

5. 网络层:•数据段被封装成数据包,添加 IP 地址等信息。

6. 数据链路层:•数据包被封装成帧数据,添加 MAC 地址等信息。

7. 物理层:•帧数据被转换为比特流,在物理介质上传输。总结•OSI 七层模型:将网络通信分解为七个不同的层次,每个层次负责不同的功能。•各层功能:从应用层到物理层,描述了数据在网络中的传输过程。•数据封装与解封装:数据在网络的不同层次中被封装和解封装。

    • 网络协议的作用网络协议是规定网络通信的标准和规则,同时也是实现网络通信的基础。网络协议定义了数据在网络中传输的方式,包括数据的格式、传输的规则、错误处理等各个方面。下面详细介绍网络协议的作用:规定标准
    • 1. 定义通信规则:•网络协议定义了不同设备之间通信的规则和标准。•它们规定了数据的格式、传输的顺序、错误处理方法等。
    • 2. 确保兼容性:•网络协议确保不同制造商生产的设备可以相互通信。•通过遵循共同的协议标准,设备可以相互识别和交换数据。
    • 3. 标准化数据格式:•网络协议定义了数据在网络中传输时的格式。•例如,TCP/IP 协议族中的 IP 协议定义了 IP 数据包的格式。
    • 实现网络通信1. 数据传输:•网络协议提供了数据在网络中传输的方法。•它们定义了数据如何被封装、如何被传输、以及如何被解封装。
    • 2. 错误检测与纠正:•网络协议包含了错误检测和纠正机制。•例如,TCP 协议使用序列号和确认机制来确保数据的可靠传输。
    • 3. 路由选择:•网络协议定义了数据在网络中如何被路由。•例如,IP 协议使用路由表来确定数据包的最佳路径。
    • 4. 资源管理:•网络协议还涉及到网络资源的管理。
    • •例如,TCP 协议中的流量控制机制可以帮助防止网络拥塞。示例假设两台计算机通过 TCP/IP 协议族进行通信:1. 应用层:•HTTP 协议定义了 Web 服务器和客户端之间的通信规则。2. 传输层:•TCP 协议确保数据可靠传输,提供流控制和错误检测机制。3. 网络层:•IP 协议定义了数据包在网络中的路由和寻址规则。4. 数据链路层:•Ethernet 协议定义了局域网内的数据帧格式和传输规则。5. 物理层:•定义了物理连接的电气特性、信号传输方式等。总结•规定标准:网络协议定义了通信的规则和标准。•实现通信:网络协议提供了实现网络通信的方法。•兼容性与互操作性:网络协议确保不同设备可以相互通信。

先发给网关,子网掩码和ip与后,网络号就知道了,网关就知道是给外面发还是在局域网内

iPV4,32位

ipv6,128位

p2p,点对点,可能用的越多带宽越大

网络编程:
   tcp / udp  

IPC 进程间通信方式
  
  共享内存   //最高效的进程间通信方式 


【原理】:        
+-进程A-+              +-进程B-+   <--        
|       |              |       |     ^
|       |              |       |     |
|       |              |       |    0~3G
|       |              |       |     
|       |              |       |     |
|       |              |       |     |
|       |                |       |     V
+------------------------------+     --
|         内核                 |     1G
+------------------------------+   <----


共享内存:

                  [内存]
                  |    |
                  +----+                  
[进程A]           |    |                 [进程B]
    \---------->  |    | <---------------/
                  |    |
                  +----+                  
                  |    | 
                  |    |
                  |    | 
                  |    |
                  
    虚拟地址     mmu(memory management unit )          
                   fifo 
                   
                   
共享内存:
  1.是一块,内核预留的空间 
  2.最高效的通信方式 
   //避免了用户空间 到 内核空间的数据拷贝
  
  

IPC通信方式 ---操作流程类似的 
操作:
         system v :  共享内存 

    IPC对象操作通用框架:
    0x  ftok
    key值 ==> 申请 ==》读写 ==》关闭 ==》卸载


    InterProcessCommunication  //IPC 

                  |进程A|        |进程B|
                     \             /
[用户空间]            ````[key]```       //name ---fifo 
                            |
                          xxxget()函数 //建立了 key <==>ipc对象之间的一一对应的关系
                            |
----------------------------|--------------   
[内核空间]                  |   
                            |
                         [IPC对象]//共享内存 
                         
    


//step1 产生key值 
ftok //


#include <sys/types.h>
       #include <sys/ipc.h>

       key_t ftok(const char *pathname, int proj_id);
       功能:
             将pathname 和 proj_id 转换为 key值 
       参数:
        @pathname  //给一个路径名 
        @proj_id   //工程id       eg: 'A'
       返回值
          成功 key值
          失败 -1     

//step2 通过key获取ipc对象 (共享内存)
shmget   //shared memory 


//1、申请对象:shmget()
    #include <sys/ipc.h>
    #include <sys/shm.h>
    ps aux|grep a.out
        shared memory get         IPC_CREAT|0666
    int shmget(key_t key, size_t size, int shmflg);
    功能:
         使用唯一键值key向内核提出共享内存使用申请
    参数:key   唯一键值
          size  要申请的共享内存大小
          shmflg 申请的共享内存访问权限,八进制表示
          如果是第一个申请,则用IPC_CREAT
          如果要检测是否存在,用IPC_EXCL
    返回值:
            成功 返回共享内存id,一般用shmid表示
            失败  -1;

            share memory attach

//step3 共享内存 绑定 
shmat 

    映射对象:shmat()
    void *shmat(int shmid, const void *shmaddr, int shmflg);
    功能:将指定shmid对应的共享内存映射到本地内存。
    参数:shmid 要映射的本地内存
          shmaddr 本地可用的地址,如果不确定则用NULL,表示
                  由系统自动分配。
          shmflg  
          0         ,  表示读写
          SHM_RDONLY, 只读
    返回值:
           成功 返回映射的地址,一般等于shmaddr
            失败 (void*)-1        

//step4 解除绑定(映射)

    撤销映射:shmdt
    int shmdt(const void *shmaddr);
    功能:将本地内存与共享内存断开映射关系。
    参数:shmaddr 要断开的映射地址。
    返回值:成功  0
            失败  -1;

          

//step4 销毁IPC对象 
        删除对象:shmctl
    int shmctl(int shmid, int cmd, struct shmid_ds *buf); //ctl = control 
    功能:
         修改共享内存属性,也可以删除指定的共享内存对象。
    参数:shmid 要删除的共享内存对象
          cmd 
               IPC_RMID 删除对象的宏
          buff  NULL 表示只删除对象。
    返回值:成功 0
            失败 -1
      
          总结:                      
    1、共享内存数据的存储方式是拷贝还是剪切?
        拷贝
    2、共享内存的数据如果多次不同进程读写会怎么样?
        同一操作对象,数据没有偏移情况下会覆盖。
IPC对象 -- 共享内存 
消息队列 
信号量集     
--------------------------------------------------------------------------
单主机内的进程间通信方式:
传统
   管道 
     有名管道
     无名管道 
   信号    
IPC对象
   共享内存   //通信效率最高的 
   (*)消息队列
   (*)信号量集 
--------------------------------------------------------------------------
进程通信方式:
  不同主机间    //网络通信 
  
 

实现网络通信
1.物理层面 有一个 信息通路  
  有线 
  无线 
     5G
     4G 
     星链 
2.软件层面(逻辑层面) 也需要 一个通路 
   
TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信(即数
据无误、数据无丢失、数据无失序、数据无重复到达的通信)

* 适用情况:
1. 适合于对传输质量要求较高,以及传输大量数据
的通信。
2. 在需要可靠数据传输的场合,通常使用TCP协议
3. QQ等即时通讯软件的用户登录账户管理相关
的功能通常采用TCP协议

tcp协议特点:
1. 面向连接   //类似打电话通话之前 ,必须先打通 
2. 可靠传输   //保证数据准确可靠 (tcp协议机制 里面的功能 )
3. 面向字节流程

UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。
在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。

* 适用情况:
1. 发送小尺寸数据(如对DNS服务器进行IP地址查询时)
2. 在接收到数据,给出应答较困难的网络中使用UDP。(如:无
线网络)
3. 适合于广播/组播式通信中。
4. MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通
讯通常采用UDP协议
5. 流媒体、VOD、VoIP、IPTV等网络多媒体服务中通常采用UDP
方式进行实时数据传输

UDP特点:    //广播 
1.不可靠 
2.无连接 
3.数据报  
-----------------------------------------------------------------------------------
编程:
  编程模型 
     c/s    client server    客户端,服务器模型     --- 专用客户端 
     b/s    browser server   浏览器,服务器模型     --- 通用的客户端 
     p2p    peer to peer     点对点传输 
     
     

基于UDP c/s通信模型:
//client ---客户端 --- 角色  --- 主动的角色  
socket    //1.一种特殊的文件 --- 专门用于网络通信(不同主机间的进程)
          //2.socket 编程接口  --- socket 函数 
          //提供了一个可以访问 操作系统 网络功能的接口 
          
sendto //发数据 
... 


//server --- 服务器端 --角色 --- 被动的角色  
socket 
recvfrom    //接收数据 
...

//socket 

 int socket(int domain, int type, int protocol);
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>

int socket(int domain, int type, int protocol);
功能:程序向内核提出创建一个基于内存的套接字描述符    
参数:   
      //domain --域 (范围) ---socket 用于什么范围的通信
      //           ipv4 
     //               ipv6 
      domain  地址族,PF_INET == AF_INET ==>互联网程序
                      PF_UNIX == AF_UNIX ==>单机程序
      type    套接字类型:
                SOCK_STREAM  流式套接字 ===》TCP   
              SOCK_DGRAM   用户数据报套接字===>UDP
              //SOCK_RAW     原始套接字  ===》IP
      protocol 协议 ==》0 表示自动适应应用层协议。

返回值:

        成功 返回申请的套接字文件描述符 
        失败  -1
        
      
    ssize_t sendto(    int sockfd,  //用于通信的socket对应的fd
                  const void *buf,  //表示要发送的数据所在的一块空间 
                       size_t len,  //表示发送的字节数 
                        int flags,  //0  --- 默认  
 const struct sockaddr *dest_addr,  //表示 要发送到的 地址 (网络地址 ip+端口号 ) 
                socklen_t addrlen   //表示dest_addr 这个参数的长度 
                );
      
      返回值:
          成功  发送出去的字节的数 
          失败  -1 
          
          
             struct sockaddr_in {
               sa_family_t    sin_family; /* address family: AF_INET */
               in_port_t      sin_port;   /* port in network byte order */
               struct in_addr sin_addr;   /* internet address IP */
           };

           /* Internet address. */
           struct in_addr {
               uint32_t       s_addr;     /* address in network byte order */
           };

 
          
         
          
端口号:
    端口号:  16位数值(unsigned short ) //0~65535 (65536个数)
       //标示一个进程
      TCP和 UDP 的端口号是独立的
  端口号:
    (1) 
       作用:唯一的标识一个进程
       每一个应用程序进程有一个端口号,
       通讯时区分数据包属于哪个应用程序进程

     (2) 分类
      
      端口号一般由IANA (Internet Assigned NumbersAuthority) 管理
   众所周知端口:
                  1~1023(1~255之间为众所周知端口,256~1023端口通常由UNIX系统占用)
                  知名端口号(已经分配给标准应用服务软件) 
                  如: 
                  http协议用到的端口号 80 
    已登记端口:  
                  1024~49151
                  注册端口号(非标准应用服务软件的软件可以申请的端口号范围)
    动态或私有端口://50000 以上的端口号 
                  49152~65535 动态分配的端口号(系统动态分配给应用程序使用的)

   (3) 长度
    2字节(16bit) 
    
    leetcode //力扣 
    
    
    
            00 12
    数字转换函数:
    #include <arpa/inet.h>
    1236234687
    主机转网络:
                uint32_t htonl(uint32_t hostlong);
    ipv4 192.168.0.1 1~65535
                uint16_t htons(uint16_t hostshort);
    网络转主机:host to net 
                net to host 
                uint32_t ntohl(uint32_t netlong);
                uint16_t ntohs(uint16_t netshort);


    htonl --- h(host) to n(network) l (long)  //32位的数据
       htons --- h(host) to n(network) s (short) //16位的数据 
    
    ntohl 
    ntohs --- n(network) to h(host)  s (short) 
    
    字符串转换函数:
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>

    主机转网络:
    in_addr_t inet_addr(const char *cp);
    inet_addr("192.168.1.20");
    cli.sin_addr
    网络转主机:char *inet_ntoa(struct in_addr in); //a -- ascii 

                

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快9月了刚结束基础,武忠祥强化vs张宇18讲应该如何选择?

快9月了&#xff0c;最近有一部分同学刚结束基础&#xff0c;在后台提问&#xff1a;强化到底该学武忠祥还是张宇18讲&#xff1f;其实这个问题&#xff0c;如果你是6月份开始强化&#xff0c;很好回答&#xff0c;但是现在已经快9月份了&#xff0c;很多同学都开始做真题了&am…

代码随想录 刷题记录-16 贪心算法(1)贪心理论基础及习题

一、理论基础 什么是贪心 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 贪心的套路&#xff08;什么时候用贪心&#xff09; 贪心算法并没有固定的套路。 所以唯一的难点就是如何通过局部最优&#xff0c;推出整体最优。 靠自己手动模拟&#xff0c…

深度学习 回归问题

1. 梯度下降算法 深度学习中, 梯度下降算法是是一种很重要的算法. 梯度下降算法与求极值的方法非常类似, 其核心思想是求解 x ′ x x′, 使得 x ′ x x′ 在取 x ⋆ x^{\star} x⋆ 时, 可以使得 l o s s 函数 loss函数 loss函数 的值最小. 其中, 在求解 x ′ x x′ 的过…

罗德与施瓦茨RS、UPV 音频分析仪 250KHZ 双通道分析仪UPL

罗德与施瓦茨 UPV 音频分析仪的规格包括&#xff1a; 模拟 双通道分析仪&#xff1a;带宽高达 250 kHz 生成正弦波信号&#xff1a;单通道最高 185 kHz&#xff08;需要 B1&#xff09;和双通道最高 80 kHz FFT本底噪声&#xff1a;< -140dB 固有频率响应&#xff08;20 …

链动 2+1 模式小程序 AI 智能名片商城源码培训邀约策略研究

摘要&#xff1a;本文深入剖析链动 21 模式小程序 AI 智能名片商城源码的培训邀约策略&#xff0c;从该源码的价值出发&#xff0c;阐述邀约的重要性&#xff0c;并详细介绍具体的邀约策略&#xff0c;旨在为相关培训活动提供切实可行的指导&#xff0c;提高邀约成功率&#xf…

前端如何快速切换node版本:nvm

安装之前最好卸载计算机已经安装的node&#xff08;通过Windows菜单找到Node.js的卸载程序&#xff0c;运行卸载程序&#xff09;。下载nvm安装包&#xff1a;nvm安装地址。安装nvm&#xff0c;选择nvm安装根路径指定nodejs的安装路径打开命令行&#xff0c;输入nvm -v 可查看版…

Object.create的原型继承

● 首先我们来从这种方法来创建一个和之前一样计算年龄的方法 const PersonProto {cacleAge() {console.log(2038 - birthYear);} };const zhangsan Object.create(PersonProto); console.log(zhangsan);● 发现确实可以实现原型继承的特性 const PersonProto {cacleAge()…

odoo17 group col 属性

odoo17 group col 属性 以前版本&#xff0c;col4,在17中不能用了&#xff0c;或者方法变了 <record id"hetong.addfj_wizard" model"ir.ui.view"><field name"name">合同附件</field><field name"model">het…

免费的大模型插件llm.nvim

llm.nvim&#xff08;https://github.com/StubbornVegeta/llm.nvim&#xff09;是一款基于cloudflare的免费大模型插件&#xff0c;你可以像使用ChatGPT一样和它进行对话 在使用这款插件之前&#xff0c;你需要注册cloudflare&#xff0c;获取你的account和API key。你可以在这…

RCE - - 无字母数字远程命令执行

题目源码 <?php if(isset($_GET[code])){$code $_GET[code];if(strlen($code)>35){die("Long.");}if(preg_match("/[A-Za-z0-9_$]/",$code)){die("NO.");}eval($code); }else{highlight_file(__FILE__); } 分析 这道题 code 接 get 传…

【Qt】常用控件QProgressBar

常用控件QProgressBar 使用QProgressBar表示一个进度条&#xff01;&#xff01;&#xff01; QProgressBar的核心属性 属性说明 minimum 进度条最⼩值 maximum 进度条最⼤值 value 进度条当前值 alignment ⽂本在进度条中的对⻬⽅式. Qt::AlignLeft : 左对⻬Qt::Alig…

AJAX(4)——XMLHttpRequest

XMLHttpRequest 定义&#xff1a;XMLHttpRequest(XHR)对象用于与服务器交互。通过XMLHttpRequest可以在不刷新页面的情况下请求特定URL&#xff0c;获取数据。这允许网页在不影响用于操作的情况下&#xff0c;更新页面的局部内容。XMLHttpRequest在AJAX编程中被大量使用 关系…

第6章 B+树索引

目录 6.1 没有索引的查找 6.1.1 在一个页中的查找 6.1.2 在很多页中查找 6.2 索引 6.2.1 一个简单的索引方案 6.2.2 InnoDB中的索引方案 6.2.2.1 聚簇索引 6.2.2.2 二级索引 6.2.2.3 联合索引 6.2.3 InnoDB的B树索引的注意事项 6.2.3.1 根页面万年不动窝 6.2.3.2 内节…

MYSQL————数据库的约束

1.约束类型 1.not null&#xff1a;指示某列不能存储null值 2.unique&#xff1a;保证某列的每行必须有唯一值 3.default&#xff1a;规定没有给列赋值时的默认值 4.primary key&#xff1a;not null和unique的结合。确保某列&#xff08;或两个或多个列的结合&#xff09;有唯…

qtcreator的vim模式下commit快捷键ctrl+g,ctrl+c没有反应的问题

首先开启vim后&#xff0c;CtrlG&#xff0c;CtrlC无法用 解决&#xff1a; 工具 -> 选项->FakeVim 转到Ex Command Mapping 搜索Commit 底栏Regular expression 输入commit &#xff08;理论上可以是随意的单词&#xff09; 设置好后&#xff0c;以后要运行&#x…

vue+uniapp

#vue支持的语法&#xff0c;基本上可以做uniapp中所使用&#xff08;指绝大部分&#xff09; #知识点&#xff1a;插值表达式&#xff0c;响应式&#xff0c;指令&#xff0c;事件&#xff0c;指令修饰符 #拥有一些案例&#xff0c;补充&#xff0c;以及说明了如何在vscode运…

如何在 Android 智能手机上恢复已删除的图片

面对现实&#xff0c;从手机图库中丢失照片总是令人不安的&#xff0c;无论您是无意中删除了它们&#xff0c;还是甚至出于冲动而生气。但是&#xff0c;我们在这里告诉您&#xff0c;与大多数人的看法相反&#xff0c;从画廊中删除图像并不会使它们不可挽回地丢失。以下是一些…

【MySQL进阶之路】内外链接

目录 内连接 外连接 左外连接 右外连接 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选 select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件&#xff1b; 外连接 外连接分为左外连接和…

【Java】—— 数组元素的查找:顺序查找与二分查找

目录 1、顺序查找 2、二分查找 1、顺序查找 在Java编程中&#xff0c;我们经常需要查找数组中某个元素的下标。有时&#xff0c;我们需要找到该元素第一次出现的位置&#xff0c;而有时则需要找到最后一次出现的位置。在本文中&#xff0c;我们将重点介绍如何查找元素第一次出…

AI依赖的隐患:技术能力退化、安全风险与社会不平等的未来

现代科技的浪潮中&#xff0c;ChatGPT等人工智能工具已经成为我们工作和生活的得力助手。然而&#xff0c;当这种便利变成了依赖&#xff0c;潜在的风险开始显现。过度依赖AI不仅可能导致技术能力的严重退化&#xff0c;还可能加剧信息安全问题和社会不平等。让我们深度剖析这三…