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

前端如何获取文件的 Hash 值?多种方式详解、对比与实践指南

文章目录

  • 前言
  • 一、Hash 值为何重要?
  • 二、Hash 值基础知识
    • 2.1 什么是 Hash?
    • 2.2 Hash 在前端的应用场景
    • 2.3 常见的 Hash 算法(MD5、SHA 系列)
  • 三、前端获取文件 Hash 的常用方式
    • 3.1 使用 SparkMD5 计算 MD5 值
    • 3.2 使用 Web Crypto API 计算 SHA256
    • 3.3 大文件优化:分片读取 + 增量 Hash
    • 3.4 使用 Web Worker 解耦计算与主线程
    • 3.5 小程序中计算文件 Hash(限制较多)
  • 四、各方式详细实战与完整代码
  • 五、性能对比分析:不同方案的优劣对照
  • 六、安全性与工程化注意事项
  • 七、文件 Hash 的工程化封装建议
  • 八、总结与推荐实践
  • 总结
  • 附录


前言

本文是一份面向 Web 和小程序开发者的深度技术指南,详解前端获取文件 Hash 值的多种方式,涵盖常见算法(如 MD5、SHA-256)、工具(如 SparkMD5、Crypto API)、大文件分片优化、Worker 多线程实现等内容,辅以详细的实战代码与工程化建议,帮助开发者从基础认知到最佳实践,构建安全、高效、稳定的前端文件处理方案。


一、Hash 值为何重要?

在文件上传、资源验证、版本控制、数字签名、缓存管理等场景中,“文件是否变更” 成为了前端工程的核心命题之一。而获取文件的 Hash 值,就是判断其内容是否变更的最直接方式。

在前端项目中引入 Hash,最常见的应用包括:

•	上传前秒传判断:上传前将文件 Hash 发送到后端,若已存在则无需上传,提高性能
•	去重判断:用户多次选择相同文件时可直接过滤
•	数据校验:上传后返回 Hash,用于数据完整性校验
•	签名加密:与私钥结合进行上传签名,提高安全性
•	断点续传标识:通过 Hash 快速定位上传位置

不论是 Web 端还是微信小程序端,文件内容哈希计算已成为现代前端开发的必备能力。

二、Hash 值基础知识

2.1 什么是 Hash?

Hash 是一种不可逆的内容摘要函数,它能将任意大小的数据映射成固定长度的输出(通常为十六进制字符串),并满足:

特性说明
碰撞概率极低不同内容对应不同 Hash
不可逆无法通过 Hash 还原原文件内容
快速计算适合高频率验证和对比

2.2 Hash 在前端的应用场景

场景应用描述
文件秒传通过 Hash 判断是否已上传过
文件上传签名上传前生成 Hash + 签名组合
去重去除用户多选的重复文件
验证一致性上传前后文件是否发生变化
缓存优化Hash 作为唯一缓存 Key
服务端匹配用 Hash 建立索引,无需文件名等冗余匹配

2.3 常见的 Hash 算法(MD5、SHA 系列)

算法输出位数速度安全性备注
MD5128bit易碰撞推荐非安全场景,如秒传
SHA-1160bit已淘汰不建议使用
SHA-256256bit安全推荐签名、验证场景
SHA-512512bit安全数据量大场景可考虑

三、前端获取文件 Hash 的常用方式

3.1 使用 SparkMD5 计算 MD5 值

•	支持 ArrayBuffer、分片追加、异步处理
•	兼容浏览器、小程序、Node.js
•	社区成熟,API 简洁

合适:

•	图片、视频上传前 hash
•	秒传判断

3.2 使用 Web Crypto API 计算 SHA256

•	原生实现,无需引入第三方库
•	支持 SHA-1、SHA-256、SHA-384、SHA-512 等算法
•	可生成 ArrayBuffer + 十六进制字符串

兼容性注意:

•	微信小程序、小程序 WebView 不支持

3.3 大文件优化:分片读取 + 增量 Hash

•	使用 File.slice() + FileReader.readAsArrayBuffer
•	按固定大小分片(推荐 2MB / 4MB)
•	避免一次性读取整个文件造成 UI 卡顿或崩溃

适合:

•	视频、压缩包等大文件
•	上传平台带宽限制优化

3.4 使用 Web Worker 解耦计算与主线程

•	将 Hash 计算放入独立线程
•	保证 UI 流畅,防止页面冻结
•	支持多文件并行处理

适合:

•	图片批量上传页面
•	多文件秒传前校验

小程序暂不支持 Worker

3.5 小程序中计算文件 Hash(限制较多)

•	无 Web Crypto API
•	推荐使用 wx.getFileSystemManager().readFileSync(path) 获取 ArrayBuffer,再配合 spark-md5 使用

四、各方式详细实战与完整代码

SparkMD5 示例代码(适用于小程序 / 浏览器)

import SparkMD5 from 'spark-md5';export async function getFileMD5(file: File): Promise<string> {const reader = new FileReader();return new Promise((resolve, reject) => {reader.onload = (e) => {const hash = SparkMD5.ArrayBuffer.hash(e.target?.result as ArrayBuffer);resolve(hash);};reader.onerror = reject;reader.readAsArrayBuffer(file);});
}

Web Crypto API 示例(仅浏览器)

export async function getSHA256(file: File): Promise<string> {const buffer = await file.arrayBuffer();const digest = await crypto.subtle.digest('SHA-256', buffer);return Array.from(new Uint8Array(digest)).map(b => b.toString(16).padStart(2, '0')).join('');
}

分片 + SparkMD5(处理大文件)

export async function getLargeFileMD5(file: File): Promise<string> {const chunkSize = 2 * 1024 * 1024;const chunks = Math.ceil(file.size / chunkSize);let currentChunk = 0;const spark = new SparkMD5.ArrayBuffer();return new Promise((resolve, reject) => {const reader = new FileReader();const loadNext = () => {const start = currentChunk * chunkSize;const end = Math.min(start + chunkSize, file.size);reader.readAsArrayBuffer(file.slice(start, end));};reader.onload = (e) => {spark.append(e.target?.result as ArrayBuffer);currentChunk++;if (currentChunk < chunks) loadNext();else resolve(spark.end());};reader.onerror = reject;loadNext();});
}

Web Worker 示例(适用于浏览器大文件异步处理)

// worker.js
self.importScripts('spark-md5.min.js');
self.onmessage = function (e) {const spark = new SparkMD5.ArrayBuffer();spark.append(e.data);self.postMessage(spark.end());
};
// 主线程
const worker = new Worker('worker.js');
worker.postMessage(fileBuffer);
worker.onmessage = (e) => {console.log('File hash:', e.data);
};

五、性能对比分析:不同方案的优劣对照

方案适用平台性能安全性UI 友好是否支持大文件支持并发
SparkMD5浏览器、小程序✅ 快速分片可支持
Web Crypto浏览器中等✅ 高❌(阻塞)❌ 不推荐
分片 + Spark全平台✅ 最优✅ 流畅✅ 支持
Worker + Hash浏览器✅ 最优✅ 非阻塞✅ 支持

六、安全性与工程化注意事项

•	MD5 非加密算法,仅用于业务层校验,不能用于认证/授权
•	前端计算结果应始终由服务端验证,不可用于安全逻辑关键路径
•	注意 hash 伪造风险,应结合文件大小、类型等复合校验
•	小程序中禁止读写非临时路径,必须使用 wx.chooseFile() 获得路径
•	避免将 hash 值暴露在 URL 或可控环境中,防止缓存攻击

七、文件 Hash 的工程化封装建议

建议将文件 hash 逻辑封装为独立模块或服务:

// hash.service.ts
export interface FileHashResult {hash: string;size: number;name: string;time: number;type: 'image' | 'video';
}export async function computeFileHash(file: File): Promise<FileHashResult> {const hash = await getLargeFileMD5(file);return {hash,size: file.size,name: file.name,time: Date.now(),type: file.type.includes('image') ? 'image' : 'video',};
}

模块化好处:

•	✅ 项目中复用统一逻辑
•	✅ 支持 hash 缓存
•	✅ 可拓展为上传组件的一部分

八、总结与推荐实践

