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

C++学习之服务器EPOLL模型、处理客户端请求、向客户端回复数、向客户端发送文件

目录

1.启动epoll模型

2.和客户端建立新连接

3.接受客户端Http请求数据

4.代码回顾从接受的数据中读出请求行

5.请求行解析

6.正则表达式以及匹配

7.解析请求行以及后续处理

8.对path处理说明

9.如何回复响应数据

10.对文件对应content-type如何查询

11.服务器处理流程梳理

12.和客户端断开连接处理

13.http请求处理流程回顾

14.发送状态行和响应头

15.根据文件获取content-type和发送文件

16.程序调试和访问文件测试


1.启动epoll模型

需求:
    客户端: - 浏览器
        通IP和端口访问服务器上的某个目录或者文件
        - 访问目录:
            // 192.168.1.100:8888 这个服务器提供了一个资源目录, 里边有子目录hello/world
            - 192.168.1.100:8888/hello/world/
        - 访问文件:
            //192.168.1.100 这个服务器提供了一个资源目录,里边有子目录hello, 这里边有文件 a.html
            192.168.1.100:8888/hello/a.html
    服务器: - C语言
        - 客户端的是浏览器: 使用的协议必须是http
        - 服务器提供什么功能?
            - 接受多客户端的连接
            - 应用程层使用http, 传输层协议tcp
                - 基于epoll写 / 基于libev

2.和客户端建立新连接

- 在epoll中
                - 接受新连接 -> 客户端(浏览器)
                - 通信
                    - 接收浏览器发送过来 http 请求
                        - 浏览器只给服务器发送get请求
                        - 判断是不是get请求
                    - 判断客户端访问的是不是服务器的某个资源目录
                        - 需要将这个目录中的所有的文件信息发送给浏览器
                            - 回复数据的时候, 需要使用http响应消息对回复的数据进行包装
                            - 要保证的数据是什么格式?
                                - 回复一个动态网页
                                    - 是一个列表 -><table>
                    - 判断客户端访问的是不是服务器资源目录中的某个文件
                        - 服务器需要将这个文件发送给浏览器
                            - 回复数据的时候, 需要使用http响应消息对回复的数据进行包装
                

3.接受客户端Http请求数据

- ## sscanf函数

  ```c
  // 函数原型
  // 将参数str的字符串根据参数format字符串来转换并格式化数据,转换后的结果存于对应的参数内。
  sscanf(const char *str, const char *format, ...)。
  
  具体功能如下:
  (1)根据格式从字符串中提取数据。如从字符串中取出整数、浮点数和字符串等。
  (2)取指定长度的字符串
  (3)取到指定字符为止的字符串
  (4)取仅包含指定字符集的字符串
  (5)取到指定字符集为止的字符串
  
  sscanf可以支持格式字符%[]:
  
  (1)-: 表示范围,如:%[1-9]表示只读取1-9这几个数字 %[a-z]表示只读取a-z小写字母,类似地 %[A-Z]只读取大写字母
  (2)^: 表示不取,如:%[^1]表示读取除'1'以外的所有字符 %[^/]表示除/以外的所有字符
  (3),: 范围可以用","相连接 如%[1-9,a-z]表示同时取1-9数字和a-z小写字母 
  (4)原则:从第一个在指定范围内的数字开始读取,到第一个不在范围内的数字结束%s 可以看成%[] 的一个特例 %[^ ](注意^后面有一个空格!)
  ```

