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

云备份项目--服务端编写

文章目录

  • 7. 数据管理模块
    • 7.1 如何设计
    • 7.2 完整的类
  • 8. 热点管理
    • 8.1 如何设计
    • 8.2 完整的类
  • 9. 业务处理模块
    • 9.1 如何设计
    • 9.2 完整的类
    • 9.3 测试
      • 9.3.1 测试展示功能

完整的代码–gitee链接

7. 数据管理模块

TODO: 读写锁?普通锁?

7.1 如何设计

需要管理哪些数据

  • 文件大小
  • 文件最后一次修改时间
  • 文件最后一次访问时间
  • 文件的实际存放路径
  • 文件是否被压缩
  • 文件压缩包存放路径
  • url的资源路径path(URL路径(如http://www.example.com/path/to/file的路径path就是是/path/to/file

如何管理数据

  • 用于数据信息访问:使用哈希表,使用urlPath作为key
  • 使用json序列化将信息保存在文件中
  • 读写锁,为了提高访问效率

7.2 完整的类

/* 文件管理数据模块, 这里有文件的所有信息
, 用到了JsonUtil.hpp, FileUtil.hpp, Config.hpp */#ifndef __MY_DATA_MANGER__
#define __MY_DATA_MANGER__
#include "Config.hpp"
#include <iostream>
#include <unordered_map>
#include <pthread.h>
#include <string>
#include <vector>
#include <mutex>namespace cloud
{
struct BackupInfo
{   // 传入文件名, 初始化结构体BackupInfo(const std::string& fileName);BackupInfo(); // 当前文件的状态是否ok, ok 返回truebool isOk();bool isPacked;              // 文件是否被压缩(true表示被压缩了)size_t fileSz;              // 文件大小time_t lastMTime;           // 文件最后一次修改时间time_t lastATime;           // 文件最后一次访问时间std::string ulFilePath;     // 上传文件存放的路径(这里要精确到哪个路径下哪个文件,如./files/fileName.txt)std::string rarFilePath;    // 压缩文件存放的路径(这里要精确到哪个路径下哪个文件,如./rars/fileName.lz)std::string urlPath;        // url的资源路径pathbool biStatus = true;       // 当前文件的状态是否ok
private:// 构造函数使用该函数bool init(const std::string& fileName);
};class DataManager
{
private:std::unordered_map<std::string, BackupInfo> _hash;       // 通过key:url来映射BackupInfostd::string _backup;                                     // 备份的信息文件的路径pthread_rwlock_t _rwlock;std::mutex _mtx;
public:DataManager();// 将bi添加到哈希表中bool insertInfo(const BackupInfo& bi);// 根据bi修改哈希表中的值bool updateInfo(const BackupInfo& bi); // 通过urlPath获得一个文件信息, 放到info中bool get1FromURL(const std::string& urlPath, BackupInfo* info);// 通过该文件的路径(本地路径)获得文件信息, 放到info中bool get1FromPath(const std::string& path, BackupInfo* info);// 获取所有文件信息, 放到数组中bool getAllInfo(std::vector<BackupInfo>* vBi);// 保存备份文件, 将所有文件的信息保存下来bool strorageBackup();// 加载配置文件, 将其放到_hash中bool loadBackup();
};
}
#endif

8. 热点管理

8.1 如何设计

需要完成的功能: 对服务器上备份的文件进行检测,哪些文件长时间没有被访问,则认为是非热点文件,则压缩存储,节省磁盘空间。

  1. 遍历所有的文件
  2. 检测文件的最后一次访问时间
  3. 与当前时间进行相减得到差值,这个差值如果大于设定好的非热点判断时间则认为是非热点文件,则进行压缩存放到压缩路径中,删除源文件
  4. 修改数据管理模块对应的文件信息(压缩标志–>true)

8.2 完整的类

/* 
热点管理模块, 
检测压缩文件存放的路径中所有的文件是否长时间未访问, 
并做相应的压缩处理。
*/
#ifndef __MY_HOTSPOT__MANAGER__
#define __MY_HOTSPOT__MANAGER__
#include "DataManager.hpp"
#include "Config.hpp"
#include <time.h>
#include <unistd.h>extern cloud::DataManager* dm;
namespace cloud
{
class HotspotManager
{
private:std::string _ulPath;      // 上传文件存放的路径(这里指的是文件夹)std::string _rarPath;     // 压缩文件存放的路径(这里指的是文件夹)std::time_t _hotTime;     // 热点时间
public:HotspotManager();~HotspotManager();// 提供主要功能: 检测是否是热点+非热点删除并压缩+更改配置文件信息bool runHotspotManager();private:// 检测是否是热点文件, 是返回truebool checkHot(const std::string& path);// 将文件压缩到指定位置bool compressAndMov(const std::string& path, cloud::FileUtil& fu);// 删除文件bool removeFile(cloud::FileUtil& fu);// 更新文件的信息, 并进行持久化操作bool updateAndStorage(const std::string& path);
};} #endif

9. 业务处理模块

9.1 如何设计

  1. 搭建网络通信服务器:借助httplib完成
  2. 业务请求处理
    1. 文件上传请求:备份客户端上传的文件,响应上传成功
    2. 文件列表展示请求:客户端浏览器请求一个备份文件的展示页面,响应页面
    3. 文件下载请求:通过展示页面,点击下载,响应客户端要下载的文件数据

前置知识:

ETag:

HTTP中的ETag(Entity Tag)是一个与特定版本的资源相关的标识符。它是一种机制,用于确定客户端缓存的副本是否是最新的。

客户端第一次下载文件的时候,会收到这个响应信息,第二次下载,就会将这个信息发送给服务器,想要让服务器根据这个唯一标识判断
这个资源有没有被修改过,如果没有被修改过,直接使用原先缓存的数据,不用重新下载了

Accept-Ranges:

Accept-Ranges允许客户端在下载过程中恢复中断的下载,或者只下载资源的一部分,这可以提高下载效率,尤其是在处理大文件时。其值设置为bytes表示服务器支持基于字节的请求


断点续传

第一次请求:

  1. 客户端发起 HTTP GET 请求一个文件。
  2. 服务器处理请求,返回文件内容以及相应的 Header,其中包括 Etag(例如:627-4d648041f6b80)(假设服务器支持 Etag 生成并已开启了 Etag)状态码为 200。

第二次请求(断点续传):

  1. 客户端发起 HTTP GET 请求一个文件,同时发送 If-Range(该头的内容就是第一次请求时服务器返回的 Etag:627-4d648041f6b80)。
  2. 服务器判断接收到的 Etag 和计算出来的 Etag 是否匹配,如果匹配,那么响应的状态码为 206;否则,状态码为 200。
请求
GET /download/a.txt http/1.1
Content-Length: 123
If-Range: "⽂件唯⼀标识"		服务端在下载时响应的etag字段”用于服务端判断这个文件与原先下载的文件是否一致
Range: bytes=89-999			这个字段用于告诉服务器客户端需要的数据区间范围响应
HTTP/1.1 206 Partial Content
Content-Length:123
Content-Range: bytes 89-999/100000
Content-Type: application/octet-stream
ETag: "inode-size-mtime⼀个能够唯⼀标识⽂件的数据"
Accept-Ranges: bytes

9.2 完整的类

/* 提供业务处理的功能, 处理来自客户端的各种请求 */
#ifndef __MY_SERVICE__
#define __MY_SERVICE__
#include "DataManager.hpp"
#include "httplib.h"extern cloud::DataManager* dm;         // 用于管理数据namespace cloud
{
class Service
{
private:int _srvPort;                    // 服务器端口号std::string _srvIp;              // 服务器ipstd::string _urlDownPre;         // url下载路径前缀
public:Service();~Service();// 进行业务处理void runService();private:// 处理上传文件static void uploadHandler(const httplib::Request& req, httplib::Response& rsp);// 处理下载文件static void downloadHandler(const httplib::Request& req, httplib::Response& rsp);// 处理显示操作static void listHandler(const httplib::Request& req, httplib::Response& rsp);// 将时间戳转换为可读的static std::string timeToStr(time_t t);// 获取ETag, 文件名-文件大小-最后一次修改时间static std::string getETag(const BackupInfo& bi);
};
}
#endif

9.3 测试

9.3.1 测试展示功能

此时的backup.data如下

[{"fileSz" : 0,"isPacked" : false,"lastATime" : 1735651729,"lastMTime" : 1735651729,"rarFilePath" : "./rars/testtest.txt.lz","ulFilePath" : "./files/testtest.txt","urlPath" : "/download/testtest.txt"},{"fileSz" : 3083,"isPacked" : false,"lastATime" : 1735649756,"lastMTime" : 1735131288,"rarFilePath" : "./rars/Config.hpp.lz","ulFilePath" : "./files/Config.hpp","urlPath" : "/download/Config.hpp"}
]

页面显示如下

image-20241231213014354

相关文章:

云备份项目--服务端编写

文章目录 7. 数据管理模块7.1 如何设计7.2 完整的类 8. 热点管理8.1 如何设计8.2 完整的类 9. 业务处理模块9.1 如何设计9.2 完整的类9.3 测试9.3.1 测试展示功能 完整的代码–gitee链接 7. 数据管理模块 TODO: 读写锁&#xff1f;普通锁&#xff1f; 7.1 如何设计 需要管理…...

CSS——2.书写格式一

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><!--css书写中&#xff1a;--><!--1.css 由属性名:属性值构成--><!--style"color: red;font-size: 20px;&quo…...

【保姆级】sql注入之堆叠注入

一、堆叠注入的原理 mysql数据库sql语句的默认结束符是以";"号结尾&#xff0c;在执行多条sql语句时就要使用结束符隔 开,而堆叠注入其实就是通过结束符来执行多条sql语句 比如我们在mysql的命令行界面执行一条查询语句,这时语句的结尾必须加上分号结束 select * fr…...

大模型推理加速调研(框架、方法)

大模型推理加速调研&#xff08;框架、方法&#xff09; 大模型推理框架调研总结推理框架TensorRT-LLMllama.cppmnn-llmfastllmmlc-llm 环境搭建&部署推理环境llama.cppfastllmmnn-llmvllm vllm_openai_completions.pylmdeployTensorRT-LLM 大模型加速技术总结模型压缩量化…...

js -音频变音(听不出说话的人是谁)

学习参考来源&#xff1a; https://zhuanlan.zhihu.com/p/634848804 https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Audio_API 实际效果&#xff1a; http://www.qingkong.zone/laboratory?typeaudio-confusion 前言 本文内容可结合上面学习参考来源&#xff0c;结合…...

3D Object Detection和6D Pose Estimation有什么异同?

知乎讨论&#xff1a; (99 封私信 / 95 条消息) 3D Object Detection和6D Pose Estimation有什么异同&#xff1f; - 知乎 GPT回答&#xff1a; 3D Object Detection 和 6D Pose Estimation 都是计算机视觉领域的重要任务&#xff0c;广泛应用于机器人、自动驾驶和增强现实…...

NRF24L01模块STM32通信-通信初始化

目录 前言 一、IO口初始化 二、模拟SPI的基础代码 1.一些代码的宏定义 2.起始信号 3.CS,SCK,MOSI操作 4.MISO,IRQ操作 三.中间层代码 1.字节的输入和读取 2.写操作 3.读操作 四.应用层代码 1.24L01的检测 2.在main函数进行简单验证 3.24L01宏定义的代码 总结 前…...

vue Element Ui Upload 上传 点击一个按钮,选择多个文件后直接上传,使用防抖解决多次上传的问题。

问题&#xff1a; 在使用Element Ui Upload 上传文件时&#xff0c;选择多个文件上传时&#xff0c;on-change事件会一个一个返回上传的文件&#xff0c;导致前端不知道什么时候可以拿到全部上传的文件&#xff0c;再一起调后台接口。 解决方法&#xff1a; 上传文件后&…...

算法题(26):最后一个单词的长度

审题&#xff1a; 需要我们返回最后一个单词的长度&#xff0c;并且字符串内只有空格来分割单词 思路&#xff1a; 找到最后一个单词的方法就是从后开始遍历找到第一个非空格的元素&#xff0c;称为pos&#xff08;第一个出现单词的位置&#xff09; 然后再从pos位置开始反向寻…...

Ungoogled Chromium127 编译指南 MacOS 篇(二)- 项目要求

1. 引言 在开始编译 Ungoogled Chromium 之前&#xff0c;我们需要确保系统满足所有必要的硬件和软件要求。由于浏览器编译是一个资源密集型的任务&#xff0c;合适的硬件配置和完整的软件环境至关重要。本文将详细介绍编译 Ungoogled Chromium 所需的各项要求。 2. 硬件要求…...

nginx配置-其他配置

nginx配置-其他配置 server_tokens server_tokens server_token on/off 是 Nginx 配置文件中的一个指令&#xff0c;用于控制 Nginx 服务器在响应 HTTP 请求时是否显示服务器的版本信息。 默认情况下&#xff0c;Nginx 会在响应头中包含服务器的版本号&#xff0c;例如 Serve…...

Springboot使用RabbitMQ实现关闭超时订单的一个简单示例

1.maven中引入rabbitmq的依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency> 2.application.yml中进行rabbitmq相关配置&#xff1a; # rabbit…...

QT-------------对话框和多窗口程序设计

一、标准对话框 1. QFileDialog 对话框 功能&#xff1a;提供文件选择对话框&#xff0c;方便用户选择文件或目录。 #include <QApplication> #include <QFileDialog> #include <QMessageBox>int main(int argc, char *argv[]) {QApplication app(argc, a…...

信息科技伦理与道德2:研究方法

1 问题描述 1.1 讨论&#xff1f; 请挑一项信息技术&#xff0c;谈一谈为什么认为他是道德的/不道德的&#xff0c;或者根据使用场景才能判断是否道德。判断的依据是什么&#xff08;自身的道德准则&#xff09;&#xff1f;为什么你觉得你的道德准则是合理的&#xff0c;其他…...

Linux(Centos 7.6)命令详解:ls

1.命令作用 列出目录内容(list directory contents) 2.命令语法 Usage: ls [OPTION]... [FILE]... 3.参数详解 OPTION: -l&#xff0c;long list 使用长列表格式-a&#xff0c;all 不忽略.开头的条目&#xff08;打印所有条目&#xff0c;包括.开头的隐藏条目&#xff09…...

深入理解 WebSocket:实时通信的基础

随着互联网技术的不断发展&#xff0c;实时通信逐渐成为现代应用程序中不可或缺的一部分。无论是即时通讯应用、在线游戏、社交平台还是股票交易系统&#xff0c;都需要能够在客户端与服务器之间快速、高效地传输数据。传统的 HTTP 协议虽然简单且广泛应用&#xff0c;但它并不…...

【网络协议】开放式最短路径优先协议OSPF详解(一)

OSPF 是为取代 RIP 而开发的一种无类别的链路状态路由协议&#xff0c;它通过使用区域划分以实现更好的可扩展性。 文章目录 链路状态路由协议OSPF 的工作原理OSPF 数据包类型Dijkstra算法、管理距离与度量值OSPF的管理距离OSPF的度量值 链路状态路由协议的优势拓扑结构路由器O…...

2000-2020年各省地区生产总值数据/各省gdp数据

2000-2020年各省地区生产总值数据/各省gdp数据 1、时间&#xff1a;2000-2020年 2、来源&#xff1a;国家统计局 3、指标&#xff1a;行政区划代码、地区、年份、地区生产总值 4、范围&#xff1a;31省 指标解释&#xff1a;地区生产总值&#xff08;Regional GDP&#xf…...

消息转换器在SpringMVC执行流程

消息转换器的工作机制 内部工作流程 读取&#xff08;Read&#xff09;操作 当接收到一个包含实体内容的HTTP请求时&#xff0c;Spring MVC会根据请求头中的Content-Type属性来确定应该使用哪个HttpMessageConverter来解析请求体。DispatcherServlet会遍历已注册的HttpMessage…...

7. C语言 运算符详解

本章目录: 前言C语言运算符的分类1. 算术运算符2. 关系运算符3. 逻辑运算符4. 位运算符5. 赋值运算符6. 杂项运算符 运算符优先级 前言 在C语言中&#xff0c;运算符是程序中执行各种操作的核心工具&#xff0c;涉及算术运算、逻辑判断、位操作等多个方面。掌握C语言中的各种运…...

一、准备工作(2):部署TensorFlow和Keras

目录 一、确保已安装 Python 和 pip 二、打开命令行界面并执行安装命令 Windows macOS 和 Linux 三、安装过程中的注意事项 创建虚拟环境 激活虚拟环境 在虚拟环境中安装包 四、验证安装 五、常见问题排查 六、下一步 pip install tensorflow keras 是一个用于在计算…...

Rabbitmq Fanout如何保证不重复消费及应用场景

rabbitmq fanout业务场景&#xff0c;一个交换机对应多个队列&#xff0c;不会重复消费吗 在 RabbitMQ 中&#xff0c;使用 Fanout 类型的交换机时&#xff0c;确实可以将一个交换机绑定到多个队列。每当有消息发布到这个交换机时&#xff0c;交换机会把消息广播到所有绑定的队…...

【Linux系列】使用 `nohup` 命令运行 Python 脚本并保存输出日志的详细解析

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

基于Python的考研学习系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

多模态大模型文生图和图生文的主要技术

1 图生文 CLIP 该模型架构由图像编码器和文本编码器组成。图像编码器将图像转换为嵌入&#xff08;数字列表&#xff09;&#xff0c;文本编码器将文本转换为嵌入。 这两个编码器在成批的图像-文本对上进行训练&#xff0c;其中文本描述图像。编码器的训练方式如下&#xff1…...

云架构:考量与框架

云架构&#xff1a;考量与框架 引言 在当今的数字化环境中&#xff0c;云计算已成为现代商业运营的基石。一个设计良好的云架构框架为可扩展、安全和弹性的系统奠定了基础。本文将深入探讨云架构的核心要素&#xff0c;讨论重要的考量因素、设计指南&#xff0c;以及最佳实践…...

用uniapp写一个播放视频首页页面代码

效果如下图所示 首页有导航栏&#xff0c;搜索框&#xff0c;和视频列表&#xff0c; 导航栏如下图 搜索框如下图 视频列表如下图 文件目录 视频首页页面代码如下 <template> <view class"video-home"> <!-- 搜索栏 --> <view class…...

开发培训-慧集通(iPaaS)集成平台脚本开发Groovy基础培训视频

‌Groovy‌是一种基于Java虚拟机&#xff08;JVM&#xff09;的敏捷开发语言&#xff0c;结合了Python、Ruby和Smalltalk的许多强大特性。它旨在提高开发者的生产力&#xff0c;通过简洁、熟悉且易于学习的语法&#xff0c;Groovy能够与Java代码无缝集成&#xff0c;并提供强大…...

供需平台信息发布付费查看小程序系统开发方案

供需平台信息发布付费查看小程序系统主要是为了满足个人及企业用户的供需信息发布与匹配需求。 一、目标用户群体 个人用户&#xff1a;寻找兼职工作、二手物品交换、本地服务&#xff08;如家政、维修&#xff09;等。 小微企业&#xff1a;推广产品和服务&#xff0c;寻找合…...

【Qt】如何保证线程安全(以日志写入为例)

前言 在近日学习中发现&#xff0c;如果开发一个单例模式的日志系统&#xff0c;难免会出现多个线程记录日志的情况&#xff0c;这个时候线程可能导致竞争&#xff0c;或者始料未及的情况发生。 通过学习&#xff0c;如果要保证线程安全&#xff0c;要使用互斥锁QMutex&#xf…...

k8s基础(3)—Kubernetes-Deployment

一、 Deployment概述 ‌ Kubernetes Deployment‌是Kubernetes中的一个核心概念&#xff0c;它是一种高级别的控制器&#xff0c;用于管理Pod和ReplicaSet&#xff0c;确保应用程序的高可用性和稳定性。Deployment通过声明式配置来创建和更新Pod和ReplicaSet&#xff0c;从而…...

信息系统管理师试题-人力资源

下列&#xff08; &#xff09;不属于人力资源管理的主要工作内容。 A根据各工作岗位任务的特点和工作要求&#xff0c;预测组织的人力需求 B根据工作需要&#xff0c;选拔出符合组织需要的员工 C对新员工进行工作指导和培训 D为项目团队争取和募集更多资金 答案D 解析&#xf…...

【情感】程序人生之情感关系中的平等意识(如何经营一段长期稳定的关系 沸羊羊舔狗自查表)

【情感】程序人生之情感关系中的平等意识&#xff08;如何经营一段长期稳定的关系 & 沸羊羊舔狗自查表&#xff09; 文章目录 1、情感关系中的平等意识2、如何经营一段长期稳定的关系&#xff08;避免左倾 | 敬畏与担当&#xff09;3、沸羊羊/舔狗自查表&#xff08;避免右…...

pyspark执行group by操作

前情提要 在处理亿级别数据时&#xff0c;常常输入是hive表&#xff0c;因此需要在pypark流程中引入一些场景sql操作&#xff0c;其中group by就是比较常见的操作。 基础步骤 创建SparkSession&#xff1a;通过enableHiveSupport()方法启用Hive支持&#xff0c;确保能够访问…...

小寒时处在二三九,天寒地冻北风吼

今&#xff08;1月5日上午10时33分&#xff09;天迎来了小寒节气&#xff0c;本“人民体验官”推广人民日报官方微博文化产品《小寒来了&#xff01;最冷的时候如何养生防病》&#xff0c;同时科普小寒相关知识。 截图&#xff1a;来源本“人民体验官”推广平台 人民微博告诉我…...

微信小程序校园自助点餐系统实战:从设计到实现

随着移动互联网的发展&#xff0c;越来越多的校园场景开始智能化、自助化。微信小程序凭借其轻量化、便捷性和强大的生态支持&#xff0c;成为了各类校园应用的首选工具之一。今天&#xff0c;我们将通过实际开发一个微信小程序“校园自助点餐系统”来展示如何设计和实现这样一…...

java基础之代理

代理模式&#xff08;Proxy Pattern&#xff09; 简介 是一种结构型设计模式&#xff0c;主要用于为某对象提供一个代理对象&#xff0c;以控制对该对象的访问。通过引入一个代理对象来控制对原对象的访问。代理对象在客户端和目标对象之间充当中介&#xff0c;负责将客户端的…...

uniapp - 基于uniapp+vue3实现自定义增强版table表格组件体验「兼容H5+小程序+App端」

本文提供增强版table表格组件体验,打造跨端表格的新标杆. uv3-table&#xff1a;一款基于uniappvue3跨端自定义手机端增强版表格组件。支持固定表头/列、边框、斑马纹、单选/多选&#xff0c;自定义表头/表体插槽、左右固定列阴影高亮显示。支持编译兼容H5小程序端App端。 提供…...

【Obsidian插件开发】新建窗口时出现多余的空白窗口

问题描述 在打开Edit Task的Modal的时候&#xff0c;有一个多余的空白modal同时也被打开了&#xff0c;并且点右上角的叉号可以把Edit Task窗口也关上。最开始没有这个问题&#xff0c;我给edit task窗口加了css&#xff0c;移动位置之后问题就出现了。 解决方法 我最开始看到…...

springmvc--请求参数的绑定

目录 一、创建项目&#xff0c;pom文件 二、web.xml 三、spring-mvc.xml 四、index.jsp 五、实体类 Address类 User类 六、UserController类 七、请求参数解决中文乱码 八、配置tomcat,然后启动tomcat 1. 2. 3. 4. 九、接收Map类型 1.直接接收Map类型 &#x…...

前缀和与差分专题

领地选择 &#xff08;二维前缀和&#xff09; 作为在虚拟世界里统帅千军万马的领袖&#xff0c;小 Z 认为天时、地利、人和三者是缺一不可的&#xff0c;所以&#xff0c;谨慎地选择首都的位置对于小 Z 来说是非常重要的。 首都被认为是一个占地 CC 的正方形。小 Z 希望你寻…...

Go Ebiten小球弹性碰撞代码示例

Go Ebiten小球弹性碰撞代码示例 我们来编写一个简单的示例程序&#xff0c;在其中实现一个小球在窗口中弹性碰撞的效果。具体来说&#xff0c;当小球碰到窗口的边缘时&#xff0c;它会反弹回来&#xff0c;改变运动方向。我们将使用Ebiten的图形和物理模拟功能来实现这个效果。…...

C++中map和set的封装

一、关于封装过程中传入的模板参数的问题 通过源码中的封装方式进行理解&#xff1a; 1.1map和set中成员变量 set中&#xff1a; template <class Key, class Compare less<Key>, class Alloc alloc> class set { public:typedef Key key_type;typedef Key v…...

dsa introduction 3

空间复杂度一般不会超过时间复杂度。空间复杂度就是申请的空间的数量级别。 减治和分治都是算法策略。都可以用递归和迭代的手段去实现。递归就是函数自己调用自己。一直到递归基之后再返回。递归算法的空间复杂度是递归深度。分治是分别求解子问题&#xff0c;然后由子问题的…...

C++ 日志库 spdlog 使用教程

Spdlog是一个快速、异步、线程安全的C日志库&#xff0c;他可以方便地记录应用程序的运行状态&#xff0c;并提供多种输出格式。官网&#xff1a;https://github.com/gabime/spdlog 安装教程可以参考&#xff1a;https://blog.csdn.net/Harrytsz/article/details/144887297 S…...

Pytorch机器学习——1 深度学习介绍

outline 人工智能、机器学习与深度学习深度学习工具介绍 1. 人工智能、机器学习与深度学习 AI&#xff1a;研究如何能让计算机模拟人类的智能&#xff0c;来实现特定的依赖人类智能才能实现的任务&#xff08;例如学习、语言、识别&#xff09; AI历史&#xff1a; 1818&#x…...

软件工程期末大复习(六)面向对象分析

6.1 软件分析概述 软件分析是软件开发生命周期中的一个关键阶段&#xff0c;它紧随需求收集之后。在这个阶段&#xff0c;分析者的目标是理解用户的需求&#xff0c;并确定系统应该做什么。 需求分析&#xff1a;分析用户的需求&#xff0c;确定系统必须实现的功能。概念性设计…...

科研绘图系列:R语言科研绘图之标记热图(heatmap)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图系统信息参考介绍 科研绘图系列:R语言科研绘图之标记热图(heatmap) 加载R包 library(tidyverse) library(ggplot2) library(reshape)…...

数据挖掘——朴素贝叶斯分类

数据挖掘——朴素贝叶斯分类 朴素贝叶斯分类极大后验假设独立性假设贝叶斯分类器总结 朴素贝叶斯分类 什么是分类&#xff1f; 找出描述和区分数据类或概念的模型&#xff0c;以便能够使用模型预测未知的对象的类标号 概念区分 分类与回归 分类是预测分类&#xff08;离散、…...

Redis数据库笔记—— Hash(哈希)的扩容机制(rehash)

大家好&#xff0c;这里是Good Note&#xff0c;关注 公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。详细介绍Hash&#xff08;哈希&#xff09;的扩容机制(rehash)、源码、以及扩容和缩容过程。 文章目录 Redis 字典&#xff08;dict&#xff09;结构源码哈希…...