目标推荐方案
通用中小文件SparkMD5
安全场景Web Crypto API + SHA256(仅浏览器)
大文件上传分片 + SparkMD5
多线程优化Worker + SparkMD5
小程序兼容性FileSystemManager + SparkMD5

总结

本文系统性地讲解了前端获取文件 Hash 值的多种方式,涵盖了从原理认知到实战实现、从性能优化到工程封装的完整过程。在实际开发中,不同场景对性能、安全性、兼容性有不同要求,因此选用适合的 Hash 实现方式至关重要。

•	小文件、秒传:推荐使用 SparkMD5,简单高效;
•	大文件处理:采用分片 + SparkMD5 可避免卡顿;
•	现代浏览器安全场景:优先 Web Crypto API + SHA256;
•	多文件异步处理:建议使用 Web Worker 优化;
•	小程序平台:需结合 FileSystemManager 与 SparkMD5 实现兼容计算。

💡前端计算 Hash 不是终点,而是连接业务逻辑与后端判断的一座桥梁。
在可控的范围内前移逻辑,既能提升用户体验,也能降低系统成本。
将 Hash 计算模块化、标准化,是现代前端工程能力的重要体现。

附录

spark-md5

Web Crypto digest 介绍

微信小程序文件操作文档

相关文章:

前端如何获取文件的 Hash 值?多种方式详解、对比与实践指南

文章目录 前言一、Hash 值为何重要&#xff1f;二、Hash 值基础知识2.1 什么是 Hash&#xff1f;2.2 Hash 在前端的应用场景2.3 常见的 Hash 算法&#xff08;MD5、SHA 系列&#xff09; 三、前端获取文件 Hash 的常用方式3.1 使用 SparkMD5 计算 MD5 值3.2 使用 Web Crypto AP…...

Java与Kotlin在Android开发中的全面对比分析

趋势很重要 语言发展背景与现状 Android操作系统自2008年正式发布以来&#xff0c;Java长期作为其主要的开发语言。这种选择源于Java语言的跨平台特性、成熟的生态系统以及广泛开发者基础。然而&#xff0c;随着移动开发需求的快速演变&#xff0c;Java在Android开发中逐渐暴…...

Android Kotlin 依赖注入全解:Koin appModule 配置与多 ViewModel 数据共享实战指南

一、基础配置与概念 1. 什么是 appModule appModule 是 Koin 依赖注入框架中的核心配置模块&#xff0c;用于集中管理应用中的所有依赖项。它本质上是一个 Koin 模块&#xff08;org.koin.core.module.Module&#xff09;&#xff0c;通过 DSL 方式声明各种组件的创建方式和依…...

Flink TaskManager详解

1. TaskManager 概述 Apache Flink 的 TaskManager 是作业执行的核心工作节点&#xff0c;负责实际的数据处理任务。它与 JobManager 协同工作&#xff0c;接受其调度指令&#xff0c;管理本地资源&#xff08;如 CPU、内存、网络&#xff09;&#xff0c;并执行具体的算子&am…...

Docker安装(Ubuntu22版)

前言 你是否还在为Linux上配置Docker而感到烦恼&#xff1f; 你是否还在为docker search&#xff0c;docker pull连接不上&#xff0c;而感到沮丧&#xff1f; 本文将解决以上你的所有烦恼&#xff01;快速安装好docker&#xff01; Docker安装 首先&#xff0c;我们得先卸载…...

《深入浅出ProtoBuf:从环境搭建到高效数据序列化》​

ProtoBuf详解 1、初识ProtoBuf2、安装ProtoBuf2.1、ProtoBuf在Windows下的安装2.2、ProtoBuf在Linux下的安装 3、快速上手——通讯录V1.03.1、步骤1&#xff1a;创建.proto文件3.2、步骤2&#xff1a;编译contacts.proto文件&#xff0c;生成C文件3.3、步骤3&#xff1a;序列化…...

【含文档+PPT+源码】基于微信小程序连锁药店商城

项目介绍 本课程演示的是一款基于微信小程序连锁药店商城&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该项目附带的…...

再见,物理删除!MyBatis-Plus @TableLogic 优雅实现逻辑删除

