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

全面解析SimHash算法:原理、对比与Spring Boot实践指南

一、SimHash算法概述

SimHash是一种局部敏感哈希算法,由Google工程师Moses Charikar提出,主要用于海量文本的快速去重与相似度检测。其核心思想是将高维特征向量映射为固定长度的二进制指纹(如64位),通过计算指纹间的汉明距离(Hamming Distance)判断相似性。若两个文本的指纹汉明距离越小,则相似度越高。

二、算法原理与步骤
  1. 特征提取与分词
    对文本进行分词并提取关键词(如使用TF-IDF或信息熵计算权重),例如“文档去重”可分词为“文档”“去重”,并赋予权重。

  2. 哈希加权
    每个特征词通过传统哈希函数(如MD5)生成固定位数的二进制签名(如64位)。根据权重对每位进行加减操作:
    • 若哈希位为1,则加权重值;
    • 若为0,则减权重值。

  3. 向量合并与降维
    累加所有特征的加权结果,生成最终向量。对每一位值:若结果>0则置1,否则置0,形成SimHash指纹。

  4. 相似度计算
    通过比较两个指纹的汉明距离(不同位数)判断相似性。通常设定阈值(如距离≤3时视为相似)。

三、应用场景

搜索引擎去重:Google爬虫用于检测近似重复网页。
文档查重:标书、论文等内容相似性检测。
社交媒体监控:追踪重复新闻或用户评论。
推荐系统:基于用户历史生成相似内容推荐。

四、与其他算法的对比
算法原理适用场景优缺点
SimHash局部敏感哈希,降维后比较汉明距离长文本、海量数据去重高效(O(1)复杂度),但对短文本敏感度低,权重设计影响精度
余弦相似度计算向量夹角的余弦值短文本、精确匹配精度高,但计算复杂度O(n²),不适用于大规模数据
MinHash基于集合相似性(Jaccard系数),对特征哈希取最小值集合数据(如用户行为聚类)适合集合比较,但对特征顺序不敏感,内存占用较高
LSH多阶段哈希映射,将相似项分到同一桶高维数据近似最近邻搜索可扩展性强,但参数调优复杂(如哈希函数数量)
五、Spring Boot集成SimHash实践
1. 环境配置

依赖添加

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency><groupId>com.github.yangliwei</groupId><artifactId>simhash</artifactId> <!-- 示例库,可选其他实现 --><version>1.0.0</version>
</dependency>

配置文件(application.properties)

