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

http断点续传

🛑 默认的 http.server(Python 的 SimpleHTTPRequestHandler)在某些版本和实现中并不可靠地支持 HTTP Range 请求(即断点续传)。

尤其在 Python 3.7~3.10 之间的某些版本中,这种支持是不完整或不可预测的。所以,如果你想确定无误地测试 curl 的断点续传功能,推荐你使用支持 Range 的本地 HTTP 服务器。


✅ 替代方案:使用 nginx 作为本地支持断点续传的 HTTP 服务器

步骤如下:

1. 安装 nginx

sudo apt update
sudo apt install nginx -y

2. 将测试文件放入 nginx 的服务目录

sudo cp testfile.bin /var/www/html/

3. 启动 nginx 服务

sudo systemctl start nginx

4. 测试断点续传

打开另一个终端,模拟中断:

curl -O http://localhost/testfile.bin
# 下载一会后 Ctrl+C 中断

然后再次使用 -C - 开启断点续传:

curl -C - -O http://localhost/testfile.bin

你应该能看到:

Resuming download

✅ 验证 nginx 支持断点续传

nginx 默认就支持 Range 请求。你可以用 curl -I 查看响应头:

curl -I http://localhost/testfile.bin

看是否包含:

Accept-Ranges: bytes

✅ 如果坚持使用 Python,可以试试更强的第三方 HTTP 服务:

例如用 http.server 的改进版本(如 aiohttp 或 http.server_with_range)来支持 Range。但这些都没有 nginx 来得快和靠谱。

✅ 总结推荐

方式是否支持断点续传推荐度
python3 -m http.server❌ 不稳定或不支持🚫 不推荐
nginx 本地测试✅ 稳定支持✅ 强烈推荐
python 第三方库可能支持⚠️ 可选,略麻烦

✅ 一、curl 本地是否需要额外依赖?

不需要额外依赖,前提是你已经有:

  • 系统自带或自行安装的 curl(支持 -C 参数的版本)
  • curl 内部已经包含了对 HTTP Range 请求的支持(绝大多数现代版本都支持)

如果你是通过 Ubuntu 官方软件源安装的 curl,它已经包含所有所需功能,无需任何额外依赖。

可选库(如果你要在代码中使用)

如果你想在代码中集成 curl 断点续传功能,比如用 C 或 Python:

编程语言可选库说明
C/C++libcurlcurl 的核心库,支持完整的 HTTP、FTP、Range、上传等操作
Pythonpycurl / requestspycurl 是 libcurl 的 Python 绑定,requests 也可以用 header 模拟续传
Go / Rust / Java标准库中也能实现 Range 下载

✅ 二、服务端是否必须支持?

是的,必须!

断点续传功能依赖的是 HTTP 的 Range 请求头,所以服务端必须满足以下条件:

✅ 服务端必须支持:

  1. 响应 HTTP 请求头中的 Range: bytes=xxxxx-
  2. 返回 Accept-Ranges: bytes 响应头
  3. 允许访问部分内容(HTTP 206 Partial Content)

🔍 如何判断服务端是否支持断点续传?

你可以使用 curl -I 查看返回头部:

curl -I http://example.com/file.zip

如果响应头包含:

Accept-Ranges: bytes

则表示服务器支持断点续传。

✅ 不支持断点续传的典型情况:

类型是否支持 Range原因
Python 原生 http.server❌ 通常不支持不处理 Range 请求头
某些 PHP / Flask 开发框架❌ 取决于实现默认不处理 Range 请求头
Nginx / Apache / Node.js HTTP Server✅ 默认支持适合做测试

✅ 总结

项目是否必须说明
curl 工具 / libcurl✅ 是用于发起带 Range 的请求
额外依赖❌ 否curl 已经集成所有功能
服务端支持 Range 请求✅ 是否则无法续传,只会从头开始
服务端响应 206 Partial Content✅ 是表示从断点处返回数据

好的,以下是 BashPython 两个版本的断点续传检测脚本,可以帮助你判断某个 URL 是否支持断点续传(即是否支持 Range 请求和返回 206 Partial Content)。

