网络及ipc内存共享

news2024/11/23 19:28:49

大字符串找小字符串

调试

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/2062053.html

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

相关文章

Java 入门指南:List 接口

Collection 接口提供了一系列用于操作和管理集合的方法&#xff0c;包括添加、删除、查询、遍历等。它是所有集合类的根接口&#xff0c;包括 List、Set、Queue 等。 Collection 接口常见方法 add(E element)&#xff1a;向集合中添加元素。 addAll(Collection col)&#xff1…

打架检测算法在公共安全中的创新应用

在现代社会中&#xff0c;公共场所的安全问题日益受到重视&#xff0c;特别是暴力事件的监控和预防更是各类安防系统的核心需求之一。随着视频监控设备的普及&#xff0c;如何从大量监控数据中实时、高效地识别出潜在的暴力行为&#xff0c;成为亟待解决的难题。传统的视频监控…

怎么对前端的一些按钮做一个权限校验

在一般情况下,我们需要对一些按钮做一个权限校验,来保证只有有权限的用户才能看到 1.创建一个js文件,来写我们的全局方法 我的方法是这样的 import Vue from vue;Vue.mixin({methods:{hasAuth(perm) {var authority this.$store.state.menu.permList;if (authority.indexOf(…

JointJs 在 Vue 中的使用探索(一): Hello JointJS

文章目录 前言根本问题探索过程安装 jointjs测试 joint/core demo 代码jointjs joint/core 前言 最近需要用到 JointJs 做一些东西&#xff0c;但是 官方文档 的 joint/core 跑下来后发现并不太好使&#xff0c;空白一片…&#xff08;这是个误会…&#xff09; 所以开了个贴给…

map与set容器初识:初步运用map与set

前言&#xff1a; 本文主要讲解的时对于map与set容器的初步使用&#xff0c;希望大家对map与set容器不熟悉的看了之后可以快速运用set与map到日常中来。&#xff08;本文适合对vector等基础容器有一定基础的同学&#xff09; 一、set与map容器常见接口 迭代器接口与以往的所…

【hot100篇-python刷题记录】【不同路径】

R5-多维动态规划篇 多维动态规划的核心在于建立多维状态记录表。 本题中&#xff0c;建立dp二维数组表&#xff08;初始化为1&#xff09; dp[i][j]dp[i-1][j]dp[i][j-1] 注意&#xff0c;需要判断是否存在&#xff0c;因为二维数组有边界 第一种处理需要判断边界 第二种&…

go的defer机制

defer的底层机制 为栈操作&#xff0c;栈是一个先进后出的数据结构 func main() {fmt.Println("reciprocal")for i : 0; i < 10; i {defer fmt.Println(i)} }运行结果 reciprocal 9 8 7 6 5 4 3 2 1 0defer拷贝机制 以下已经发生压栈发生值拷贝数据不再会发生变…

【Python机器学习系列】一文教你绘制多分类任务的ROC曲线-宏平均ROC曲线(案例+源码)

这是我的第345篇原创文章。 一、引言 ROC曲线是用于评估二分类模型性能的工具&#xff0c;它展示了模型在不同阈值下的真阳性率与假阳性率之间的关系&#xff0c;但是标准的ROC并不能运用于多分类任务种&#xff0c;于是扩展出了宏平均ROC曲线。 宏平均ROC曲线是多分类问题中…

工业控制常用“对象“数据类型汇总(数据结构篇)

合理巧妙的数据结构会大大简化项目的编程工作量,所以任何项目前期第一步应该是设计巧妙的数据结构、封装对象属性。这样会使我们的编程快捷和高效。这篇博客作为数据类型汇总,会不间断更新。 1、普通电机轴对象 2、普通电机轴对象(详细结构变量) TYPE "udtMotorAxis&q…

机器学习的入门笔记(第十五周)

本周观看了B站up主霹雳吧啦Wz的图像处理的课程&#xff0c; 课程链接&#xff1a;霹雳吧啦Wz的个人空间-霹雳吧啦Wz个人主页-哔哩哔哩视频 下面是本周的所看的课程总结。 利用GoogLeNet进行图像分类 GoogLeNet是由 Google 提出的卷积神经网络架构&#xff0c;于 2014 年在 …

没有用的小技巧之---接入网线,有内网没有外网,但是可以登录微信

打开控制面板&#xff0c;找到网络和Internet 选择Internet选项 点击连接&#xff0c;选择局域网设置 取消勾选代理服务器

JetBrains CLion 2024.2 (macOS, Linux, Windows) - C 和 C++ 跨平台 IDE

JetBrains CLion 2024.2 (macOS, Linux, Windows) - C 和 C 跨平台 IDE JetBrains 跨平台开发者工具 请访问原文链接&#xff1a;https://sysin.org/blog/jetbrains-clion/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Jet…

实战勤务指挥系统解决方案

4. 总体设计方案 方案围绕业务需求、接口需求和安全需求进行设计&#xff0c;包括语音集成、视频图像集成和第三方系统集成&#xff0c;以实现多系统联动和资源共享。 5. 系统特色 系统特色包括高度融合的指挥应用模式、简化的指挥流程、高效的管理机制&#xff0c;以及基于…

《Windows PE》2.1 初识PE文件

Windows PE文件&#xff08;Portable Executable file&#xff09;是一种可执行文件格式&#xff0c;用于Windows操作系统中的可执行程序、动态链接库&#xff08;DLL&#xff09;和驱动程序等。它是一种规范化的文件格式&#xff0c;定义了文件的结构和组织方式&#xff0c;以…

go设计模式———抽象工厂模式

抽象工厂模式概念 抽象工厂模式是一种设计模式&#xff0c;它允许创建一系列相关的对象&#xff0c;而无需指定具体的类。具体来说&#xff0c;抽象工厂定义了用于创建不同产品的接口&#xff0c;但实际的创建工作则由具体的工厂类完成。每个具体工厂负责创建一组相关的产品&am…

谷歌账号停用后申诉了,也收到了谷歌的邮件,如何判断谷歌申诉是否成功,成功了怎么办?被拒绝谷歌账号就废了吗?

似乎是谷歌分工机制的更新&#xff0c;最近谷歌账号“被停用”的情况貌似多了起来&#xff0c;许多朋友在谷歌账号提示活动异常&#xff0c;要输入手机号码恢复账号的时候&#xff0c;无论是否立刻恢复&#xff0c;很快好像就迎来了“您的账号已停用”的结果。或者有一些朋友许…

多元统计分析——基于R语言的单车使用情况可视化分析

注&#xff1a;基于R语言的单车使用情况可视化分析为实验记录&#xff0c;存在不足&#xff0c;自行改进。 一、提出问题&#xff08;要解决或分析的问题&#xff09; 1 、用户对共享单车的使用习惯&#xff0c;环境对共享单车运营带来的影响&#xff1f; 2 、共享单车的租赁…

【北京仁爱堂】痉挛性斜颈的健康指导

痉挛性斜颈是一种肌肉紧张异常症&#xff0c;仅限于颈部肌肉的肌张力障碍。当患者患有痉挛性斜颈&#xff0c;会表现为颈部肌肉间歇性或持续不规则的收缩&#xff0c;因此患者的头颈部会出现扭曲、歪斜、姿势异常等症状&#xff0c;多发于30-40岁左右中年人 一、 痉挛性斜颈的5…

mac和windows上安装nvm管理node版本

NVM 是 node version manager 的缩写&#xff0c;它是一个用来管理电脑上 node 版本的命令行工具&#xff0c;在日常前端开发中是一个跟 node 一样会经常用到的工具&#xff0c;可以很方便的让我们快速切换不同的node版本。 mac 上安装 nvm 1、下载安装 nvm 下载安装可以直…

【机器学习】逻辑回归原理(极大似然估计,逻辑函数Sigmod函数模型详解!!!)

目录 &#x1f354; 逻辑回归应用场景 &#x1f354; 极大似然估计 2.1 为什么要有极大似然估计&#xff1f; 2.2 极大似然估计步骤 2.3 极大似然估计的例子 &#x1f354; Sigmod函数模型 3.1 逻辑斯特函数的由来 3.2 Sigmod函数绘图 3.3 进一步探究-加入线性回归 3…