在开发应用程序时&#xff0c;我们经常会遇到需要删除数据的场景。但直接从数据库中物理删除&#xff08;DELETE​&#xff09;数据有时并非最佳选择。为什么呢&#xff1f; 数据恢复: 一旦物理删除&#xff0c;数据通常难以恢复&#xff0c;误操作可能导致灾难性后果。审计追…...

uni-app中获取用户实时位置完整指南:解决权限报错问题

uni-app中获取用户实时位置完整指南&#xff1a;解决权限报错问题 在uni-app开发运行在微信小程序时&#xff0c;获取用户位置信息是一个常见的需求&#xff0c;无论是用于地图导航、附近推荐还是其他基于位置的服务。然而&#xff0c;许多开发者在调用位置相关API时会遇到各种…...

【AI插件开发】Notepad++ AI插件开发1.0发布和使用说明

一、产品简介 AiCoder是一款为Notepad设计的轻量级AI辅助插件&#xff0c;提供以下核心功能&#xff1a; 嵌入式提问&#xff1a;对选中的文本内容进行AI分析&#xff0c;通过侧边栏聊天界面与AI交互&#xff0c;实现多轮对话、问题解答或代码生成。对话式提问&#xff1a;独…...

UnityEditor - 调用编辑器菜单功能

例如: 调用Edit/Frame Selected In Scene EditorApplication.ExecuteMenuItem("Edit/Frame Selected in Scene"); EditorApplication.ExecuteMenuItem("Edit/Lock view to Selected");...

OpenHarmony - 小型系统内核(LiteOS-A)(十),魔法键使用方法,用户态异常信息说明

OpenHarmony - 小型系统内核&#xff08;LiteOS-A&#xff09;&#xff08;十&#xff09; 十四、魔法键使用方法 使用场景 在系统运行出现无响应等情况时&#xff0c;可以通过魔法键功能确定系统是否被锁中断&#xff08;魔法键也无响应&#xff09;或者查看系统任务运行状态…...

在 Vue3 中封装的 Axios 实例中,若需要为部分接口提供手动取消请求的功能

核心思路 封装接口时返回 Promise 和 abort 方法&#xff1a; 为需要支持取消的接口返回一个对象&#xff0c;包含 promise 和 abort 方法&#xff0c;用户可通过 abort 主动中断请求。使用 AbortController 或 CancelToken&#xff1a; 推荐 AbortController&#xff08;浏览…...

QuecPython+audio:实现音频的录制与播放

概述 QuecPython 作为专为物联网设计的开发框架&#xff0c;通过高度封装的 Python 接口为嵌入式设备提供了完整的音频处理能力。本文主要介绍如何利用 QuecPython 快速实现音频功能的开发。 核心优势 极简开发&#xff1a;3行代码完成基础音频录制与播放。快速上手&#xf…...

Langchain入门介绍

[声明] 本文参考:Langchain官方文档 什么是LangChain? LangChain 是一个开源的、用于开发由大型语言模型 (LLM) 驱动的应用程序的框架。它的核心目标是将强大的 LLM&#xff08;如 GPT-4, Claude, Llama 等&#xff09;与外部数据源、计算资源和工具连接起来&#xff0c;从…...

WebUI可视化:第4章:Streamlit数据可视化实战

学习目标 ✅ 掌握Streamlit的安装与基础配置 ✅ 能够创建数据驱动的交互式界面 ✅ 实现常见图表(折线图、柱状图等)的绘制 ✅ 开发完整的业务数据分析应用 4.1 Streamlit快速入门 4.1.1 环境安装 打开终端执行: bash pip install streamlit 验证安装: bash stream…...

3.4 Spring Boot异常处理

本实战项目通过Spring Boot实现了一个简单的用户信息查询功能&#xff0c;并展示了如何自定义异常处理机制。项目中创建了用户实体类User和用户控制器UserController&#xff0c;在控制器中通过isValidUserId方法校验用户ID是否有效&#xff0c;若无效则抛出自定义异常InvalidU…...

期货有哪些种类?什么是股指、利率和外汇期货?

期货主要可以分成两大类&#xff1a;商品期货和金融期货。商品期货&#xff0c;顾名思义&#xff0c;就是跟实物商品有关的期货&#xff0c;比如农产品、金属、能源这些。金融期货呢&#xff0c;就是跟金融产品有关的期货&#xff0c;比如外汇、利率、股票指数这些。 一、商品…...