✅ 一、Bash 脚本版本(使用 curl

#!/bin/bashURL="$1"if [ -z "$URL" ]; thenecho "用法: $0 <URL>"exit 1
fiecho "正在测试 URL: $URL"# 获取响应头
echo "请求 HEAD..."
curl -sI "$URL" > headers.txt# 检查 Accept-Ranges
if grep -iq "Accept-Ranges: bytes" headers.txt; thenecho "✅ 服务端支持 Accept-Ranges"
elseecho "❌ 服务端不支持 Accept-Ranges"
fi# 发送带 Range 的请求
echo "发送 Range 请求测试是否返回 206 Partial Content..."
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" -H "Range: bytes=0-10" "$URL")if [ "$HTTP_CODE" == "206" ]; thenecho "✅ 服务端正确返回 206 Partial Content(支持断点续传)"
elseecho "❌ 服务端返回 $HTTP_CODE(不支持断点续传)"
fi# 清理临时文件
rm -f headers.txt

✅ 使用方法:

chmod +x check_range.sh
./check_range.sh http://yourserver.com/yourfile.zip

✅ 二、Python 脚本版本(使用 requests

#!/usr/bin/env python3import sys
import requestsif len(sys.argv) != 2:print("用法: python3 check_range.py <URL>")sys.exit(1)url = sys.argv[1]print(f"正在测试 URL: {url}")# 发起 HEAD 请求
head_resp = requests.head(url)# 检查 Accept-Ranges
accept_ranges = head_resp.headers.get("Accept-Ranges", "")
if "bytes" in accept_ranges.lower():print("✅ 服务端支持 Accept-Ranges: bytes")
else:print("❌ 服务端不支持 Accept-Ranges")# 发送带 Range 的 GET 请求
headers = {"Range": "bytes=0-10"}
range_resp = requests.get(url, headers=headers)if range_resp.status_code == 206:print("✅ 服务端返回 206 Partial Content,支持断点续传")
else:print(f"❌ 服务端返回 {range_resp.status_code},不支持断点续传")

✅ 使用方法:

python3 check_range.py http://yourserver.com/yourfile.zip

如果你没有安装 requests,先运行:

pip3 install requests

✅ 输出示例(服务端支持断点续传)

正在测试 URL: http://localhost/testfile.bin
✅ 服务端支持 Accept-Ranges: bytes
✅ 服务端返回 206 Partial Content,支持断点续传

✅ 一、Range 是什么?它和断点续传有什么关系?

📌 HTTP Range 请求头 是实现断点续传的技术基础。

它的作用是告诉服务器:

“我只需要从某个字节开始的一部分数据,不需要整个文件。”

比如:

Range: bytes=1048576-

表示客户端已经下载了前 1MB(1048576 字节),现在只需要从 1MB 开始的剩余部分。

🧠 所以:

术语含义
Range一种 HTTP 请求头,告诉服务器返回文件的一部分
断点续传一种功能,客户端在下载中断后,从上次中断的位置继续下载,而不是从头开始。这个功能依赖 Range 实现

✅ 二、你的理解完全正确:

你说:

“我本地安装了 libcurl,我是客户端,我有断点续传功能了,但还需要服务器端支持,对吧?”

✔️ 正确,解释如下:

角色是否需要支持说明
客户端(如 curl 或 libcurl)✅ 需要负责发送 Range 请求头,记录已下载位置,继续下载
服务端(如 nginx、apache)✅ 需要必须支持 Range 请求头,否则每次都从头下载,无法续传

如果服务端不支持 Range,客户端即使发出了断点续传请求,也会被忽略,服务器仍会返回完整的文件(HTTP 200),这样就达不到断点续传的效果。

✅ 三、如何判断服务端是否支持 Range?

你可以使用你刚刚写好的脚本检测:

curl -I http://yourserver.com/file.zip

看看是否有:

Accept-Ranges: bytes

或者发一个 Range 请求:

curl -H "Range: bytes=0-10" -i http://yourserver.com/file.zip

如果返回的是:

HTTP/1.1 206 Partial Content

说明服务端支持断点续传。

✅ 四、总结

条件是否必需原因
客户端(curl/libcurl)支持 Range 请求✅ 是负责断点记录和请求部分内容
服务端支持 Range 响应(返回 206)✅ 是否则客户端续传请求会失败
Range 和断点续传关系💡 Range 是断点续传的技术基础

如果你用 libcurl 编程,还可以设置续传参数,比如:

curl_easy_setopt(curl, CURLOPT_RESUME_FROM, (long)downloaded_bytes);

这个内部就会触发一个 Range 请求。

curl -C -curl 命令行的断点续传功能。它在内部其实就是调用 libcurl 的一些 API,来设置“从某个位置恢复下载”的参数。

✅ 一、curl -C 的作用回顾

curl -C - -O http://example.com/file.zip

这个命令的作用是:

  • 如果 file.zip 已经部分下载,它会检测本地文件大小(假设是 1MB),
  • 然后向服务器发送一个请求头:
Range: bytes=1048576-

即从 1MB 开始继续下载。

✅ 二、等效的 libcurl 调用流程

如果你想用 libcurl 实现和 curl -C - 相同的功能,关键是使用以下几个 API:

🔧 主要 API:CURLOPT_RESUME_FROM

curl_easy_setopt(curl, CURLOPT_RESUME_FROM, (long)already_downloaded);

这个设置告诉 libcurl:

“我已经下载了 already_downloaded 字节,从这个偏移开始请求服务器。”

从 libcurl 7.18.0 起也可以用 CURLOPT_RESUME_FROM_LARGE 支持大文件。

🧩 完整的 libcurl 流程如下(伪代码):

#include <stdio.h>
#include <curl/curl.h>size_t write_callback(void *ptr, size_t size, size_t nmemb, FILE *stream) {return fwrite(ptr, size, nmemb, stream);
}int main(void) {CURL *curl;FILE *fp;CURLcode res;const char *url = "http://example.com/file.zip";const char *filename = "file.zip";long already_downloaded = 0;// 获取已下载文件的大小(如果文件已存在)fp = fopen(filename, "ab+");  // 追加模式if (fp) {fseek(fp, 0L, SEEK_END);already_downloaded = ftell(fp);rewind(fp);  // 可选}curl_global_init(CURL_GLOBAL_DEFAULT);curl = curl_easy_init();if (curl) {curl_easy_setopt(curl, CURLOPT_URL, url);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);// 设置断点续传起始字节curl_easy_setopt(curl, CURLOPT_RESUME_FROM, already_downloaded);// 可选:显示进度条curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);// 执行请求res = curl_easy_perform(curl);if (res != CURLE_OK)fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));curl_easy_cleanup(curl);}fclose(fp);curl_global_cleanup();return 0;
}

✅ 三、底层原理:libcurl 会自动添加 Range 请求头

当你设置:

curl_easy_setopt(curl, CURLOPT_RESUME_FROM, 1048576L);

libcurl 会自动在请求头中添加:

Range: bytes=1048576-

并将服务器返回的 206 Partial Content 数据写入到你指定的文件指针。

✅ 四、注意事项

  • 服务端必须支持 Range 请求(返回 206 Partial Content)
  • 如果服务器返回的是 200 OK,那么它会从头开始下载(不是断点)
  • 对于大文件(超过 2GB),使用 CURLOPT_RESUME_FROM_LARGE
  • 如果想支持上传续传,逻辑类似但要使用不同的 API(如 CURLOPT_APPEND

✅ 总结

curl 命令libcurl 等效设置
curl -C -CURLOPT_RESUME_FROM
自动探测本地文件大小你需要自己通过 ftell() 获取
下载续传到文件设置 CURLOPT_WRITEDATAFILE*

你这个问法:

“服务端是否支持处理 Range 请求?”

是正确的、技术准确的说法,但略偏技术内核,如果对方不是直接处理 HTTP 协议的开发人员,可能听起来会稍微抽象。


✅ 更建议的问法(根据场景分层次):

🎯 面向开发人员(技术人员):

“请问你们的接口/服务是否支持 HTTP Range 请求(用于断点续传)?”

或者:

“你们的服务是否支持客户端发送的 Range: bytes=... 请求?能返回 206 Partial Content 响应吗?”

这是非常准确的术语,他们能一眼理解你在说断点续传。

🎯 面向不熟 HTTP 的人员(比如测试、运维、项目经理):

“你们的服务支持断点续传吗?也就是说,如果我中断了文件下载,可以从上次下载的位置继续下载,而不是每次都重新开始吗?”

这可以帮助他们用业务语境理解,而你在后台测试时可以进一步去验证(用 Range 请求来确认是否返回 206)。

✅ 你可以组合问:

你可以问得更清楚一点,比如:

“我们客户端这边希望支持断点续传,请问你们服务是否支持 HTTP 的 Range 请求?也就是客户端发送 Range: bytes=xxx- 的请求头时,你们能返回 206 Partial Content 吗?”

这样对方就知道你不是随便提“断点续传”,你在说的是标准的 HTTP 实现方式

✅ 你也可以给一个 curl 示例让他们确认:

“我们通过 curl 用 Range: bytes=100- 测试断点续传,想确认下你们服务是否支持,比如:

curl -H "Range: bytes=100-200" -i http://yourserver.com/file

如果你们返回的是 206 Partial Content,就表示支持。”

✅ 简洁总结

问法技术准确性适合对象建议
“你们支持处理 Range 请求吗?”技术开发可行但建议加例子
“你们支持 HTTP 断点续传吗?”开发/测试更贴业务、通俗
“你们会返回 206 Partial Content 吗?”✅✅✅深度技术沟通非常精准
“中断下载可以继续吗?”非技术人员适合项目交流

相关文章:

http断点续传

&#x1f6d1; 默认的 http.server&#xff08;Python 的 SimpleHTTPRequestHandler&#xff09;在某些版本和实现中并不可靠地支持 HTTP Range 请求&#xff08;即断点续传&#xff09;。 尤其在 Python 3.7~3.10 之间的某些版本中&#xff0c;这种支持是不完整或不可预测的。…...

# YOLOv3:基于 PyTorch 的目标检测模型实现

YOLOv3&#xff1a;基于 PyTorch 的目标检测模型实现 引言 YOLOv3&#xff08;You Only Look Once&#xff09;是一种流行的单阶段目标检测算法&#xff0c;它能够直接在输入图像上预测边界框和类别概率。YOLOv3 的优势在于其高效性和准确性&#xff0c;使其在实时目标检测任…...

Mac修改hosts文件方法

Mac修改hosts文件方法 在 macOS 上修改 hosts 文件需要管理员权限 步骤 1&#xff1a;打开终端 通过 Spotlight 搜索&#xff08;Command 空格&#xff09;输入 Terminal&#xff0c;回车打开。或进入 应用程序 > 实用工具 > 终端。 步骤 2&#xff1a;备份 hosts 文件…...

构建你的第一个简单AI助手 - 入门实践

在当今AI迅速发展的时代&#xff0c;构建自己的AI助手不再是高不可攀的技术壁垒。即使对于刚接触AI开发的程序员&#xff0c;也可以利用现代大语言模型(LLM)API构建功能丰富的AI助手。本文将带您完成一个简单但实用的AI助手构建过程&#xff0c;帮助您在日常工作中提高效率。 …...

Qt在统信UOS及银河麒麟Kylin系统中进行软件开发的环境配置,打包发布和注意事项

前述 之前由于项目的产品需要&#xff0c;必须将原本Windows上的产品移植到信创环境&#xff0c;也就是现在的主流国产操作系统统信UOS及银河麒麟Kylin。 先大概讲下信创系统&#xff1a; 信创系统就像是中国自己打造的 “数字基建”&#xff0c;目的是让咱们国家的信息技术不…...

一个完整的项目示例:taro开发微信小程序

前一周完成了一个项目&#xff0c;体测成绩转换的工具&#xff0c;没做记录&#xff0c;。这次计划开发一个地图应用小程序&#xff0c;记录一下。方便给使用的人。 一、申请微信小程序&#xff0c;填写相应的信息&#xff0c;取得开发者ID。这个要给腾讯地图使用的。 二、申…...

二次封装 el-dialog 组件:打造更灵活的对话框解决方案

文章目录 引言为什么需要二次封装&#xff1f;封装思路代码实现1. 基础封装组件 (Dialog.vue)2. Vue中引入使用示例 封装后的优势进阶优化建议 总结 引言 在 Vue 项目中&#xff0c;Element UI 的 el-dialog 是一个非常实用的对话框组件。但在实际开发中&#xff0c;我们经常会…...

3.2 一点一世界

第一步&#xff1a;引入背景与动机 “一点一世界”这个概念来源于泰勒公式的思想&#xff0c;即通过一个点及其导数信息来近似描述整个函数的行为。这种方法在数学分析中非常有用&#xff0c;因为它允许我们将复杂的函数简化为多项式形式&#xff0c;从而更容易进行计算和理解…...

力扣第156场双周赛

1. 找到频率最高的元音和辅音 给你一个由小写英文字母&#xff08;a 到 z&#xff09;组成的字符串 s。你的任务是找出出现频率 最高 的元音&#xff08;a、e、i、o、u 中的一个&#xff09;和出现频率最高的辅音&#xff08;除元音以外的所有字母&#xff09;&#xff0c;并返…...

学习日志05 java

1 java里面的类型转换怎么做&#xff1f;int转double为例 在 Java 里&#xff0c;把int转换为double有自动类型转换和强制类型转换两种方式。下面为你详细介绍&#xff1a; 自动类型转换&#xff08;隐式转换&#xff09; 由于double的取值范围比int大&#xff0c;Java 能够…...

4.7/Q1,GBD数据库最新文章解读

文章题目&#xff1a;Burden of non-COVID-19 lower respiratory infections in China (1990-2021): a global burden of disease study analysis DOI&#xff1a;10.1186/s12931-025-03197-7 中文标题&#xff1a;中国非 COVID-19 下呼吸道感染负担&#xff08;1990-2021 年&a…...

do while

先进再查 import java.util.Scanner;public class Hello {public static void main(String[] args) {Scanner in new Scanner(System.in);int number in.nextInt();int count 0;do{number number / 10;count count 1;} while( number > 0 );System.out.println(count…...

MySQL 主从复制与读写分离

一、MySQL 主从复制 &#xff08;0&#xff09;概述 MySQL 主从复制是一种数据同步机制&#xff0c;允许数据从一个主数据库&#xff08;Master&#xff09;复制到一个或多个从数据库&#xff08;Slave&#xff09;。其主要用途包括&#xff1a; 数据冗余与灾备&#xff1a;通…...

CSS3 基础知识、原理及与CSS的区别

CSS3 基础知识、原理及与CSS的区别 CSS3 基础知识 CSS3 是 Cascading Style Sheets 的第3个版本&#xff0c;是CSS技术的升级版本&#xff0c;于1999年开始制订&#xff0c;2001年5月23日W3C完成了CSS3的工作草案。 CSS3 主要模块 选择器&#xff1a;更强大的元素选择方式盒…...

第十七章:Llama Factory 深度剖析:易用性背后的微调框架设计

章节引导&#xff1a;在模型定制的实践中&#xff0c;Llama Factory (github.com/hiyouga/LLaMA-Factory) 以其惊人的易用性和对多种开源大模型、多种参数高效微调方法&#xff08;PEFT&#xff09;的广泛支持&#xff0c;迅速成为开源社区的热门选择。你可能已经熟练掌握了如何…...

SpringSecurity当中的CSRF防范详解

CSRF防范 什么是CSER 以下是基于 CSRF 攻击过程的 顺序图 及详细解释&#xff0c;结合多个技术文档中的攻击流程&#xff1a; CSRF 攻击顺序图 #mermaid-svg-FqfMBQr8DsGRoY2C {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#m…...

CSRF防范歪招

不保存到Cookie里呗 如果每次请求都强制通过请求头携带Token&#xff0c;并且不将Token存储在Cookie中&#xff0c;这种设计可以有效防御CSRF攻击。以下是具体原因和关键实现要点&#xff1a; 1. 防御原理 CSRF攻击的本质是攻击者伪造用户的请求&#xff0c;利用浏览器自动携…...

MyBatis与MyBatis-Plus深度分析

MyBatis与MyBatis-Plus深度分析 一、MyBatis原理与基础 1. MyBatis核心原理 MyBatis是一个半自动ORM框架&#xff0c;主要原理包括&#xff1a; SQL与代码分离&#xff1a;通过XML或注解配置SQL语句动态SQL&#xff1a;提供if、choose、foreach等标签实现动态SQL结果集映射…...

STM32 变量加载到flash的过程中

在STM32中&#xff0c;BIN文件内需要加载到RAM的数据由链接脚本&#xff08;Linker Script&#xff09;​和启动代码&#xff08;Startup Code&#xff09;​共同决定&#xff0c;具体机制如下&#xff1a; 一、BIN文件内容结构 STM32的BIN文件包含三类数据&#xff1a; ​Co…...

TCP核心机制

1. TCP五大核心机制 1.1. 顺序问题&#xff08;稳重不乱&#xff09; 背景&#xff1a;网络传输中数据包可能因路径不同或网络波动导致乱序到达&#xff0c;需保证接收方能按正确顺序处理数据。 原理&#xff1a; 序列号&#xff08;Sequence Number&#xff09;&#xff1…...

6.3对象序列化

在 Java 中&#xff0c;ObjectInputStream 和 ObjectOutputStream 是用于实现对象序列化&#xff08;Serialization&#xff09;和反序列化&#xff08;Deserialization&#xff09;的核心类。通过这两个类&#xff0c;可以将对象转换为字节流进行存储或传输&#xff0c;并在需…...

Flutter小白入门指南

Flutter小白入门指南 &#x1f680; 轻松构建漂亮的跨平台应用 &#x1f4d1; 目录 一、Flutter是什么&#xff1f; 为什么选择Flutter&#xff1f;Flutter工作原理 二、环境搭建与命令行 安装Flutter SDK常用Flutter命令创建第一个项目 三、Flutter基础语法 变量与类型函数条…...

Python -将MP4文件转为GIF图片

给大家提供一个工具代码&#xff0c;使用Python&#xff0c;将MP4格式的视频文件&#xff0c;转换为GIF图片 首先先安装必要的包&#xff1a; pip install imageio pip install imageio[ffmpeg] 工具代码&#xff1a; import imageio# 视频文件路径 video_path r""…...

51c嵌入式~电路~合集27

我自己的原文哦~ 一、7805应用电路 简介 如上图&#xff0c;7805 集成稳压电路。 7805是串联式三端稳压器&#xff0c;三个端口分别是电压输入端&#xff08;IN&#xff09;&#xff0c;地线&#xff08;GND&#xff09;&#xff0c;稳压输出&#xff08;OUT&#xff09;…...

数据结构—(链表,栈,队列,树)

本文章写的比较乱&#xff0c;属于是缝合怪&#xff0c;很多细节没处理&#xff0c;显得粗糙&#xff0c;日后完善&#xff0c;今天赶时间了。 1. 红黑树的修复篇章 2. 红黑树的代码理解&#xff08;部分写道注释之中了&#xff09; 3. 队列与栈的代码 4. 重要是理解物理逻辑&a…...

GitHub 趋势日报 (2025年05月12日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1harry0703/MoneyPrinterTurbo利用ai大模型&#xff0c;一键生成高清短视频使用…...

ebook2audiobook开源程序使用动态 AI 模型和语音克隆将电子书转换为带有章节和元数据的有声读物。支持 1,107+ 种语言

​一、软件介绍 文末提供程序和源码下载 ebook2audiobook开源程序使用动态 AI 模型和语音克隆将电子书转换为带有章节和元数据的有声读物。支持 1,107 种语言。从电子书到带有章节和元数据的有声读物的 CPU/GPU 转换器&#xff0c;使用 XTTSv2、Bark、Vits、Fairseq、YourTTS …...

《算法导论(第4版)》阅读笔记:p39-p48

《算法导论(第4版)》学习第 13 天&#xff0c;p39-p48 总结&#xff0c;总计 10 页。 一、技术总结 1. recurrence/recurrence equation 书里面 recurrence(递归式) 和 recurrence equation(递归方程) 指的是同一个东西。 二、英语总结(生词&#xff1a;2) 1. squint (1)…...

c语言第一个小游戏:贪吃蛇小游戏07

贪吃蛇吃饭喽 所谓贪吃蛇的食物&#xff0c;也就是创建一个和蛇身一样的结构体&#xff0c;只是这个结构体不是链表&#xff0c;也是将这个结构体设置hang和lie坐标&#xff0c;放进gamepic进行扫描&#xff0c;扫到了就也是做操作将 ## 打出来 #include <curses.h> #i…...

(七)深度学习---神经网络原理与实现

分类问题回归问题聚类问题各种复杂问题决策树√线性回归√K-means√神经网络√逻辑回归√岭回归密度聚类深度学习√集成学习√Lasso回归谱聚类条件随机场贝叶斯层次聚类隐马尔可夫模型支持向量机高斯混合聚类LDA主题模型 一.神经网络原理概述 二.神经网络的训练方法 三.基于Ker…...

VSCode中Node.js 使用教程

一、visual studio code下载与安装 二、修改vscode主题颜色 三、汉化 菜单view-->Command Palette...,输入Configure Display Language。 重启之后如下&#xff1a; 四、安装node.js Node.js 是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c;使用了事件驱动、非阻…...

web 自动化之 KDT 关键字驱动详解

一、什么是关键字驱动&#xff1f; 1、什么是关键字驱动&#xff1f;&#xff08;以关键字函数驱动测试&#xff09; 关键字驱动又叫动作字驱动&#xff0c;把项目业务封装成关键字函数&#xff0c;再基于关键字函数实现自动化测试 2、关键字驱动测试原理 关键字驱动测试是一…...

web 自动化之 yaml 数据/日志/截图

文章目录 一、yaml 数据获取二、日志获取三、截图 一、yaml 数据获取 需要安装 PyYAML 库 import yaml import os from TestPOM.common import dir_config as Dirdef read_yaml(key,file_name"test_datas.yaml"):file_path os.path.join(Dir.testcases_dir, file_…...

基于javaweb的SpringBoot酒店管理系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

数学复习笔记 6

前言 复习一下行列式的一些基本的题。感觉网课有点没跟上了。今天花点时间跟上网课的进度。要紧跟进度&#xff0c;然后剩下的时间再去复习前面的内容。多复习&#xff0c;提升自己的解题能力。 行列式和矩阵 三年级&#xff0c;我现在是三年级下册。。。马上就要结束大学的…...

JS Map使用方法

JS Map使用方法 Map 是 ES6 引入的一种新的数据结构&#xff0c;它类似于对象&#xff08;Object&#xff09;&#xff0c;但提供了更强大的键值对存储功能。 文章目录 JS Map使用方法基本特性基本用法创建 Map常用方法遍历方法 与 Object 的区别实际应用示例示例1&#xff1a…...

大模型分布式光伏功率预测实现详解

一、引言 随着全球能源结构向可再生能源转型,光伏发电作为清洁能源的重要组成部分,其装机容量持续快速增长。然而,光伏发电具有显著的间歇性和波动性特点,给电力系统的稳定运行带来了巨大挑战。准确的光伏功率预测对于电网调度、电力市场交易和电站运营管理至关重要。近年…...

武汉大学无人机视角下的多目标指代理解新基准!RefDrone:无人机场景指代表达理解数据集

作者&#xff1a;Zhichao Sun, Yepeng Liu, Huachao Zhu, Yuliang Gu, Yuda Zou, Zelong Liu, Gui-Song Xia, Bo Du, Yongchao Xu 单位&#xff1a;武汉大学计算机学院 论文标题&#xff1a;RefDrone: A Challenging Benchmark for Drone Scene Referring Expression Compreh…...

【LLM模型】如何构建自己的MCP Server?

什么是 MCP&#xff1f; Model Context Protocol (MCP) 是一种协议&#xff0c;它允许大型语言模型&#xff08;LLMs&#xff09;访问自定义的工具和服务。Trae 中的智能体作为 MCP 客户端可以选择向 MCP Server 发起请求&#xff0c;以使用它们提供的工具。你可以自行添加 MC…...

SQL 索引优化指南:原理、知识点与实践案例

SQL 索引优化指南&#xff1a;原理、知识点与实践案例 索引的基本原理 索引是数据库中用于加速数据检索的数据结构&#xff0c;类似于书籍的目录。它通过创建额外的数据结构来存储部分数据&#xff0c;使得查询可以快速定位到所需数据而不必扫描整个表。 索引的工作原理 B-…...

java基础-方法的重写、super关键字

1.定义&#xff1a;子类可以根据需要改写从父类那继承来的方法&#xff0c;执行时&#xff0c;子类的方法会覆盖父类的方法 2.要求&#xff1a; &#xff08;1&#xff09;子类和父类的方法必须同名&#xff0c;同参数列表 &#xff08;2&#xff09;父类中private修饰的方法…...

技术并不能产生一个好的产品

技术是产生一个好的产品充分条件&#xff0c;不是必要条件。 当笔者到了40岁的年龄时间&#xff0c;发现再怎么努力提升技术&#xff0c;也没办法挽救烂的产品设计。 一个好的产品&#xff0c;首先要找准自己的定位&#xff0c;不能动不动就把自己拿一线品牌来比较。 好的产品…...

lubuntu 系统详解

Lubuntu 系统详解&#xff1a;轻量高效的 Ubuntu 衍生版 一、系统概述 定位与背景&#xff1a; Lubuntu 是 Ubuntu 的官方衍生版本&#xff08;Flavor&#xff09;&#xff0c;专注于轻量性与高效性&#xff0c;旨在为低配置设备&#xff08;如老旧电脑、上网本、低配笔记本 …...

《设备管理与维修》审核严吗?“修改后再投”是拒稿了吗?

有过论文投稿经验的朋友&#xff0c;可能在审核后收到过“修改后再投”的回复。有些期刊可能是真的建议投稿人在修改后再投稿&#xff0c;有些则可能是标准的拒稿模板。 《设备管理与维修》审核严吗&#xff1f;收到“修改后再投”的回复该怎么办&#xff1f;下面我就来分享下之…...

2025年5月-信息系统项目管理师高级-软考高项一般计算题

决策树和期望货币值 加权算法 自制和外购分析 沟通渠道 三点估算PERT 当其他条件一样时&#xff0c;npv越大越好...

界面组件DevExpress WPF中文教程:Grid - 如何自定义Band Header外观?

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…...

Supabase 的入门详细介绍

Supabase 是什么&#xff1f; 简单来说&#xff0c;Supabase 是一个开源的 Firebase 替代品。它提供了一整套后端即服务 (BaaS - Backend as a Service) 的工具&#xff0c;让你能够快速构建应用程序的后端&#xff0c;而无需自己从头搭建和管理服务器、数据库等基础设施。 S…...

【实战】基于 ABP vNext 构建高可用 S7 协议采集平台(西门子 PLC 通信全流程)

&#x1f680;&#x1f527;【实战】基于 ABP vNext 构建高可用 S7 协议采集平台&#xff08;西门子 PLC 通信全流程&#xff09;&#x1f4ca; &#x1f4d1; 目录 &#x1f680;&#x1f527;【实战】基于 ABP vNext 构建高可用 S7 协议采集平台&#xff08;西门子 PLC 通信全…...

20、map和set、unordered_map、un_ordered_set的复现

一、map 1、了解 map的使用和常考面试题等等&#xff0c;看这篇文章 map的key是有序的 &#xff0c;值不可重复 。插入使用 insert的效率更高&#xff0c;而在"更新map的键值对时&#xff0c;使用 [ ]运算符效率更高 。" 注意 map 的lower和upper那2个函数&#x…...

leetcode 189. 轮转数组

题目描述 代码&#xff1a; class Solution { public:void rotate(vector<int>& nums, int k) {int len nums.size();k k % len;reverse(nums,0,len-1);reverse(nums,0,k-1);reverse(nums,k,len-1);}void reverse(vector<int>& nums,int left,int right…...