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

断点续传使用场景,完整前后端实现示例,包括上传,下载,验证

断点续传在多个场景中非常有用,包括但不限于大文件上传、跨国或跨区域文件传输、移动设备文件传输、备份和同步以及软件更新等。接下来,我将为你提供一个基于Java的后端实现示例,结合前端逻辑来完成整个断点续传的功能,包括上传、下载和验证。

后端实现(使用Spring Boot)

添加依赖

首先,在pom.xml中添加必要的依赖:

<dependencies><!-- Spring Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Apache Commons IO for file handling --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version></dependency><!-- Jackson for JSON processing --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>
</dependencies>
控制器代码
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;@RestController
@RequestMapping("/api")
public class FileController {private static final String UPLOAD_DIR = "uploads/";@PostMapping("/upload")public ResponseEntity<?> uploadChunk(@RequestParam("file") MultipartFile file,@RequestParam("fileName") String fileName,@RequestParam("chunkIndex") int chunkIndex,@RequestParam("totalChunks") int totalChunks) throws IOException {// 创建目录String dirPath = UPLOAD_DIR + fileName;new File(dirPath).mkdirs();// 保存分片File chunkFile = new File(dirPath, chunkIndex + ".part");try (OutputStream os = new FileOutputStream(chunkFile)) {os.write(file.getBytes());}// 记录已上传的分片Set<Integer> uploadedChunks = loadUploadedChunks(fileName);uploadedChunks.add(chunkIndex);saveUploadedChunks(fileName, uploadedChunks);if (uploadedChunks.size() == totalChunks) {mergeChunks(fileName, totalChunks);}return ResponseEntity.ok().build();}@GetMapping("/download")public ResponseEntity<byte[]> download(@RequestParam("fileName") String fileName) throws IOException {String filePath = UPLOAD_DIR + fileName + "/" + fileName;byte[] bytes = Files.readAllBytes(Paths.get(filePath));return ResponseEntity.ok().header("Content-Disposition", "attachment; filename=" + fileName).body(bytes);}@GetMapping("/check")public ResponseEntity<Map<String, Object>> check(@RequestParam("fileName") String fileName) {Set<Integer> uploadedChunks = loadUploadedChunks(fileName);Map<String, Object> response = new HashMap<>();response.put("uploadedChunks", uploadedChunks);return ResponseEntity.ok(response);}private Set<Integer> loadUploadedChunks(String fileName) {String filePath = UPLOAD_DIR + fileName + "/uploadedChunks.json";File file = new File(filePath);Set<Integer> chunks = new HashSet<>();if (file.exists()) {try {chunks = new HashSet<>(Arrays.asList(FileUtils.readFileToString(file, "UTF-8").split(","))).stream().map(Integer::parseInt).collect(Collectors.toSet());} catch (IOException e) {e.printStackTrace();}}return chunks;}private void saveUploadedChunks(String fileName, Set<Integer> uploadedChunks) {String filePath = UPLOAD_DIR + fileName + "/uploadedChunks.json";try {FileUtils.writeStringToFile(new File(filePath), String.join(",", uploadedChunks.stream().map(String::valueOf).toList()), "UTF-8");} catch (IOException e) {e.printStackTrace();}}private void mergeChunks(String fileName, int totalChunks) throws IOException {String dirPath = UPLOAD_DIR + fileName;String mergedFilePath = UPLOAD_DIR + fileName + "/" + fileName;try (OutputStream os = new FileOutputStream(mergedFilePath)) {for (int i = 0; i < totalChunks; i++) {File chunkFile = new File(dirPath, i + ".part");byte[] bytes = Files.readAllBytes(chunkFile.toPath());os.write(bytes);Files.delete(chunkFile.toPath());}}}
}

前端实现(使用Vue.js)

安装依赖

确保你已经安装了axios用于HTTP请求处理:

npm install axios
上传组件
<template><div><input type="file" @change="selectFile"><button @click="upload">上传</button></div>
</template><script>
import axios from 'axios';export default {data() {return {file: null,chunkSize: 5 * 1024 * 1024, // 5MBuploadedChunks: []};},methods: {selectFile(e) {this.file = e.target.files[0];this.uploadedChunks = [];},async upload() {const fileName = this.file.name;const totalChunks = Math.ceil(this.file.size / this.chunkSize);// 获取已上传的分片信息const { data } = await axios.get('/api/check', { params: { fileName } });this.uploadedChunks = data.uploadedChunks;for (let i = 0; i < totalChunks; i++) {if (this.uploadedChunks.includes(i)) continue;const start = i * this.chunkSize;const end = Math.min(start + this.chunkSize, this.file.size);const chunk = this.file.slice(start, end);const formData = new FormData();formData.append('file', new Blob([chunk]));formData.append('fileName', fileName);formData.append('chunkIndex', i);formData.append('totalChunks', totalChunks);await axios.post('/api/upload', formData);this.uploadedChunks.push(i);}alert('文件上传成功');}}
};
</script>
下载组件
<template><div><input type="text" v-model="fileName"><button @click="download">下载</button></div>
</template><script>
import axios from 'axios';export default {data() {return {fileName: ''};},methods: {async download() {const response = await axios.get('/api/download', { params: { fileName: this.fileName }, responseType: 'blob' });const url = window.URL.createObjectURL(new Blob([response.data]));const link = document.createElement('a');link.href = url;link.setAttribute('download', this.fileName);document.body.appendChild(link);link.click();}}
};
</script>
验证组件
<template><div><input type="text" v-model="fileName"><button @click="check">验证</button><p>已上传分片:{{ uploadedChunks }}</p></div>
</template><script>
import axios from 'axios';export default {data() {return {fileName: '',uploadedChunks: []};},methods: {async check() {const { data } = await axios.get('/api/check', { params: { fileName: this.fileName } });this.uploadedChunks = data.uploadedChunks;}}
};
</script>

这个示例展示了如何使用Spring Boot作为后端,并结合Vue.js前端来实现断点续传功能。你可以根据自己的需求进行调整和优化,例如增加错误处理、进度条显示等功能。

相关文章:

断点续传使用场景,完整前后端实现示例,包括上传,下载,验证

断点续传在多个场景中非常有用&#xff0c;包括但不限于大文件上传、跨国或跨区域文件传输、移动设备文件传输、备份和同步以及软件更新等。接下来&#xff0c;我将为你提供一个基于Java的后端实现示例&#xff0c;结合前端逻辑来完成整个断点续传的功能&#xff0c;包括上传、…...

Xinference推理框架

概述 GitHub&#xff0c;官方文档。 核心优势 性能优化&#xff1a;通过vLLM、SGLang等引擎实现低延迟推理&#xff0c;吞吐量提升2-3倍&#xff1b;企业级支持&#xff1a;支持分布式部署、国产硬件适配及模型全生命周期管理&#xff1b;生态兼容&#xff1a;无缝对接LangC…...

技术更新频繁,团队如何适应变化

构建持续学习机制、引入技术雷达与预研机制、通过敏捷方法快速响应变化、推动跨团队知识协作与传承 是应对技术更新频繁、团队保持适应力的核心策略。其中&#xff0c;构建持续学习机制尤为关键。通过制度化、场景化的学习安排&#xff0c;团队可以主动追踪新技术趋势&#xff…...

解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs-MCP大模型上下文解析

解密企业级大模型智能体Agentic AI 关键技术&#xff1a;MCP、A2A、Reasoning LLMs-MCP大模型上下文解析 我们首先来看一下 整个MCP的一个基本的一个流程&#xff0c;他解决的一个问题。我们回到这里&#xff0c;他解决的一个问题是什么呢&#xff1f;他解决这个问题就是你的大…...

游戏代码混淆的作用与应用分析

1. 防止逆向工程 核心保护对象&#xff1a;游戏引擎、算法&#xff08;如物理模拟、AI行为树&#xff09;、加密逻辑等。实例&#xff1a;Unity游戏使用 ConfuserEx 混淆C#代码&#xff0c;使反编译工具&#xff08;如dnSpy&#xff09;只能显示杂乱命名&#xff0c;难以理解逻…...

信息系统运行管理员:临阵磨枪版

信息系统运行管理员考试 - 全覆盖详细背诵大纲 (根据考情分析和原始材料&#xff0c;力求完整覆盖考点细节) 第一部分&#xff1a;基础知识与运维概览 Chapter 1: 信息系统运维概述 (上午题 5分) 信息&#xff1a; 含义&#xff1a;香农 - 减少随机不确定性的东西&#xff1b…...

PWM(脉宽调制)的配置参数[预分频器\自动重载值]的自动计算

文章目录 前言一、数据结构二、二分法搜索最佳预分频器和自动重载值三、示例 前言 pwm是嵌入式开发过程中很常见的一个模块&#xff0c;而配置pwm的过程中就少不了频率参数的计算&#xff0c;大多数32位机的pwm频率都由时钟、预分频器&#xff08;prescaler&#xff09;、自动…...

manuskript开源程序是面向作家的开源工具

一、软件介绍 文末提供程序和源码下载 manuskript开源程序是面向作家的开源工具&#xff0c;Manuskript 可在 GNU/Linux、Mac OS X 和 Windows 上运行。 二、Features 特征 Manuskript provides a rich environment to help writers create their first draft and then furt…...

antd 主题色定制

定制方案&#xff1a; 1. 全局定制 整个应用范围内的组件都生效 全局文件 theme.css :root:root {--adm-color-primary: #a062d4; } antd-mobile 中的主题变量也是在 :root 下声明的&#xff0c;所以在有些情况会由于优先级的问题无法覆盖。通过 :root:root 显式地让你所…...

召回11:地理位置召回、作者召回、缓存召回

GeoHash 召回 属于地理位置召回&#xff0c;用户可能对附近发生的事情感兴趣。GeoHash 是一种对经纬度的编码&#xff0c;地图上每个单位矩形的 GeoHash 的前几位是相同的&#xff0c;GeoHash 编码截取前几位后&#xff0c;将相同编码发布的内容按时间顺序&#xff08;先是时间…...

leetcode0767. 重构字符串-medium

1 题目&#xff1a;重构字符串 官方标定难度&#xff1a;中 给定一个字符串 s &#xff0c;检查是否能重新排布其中的字母&#xff0c;使得两相邻的字符不同。 返回 s 的任意可能的重新排列。若不可行&#xff0c;返回空字符串 “” 。 示例 1: 输入: s “aab” 输出: “…...

vue基本介绍

Vue是一款流行的JavaScript前端框架&#xff0c;以下是其基本介绍&#xff1a; 发展历程 - 2014年&#xff0c;尤雨溪发布了Vue的第一个版本。 - 此后&#xff0c;Vue不断发展和完善&#xff0c;陆续发布了多个版本&#xff0c;功能逐渐强大&#xff0c;社区也日益活跃。 …...

【vue】【环境配置】项目无法npm run serve,显示node版本过低

解决方案&#xff1a;安装高版本node&#xff0c;并且启用高版本node 步骤&#xff1a; 1、查看当前版本 node -v2、配置nvm下载镜像源 1&#xff09;查看配置文件位置 npm root2&#xff09;找到settings.txt文件 修改镜像源为&#xff1a; node_mirror: https://npmmirro…...

第35周Zookkeeper+Dubbo JDK不同版本介绍

一、JDK 新特性全解析 JDK9 - 模块化&#xff1a;化繁为简的魔法 模块化特性&#xff1a;JDK9 给 Java 程序带来模块化特性&#xff0c;就像把一个大公司划分成多个部门&#xff0c;每个部门&#xff08;模块&#xff09;各司其职。模块比包更大&#xff0c;一个模块包含多个…...

【ORB-SLAM3】CreateNewKeyFrame()函数阅读

void Tracking::CreateNewKeyFrame() void Tracking::CreateNewKeyFrame() {// 如果局部建图线程正在初始化且没做完或关闭了,就无法插入关键帧if(mpLocalMapper->IsInitializing() && !mpAtlas->isImuInitialized())return;if(!mpLocalMapper->SetNotStop(t…...

腾讯开源实时语音大模型VITA-audio,92mstoken极速响应,支持多语言~

简介 VITA-Audio 是一个由腾讯优图实验室&#xff08;Tencent Youtu Lab&#xff09;、南京大学和厦门大学的研究人员共同开发的项目&#xff0c;旨在解决现有语音模型在流式生成&#xff08;streaming&#xff09;场景下生成第一个音频令牌&#xff08;token&#xff09;时的高…...

使用 TypeScript + dhtmlx-gantt 在 Next.js 中实现

1. 安装依赖&#xff08;确保已安装&#xff09; npm install dhtmlx-gantt2. 创建 pages/gantt.tsx use clientimport { useRef, useEffect } from react import { gantt } from dhtmlx-gantt import dhtmlx-gantt/codebase/dhtmlxgantt.cssinterface Task {id: number | st…...

web第四次课后作业--页面操作实现数据库的增删查改

一、环境配置 1. 创建一个java web&#xff08;maven构建&#xff09;的项目2. 配置tomcat3. 连接数据库二、页面呈现 登录页面 详细信息 删除一条信息后 更新 更新后的信息 三、目录结构 四、代码实现 4.1 denglu.jsp <% page language"java" cont…...

DeepSearch:字节新一代 DeerFlow 框架

项目地址&#xff1a;https://github.com/bytedance/deer-flow/ 【全新的 Multi-Agent 架构设计】独家设计的 Research Team 机制&#xff0c;支持多轮对话、多轮决策和多轮任务执行。与 LangChain 原版 Supervisor 相比&#xff0c;显著减少 Tokens 消耗和 API 调用次数&#…...

uniapp中vue3和pinia安装依赖npm install失败

目录 一、问题描述 二、问题原因 三、问题解析及解决方案 一、问题描述 用uni-app开发小程序的时候&#xff0c;使用了vue3pinia,安装依赖的时候发现vue和pinia的版本问题&#xff0c;安装失败&#xff0c; npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve np…...

【java】synchronized关键字详解

目录 一、线程同步与线程安全问题线程不安全Demo线程不安全的原因 二、synchronized关键字关键字锁粒度修饰对象修饰代码块修饰方法修饰静态方法修饰类 synchronized 锁总结 synchronized加锁原理MarkWordsynchronized锁升级synchronized锁原理synchronized关键字总结 其他同步…...

使用 `perf` 和火焰图(Flame Graph)进行性能分析

在现代软件开发中&#xff0c;性能优化是提升应用程序响应速度和资源利用率的关键步骤。当一个进程的 CPU 占用率异常高时&#xff0c;识别并优化性能瓶颈显得尤为重要。本文将详细介绍如何使用 Linux 下强大的性能分析工具 perf 以及火焰图&#xff08;Flame Graph&#xff09…...

Cocos Creator 3.8.5 构建依赖环境配置文档

Cocos Creator 3.8.5 构建依赖环境配置文档 文章目录 Cocos Creator 3.8.5 构建依赖环境配置文档✅ 构建依赖汇总表✅ 构建平台配置说明&#x1f449; Windows 构建&#x1f449; Android 构建 ✅ 推荐构建环境组合&#xff08;稳定&#xff09;✅ 常见问题提示 适用于打包 An…...

# FlyEnv 环境下 MySQL 操作全攻略:从基础到字段修改

在使用 FlyEnv 搭建开发环境时&#xff0c;MySQL 数据库的操作是开发过程中不可或缺的一环。无论是修改字段结构&#xff0c;还是执行其他常见操作&#xff0c;都需要熟练掌握相关技能。下面将为你详细介绍 FlyEnv 环境下 MySQL 的操作&#xff0c;以及修改字段的多种方法。 一…...

C语言_自动义类型:联合和枚举

1. 联合体 1.1 联合体类型的声明 与结构体相似&#xff0c;联合体也是有一个或多个成员&#xff08;可以是不同类型&#xff09;构成&#xff1b;但是编译器只为最大的成员分配足够的内存空间 联合体的特点是所有成员共用同一块内存空间&#xff0c;所以联合体也叫&#xff…...

Golang基础知识—cond

cond 通常指 sync.Cond&#xff0c;它是标准库 sync 包中用于实现 条件变量 的同步原语。条件变量在多 goroutine 协作场景中非常有用&#xff0c;尤其在需要根据特定条件协调多个 goroutine 的执行顺序时。 sync.Cond 的核心作用 条件变量用于 等待某个条件满足 或 通知其他等…...

深入探索向量数据库:构建智能应用的新基础

&#x1f4cc; 友情提示&#xff1a; 本文内容由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;创作平台的gpt-4-turbo模型辅助生成&#xff0c;旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证&#xff0c;建议读者通过官方文档或实践进一步确认…...

实验5 DNS协议分析与测量

实验5 DNS协议分析与测量 1、实验目的 了解互联网的域名结构、域名系统DNS及其域名服务器的基本概念 熟悉DNS协议及其报文基本组成、DNS域名解析原理 掌握常用DNS测量工具dig使用方法和DNS测量的基本技术 2、实验环境 硬件要求&#xff1a;阿里云云主机ECS 一台。 软件要…...

1200/1500 PID 学习笔记

一 准备 1. 仿真库文件&#xff0c;下载链接放在最后 2.PID仿真&#xff0c;不支持1200.所以组CPU需要1500. 3.PID必须在循环中断里面调用。 二 试水 1. 拉一个PID指令 2. 库文件拉入 3 仿真试水&#xff0c;可以看到已经开始调节了。 、 三 组态设置 1. Input: 输入值&a…...

深度学习中--模型调试与可视化

第一部分&#xff1a;损失函数与准确率的监控&#xff08;Loss / Accuracy Curve&#xff09; 1. 为什么要监控 Loss 与 Accuracy&#xff1f; Loss 是模型优化的依据&#xff0c;但它可能下降了 Accuracy 反而没变&#xff08;过拟合信号&#xff09; Accuracy 才是评估效果的…...

tomcat项目重构踩坑易错点

是的&#xff0c;没错&#xff0c;弄了一个特别老的项目。重构真是头疼啊。其实好吧&#xff0c;还是用的太少。 前提条件&#xff1a;用idea工具非社区版。注意是非社区版。点击设置- project Structure 1.配置Modules 点击import module 添加好模块后。 重点来了&#xff0…...

如何安全擦除 SSD 上的可用空间

无论您是要处理旧 SSD 还是只是想确保敏感信息的私密性&#xff0c;擦除可用空间都是至关重要的一步。那么&#xff0c;您可以擦除 SSD 上的可用空间吗&#xff1f;是的&#xff0c;可以擦除 SSD 上的可用空间&#xff0c;我们在本指南中提供了两种有效的方法。是的&#xff0c…...

增强 HTNN 服务网格功能:基于 Istio 的BasicAuth 与 ACL 插件开发实战

目录 1.引言 什么是HTNN&#xff1f; 为什么开发 BasicAuth 和 ACL 插件&#xff1f; 2.技术背景 技术栈概览 Istio 与服务网格简述 HTNN 框架与插件机制概览 3.插件开发详解&#xff1a;BasicAuth 与 ACL 3.1 BasicAuth插件 功能点 实现细节 3.2 ACL插件 功能点 …...

从概念到可工程化智能体的转变路径——以“知识奇点工程师”为例

产品部门定义了一个如下概念性的“知识奇点工程师”&#xff0c;他们构建的不仅仅是一个数据库或知识图谱&#xff0c;而是一个活的、能自我进化的知识生态系统&#xff0c;是整个“Neuralink for Education”宏伟蓝图的基石。他们的工作难度和重要性&#xff0c;不亚于为AI引擎…...

docker(四)使用篇一:docker 镜像仓库

前文我们已经介绍了 docker 并安装了 docker&#xff0c;下面我们将正式步入使用环节&#xff0c;本章是第一个使用教学&#xff1a;docker 镜像仓库。 一、什么是镜像仓库 所谓镜像仓库&#xff0c;其实就是负责存储、管理和分发镜像的仓库&#xff0c;并且建立了仓库的索引…...

S7-1500 与 IM60 进行 PROFINET 通信

S7-1500 与 IM60 进行 PROFINET 通信 本文档介绍使用 S7-1500 CPU 与 IM 60 进行 PROFINET 通信&#xff0c;实现对 IM60 及 AM03 的控制。 使用软件及硬件 软件&#xff1a;工控人加入PLC工业自动化精英社群 TIA Portal V19 ET 200 SMART IM60 GSD 文件下载链接&#xff…...

车载诊断架构 ---车载总线对于功能寻址的处理策略

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

观QFramework框架底层逻辑有感

拿QFramework&#xff08;以下简称QF&#xff09;第一个案例简单理解框架底层代码逻辑。 使用QF框架重构后的代码&#xff0c;给我这种小白一种很抽象的感觉&#xff0c;但好的代码就是抽象的&#xff0c;这是不可否认的。于是想掌握一下这个框架的基础部分&#xff0c;至少能…...

ExecutorService详解:Java 17线程池管理从零到一

简介 在现代高并发应用中,线程池管理已成为提升系统性能与稳定性的关键核心技术。ExecutorService作为Java并发编程的核心接口,提供了对线程池的强大抽象与管理能力,相比直接管理线程,它能显著降低资源消耗、提高响应速度并增强系统可维护性。随着Java 17的发布,线程池管…...

Go 中闭包的常见使用场景

在 Go 中&#xff0c;闭包&#xff08;Closure&#xff09; 是一个函数值&#xff0c;它引用了其定义时所在作用域中的变量。也就是说&#xff0c;闭包可以访问并修改外部作用域中的变量。 Go 中闭包的常见使用场景 ✅ 1. 封装状态&#xff08;无须结构体&#xff09; 闭包可…...

养生:打造健康生活的四大支柱

饮食养生&#xff1a;吃对食物&#xff0c;滋养生命根基 饮食是健康的物质基础&#xff0c;需遵循 “均衡、天然、顺应时节” 原则&#xff1a; 三餐科学搭配&#xff1a; 早餐以高蛋白 膳食纤维为主&#xff0c;如燕麦粥配水煮蛋、蓝莓&#xff0c;快速激活代谢&#xff1b;…...

OpenCV 图像直方图:从原理剖析到实战应用

在数字图像处理领域&#xff0c;图像直方图是一种强大而基础的工具&#xff0c;它以直观的方式展示了图像中像素值的分布情况。OpenCV 作为广泛应用的计算机视觉库&#xff0c;提供了丰富的函数来处理图像直方图。本文将深入讲解图像直方图的原理、OpenCV 中的实现方法&#xf…...

springboot+vue实现在线书店(图书商城)系统

今天教大家如何设计一个图书商城 , 基于目前主流的技术&#xff1a;前端vue&#xff0c;后端springboot。 同时还带来的项目的部署教程。 视频演示 在线书城 图片演示 一. 系统概述 商城是一款比较庞大的系统&#xff0c;需要有商品中心&#xff0c;库存中心&#xff0c;订单…...

LLM Text2SQL NL2SQL 实战总结

目录 尽量全面的描述表的功能 尽量全面的描述字段的功能 适当放弃意义等价的字段 放弃业务上无用的字段 对于LLM来说,由于它没有什么行业经验,所以我们需要尽可能的给予它恰当的“背景信息”,才能使它更好的工作。所谓恰当,不是越多越好,因为太多的信息会消耗掉LLM的可…...

SQLPub:一个提供AI助手的免费MySQL数据库服务

给大家介绍一个免费的 MySQL 在线数据库环境&#xff1a;SQLPub。它提供了最新版本的 MySQL 服务器测试服务&#xff0c;可以方便开发者和测试人员验证数据库功能&#xff0c;也可以用于学习 MySQL。 免费申请 在浏览器中输入以下网址&#xff1a; https://sqlpub.com/ SQLP…...

EasyExcel集成使用总结与完整示例

EasyExcel集成使用总结与完整示例 一、EasyExcel简介 EasyExcel是阿里巴巴开源的Java库&#xff0c;专注于简化Excel文件的读写操作。它基于Apache POI进行了优化&#xff0c;采用流式处理&#xff0c;具有低内存占用和高性能的特点&#xff0c;非常适合处理大规模数据的导入…...

【hot100-动态规划-139.单词拆分】

力扣139.单词拆分 本题要求判断给定的字符串 s 是否可以被空格拆分为一个或多个在字典 wordDict 中出现的单词,且不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用,这是一个典型的动态规划问题。 动态规划思路 定义状态: 定义一个布尔类型的数组 dp,其中…...

人工神经网络(ANN)模型

一、概述 人工神经网络&#xff08;Artificial Neural Network&#xff0c;ANN&#xff09;&#xff0c;是一种模拟生物神经网络结构和功能的计算模型&#xff0c;它通过大量的神经元相互连接&#xff0c;实现对复杂数据的处理和模式识别。从本质上讲&#xff0c;人工神经网络是…...

2025ICPC陕西省赛题解

L. easy 每行选能选的最小的两个&#xff0c;注意处理奇数的情况。 #include <bits/stdc.h> #define x first #define y second #define int long longusing namespace std; typedef unsigned long long ULL ; typedef pair<int,int> PII ; typedef pair<lon…...

不同进制的数据展示(十进制、十六进制、编码方式)

目录 1、十六进制的数值转为十进制&#xff08;可能是补码&#xff09; 2、十进制转为十六进制&#xff08;负数要转为补码&#xff09; 背景&#xff1a; &#xff08;1&#xff09; 接收到通讯的数据&#xff0c;把数据读取出来&#xff0c;并转成自己想要的格式。 &#x…...