4.代码回顾从接受的数据中读出请求行

  ```c
  const char *s = "http://www.baidu.com:1234";
  char protocol[32] = { 0 };
  char host[128] = { 0 };
  char port[8] = { 0 };
  sscanf(s,"%[^:]://%[^:]:%[1-9]",protocol,host,port);
  
  printf("protocol: %s\n",protocol);
  printf("host: %s\n",host);
  printf("port: %s\n",port);
  
  ///
  sscanf("123456 abcdedf", "%[^ ]", buf);
  printf("%s\n", buf);
  结果为:123456
  ///
  sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);
  printf("%s\n", buf);
  结果为:123456abcdedf
  ///
  sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);
  printf("%s\n", buf);
  结果为:123456abcdedf
  

5.请求行解析

 ## scandir函数

  ```c
  // 头文件
  #include <dirent.h> 
  //函数定义
  /*
      函数scandir扫描dir目录下以及dir子目录下满足filter过滤模式的文件,返回的结果是compare函数经过排 
      序的,并保存在 namelist中。注意namelist是通过malloc动态分配内存的,所以在使用时要注意释放内存。
      alphasort和versionsort 是使用到的两种排序的函数。 
      当函数成功执行时返回找到匹配模式文件的个数,如果失败将返回-1。
  */
  int scandir(const char *dir,struct dirent **namelist,int (*filter)(const void *b),
                    int (* compare)(const struct dirent **, const struct dirent **));
  int alphasort(const void *a, const void *b);
  int versionsort(const void *a, const void *b);
  ```

6.正则表达式以及匹配

7.解析请求行以及后续处理

> 超文本标记语言(**H**yper **T**ext **M**arkup **L**anguage),标准通用标记语言下的一个应用。HTML 不是一种编程语言,而是一种标记语言 (markup language),是网页制作所必备的。
>
> 超文本就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。
>
> 超文本标记语言的结构包括**“**头”部分(英语:Head)、和“主体”部分(英语:Body),其中“头”部提供关于网页的信息,“主体”部分提供网页的具体内容。

- html 特点

  - 语法非常简洁、比较松散,以相应的英语单词关键字进行组合
    - 有很多标签, 不同标签表达的意义不同, 每个标签的功能都是固定不变的
    - 不按照标准格式写网页, 也可以被解析
  - html标签不区分大小写
  - 大多数标签是成对出现的, 有开始, 有结束
    - <html></html>
    - 特殊的单标签: <img>  <hr> <br>
  - 成对的标签
  - 不成对出现的称之为短标签

- html文件命名

  - `xxx.html`
  - `xxx.htm`

8.对path处理说明

- html文件命名

  - `xxx.html`
  - `xxx.htm`

- 注释

  ```html
  <!-- 这是一个注释 -->
  ```

- 结构

  ```html
  <html>    <!-- 根标签, 代表网页的开始 -->
      <head>
          <!-- tab页的标题, 和网页的一些属性设置 -->
          <title>握手标题</title>
      </head>
      <body>
          <!-- 在网页中显示的内容 -->
      </body>
  </html>
  ```

9.如何回复响应数据

## 1.2 文字和标题标签

```html
<!--  标题标签 , h1最大的, h6最小的 -->
<h1></h1>
<h2></h2>
<h3></h3>
......
<h6></h6>

<!--  文字 , 习惯上将属性的值放到单引号, 或者双引号中 -->
<font color="blue" size="5">hello,world</font>
属性: 
    color: 文字颜色
        □ 表示方式:
            ® 英文单词: red green blue......
            ® 使用16进制的形式表示颜色: #ffffff
    
    size: 文字大小
        □  范围 1 -- 7
            ® 1最小, 7最大    
<!-- 段落 自动换行 -->
<p></p>

<!-- 换行 单标签, 末尾有没有/都可以 -->
<br/>  or <br>

<!-- 水平线 单标签, 末尾有没有/都可以 -->
<hr/>  or <hr>

<!--  文本格式  -->
加粗:
    <strong></strong> 
    <b></b> 

文本倾斜标签 
    <em></em> 
    <i></i> 

删除线标签 
    <del></del> 
    <s></s> 

下划线标签
    <ins></ins> 
    <u></u> 
```

10.对文件对应content-type如何查询

 ```http
  POST / HTTP/1.1
  Host: 192.168.1.8:6789
  Connection: keep-alive
  Content-Length: 98
  Cache-Control: max-age=0
  Upgrade-Insecure-Requests: 1
  Origin: null
  Content-Type: application/x-www-form-urlencoded
  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
  Accept-Encoding: gzip, deflate
  Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
  
  username=subwen%40qq.com&phone=1111111&email=sub%40qq.com&date=2020-01-01&sex=male&class=1&rule=on