Golang | 位运算

位运算比常规运算快&#xff0c;常用于搜索引擎的筛选功能。例如&#xff0c;数字除以二等价于向右移位&#xff0c;位移运算比除法快。...

[论文阅读]ReAct: Synergizing Reasoning and Acting in Language Models

ReAct: Synergizing Reasoning and Acting in Language Models [2210.03629] ReAct: Synergizing Reasoning and Acting in Language Models ICLR 2023 这是一篇在2022年挂出来的论文&#xff0c;不要以现在更加强大且性能综合的LLM来对这篇文章进行批判。 思想来源于作者对…...

拥有600+门店的宠物连锁医院,实现核心业务系统上云

瑞派宠物医院管理股份有限公司&#xff08;以下简称“瑞派宠物“&#xff09;从2017年开始数字化转型之路。瑞派宠物在全国有600连锁门店&#xff0c;随着业务量增加&#xff0c;线下部署的财务系统存在设备老旧、机房环境差等问题&#xff0c;部分在公有云上的业务&#xff0c…...

OceanBase 跻身 Forrester 三大领域代表厂商,全面支撑AI场景

在生成式AI迅猛发展的当下&#xff0c;智能化数据管理已成为企业提升数字化水平、优化运营效率和强化市场竞争优势的战略重点。Forrester 最新发布的《2025年中国数据管理生态系统趋势报告》中&#xff0c;OceanBase凭借原生分布式架构和一体化产品优势&#xff0c;入选 全局数…...

学生管理系统微服务方式实现

//不用这种方式实现也可以&#xff0c;用这种方式是为了房间我们理解微服务的实现方式 微服务的实现方式就是把一个单项目应用的不同功能封装成单独的项目&#xff0c;然后向外暴露一个接口以便调用。如果需要这个功能我们直接调用这个功能对应项目的接口就可以了 服务之间的…...

OpenAI最新的4o图像生成模型 gpt-image-1 深度解析:API KEY 获取、开发代码示例

1. 引言 近期&#xff0c;OpenAI 正式发布了其最新的图像生成 API&#xff0c;模型标识符为 gpt-image-1。这一重要发布&#xff0c;首次将先前在 ChatGPT 中通过 GPT-4o 模型驱动、备受用户欢迎的先进图像生成能力&#xff0c;以编程接口&#xff08;API&#xff09;的形式提…...

NAT穿透

NAT是 Net Address Traslation的缩写&#xff0c;即网络地址转换 NAT部署在网络出口的位置。位于内网和公网之间&#xff0c;是连接内挖个主机和公网的桥梁&#xff0c;双向流量都必须经过NAT&#xff0c;装有NAT软件的路由器叫NAT路由器&#xff0c;NAT路由器拥有公网Ip NAT解…...

人工智能与机器学习:Python从零实现性回归模型

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…...

FreeRTOS

FreeRTOS任务调度的三种方式&#xff1a; 抢占式调度 针对优先级不同的任务 时间片调度 针对优先级相同的任务&#xff1b; FreeRTOS中的一个时间片就等于SysTick&#xff08;滴答定时器&#xff09;中断周期&#xff08;1ms&#xff09;; 协程式调度 后续将不再支持。 …...

PCI 总线学习笔记(五)

PCI 总线学习系列&#xff0c;参考自 技术大牛博客&#xff1a; PCIe 扫盲系列博文连载目录篇 书籍&#xff1a;王齐老师的《PCI Express 体系结构导读》 下面的文章中加入了自己的一些理解和实际使用中遇到的一些场景&#xff0c;供日后查询和回忆使用 PCI 总线定义了两类配置…...

PyTorch与CUDA的关系

文章目录 前言一、如何查看PyTorch和torchvision的版本1.1 查看PyTorch版本1.2 查看torchvision版本二、如何确认PyTorch和torchvision是否支持CUDA加速2.1 检查PyTorch是否支持CUDA2.2 查看当前可用的GPU设备2.3 检查torchvision是否支持CUDA三、CUDA版本的秘密:为什么PyTorc…...

网络中断事件进行根因分析(RCA)