# 分词器配置(示例使用Jieba)
simhash.tokenizer.dict-path=classpath:dict.txt
2. 核心代码实现
@Service
public class SimHashService {@Autowiredprivate SimHasher simHasher; // 依赖SimHash库的实现类/*** 生成文本的SimHash指纹*/public String generateSimHash(String text) {return simHasher.hash(text);}/*** 计算两文本的汉明距离*/public int hammingDistance(String hash1, String hash2) {return SimHashUtils.distance(hash1, hash2);}/*** 判断是否相似(阈值可配置)*/public boolean isSimilar(String text1, String text2, int threshold) {String hash1 = generateSimHash(text1);String hash2 = generateSimHash(text2);return hammingDistance(hash1, hash2) <= threshold;}
}
SimHash生成工具类
import cn.hutool.extra.tokenizer.TokenizerUtil;
import com.google.common.hash.Hashing;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/***  SimHash生成工具类*/
public class SimHashUtil {private static final int HASH_BITS = 64;public static long generateSimHash(String text) throws IOException {List<String> words = JiebaTextUtils.processText(text,false);Map<String, Integer> wordWeights = calculateWordWeights(words);int[] vector = new int[HASH_BITS];for (Map.Entry<String, Integer> entry : wordWeights.entrySet()) {String word = entry.getKey();int weight = entry.getValue();long wordHash = hash(word);for (int i = 0; i < HASH_BITS; i++) {long mask = 1L << (HASH_BITS - 1 - i);if ((wordHash & mask) != 0) {vector[i] += weight;} else {vector[i] -= weight;}}}long simHash = 0;for (int i = 0; i < HASH_BITS; i++) {if (vector[i] > 0) {simHash |= (1L << (HASH_BITS - 1 - i));}}return simHash;}private static Map<String, Integer> calculateWordWeights(List<String> words) {// 简单词频统计(可替换为TF-IDF)Map<String, Integer> weights = new HashMap<>();for (String word : words) {weights.put(word, weights.getOrDefault(word, 0) + 1);}return weights;}private static long hash(String word) {return Hashing.murmur3_128().hashString(word, StandardCharsets.UTF_8).asLong();}
}
汉明距离计算
/*** 汉明距离计算*/
public class HammingUtil {public static int distance(long hash1, long hash2) {long xor = hash1 ^ hash2;return Long.bitCount(xor);}
}
3. 高级优化

动态权重:结合TF-IDF与信息熵优化特征词权重,提升短文本精度。
分布式计算:使用Redis缓存SimHash指纹,加速海量数据比对。
自定义分词:集成HanLP或Jieba分词器,适配中文场景。

六、总结

SimHash凭借其高效性可扩展性,成为处理海量文本去重的首选算法。在Spring Boot中,通过合理配置分词器和优化权重计算,可进一步提升检测精度。对于需要高精度短文本匹配的场景,可结合余弦相似度;而在实时流处理中,LSH或MinHash可能更为适合。


参考资料
SimHash算法原理与步骤
应用场景与对比算法
权重优化与参数调优
Spring Boot集成实例

相关文章:

全面解析SimHash算法:原理、对比与Spring Boot实践指南

一、SimHash算法概述 SimHash是一种局部敏感哈希算法&#xff0c;由Google工程师Moses Charikar提出&#xff0c;主要用于海量文本的快速去重与相似度检测。其核心思想是将高维特征向量映射为固定长度的二进制指纹&#xff08;如64位&#xff09;&#xff0c;通过计算指纹间的…...

【Docker】Docker拉取部分常用中间件

一、拉取MySQL 这里以Docker拉取MySQL5.7为例 #拉取镜像 docker pull mysql:5.7 docker run -d --name oj-mysql -p 3306:3306 -e "TZAsia/Shanghai" -e "MYSQL_ROOT_PASSWORD123456" mysql:5.7 -e 参数用于设置容器内的环境变量。TZ 是用于设置时区的环…...

表征(Representations)、嵌入(Embeddings)及潜空间(Latent space)

文章目录 1. 表征 (Representations)2. 嵌入 (Embeddings)3. 潜空间 (Latent Space)4. 关系总结5. 学习思考 1. 表征 (Representations) 定义: 表征是指数据的一种编码或描述形式。在机器学习和深度学习中&#xff0c;它特指模型在处理数据时&#xff0c;将原始输入数据转换成…...

google colab设置python环境为python3.7

最近在看transformers for machine learning:A Deep Dive这本书&#xff0c;发现书里的python版本是python3.7&#xff0c;但是当前google colab默认的python版本为3.12&#xff0c;带来诸多不便&#xff0c;因此需要将colab版本切换为python3.7的python环境。 1.下载需要的版…...

Kaggle比赛入门攻略(以 Titanic 为例)

为什么选择 Kaggle 入门比赛&#xff1f; Kaggle 是全球最大的数据科学竞赛平台。入门比赛 Titanic: Machine Learning from Disaster 是初学者的理想起点&#xff0c;数据量小、结构简单、题目经典。 Step 1&#xff1a;注册并加入比赛 访问比赛地址&#xff1a;https://www…...

【数据链路层深度解析】从帧结构到协议实现

目录 一、数据链路层核心定位1.1 OSI模型中的位置1.2 三大核心职责 二、帧结构详解2.1 以太网帧标准格式&#xff08;IEEE 802.3&#xff09;2.2 帧封装代码示例 三、核心协议机制3.1 MAC地址体系3.2 介质访问控制CSMA/CD&#xff08;以太网冲突检测&#xff09;现代交换机的演…...

大连理工大学选修课——机器学习笔记(5):EMK-Means

EM&K-Means 无监督学习 什么是无监督学习 模型从无标签的数据中自动发现隐藏的模式或结构聚类是最常用的方法 为什么要研究无监督学习 标记样本代价太大分类模式不断变化&#xff0c;标记易过时 数据的分布 参数方法 高斯分布、伯努利分布、多指分布等 非参数方法 局部模…...

算法基础学习|03整数二分

一、思路 &#xff08;1&#xff09;mid(lr1)/2 if(check(mid)):1.true [mid,r] lmid 2.false [l,mid-1] rmid-1 &#xff08;2&#xff09;mid(lr)/2 if(check(mid)):1.true [l,mid] rmid 2.false [mid1,r] lmid1 二、模板 如何选择模…...

婴幼儿急救实训室优化空间布局科学路径5.7

婴幼儿急救实训室的建设是提升托育服务质量、保障婴幼儿生命安全的关键环节。在当前托育行业快速发展的背景下&#xff0c;加强婴幼儿急救实训室建设&#xff0c;对于培养专业急救人才、提高急救技能水平具有重要意义。凯禾瑞华——实训室建设 一、搭建实操平台&#xff1a;沉浸…...

智能体开发

智能体开发是构建具备感知、决策和执行能力的智能系统的过程&#xff0c;核心围绕环境交互和自主决策展开。以下是关键要点&#xff1a; 一、开发流程 1. 需求定义 - 明确智能体目标&#xff08;如对话交互、自动化任务、数据分析等&#xff09;。 - 确定应用场景&#xff08…...

全球气象站点年平均降水数据(1929-2024)

ppmandata.cn借鉴Compustat、WRDS等国际知名数据库及FT50期刊专业标准&#xff0c;打造中国特色经济管理社会科学研究型数据库。涵盖上市公司、省份、地级市、专精特新等研究对象&#xff0c;涵盖经济、法律、金融、政策、科技、文化、健康、环保、人口等各类热点数据。顶刊标准…...

c++漏缺: stl等 初始化 用法 sort

目录 数组初始化&#xff1a;c int a[5]{1,2,3,4,5};int b[5]a;后面改变b对a有无影响 int pre[n]nums[0]对吗 初始化为0呢 方法1&#xff1a;使用循环初始化 方法2&#xff1a;使用memset函数 方法3&#xff1a;使用初始化列表&#xff08;C99及以后&#xff09; 方法4&…...

usb端点笔记

端点&#xff1a;端点是USB设备的唯一可识别部分&#xff0c;其是主机和设备之间的通信流的终点。是一个USB设备或主机上的一个数据缓冲区&#xff0c;用来存放和发送USB的各种数据。&#xff08;逻辑上&#xff09; 接口&#xff1a;可以理解为一个功能。&#xff08;物理功能…...

多智能体协同作战:MagenticOne如何指挥一支AI团队

你有没有想过&#xff0c;如果能让多个AI智能体像高效团队一样协同工作会怎样&#xff1f;每个成员各司其职&#xff0c;却又紧密配合。今天&#xff0c;我们就来聊聊AI世界的"特工组织"——多智能体系统&#xff0c;尤其是最近热门的MagenticOne架构。 &#x1f9e…...

C++静态编译标准库(libgcc、libstdc++)

在使用GCC编译器时&#xff0c;部分版本默认动态加载标准库。如果客户机器上没有安装相应库&#xff0c;就会提示找不到&#xff1a;libgcc_s_seh-1.dll、libstdc-6.dll、libwinpthread-1.dll。 解决方法&#xff1a; 设有动态库libadd.dll、静态库libmul.a 编译命令&#x…...

[PRO_A7] SZ501 FPGA开发板简介

SZ501 FPGA开发板简介 概述 SZ501 FPGA开发板是专为高性能FPGA设计、快速原型开发和复杂应用调试打造的先进开发平台。搭载Xilinx Artix-7系列XC7A100T FPGA芯片&#xff0c;SZ501提供卓越的逻辑运算能力和灵活的接口支持&#xff0c;广泛适用于通信、信号处理、嵌入式系统及…...

URP - 序列图动画的实现

效果&#xff1a; 【太妃糖耶】更新了一条视频&#xff0c;快来围观&#xff01; 序列图动画的实现 首先先了解下序列图样式的纹理图片 如上图一可在Shader中使用该图片制作燃烧的火的动画&#xff0c;但是如何实现呢&#xff1f;接下来一起来看一下吧 序列图动画的实现原理大…...

Helm部署kong+konga的路由管理系统

部署postgres服务 创建存储类 创建存储类对应的deployment --- apiVersion: apps/v1 kind: Deployment metadata:annotations: {}labels:app: eip-nfs-postgresql-storageclassname: eip-nfs-postgresql-storageclassnamespace: kube-systemresourceVersion: 26709116 spec:…...

液氮恒温器原理解析

一、‌核心降温原理‌ 1、‌液氮媒介作用‌ 液氮恒温器以液氮&#xff08;沸点约77K/-196℃&#xff09;为降温媒介&#xff0c;通过液氮蒸发吸收热量的特性实现快速降温。 液氮在内部腔体蒸发时形成气-液界面&#xff0c;利用毛细管路将冷媒导入蒸发器&#xff0c;强化热交换…...

EchoMimic 阿里开源数字人项目的复现过程

EchoMimic 是一个由阿里巴巴蚂蚁集团开发的开源AI 数字人项目&#xff0c;通过可编辑地标调节实现逼真的音频驱动肖像动画&#xff0c;它能够将静态图像转化为具有动态语音和表情的数字人像。 今天咱们来复现下&#xff0c;看看有哪些坑&#xff0c;再看看数字人效果如何。 先…...

iVX 开源战略:多维突破下的产业生态革新与未来图景

在开源技术浪潮席卷全球软件产业的当下&#xff0c;iVX 凭借持续迭代的开源战略&#xff0c;不断突破技术边界&#xff0c;拓展应用场景&#xff0c;重塑产业生态。从底层技术架构的深度优化&#xff0c;到多行业应用场景的全面覆盖&#xff1b;从全球化生态体系的完善构建&…...

数据库12(游标)

游标语法 declare c1 cursor for select title from titles --定义一个游标c1&#xff0c;确定游标对应的列是titles表的title列&#xff0c;游标可以对应多个列 declare bname varchar(50) --声明变量 open c1 --初始化&#xff0c;开始使用游标 fetch next from c1 in…...

Windows11下本地化部署AI开发环境(Dify+Ollama)

前言 本次实践希望在Windows环境下本地化部署AI开发环境&#xff0c;通过Ollama下载运行模型&#xff0c;通过Dify搭建管理AI应用。 硬件环境 AI大模型开发对硬件要求较高&#xff0c;理论上配置越高越好。本次搭建环境如下&#xff1a; Windows系统&#xff08;Windows11&…...

Oracle Bigfile 与 Smallfile 表空间对比分析

Oracle Bigfile 与 Smallfile 表空间对比分析 一、基本概念对比 特性Bigfile 表空间Smallfile 表空间定义每个表空间只包含一个大数据文件每个表空间可包含多个数据文件引入版本Oracle 10gOracle 传统模式最大文件大小取决于块大小(32TB for 8K块)通常最大32GB(传统限制)文件…...

Cypress/Playwright 跨浏览器测试

以下是关于 Cypress 和 Playwright 跨浏览器测试的基本知识总结: 一、工具核心差异 维度CypressPlaywright浏览器支持Chromium 系为主(需配置支持其他浏览器)原生支持 Chromium/Firefox/WebKit架构设计同进程运行远程协议控制(CDP/WebDriver)执行速度较快(内存运行)快速…...

【Python学习路线】零基础到项目实战

目录 &#x1f31f; 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 &#x1f9e0; 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 &#x1f4bb; 二、实战演示环境配置要求核心代码实现运行结果验证 ⚡ 三、性能对比测试方法论量化数据对比…...

26个脑影像工具包合集分享:从预处理到SCI成图

为方便各位脑科学研究者更好地使用优质的开源工具&#xff0c;本期脑海科技实验室汇总了近期整理的脑影像分析软件&#xff0c;希望可以帮助大家。 脑影像分析软件汇总 本次总结脑影像工具包合集&#xff08;点击本条文字内容跳转&#xff09; 工具包包括 1、CONN&#xff1…...

C# 高效操作excel文件

C#高效操作Excel文件指南 一、主流Excel处理方案对比 方案类型特点适用场景​​EPPlus​​第三方库功能全面&#xff0c;性能好&#xff0c;支持.xlsx复杂Excel操作&#xff0c;大数据量​​NPOI​​第三方库支持.xls和.xlsx&#xff0c;功能全面兼容旧版Excel文件​​Closed…...

综合案例建模

文章目录 滚花手扭螺丝机箱封盖螺丝螺丝孔锥形垫片 滚花手扭螺丝 前视基准面画草图&#xff0c;旋转生成主体 倒角0.5 顶面&#xff0c;草图转换实体引用&#xff0c;去复制边线 生成螺旋线路径 顶面绘制草图 上一步画的草图沿螺旋线扫描切除 镜像扫描特征 阵列镜像扫描特征 创…...

【蓝桥杯】第十六届蓝桥杯C/C++大学B组个人反思总结

前言 这是我第一次参加蓝桥杯大赛&#xff0c;我将通过一下 4 点来总结我的整个蓝桥杯经历 赛前准备 我大约花了 150h 来备战本次蓝桥杯软件赛&#xff0c;虽然最终的没有取得很好的成绩&#xff08;省二&#xff09;&#xff0c;但是此次比赛对我来说有着很大的意义。 大二…...

运维仙途 第2章 日志深渊识异常

第2章 日志深渊识异常 情节梗概 凌运维发现混沌钟显示的灵脉波动与藏经阁古籍记载不符。为查明真相&#xff0c;他冒险进入「日志深渊」——青云门历代系统异常的记录之地。在这里&#xff0c;他结识了能同时解读十万条日志的慕监控… 技术映射 graph LR古籍记载 --> 历…...

知识图谱系列(1):基础概念与发展历程

1. 引言与背景介绍 在当今数字化时代,数据呈现爆炸式增长,如何有效地组织、管理和利用这些海量数据成为了一个重要挑战。传统的数据管理方式往往将数据存储在相互隔离的系统中,难以建立数据之间的关联,更难以挖掘数据背后的深层知识和价值。知识图谱作为一种新型的知识表示…...

halcon关闭图形窗口

1、dev_close_window () 调用一次这个函数关闭一个图形窗口&#xff0c;并且先关闭最后打开的那个图形窗口&#xff0c;如果一共打开了N个图形窗口&#xff0c;那么就需要调用dev_close_window N次。...

2025深圳杯东三省数学建模竞赛选题建议+初步分析

完整内容请看文章最下面的推广群 2025深圳杯&东三省数学建模选题建议初步分析 首先吐槽一句&#xff0c;今年为了规避AI对数模竞赛的冲击&#xff0c;深圳杯的整体难度相较往年更高&#xff0c;C君作数模5年见过最难的一次比赛。 提示&#xff1a;C君认为的难度和开放度…...

flutter开发音乐APP(简单的音乐播放demo)

效果如下&#xff1a; 音乐播放界面 锁屏音乐播放展示 主要使用的插件如下 just_audio : 是一个功能丰富的音频播放器&#xff0c;适用于Android、iOS、macOS、Web、Linux和Windows平台。它提供了多种功能&#xff0c;包括从URL、文件、资产或字节流读取音频&#xff0c;支持D…...

day007

文章目录 1. sort 排序1.1 -r,-n1.2 -k 按列比较1.3 练习1.3.1 找出/etc下占用空间最大的前5个内容1.3.2 查看/*下所有目录的大小&#xff0c;并取出最大的5个 2. uniq 去重2.1 uniq与sort统计次数 3. awk4. 日志分析4.1 分析access.log中ip出现的次数并取前5名4.2 分析secure文…...

二进制如何与三生原理实现统一?

AI辅助创作&#xff1a; 一、符号系统的维度统一 ‌二元符号的阴阳元重构‌ 二进制符号0与1在三生原理中被抽象为‌阴元&#xff08;2&#xff09;与阳元&#xff08;3&#xff09;‌&#xff0c;通过‌小衍数法‌实现自然数域与阴阳域的映射转换。例如旧奇数公式p ‌2n1‌ 与…...

普通IT的股票交易成长史--20250430午

声明&#xff1a;本文章的内容只是自己学习的总结&#xff0c;不构成投资建议。文中观点基本来自yt站Andylee&#xff0c;美股Alpha姐&#xff0c;综合自己的观点得出。感谢他的无私分享。 仓位就是生命&#xff0c;绝对不能满仓&#xff01;&#xff01;&#xff01;&#xf…...

【计算机视觉】目标检测:深度解析MMDetection:OpenMMLab开源目标检测框架实战指南

深度解析MMDetection&#xff1a;OpenMMLab开源目标检测框架实战指南 架构设计与技术亮点系统架构概览核心技术特性 环境配置与安装指南硬件配置建议详细安装步骤环境验证 实战全流程解析1. 数据集准备2. 配置文件定制3. 模型训练与调优4. 模型评估与推理 核心功能扩展1. 自定义…...

《冰雪传奇点卡版》:第二大陆介绍!

一、第二大陆&#xff1a;高阶资源与实力验证的核心战场 1. 准入条件与地图分布 进入门槛&#xff1a; 基础要求&#xff1a;角色需达到四转&#xff08;需消耗50万元宝完成转生任务&#xff09;&#xff0c;部分地图需额外满足神魔点数&#xff08;如黑暗之森需神魔全2&#…...

在线服务器都有哪些用途?

在线服务器是指一种能够能够随时进行连接、管理和操作的服务器&#xff0c;可以通过互联网或者是本地网络来为用户提供网络服务&#xff0c;在线服务器可以是物理服务器也可以是虚拟服务器&#xff0c;让用户可以通过远程访问工具来进行管理。 在线服务器在云计算和虚拟化技术中…...

(Go Gin)Gin学习笔记(二):路由配置、基本路由、表单参数、上传单个文件、上传多个文件、浅扒路由原理

1. 路由 gin 框架中采用的路优酷是基于httprouter做的 HttpRouter 是一个高性能的 HTTP 请求路由器&#xff0c;适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用&#xff0c;特别适合需要高性能和简单路由的应用场景。 主要特点 显式匹配&#xff1a;与其他路由…...

Java 中的 设计模式详解

一&#xff1a;设计模式概述 &#xff08;1&#xff09;概述 &#xff08;2&#xff09;分类 创建型 行为型 结构型 二&#xff1a;软件设计模式 2.1 开闭原则 &#xff08;1&#xff09;定义 在程序需要进行拓展的时候&#xff0c;不能修改原有代码 使用到接口和抽象类&#x…...

设计模式(构建者模式)

建造者设计模式详解 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许我们分步骤创建复杂对象。这种模式特别适合那些需要多个步骤才能构建出来的、有很多配置选项的对象。 为什么需要建造者模式&#xff1f; 想象一下&#xff0c…...

python实战项目67:空气质量在线检测平台js逆向

python实战项目67:空气质量在线检测平台js逆向 一、需求介绍二、完整代码一、需求介绍 项目需求是获取某个城市(以北京市为例)历年(2013年12月至2025年4月)的空气质量数据,字段包括日期、AQI、质量等级、PM2.5、PM10、NO2、CO、SO2等。改网站的网址是“https://www.aqis…...

verilog_testbench技巧

forever语句 forever begin state; end 一直执行state repeat&#xff08;n&#xff09; begin state; end 执行state&#xff0c;n次 force语句对双向端口进行输入赋值。 与wait 是边沿触发&#xff0c;wait是电平触发 仿真控制语句与系统任务描述 $stop停止仿真…...

Hadoop 集群基础指令指南

目录 &#x1f9e9; 一、Hadoop 基础服务管理指令 ▶️ 启动 Hadoop ⏹️ 关闭 Hadoop &#x1f9fe; 查看进程是否正常运行 &#x1f4c1; 二、HDFS 常用文件系统指令 &#x1f6e0;️ 三、MapReduce 作业运行指令 &#x1f4cb; 四、集群状态监控指令 &#x1f4a1; …...

k8s平台:手动部署Grafana

以下是一个可用于生产环境的 Kubernetes 部署 Grafana 的 YAML 文件。该配置包括 Deployment、Service、ConfigMap 和 PersistentVolumeClaim&#xff0c;确保 Grafana 的高可用性和数据持久化。 Grafana 生产部署 YAML 文件 ☆实操示例 cat grafana-deployment.yaml --- # …...

品牌网站建设与高端网站定制:塑造企业独特形象

在当今数字化时代&#xff0c;企业品牌网站建设、高端网站定制、多语言外贸网站开发以及网站安全运维已成为企业不可或缺的一部分。它们不仅是企业展示形象、推广产品的重要窗口&#xff0c;更是企业实现数字化转型、提升市场竞争力的关键环节。本文将围绕这些主题&#xff0c;…...

canvas动画:点随机运动 距离内自动连接成线 鼠标移动自动吸附附近的点

思路/实现步骤 创建canvas元素 获取canvas的上下文ctx 初始化点的信息&#xff08;数量、初始坐标、移动方向、移动速度、大小、颜色&#xff09; 绘制点 绘制点之间的连线 点有规律的动起来 动画循环 鼠标移动相关逻辑 点鼠标之间连线 鼠标吸附逻辑 添加配置项 重绘…...