11.服务器处理流程梳理

第 2-9 行: 响应头(消息报头)
    - Content-Type: 服务器给客户端回复的数据块的格式 == http响应第四部分的数据块格式
        - text/plain; ==> 纯文本
        - charset=iso-8859-1 ==> 数据的字符编码
            - iso-8859-1 ==> 不支持中文
            - utf8: 支持中文
    - Content-Length: 服务器给客户端回复的数据块的长度 == http响应第四部分的数据块字节数
        - 对应的value值必须是正确的数值
        - 如果不知道数据块的字节数, 可以指定-1
    
第 11-16 行: 服务器给客户端回复的响应数据

12.和客户端断开连接处理

1. http状态码

   > 状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
   >
   > - 1xx:指示信息--表示请求已接收,继续处理
   > - 2xx:成功--表示请求已被成功接收、理解、接受
   > - 3xx:重定向--要完成请求必须进行更进一步的操作
   > - 4xx:客户端错误--请求有语法错误或请求无法实现
   > - 5xx:服务器端错误--服务器未能实现合法的请求

   > 常见状态码:
   >
   > - 200 OK                       客户端请求成功
   > - 400 Bad Request       客户端请求有语法错误,不能被服务器所理解
   > - 401 Unauthorized     请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
   > - 403 Forbidden            服务器收到请求,但是拒绝提供服务
   > - 404 Not Found           请求资源不存在,eg:输入了错误的URL
   > - 500 Internal Server Error     服务器发生不可预期的错误
   > - 503 Server Unavailable        服务器当前不能处理客户端的请求,一段时间后可能恢复正常

13.http请求处理流程回顾

```c
/*
客户端: 浏览器
    - 通过浏览器访问服务器:
        - 访问方式: 服务器的IP地址:端口
    - 应用层协议使用: http, 数据需要在浏览器端使用该协议进行包装
    - 响应消息的处理也是浏览器完成的 => 程序猿不需要管
    - 客户端通过url访问服务器资源
        - 客户端访问的路径:
        1. http://192.168.1.100:8989/  或者  http://192.168.1.100:8989
            - 访问服务器提供的资源目录的根目录
                - 并不是服务器上的 / 目录  
                - 这个目录根据服务器端的描述应该是: /home/robin/luffy 目录
            - 请求行:
                GET / HTTP/1.1
        2. http://192.168.1.100:8989/a.txt
            - 端口后边的/代表服务器的资源根目录
                - 在服务器端路径: /home/robin/luffy 目录
            - 客户端要访问服务器上的a.txt的文件
            - a.txt 这个文件在服务器提供的资源目录中
                - 服务器上的路径: /home/robin/luffy/a.txt
            - 请求行:
                GET /a.txt HTTP/1.1
        3. http://192.168.1.100:8989/hello/a.txt
            - http://192.168.1.100:8989: 服务器地址
            - /hello/a.txt
                - /: 服务器端提供的资源根目录
                - hello: 资源根目录的子目录
                - a.txt: 在hello目录中
            - 请求行:
                GET /hello/a.txt HTTP/1.1
        4. http://192.168.1.100:8989/hello/wrold/
            - http://192.168.1.100:8989: 服务器地址
            - /hello/world/
                - /: 服务器端提供的资源根目录
                - hello: 资源根目录的子目录
                - world/: 如果world后边有/代表这是一个目录, 这个目录在hello目录中
            - 请求行:
                GET /hello/world/ HTTP/1.1
*/

14.发送状态行和响应头

// 服务器端处理的伪代码
int main()
{
    // 1. 创建监听的fd
    socket();
    // 2. 绑定
    bind();
    // 3. 设置监听
    listen();
    
    // 4. 创建epoll模型
    epoll_create();
    epoll_ctl();
    // 5. 检测
    while(1)
    {
        epoll_wait();
        // 监听的文件描述符
        accept();
        // 通信的
        // 接收数据->http请求消息
        recvAndParseHttp();
    }
    return 0;
}

15.根据文件获取content-type和发送文件

```http
HTTP/1.1 200 Ok
Server: micro_httpd
Date: Fri, 18 Jul 2014 14:34:26 GMT
Content-Type: text/plain; charset=iso-8859-1 (必选项) 
Content-Length: 32  
Location: https://www.biadu.com
Content-Language: zh-CN
Last-Modified: Fri, 18 Jul 2014 08:36:36 GMT
Connection: close