网络中断事件的根因分析&#xff08;RCA&#xff09;详解 根因分析&#xff08;Root Cause Analysis, RCA&#xff09;是网络运维中用于定位和解决故障的核心方法&#xff0c;目标是找到问题的根本原因&#xff0c;避免重复发生。以下是完整的RCA流程和方法&#xff1a; 1. RC…...

Mac中 “XX”文件已损坏,无法打开 解决方案

前言 Mac中打开软件 出现“XX”文件已损坏&#xff0c;无法打开的提示 怎么处理&#xff1f; 操作总结 1、查看当前 Gatekeeper 是否启用 spctl --status2、完全关闭 Gatekeeper&#xff08;允许安装任何来源应用&#xff09; sudo spctl --master-disable3、打开“系统设…...

如何通过python连接hive,并对里面的表进行增删改查操作

要通过Python连接Hive并对其中的表进行增删改查操作&#xff0c;可以使用pyhive库。下面是一个简单的示例代码&#xff0c;演示如何连接Hive并执行一些操作&#xff1a; from pyhive import hive# 建立连接 conn hive.connect(hostyour_hive_host, port10000, authNOSASL)# 创…...

对Mac文字双击或三击鼠标左键没有任何反应

目录 项目场景&#xff1a; 问题描述 原因分析&#xff1a; 解决方案&#xff1a; 项目场景&#xff1a; 在使用Mac系统的时候&#xff0c;使用Apple无线鼠标&#xff0c;双击左键能够选取某个单词或词语&#xff0c;三击左键能够选取某一行&#xff0c;&#xff08;百度、…...

【维护窗口内最值+单调队列/优先队列】Leetcode 239. 滑动窗口最大值

题目要求 给定一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。滑动窗口每次只向右移动一位。要求返回滑动窗口中的最大值。 示例 1 输入&#xff1a;nums [1,3,-1,-3,5,3,6,7], k 3 输出&#xff1a;[3,3,5,5,6,7] 解释&#…...

【Leetcode 每日一题】2845. 统计趣味子数组的数目

问题背景 给你一个下标从 0 0 0 开始的整数数组 n u m s nums nums&#xff0c;以及整数 m o d u l o modulo modulo 和整数 k k k。 请你找出并统计数组中 趣味子数组 的数目。 如果 子数组 n u m s [ l . . r ] nums[l..r] nums[l..r] 满足下述条件&#xff0c;则称其为…...

SDC命令详解:使用get_cells命令进行查询

相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 get_cells命令用于创建一个单元对象集合&#xff0c;关于设计对象和集合的更详细介绍&#xff0c;可以参考下面的博客。 Synopsys&#xff1a;设计对象https://c…...

正则表达式及其游戏中应用

一、正则表达式基础知识 ✅ 什么是正则表达式&#xff1f; 正则表达式是一种用来匹配字符串的规则表达式&#xff0c;常用于搜索、验证、替换等文本处理场景。 比如你想找出玩家输入中的邮箱、命令、作弊码……正则就特别好用。 &#x1f4da; 常见语法速查表&#xff1a; …...

如何在 MinGW 和 Visual Studio (MSVC) 之间共享 DLL

如何在 MinGW 和 Visual Studio (MSVC) 之间共享 DLL ✅ .dll.a 和 .lib 是什么&#xff1f; 1. .dll.a&#xff08;MinGW 下的 import library&#xff09; 作用&#xff1a;链接时告诉编译器如何调用 DLL 中的函数。谁用它&#xff1a;MinGW 编译器&#xff08;如 g&#x…...

【HTTP/2和HTTP/3的应用现状:看不见的革命】

HTTP/2和HTTP/3的应用现状&#xff1a;看不见的革命 实际上&#xff0c;HTTP/2和HTTP/3已经被众多著名网站广泛采用&#xff0c;只是这场革命对普通用户来说是"无形"的。让我们揭开这个技术变革的真相。 著名网站的HTTP/2和HTTP/3采用情况 #mermaid-svg-MtfrNDo5DG…...

ts中null类型--结合在vue中的使用、tsconfig.json