#include <stdio.h>
int main(void)
{
    printf("hello world!\n");
    return 0;
}
```

16.程序调试和访问文件测试

相关文章:

C++学习之服务器EPOLL模型、处理客户端请求、向客户端回复数、向客户端发送文件

目录 1.启动epoll模型 2.和客户端建立新连接 3.接受客户端Http请求数据 4.代码回顾从接受的数据中读出请求行 5.请求行解析 6.正则表达式以及匹配 7.解析请求行以及后续处理 8.对path处理说明 9.如何回复响应数据 10.对文件对应content-type如何查询 11.服务器处理流…...

Explain的使用

1.使用explain语句去查看分析结果 如explain select * from test1 where id=1;会出现:id selecttype table type possible_keys key key_len ref rows extra各列。 其中, type=const表示通过索引一次就找到了; key=primary的话,表示使用了主键; type=all,表示为全表…...

DDoS防御与流量优化

实训背景 某在线游戏平台遭受频繁DDoS攻击&#xff0c;需部署Linux网关实现以下防护与优化功能&#xff1a; 防御SYN洪水攻击&#xff1a;自动识别并拦截高频SYN请求。连接数限制&#xff1a;限制单个IP的最大并发连接数为100&#xff0c;防止资源耗尽。流量优先级保障&#…...

文件上传漏洞原理学习

什么是文件上传漏洞 文件上传漏洞是指用户上传了一个可执行的脚本文件&#xff0c;并通过此脚本文件获得了执行服务器端命令的能力。“文件上传” 本身没有问题&#xff0c;有问题的是文件上传后&#xff0c;服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全&#…...

005.Gitlab CICD变量使用

文章目录 变量介绍预定义变量项目信息类版本控制类流水线执行类runner环境类作业执行类容器注册类其他类别 自定义变量 变量使用预定义变量使用创建流水线提交流水作业 自定义变量使用创建流水线提交流水作业 图形UI创建变量UI自定义变量创建流水线提交流水作业 变量介绍 预定…...

即时通讯软件BeeWorks,企业如何实现细粒度的权限控制?

BeeWorks作为一款专为企业设计的即时通讯平台&#xff0c;高度重视用户隐私安全&#xff0c;采取了多种措施来保障数据的保密性、完整性和可用性。 首先&#xff0c;BeeWorks采用私有化部署模式&#xff0c;企业可以将服务器架设在自己的网络环境中&#xff0c;所有通讯数据&a…...

高可用架构:Keepalived、Nginx与Docker深度解析

本文深入解析了Keepalived技术&#xff0c;阐述其基于VRRP协议实现高可用的核心功能&#xff0c;包括虚拟路由器冗余、健康检查、负载均衡集成及脚本执行与通知。同时&#xff0c;设计了Nginx高可用方案&#xff0c;涵盖双机主从、主主及多点集群模式&#xff0c;分析其优缺点。…...

127.0.0.1本地环回地址(Loopback Address)

127.0.0.1 是计算机网络中的一个特殊IPv4地址&#xff0c;称为本地环回地址&#xff08;Loopback Address&#xff09;&#xff0c;主要用于以下用途&#xff1a; 1. 基本定义 本地主机&#xff08;Localhost&#xff09;&#xff1a;该地址始终指向当前正在使用的计算机本身&a…...

Windows Terminal 美化增强攻略 2.0:打造个性化高效开发环境(快捷键介绍、编程语言环境、starship美化、高效命令行工具)

前言&#xff1a;从 1.0 到 2.0&#xff0c;终端美化进阶之旅 去年&#xff0c;我曾在文章《使用 oh-my-posh 和 clink 打造个性化 PowerShell 和 CMD》中分享了 Windows 终端的美化方案。那时&#xff0c;我选择了 oh-my-posh 作为核心工具&#xff0c;虽然效果不错&#xff…...

网络出故障时,四大表(MAC表、ARP表、路由表、转发表)怎么查?看看这套排查顺序

网络出故障时&#xff0c;四大表 (MAC表、ARP表、路由表、转发表) 怎么查 说正题之前&#xff0c;我们先来假设一个场景&#xff1a; 场景假设&#xff1a; 一台华为设备突然上不了网&#xff0c;或者访问某个 IP 不通。 你会怎么排查&#xff1f; 别慌&#xff0c;兄弟&a…...

第七天 开始Unity Shader的学习之Unity中的基础光照之高光反射光照模型

Unity Shader的学习笔记 第七天 开始Unity Shader的学习之Unity中的基础光照之高光反射光照模型 文章目录 Unity Shader的学习笔记前言一、高光反射光照模型1.逐顶点光照① Properties② 顶点着色器中计算高光specular③ Fallback效果展示 2.逐像素光照① 片元着色器输出结构体…...

《从 MyBatis-Plus 到 Elasticsearch:一个后端的性能优化踩坑实录》

​ 最近接手了一个老项目&#xff0c;单表查询用 MyBatis-Plus 写得飞起&#xff0c;但一到​​多表关联模糊搜索​​就卡成 PPT。痛定思痛&#xff0c;决定引入 Elasticsearch 优化查询性能&#xff0c;结果踩坑无数……记录下这次​​从 ORM 到搜索引擎​​的升级历程&#…...

docker 常用指令整理

以下是Docker常用操作指令的整理&#xff0c;分为镜像管理、容器操作、网络配置、数据卷管理、Docker Compose及系统维护等部分&#xff1a; 一、镜像管理 拉取镜像 docker pull [镜像名]:[标签] # 默认标签为latest # 示例&#xff1a;拉取Ubuntu 20.04镜像 docker pull ubun…...

密码格式校验c#和js两种

if (!IsValidPassword(xinmima)) { //在前端校验过了,这里不需要 ClientScript.RegisterStartupScript(GetType(), "", "alert(新密码必须至少8位,且至少包含大写字母、小写字母、数字、特殊符号中的3种)", true); } /// <summary> …...

线程控制

POSIX线程库 与线程有关的函数构成了⼀个完整的系列&#xff0c;绝⼤多数函数的名字都是以“pthread_”打头的要使⽤这些函数库&#xff0c;要通过引入头文件<pthread.h>链接这些线程函数库时要使⽤编译器命令的“-lpthread”选项 eg: g -o $ $^ -lpthread这个pthread库…...

WebView 与 JavaScript 的交互

从技术深度、安全意识 和 实战经验来介绍。以下是分层次的回答策略&#xff0c;从基础到高级逐步深入&#xff1a; 1. 基础实现 回答要点&#xff1a; "Android 和 JavaScript 的交互主要通过 WebView 的两种方式实现&#xff1a; Android 调用 JS&#xff1a; kotlin we…...

解决word中公式大小不一问题

文章目录 前言一、初见端倪二、解决方法三、题外话 前言 记录一下在 word 中使用 mathtype 编辑公式时出现的公式字体大小不一的问题的解决方法。 一、初见端倪 最近在 word 中使用 mathtype 进行公式编辑&#xff0c;刚开始编辑的公式并没有什么问题&#xff0c;过了几天后再…...

Haply与PickNik合作:Inverse3三轴力反馈控制器集成MoveIt Pro,提升机器人操作精度

Haply Robotics与PickNik Robotics合作&#xff0c;将Inverse3力反馈控制器集成到MoveIt Pro平台&#xff0c;优化人机交互&#xff0c;提升机器人操作精度。实时力反馈技术使操作者感知机器人与环境的交互力&#xff0c;增强远程操作的精确度和灵敏度&#xff0c;推动机器人技…...

【Linux笔记】文件的传输(scp、rsync、归档、压缩)

一、sshd 1、概念 在Linux系统中&#xff0c;文件传输常依赖于SSH协议&#xff08;Secure Shell&#xff09;&#xff0c;而sshd&#xff08;OpenSSH Daemon&#xff09;是负责处理SSH连接的后台服务程序。通过sshd&#xff0c;用户可以在加密的通道中进行安全的远程登录、命…...

单位矩阵的特点

《单位矩阵的特性与重要性质》 单位矩阵是一种特殊的方阵&#xff0c;具有以下特点&#xff1a; 主对角线元素全为 1&#xff1a;单位矩阵 I n I_n In​是一个 n n n\times n nn的方阵&#xff0c;其主对角线&#xff08;从左上角到右下角的对角线&#xff09;上的元素均为 …...

AI处理漫画转视频

AI处理漫画转视频 第一步 从漫画PDF文件读取图片 第二部 图片信息剪裁 第三步 OCR识别处理图片&#xff0c;获取漫画对应的文本信息 第四步 运用阿里云通义大模型千文处理提取的文本信息更符合文本语言 第五步 运用FishVideo大模型将文本信息转变为对应的语音 第六步 图片转视…...

三维空间中的离散曲线段匹配方法

基于离散 F r e ˊ c h e t Fr\{e}chet Freˊchet距离实现工程中的三维曲线段匹配 在自动驾驶系统中, 准确匹配相邻车道线是实现安全导航, 变道决策和路径规划的核心任务. 由于道路网络存在交叉口, 弯道, 多车道并行等复杂场景, 如何衡量目标车道曲线与其他候选车道线的空间关…...

HTML的Canvas元素

<Canvas>元素 <Canvas>元素是HTML5引入的一个强大的绘图元素&#xff0c;它允许通过 JavaScript 在网页上动态绘制图形、动画和交互式内容。需要注意的是&#xff0c;<Canvas>元素只是图形的一个容器&#xff0c;绘制图形必须使用Javascript。 空画布 <…...

Django学习记录-2-数据库

Django学习记录-2-数据库 文章目录 Django学习记录-2-数据库参考贴连接数据库后台查看数据库后台改为中文 table增删改查Python使用hash保持一致 虽然网上教程都很多&#xff0c;但是感觉自己记录一下才属于自己&#xff0c;之后想找也方面一点&#xff0c;文采不佳看的不爽可绕…...

qq邮箱群发程序

1.界面设计 1.1 环境配置 在外部工具位置进行配置 1.2 UI界面设计 1.2.1 进入QT的UI设计界面 在pycharm中按顺序点击&#xff0c;进入UI编辑界面&#xff1a; 点击第三步后进入QT的UI设计界面&#xff0c;通过点击按钮进行界面设计&#xff0c;设计后进行保存到当前Pycharm…...

spring mvc 中 RestTemplate 全面详解及示例

RestTemplate 全面详解及示例 1. RestTemplate 简介 定义&#xff1a;Spring 提供的同步 HTTP 客户端&#xff0c;支持多种 HTTP 方法&#xff08;GET/POST/PUT/DELETE 等&#xff09;&#xff0c;用于调用 RESTful API。核心特性&#xff1a; 支持请求头、请求体、URI 参数的…...

openEuler-22.03-LTS-SP3 编译安装 Greenplum-db 6.20.0

openEuler-22.03-LTS-SP3 编译安装 Greenplum-db 6.20.0 1、配置 yum 华为源2、安装依赖3、源码安装 openssl 1.0.1u3.1、openssl 1.1.1 降级到 openssl 1.0.1 4、源码安装 python 2.75、使用 pip3 安装 Python 相关依赖6、编译安装 Greenplum-db 6.20.06.1、修改配置6.2、基于…...

天锐蓝盾多模式加密技术,构筑企业数据安全堡垒

一旦企业发生数据泄露&#xff0c;将遭受严重的经济损失&#xff0c;声誉也会一落千丈&#xff0c;甚至可能在激烈的竞争中陷入绝境。那么&#xff0c;企业究竟该如何守护敏感数据&#xff0c;筑牢数据安全的 “护城河” 呢&#xff1f;天锐蓝盾数据泄露防护系统给出了全面且专…...

可编辑37页PPT | 建筑行业DeepSeek日常实操培训

荐言摘要&#xff1a;随着人工智能技术的快速发展&#xff0c;DeepSeek作为一款具有创新性的AI工具&#xff0c;正逐步渗透到建筑行业的各个环节。为帮助建筑行业从业者掌握DeepSeek的核心功能与应用技巧&#xff0c;提升工作效率与决策能力&#xff0c;特推出本次建筑行业Deep…...

C语言指针和函数

文章目录 C语言指针和函数一、指针与函数1.传递指针给函数2.指针函数3.函数指针4.回调函数 二、多级指针三、空指针四、野指针 C语言指针和函数 在C语言的编程领域中&#xff0c;指针是一把强大而又危险的“双刃剑”。它不仅能够直接操作内存&#xff0c;提升程序的运行效率&a…...

左右开弓策略思路

一、策略概述 本策略是一种基于多种技术指标的复杂交易策略&#xff0c;包括自定义指标计算、过滤平滑处理以及交易信号生成。 该策略通过不同的交易平台代码段实现&#xff0c;旨在通过分析历史价格数据来预测未来价格走势&#xff0c;并据此生成交易信号。 二、主要技术指标…...

mapbox基础,加载F4Map二维地图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性二、🍀F4Map 简介2.1 ☘️技术特点2.2 ☘️核…...

doxygen自动生成文档,注释容易错位的补充

开发过程中&#xff0c;为了简化api开发文档的编写工作&#xff0c;我们可以使用doxygen的标注来进行文档注释&#xff0c;最后自动化的生成相关文档&#xff1a; 参考&#xff1a;https://developer.aliyun.com/article/935529 参考&#xff1a;https://blog.csdn.net/qq_3459…...

git操作0409

git init git add. git commit -m "Initial commit" git checkout 7890abc # 切换到旧版本代码&#xff08;只读&#xff09; git checkout master # 切回最新版本 git checkout -b new_branch 789abcd # 或 git checkout -b new_branch HEAD~3 很重点 git reflog …...

电阻的额定功率与额定电压详解

一、基本定义 额定功率&#xff08;Rated Power&#xff09; 定义&#xff1a;电阻在长期安全工作时允许消耗的最大功率&#xff0c;超过此值可能导致过热甚至烧毁。 公式&#xff1a; P I R 或 P V / R &#xff08;I&#xff1a;电流&#xff0c;V&#xff1a;电压&#…...

【后端开发】SpringBoot与Spring MVC

文章目录 创建项目目录介绍Spring MVCservletMVCSpring MVCSpringboot与Spring MVC的区别Spring MVC交互 创建项目 新建一个Springboot项目 对应描述 目录介绍 src/main/java&#xff1a;Java 源代码 src/main/resources&#xff1a;为静态资源或配置⽂件&#xff1a; ----…...

如何禁用 PyCharm 的测试功能

如何禁用 PyCharm 的测试功能&#xff1f; PyCharm 的测试功能默认会自动检测项目中符合命名规则的测试文件&#xff08;如以 test_ 开头的文件&#xff09;并关联测试框架。若需禁用该功能&#xff0c;可通过以下方法操作&#xff1a; 方法一&#xff1a;全局禁用默认测试框架…...

【Spiffo】光速项目:LVGL v9框架下的MIPI简易相机_Part2

简介 本期接上回的工程部署讲一下整个工程的框架逻辑以及相关的模块作用机制&#xff0c;包括mipi抓图像以及后续传递到显示屏的链路逻辑等。 一、核心逻辑 1、如何抓到图像数据并显示 首先能够从摄像头捕获画面并显示是一个相机最起码要能实现的功能。所以先要搞清楚整个链…...

pycharm编译部署智能合约(solcx与web3搭配)

solcx 是一个 python 库,提供了 solidity 编译器的 python 绑定。它使开发者能够直接从 python 中编译 solidity 源代码,生成以太坊智能合约的字节码(Bytecode)和 ABI(Application Binary Interface)。这个库通常用于与 Web3 库配合使用,帮助开发者进行智能合约的部署、…...

微信小程序中的openid的作用

微信小程序中的openid的作用 引言 在当今数字化时代&#xff0c;用户体验成为了产品成功与否的关键因素之一。微信小程序作为连接用户与服务的重要桥梁&#xff0c;在提升用户体验方面发挥着重要作用。其中&#xff0c; openid&#xff08;开放身份标识符&#xff09;是微信小…...

AAAI 2025新研究!大语言模型+MARL=论文新思路?

最新研究显示&#xff0c;多智能体强化学习&#xff08;MARL&#xff09;正迎来一系列技术革新&#xff0c;让AI系统真正具备“群体智能”。同济大学团队提出的动态图通信网络&#xff08;TGCNet&#xff09;&#xff0c;通过Transformer建模智能体间的动态协作关系&#xff0c…...

旅行世界宠物养殖合成游戏源码

旅行世界宠物养殖合成游戏源码&#xff0c;游戏养成类系统&#xff0c;用户能够通过养狗和参加其他活动获取算力&#xff0c;每日任务不断更新&#xff0c;完结即可收取算力&#xff0c;算力能够兑换现金红包。 邀请好友得两级活跃收益提成&#xff0c;徒弟B100.%&#xff0c;徒…...

列表之链表_C

数据结构&#xff08;邓俊辉&#xff09;&#xff1a;列表及相关概念_listnodeposi-CSDN博客 #include <stdio.h> #include <stdlib.h>// 定义Rank类型为int typedef int Rank;// 定义ListNode结构体 typedef struct ListNode {int data;struct ListNode* pred;st…...

图解Java设计模式

1、设计模式面试题 2、设计模式的重要性 3、7大设计原则介绍...

CCF GESP Python编程 四级认证真题 2025年3月

Python 四级 2025 年 03 月 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 D C B C D C A A D B D A C B C 1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 2025年春节有两件轰动全球的事件&#xff0c;一个是DeepSeek横空出世&#xff0c;另一个是…...

2025最新系统 Git 教程(四)

2.6 Git 基础 - 打标签 打标签 像其他版本控制系统&#xff08;VCS&#xff09;一样&#xff0c;Git 可以给仓库历史中的某一个提交打上标签&#xff0c;以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点&#xff08; v1.0 、 v2.0 等等&#xff09;。 在本节中…...

数学知识——欧拉函数

欧拉函数 1 ∼ N 1∼N 1∼N 中与 N N N互质的数的个数被称为欧拉函数&#xff0c;记为 ϕ ( N ) \phi(N) ϕ(N)。 欧拉函数 对于 N p 1 α 1 p 2 α 2 p 3 α 3 . . . p k α k Np_1^{\alpha_1}p_2^{\alpha_2}p_3^{\alpha_3}...p_k^{\alpha_k} Np1α1​​p2α2​​p3α3​​…...

Dify 识别 “subject“ and “intention“ 的提示词

Dify 识别 "subject" and "intention" 的提示词 内容如下&#xff1a; You need to decompose the users input into "subject" and "intention" in order to accurately figure out what the users input language actually is. Not…...

Hi168云平台部署Ansible学习环境

前言 之前发布的文章已经介绍过了在Hi168云平台部署openEuler学习环境&#xff0c;那么既然能部署openEuler了&#xff0c;其他的各类学习环境自然也就可以部署了。 Ansible简介 Ansible 是一个运维自动化工具&#xff0c;可以通过 SSH 协议对远程主机进行管理&#xff0c;对…...

Anacond虚拟环境里安装GPU版本Pytorch

CUDA/cudnn/CUDAToolkit简单区分 pytorch与cuda关系简单介绍 pytorch是一个深度学习的框架&#xff0c;能够调用cuda进行gpu加速。一般来说你的电脑里是有相关cuda的驱动的&#xff08;可用nvidia-smi命令验证&#xff0c;能运行就说明有&#xff0c;不能运行去搜索安装&#…...