总结 TypeScript 中的 null 是一个独立的类型,用于明确表示“无值”或“空值”。在实际开发中,常通过联合类型(如 string | null)或与 ref 结合使用,确保代码的类型安全和可读性。 详情解释 在 TypeScript 中,null 是一个独立的类型,表示 null 值本身。以下是一些关于…...

Hadoop生态圈框架部署 - Windows上部署Hadoop

文章目录 前言一、下载Hadoop安装包及bin目录1. 下载Hadoop安装包2. 下载Hadoop的bin目录 二、安装Hadoop1. 解压Hadoop安装包2. 解压Hadoop的Windows工具包 三、配置Hadoop1. 配置Hadoop环境变量1.1 打开系统属性设置1.2 配置环境变量1.3 验证环境变量是否配置成功 2. 修改Had…...

深度学习笔记22-RNN心脏病预测(Tensorflow)

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、前期准备 1.导入数据 import tensorflow as tf import pandas as pd import numpy as np dfpd.read_csv("E:/heart.csv") df 2.检查数据是否有…...

面试踩过的坑

1、 “”和equals 的区别 “”是运算符&#xff0c;如果是基本数据类型&#xff0c;则比较存储的值&#xff1b;如果是引用数据类型&#xff0c;则比较所指向对象的地址值。equals是Object的方法&#xff0c;比较的是所指向的对象的地址值&#xff0c;一般情况下&#xff0c;重…...

【机器学习速记】面试重点/期末考试

自用,有错误欢迎评论区指出 目录 一、机器学习基础概念 二、机器学习类型分类 三、经典算法与原理 1. 线性模型 2. 决策树 3. SVM(支持向量机) 4. K近邻(KNN) 5. 贝叶斯分类 6. 集成学习 四、模型评价指标 五、模型泛化能力与调参 六、特征工程与数据预处理 七、维…...

Cursor如何手动添加多个大模型?

笔者在前面的文章Cursor接入API: deepseekV3(免费)_cursor api-CSDN博客中介绍了如何添加deepseek到Cursor中&#xff0c;如果要添加其他大模型&#xff0c;比如阿里的通义千问qwen-max-2025-01-25等&#xff0c;方法一样&#xff0c;在官方网站找到模型名称和base_url&#xf…...

FerretDB:基于PostgreSQL的MongoDB替代产品

FerretDB 是一种基于NoSQL的分布式数据库&#xff0c;它旨在通过优化存储和查询机制来提供卓越的性能和可靠性。它支持水平扩展和高并发访问&#xff0c;并提供灵活的数据模型&#xff0c;使开发人员能够轻松地存储和检索各种类型的数据。 Stars 数10,057Forks 数439 主要特点…...

JDBC 批处理与事务处理:提升数据操作效率与一致性的密钥

目录 一. JDBC批量添加数据 1. 什么是批量添加数据 2. 实现数据的批量添加 a. 方式一&#xff1a;不分块 二. JDBC事务处理 1. 什么是事务 2. JDBC事务处理实现 三. 总结 前言 本文来讲解JDBC的批处理和事务处理 这对数据的安全性和准确性以及高效率提供很好的办法 话不…...

vue2实现Blod文件流下载

实现思路&#xff1a; 动态创建一个a标签&#xff0c;模拟点击打开链接&#xff0c;实现下载 downLoad() { //调用下载接口Export({Id: id}).then(res > {this.showLoading false;if (res && res.data && res.data.returnCode -1) {this.msgError(res.d…...

js数据结构之栈

JavaScript数据结构 一、什么是数据结构? 数据结构是向相互之间存在一种或者多种特定关系的数据组成的集合, 采用合适的数据结构能给开发者提高开发和储存效率.比如我们在学习Es6中的我们新接触的到的(Set, map), 在合适的时候使用它们能帮助我们更快的的解决问题. 我们每个在…...

[Windows] 卡巴斯基Kaspersky 21.21.7.384 免费版

卡巴斯基免费版从界面到功能和使用体验来说&#xff0c;简洁、高效、严苛、轻巧&#xff0c;可以“弥补”火绒杀毒能力不强&#xff0c;同时也不会像 Microsoft Defender 误报。 链接1&#xff1a;https://pan.xunlei.com/s/VOOhFEeznr_4W6s7-XT8IwN-A1?pwdztn4# 链接2&…...