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

分析下HashMap容量和负载系数,它是怎么扩容的?

很好,我们继续深入分析 HashMap容量(capacity)负载因子(load factor),以及它是如何进行 扩容(resize) 的。


🧱 一、容量(capacity)与负载因子(load factor)

🔹 容量(capacity)

  • 表示 哈希表的桶数量,也就是底层数组的长度。

  • 初始容量可以通过构造函数指定,如:

    new HashMap<>(16);
    
  • 容量始终为 2 的幂次方,如:16, 32, 64…

    这是为了简化定位桶的算法:

    index = (n - 1) & hash  // 高效替代 hash % n
    

🔸 负载因子(loadFactor)

  • 表示哈希表 允许的装载程度(桶元素的密度),默认是 0.75
  • 定义:
    threshold = capacity × loadFactor
    
  • 一旦实际元素数量 > threshold,就会触发扩容(resize)

✅ 为什么选 0.75?

  • 时间和空间效率的折中
  • 值太小 ⇒ 空间浪费大;
  • 值太大 ⇒ 容易哈希冲突,链表/红黑树加长,降低查询效率。

🔄 二、扩容机制(resize)

🛠️ 触发时机

  • size >= threshold(即元素数量超过阈值)时触发扩容。

🧩 扩容流程详解(JDK 8)

void resize() {Node<K,V>[] oldTab = table;int oldCap = oldTab.length;int newCap = oldCap * 2;Node<K,V>[] newTab = new Node[newCap];// 重新分配每个 bucket 中的节点for (int i = 0; i < oldCap; ++i) {Node<K,V> e = oldTab[i];if (e != null) {oldTab[i] = null; // help GCif (e.next == null) {// 单个节点直接重新映射newTab[e.hash & (newCap - 1)] = e;} else if (e instanceof TreeNode) {// 红黑树重新分配((TreeNode<K,V>)e).split(...);} else {// 链表节点再分成两个链表// 一个保持原索引 i,另一个转移到 i + oldCapNode<K,V> loHead = null, hiHead = null;// 遍历链表分类}}}table = newTab;threshold = newCap * loadFactor;
}

🚀 三、核心优化点:链表拆分

扩容后链表会分成两组:

  • 原位置不变:index = i
  • 新位置偏移 oldCap:index = i + oldCap

为什么这样可以避免重新计算 hash?

因为 newCap = oldCap * 2,我们只需要看新增的那一位是否为 1:

// e.hash & oldCap == 0 => 原桶位置
// e.hash & oldCap != 0 => 新桶位置(i + oldCap)

这是一种巧妙的 位运算拆桶优化,非常高效,避免重新计算 hash 和大量的内存分配。


📊 四、扩容代价分析

扩容代价是 O(n),因为:

  • 要遍历所有桶;
  • 将每个节点重新分配;
  • 链表 → 红黑树 也可能要转换。

因此,在大量插入操作中:
👉 尽量 提前设定合适的初始容量,避免频繁扩容!

// 例如插入 1 万个元素
Map<String, Object> map = new HashMap<>(16384, 0.75f);

✅ 总结一下

概念默认值说明
capacity16必须为 2 的幂次方
loadFactor0.75平衡查询效率与空间浪费
threshold16 × 0.75 = 12超过该值将触发扩容
resizeO(n)将所有元素重新分桶

我们写一个简单的 Java 示例来演示 HashMap 的 resize 过程,包括扩容前后容量的变化、触发阈值等。我们还会插入调试打印语句以观察内部行为。


🔧 示例代码:手动触发 HashMap 的扩容

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;public class HashMapResizeDemo {public static void main(String[] args) throws Exception {// 初始化 HashMap,容量为 4,负载因子为默认 0.75Map<Integer, String> map = new HashMap<>(4);// 获取内部 threshold 和 table 大小(通过反射)printCapacityAndThreshold(map, "初始");// 连续添加元素,观察扩容发生for (int i = 1; i <= 10; i++) {map.put(i, "Value" + i);System.out.println("插入第 " + i + " 个元素后:");printCapacityAndThreshold(map, "状态");}}// 反射查看 HashMap 的容量和阈值private static void printCapacityAndThreshold(Map<Integer, String> map, String tag) throws Exception {Class<?> hashMapClass = map.getClass();// 获取 threshold 字段Field thresholdField = hashMapClass.getDeclaredField("threshold");thresholdField.setAccessible(true);int threshold = (int) thresholdField.get(map);// 获取 table 数组长度(容量)Field tableField = hashMapClass.getDeclaredField("table");tableField.setAccessible(true);Object[] table = (Object[]) tableField.get(map);int capacity = (table == null) ? 0 : table.length;System.out.println("[" + tag + "] 当前容量: " + capacity + ", 阈值: " + threshold + ", size: " + map.size());System.out.println("-------------------------------------------------");}
}

🧪 示例运行结果(核心片段)

[初始] 当前容量: 0, 阈值: 0, size: 0
插入第 1 个元素后:
[状态] 当前容量: 16, 阈值: 12, size: 1
插入第 2 个元素后:
[状态] 当前容量: 16, 阈值: 12, size: 2
...
插入第 13 个元素后:
[状态] 当前容量: 32, 阈值: 24, size: 13

🔍 可以看到:

  • 初始创建的 HashMap 并没有立刻分配数组(懒加载);
  • 第一次插入时,底层数组变为默认的 16;
  • 插入超过 12 个元素时,容量从 16 → 32,说明触发了扩容;
  • 扩容后的 threshold 从 12 → 24。

✅ 小结

  • 这个例子展示了 HashMap 的 懒加载机制resize 过程
  • 使用反射可以观察 thresholdtable.length 等关键内部变量;
  • 你可以尝试不同初始容量和负载因子,看 HashMap 何时扩容。

我们用一个图示 + 示例代码来直观展示 HashMap 扩容过程中,链表是如何拆分并重新分布的。这个拆分逻辑是 JDK 8 里的一个优化点,非常重要。


🌐 一、拆分链表的背景

HashMap 发生扩容(数组长度从 N → 2N)时,桶中原有的链表节点会被拆分到新数组的两个位置:

  • 原索引 i
  • 新索引 i + oldCap

这是通过下面这个位运算实现的:

if ((e.hash & oldCap) == 0) {// 原地保留在 index i
} else {// 移动到 index i + oldCap
}

📊 二、可视化拆分流程

假设旧容量是 8(oldCap = 8),扩容后为 16:

旧索引(index = 3)处的链表:A(hash=3), B(hash=11), C(hash=19), D(hash=27)哈希值(二进制):A = 0000_0011B = 0000_1011C = 0001_0011D = 0001_1011oldCap = 0000_1000位运算: hash & oldCapA: 3  & 8  = 0  → 继续放在索引 3B: 11 & 8  = 8  → 放在新索引 3 + 8 = 11C: 19 & 8  = 0  → 索引 3D: 27 & 8  = 8  → 索引 11结果如下:
新数组:index 3:  A → Cindex11:  B → D

📌 结论:

  • 拆分后每个链表最多分成 2 段;
  • 不需要重新计算 hash,只需根据一位是否为 1 判断目标桶;
  • 效率极高,是扩容过程的核心优化。

💡 三、Java 代码模拟链表拆分

public class HashMapSplitDemo {static class Node {int hash;String key;Node next;Node(int hash, String key, Node next) {this.hash = hash;this.key = key;this.next = next;}}public static void main(String[] args) {int oldCap = 8;Node head = new Node(3, "A",new Node(11, "B",new Node(19, "C",new Node(27, "D", null))));Node loHead = null, loTail = null;Node hiHead = null, hiTail = null;for (Node e = head; e != null; e = e.next) {if ((e.hash & oldCap) == 0) {if (loTail == null) loHead = e;else loTail.next = e;loTail = e;} else {if (hiTail == null) hiHead = e;else hiTail.next = e;hiTail = e;}}// 断尾if (loTail != null) loTail.next = null;if (hiTail != null) hiTail.next = null;System.out.print("原地链表: ");printList(loHead);System.out.print("迁移链表: ");printList(hiHead);}private static void printList(Node head) {Node p = head;while (p != null) {System.out.print(p.key + "(" + p.hash + ") → ");p = p.next;}System.out.println("null");}
}

🧪 输出示例:

原地链表: A(3) → C(19) → null
迁移链表: B(11) → D(27) → null

刚好和我们前面图示的拆分一致 ✅


✅ 总结:链表拆分的意义

优点描述
效率高只用一次位运算,无需重新计算 hash
减少冲突重新分布节点,有助于均衡哈希桶分布
内存复用节点对象不重建,仅更换位置

相关文章:

分析下HashMap容量和负载系数,它是怎么扩容的?

很好&#xff0c;我们继续深入分析 HashMap 中 容量&#xff08;capacity&#xff09; 和 负载因子&#xff08;load factor&#xff09;&#xff0c;以及它是如何进行 扩容&#xff08;resize&#xff09; 的。 &#x1f9f1; 一、容量&#xff08;capacity&#xff09;与负载…...

Linux权限管理:从入门到实践

目录 引言 ​编辑一、Linux用户类型 二、文件访问者分类 三、文件类型和访问权限 &#xff08;一&#xff09;文件类型 &#xff08;二&#xff09;基本权限 四、文件访问权限设置方法 &#xff08;一&#xff09;chmod命令 &#xff08;二&#xff09;chown命令 &…...

计算机网络(1)

名称解析 名称解析&#xff1a;将名称解析成对应地址&#xff0c;名字-->IP 名称解析优点&#xff1a;便以记忆、解耦&#xff08;断开直接的练习&#xff09; 容器 mini的虚拟机&#xff0c;该容器地址是动态的、生命周期短暂&#xff1b;可实现登录功能 如果用户想要登录该…...

第十一天 - MySQL/SQLite操作 - 数据库备份脚本 - 练习:监控数据存储系统

数据库实战入门&#xff1a;从零构建监控数据存储系统 前言 在物联网和系统监控领域&#xff0c;数据存储是核心基础环节。本文将通过MySQL/SQLite操作、数据库备份脚本和监控数据存储实战三个模块&#xff0c;带领初学者快速掌握数据库在真实场景中的应用。文章包含25个代码…...

编写文生视频提示词,制作抖音爆款视频

编写文生视频提示词&#xff0c;制作抖音爆款视频 一、理解文生视频提示词1.1 定义提示词1.1.1 提示词与创作工具的关系1.1.2 文生视频的功能 1.2 提示词的组成1.2.1 主体&#xff08;Subject&#xff09;1.2.2 动作&#xff08;Action&#xff09;1.2.3 场景&#xff08;Scene…...

Linux: 线程控制

目录 一 前言 二 线程控制 1. POSIX线程库(原生线程库) 2. 创建线程 2.1 pthread_create 2.2pthread_self()获取线程id 3.线程终止 3.1.return 方式 3.2 pthread_exit 4 线程等待 三 理解线程tid 一 前言 在上一篇文章中我们已经学习了线程的概念&#xff0c;线程的创…...

为什么 npm list -g 没显示 node_modules?✨

揭秘&#xff1a;为什么 npm list -g 没显示 node_modules&#xff1f;&#x1f575;️‍♂️✨ 嗨&#xff0c;各位代码探险家&#xff01;&#x1f44b; 今天我们要破解一个 npm 小谜团&#xff1a;运行 npm list -g --depth0 时&#xff0c;为什么输出的路径里看不到 node_…...

华为数字芯片机考2025合集4已校正

单选 1. 题目内容 影响芯片成本的主要因素是 Die Size 和封装&#xff0c;但电源、时钟等因素&#xff0c;特别是功耗对解决方案的成本影响较大&#xff0c;因此低成本设计需要兼顾低功耗设计&#xff1a;&#xff08;&#xff09; 1. 解题步骤 1.1 分析题目 Die Size&…...

达摩院Paraformer-ONNX模型:一站式高精度中文语音识别工业级解决方案

文章目录 核心技术创新三大部署方案对比1. Docker极简部署&#xff08;推荐&#xff09;2. Python API直连调用3. 客户端实时测试工具 高阶调优技巧典型应用场景高频问题解决方案参考 阿里达摩院推出的speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-on…...

Llama 4的争议

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

React七案例下

代码下载 登录模块 用户登录 页面结构 新建 Login 组件&#xff0c;对应结构: export default function Login() {return (<div className{styles.root}><NavHeader className{styles.header}>账号登录</NavHeader><form className{styles.form}>&…...

Rust包管理与错误处理

文章目录 包管理箱&#xff08;Crate&#xff09;包&#xff08;Package&#xff09;模块&#xff08;Module&#xff09;访问权限use关键字 错误处理不可恢复错误可恢复错误错误传递kind方法 包管理 Rust的包管理有三个重要的概念&#xff0c;分别是箱、包、模块 箱&#xf…...

关于gitee的readme文档中的图片问题

使用markdown编辑readme文档&#xff0c;需要注意 添加图片&#xff0c;但是不显示问题 1.记得连图片一起上传到仓库中&#xff0c;不能只是在本地markdown文件中复制就结束了&#xff0c;因为存储的是本地图片地址&#xff0c;上传后找不到的 2.注意使用网络地址&#xff0…...

记录vscode连接不上wsl子系统下ubuntu18.04问题解决方法

记录vscode连接不上wsl子系统下ubuntu18.04问题解决方法 报错内容尝试第一次解决方法尝试第二次解决方法注意事项参考连接 报错内容 Unable to download server on client side: Error: Request downloadRequest failed unexpectedly without providing any details… Will tr…...

aws平台练习

注册 AWS 账户 访问 AWS 官方网站&#xff0c;点击“免费注册”按钮&#xff0c;按照提示完成账户注册&#xff1a; 提供电子邮件地址、密码和电话号码。 验证身份&#xff08;可能需要手机验证码&#xff09;。 设置 billing 信息。 2. 登录 AWS 管理控制台 使用注册的邮箱和…...

实战篇-梳理时钟树

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据 总结 前言 这是B站傅里叶的猫视频的笔记 一、建立工程 以Vivado的wave_gen为例子。为了引入异…...

【Hadoop入门】Hadoop生态之Hive简介

1 什么是Hive&#xff1f; 1.1 Hive概述 在大数据时代&#xff0c;如何让传统的数据分析师和SQL开发人员也能轻松处理海量数据&#xff1f;Hive应运而生。Hive是基于Hadoop构建的一套数据仓库分析系统&#xff0c;它提供了一种类似SQL的查询语言&#xff08;HQL&#xff09;&a…...

DSP复习【3章】

F2812提供了XINTF用于扩展并行接口的外设芯片。 XINTF&#xff08;外部接口&#xff09;所需的时钟是 SYSCLKOUT 和 XTIMCLK。 所以正确答案是&#xff1a; ✅ SYSCLKOUT 和 XTIMCLK 什么是XREADY信号&#xff0c;如何使用&#xff1f; 章节例题&#xff1a; 1. 如何通过软件判…...

Hadoop案例——流量统计

Hadoop案例——流量统计 在大数据时代&#xff0c;流量统计是许多企业和组织的关键需求之一。通过分析网络流量数据&#xff0c;企业可以优化网络资源分配、提升用户体验、制定精准的营销策略等。本文将介绍如何使用 Hadoop 框架实现一个简单的流量统计案例&#xff0c;包括数…...

Linux管道 有名管道(FIFO)工作机制全解:从理论到实践

有名管道&#xff08;重要&#xff09; 有名管道/命名管道&#xff0c;主要用于没有血缘关系进程间的通信 当然也支持有血缘关系的情况&#xff0c;只是如果有血缘关系&#xff0c;没有必要使用有名管道&#xff0c;无名管道效果更佳 引入 好了&#xff0c;现在使用条件有了…...

java基础-修饰符

java修饰符 修饰符分类访问修饰符的作用域代码说明访问修饰符总览 非访问修饰符staticfinalabstractsynchronizedvolatiletransientnativestrictfp非访问修饰符总览表 非访问修饰符组合与冲突规则 修饰符分类 分类&#xff1a;访问修饰符 和 非访问修饰符 1.访问修饰符 公共…...

解锁基因密码之重测序(从测序到分析)

在生命科学的奇妙世界中&#xff0c;基因恰似一本记录着生命奥秘的“天书”&#xff0c;它承载着生物体生长、发育、衰老乃至疾病等一切生命现象的关键信息。而重测序技术&#xff0c;则是开启基因“天书”奥秘的一把神奇钥匙。 试想&#xff0c;你手中有一本经典书籍的通用版…...

当使用 Docker Desktop 启动 Tomcat 镜像时时间不对

当使用 Docker Desktop 启动 Tomcat 镜像时时间不对&#xff0c;可能由以下原因导致并可采取相应解决方法&#xff1a; 宿主机时间设置问题&#xff1a;Docker 容器的时间是由宿主机提供的&#xff0c;如果宿主机的时间不正确&#xff0c;那么容器的时间也会不正确。需确保宿主…...

golang gmp模型分析

思维导图&#xff1a; 1. 发展过程 思维导图&#xff1a; 在单机时代是没有多线程、多进程、协程这些概念的。早期的操作系统都是顺序执行 单进程的缺点有&#xff1a; 单一执行流程、计算机只能一个任务一个任务进行处理进程阻塞所带来的CPU时间的浪费 处于对CPU资源的利用&…...

Redisson的RedLock与联锁(MultiLock)的区别

Redisson提供了两种分布式锁机制&#xff1a;RedLock(红锁)和MultiLock(联锁)&#xff0c;它们在实现分布式锁时有重要区别。 1. RedLock (红锁) 设计原理&#xff1a; 基于Redis官方提出的Redlock算法实现目的是在Redis集群环境下提供更可靠的分布式锁需要至少3个独立的Redi…...

图灵逆向——题十-魔改算法

目录列表 过程分析JS代码还原代码实现运行结果 本题属于魔改标准加密算法&#xff0c;所以无法使用JS或Python中的标准库来进行模拟加密了&#xff0c;只能一步一步的还原它的环境咯。。。 过程分析 打开控制台发现有个无限debugger&#xff0c;直接过掉~[doge]。。。 OK过掉…...

K8S学习之基础七十九:关闭istio功能

关闭istio功能 kubectl get ns --show-labels kubectl label ns default istio-injection-有istio-injectionenabled的命名空间&#xff0c;pod都会开启istio功能 反之&#xff0c;如果要开启istio&#xff0c;在对应命名空间打上该标签即可...

AI大模型课程系列汇总-某客时间篇

某客时间系列篇章&#x1f4a5; NO.文章&#xff08;点击可跳转&#xff09;1【课程系列11】某客时间AI 大模型应用开发实战营_ai大模型应用开发实战营 百度云-CSDN博客2【课程系列12】某客时间AI大模型微调训练营_极客时间 大模型rag 网盘-CSDN博客3【课程系列15】2024某客时…...

【人工智能】大语言模型多义词解析技术揭秘——以“项目“歧义消解为例

今天田辛老师和小伙伴探讨了一个有趣的多义词问题&#xff0c; 在人工智能技术日新月异的今天&#xff0c;大语言模型&#xff08;LLM&#xff09;对自然语言的理解能力已经达到令人惊叹的水平。大模型到底是如何去区分多义词的&#xff1f; 比如&#xff1a;当用户提到"…...

Coze平台 发布AI测试Agent的完整实现方案

以下是基于 Coze平台 发布AI测试Agent的完整实现方案,包含架构设计、核心功能模块、集成方式和落地步骤: 一、方案架构图 #mermaid-svg-kzS7cltxrbetjROl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-kzS7cltxr…...

OpenHarmony子系统开发 - 调测工具(二)

OpenHarmony子系统开发 - 调测工具&#xff08;二&#xff09; 三、hiperf使用指导 hiperf是为开发人员提供性能采样分析的工具&#xff0c;基于内核perf机制进行的用户态能力的扩展&#xff0c;可以对指定的程序或者整个系统进行性能采样。 hiperf支持的命令有&#xff1a;l…...

keil ERROR: L6220E 如何解决

最近调试MK8000方案&#xff0c;增加code后遇到&#xff1a; keil ERROR: L6220E: Execution region RW_RAM1 size (24592 bytes) execeeds limit (24568 bytes) .region contains 93 bytes of padding and 0 bytes of veneers (total 93 bytes of linker generated content) …...

c++比较器——priority_queue用 ; unordered_map 自定义哈希函数

文章目录 priority_queue自定义比较方法对 比较对象结构体 重载 <仿函数为什么是传一个类std::less<T> 和 std::greater<T> lambda unordered_map自定义哈希函数仿函数lambda priority_queue template<class T,class Container std::vector<T>,class…...

centos-LLM-生物信息-BioGPT安装

参考&#xff1a; GitHub - microsoft/BioGPT https://github.com/microsoft/BioGPT BioGPT&#xff1a;用于生物医学文本生成和挖掘的生成式预训练转换器 |生物信息学简报 |牛津学术 — BioGPT: generative pre-trained transformer for biomedical text generation and mini…...

esp32cam远程图传:AI Thinker ESP32-CAM -》 服务器公网 | 服务器 -》 电脑显示

用AI Thinker ESP32-CAM板子访问公网ip的5112端口并上传你的摄像头拍摄的图像视频数据&#xff0c;并写一段python程序打开弹窗接受图像实现超远程图像传输教程免费 1. 首先你要有一个公网ip也就是去买一台拥有公网的服务器电脑&#xff0c;我买的是腾讯云1年38元的服务器还可…...

今日踩坑之@Autowired与@Resource区别

案例说明 今天算是体验到了这俩注解的区别了&#xff0c;真所谓不报错就记不住这两注解区别&#xff0c;其实之前本人也是知道这俩注解的区别的只是我们往往项目上用习惯了Autowired就忘了&#xff0c;看来只有真正体会到报错才能记忆犹新o(╥﹏╥)o。 说明一下本人的踩坑情况&…...

在 M1 芯片的 Mac 电脑上安装 Redis 可以通过 ​​Homebrew​​ 快速完成

以下是详细步骤&#xff1a; 1. 安装 Homebrew&#xff08;若未安装&#xff09; 打开 ​​终端​​&#xff0c;执行以下命令安装 Homebrew&#xff08;已安装可跳过&#xff09;&#xff1a; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/…...

【从零开始学习JVM | 第一篇】快速认识JVM

什么是JVM&#xff1f; JVM--Java虚拟机&#xff0c;它是Java实现平台无关性的基石。 Java程序运行的时候&#xff0c;编译器将Java代码编译为平台无关的Java字节码文件&#xff08;.class&#xff09;&#xff0c;接下来对应平台的JVM对字节码进行运行解释&#xff0c;翻译成…...

linux 里的创建了一个tomcat用户 怎么禁止该用户使用crontab 功能

在 Linux 系统中&#xff0c;可以通过以下方法禁止 tomcat 用户使用 crontab 功能&#xff1a; 方法 1&#xff1a;通过 /etc/cron.deny 文件限制 这是 最推荐的标准方法&#xff0c;适用于所有主流 Linux 发行版&#xff08;CentOS、Ubuntu 等&#xff09;。 操作步骤&#…...

Elasticsearch入门指南(二)

一、RestClient操作索引库 什么是RestClient&#xff1f; ES官方提供了各种不同语言的客户端&#xff0c;用来操作ES。这些客户端的本质就是组装DSL语句&#xff0c;通过http请求发送给ES。官方文档地址&#xff1a; https://www.elastic.co/guide/en/elasticsearch/client/in…...

Mac监控新风尚:酷炫界面,性能监控更直观!

你是否曾经希望自己的Mac能够像Windows那样&#xff0c;轻松一按就能查看任务管理器来监控性能状态呢&#xff1f; 对于Mac用户来说&#xff0c;系统性能监控一直是个挑战——苹果公司并没有提供一个直观的性能监控工具&#xff0c;用户往往需要通过复杂的活动监视器来获取这些…...

碰一碰发视频源码开发深度解析,定制化开发

在移动应用开发领域&#xff0c;便捷的数据分享功能始终备受关注。碰一碰发视频这一创新功能&#xff0c;借助近场通信&#xff08;NFC&#xff09;技术&#xff0c;为用户提供了一种快速、直观的视频分享体验。本文将深入剖析碰一碰发视频功能的源码开发过程&#xff0c;涵盖从…...

基于 AI智能体、大模型、RAG、Agent 等技术构建公司内部闭环智能问答系统的详细方案,结合 Spring Boot + Vue 管理系统 的改造思路

以下是基于 AI智能体、大模型、RAG、Agent 等技术构建公司内部闭环智能问答系统的详细方案&#xff0c;结合 Spring Boot Vue 管理系统 的改造思路&#xff1a; 1. 系统架构设计 核心组件 数据源层 内部文档库&#xff1a;公司知识库&#xff08;如操作手册、FAQ、流程文档&a…...

红宝书第三十四讲:零基础学会单元测试框架:Jest、Mocha、QUnit

红宝书第三十四讲&#xff1a;零基础学会单元测试框架&#xff1a;Jest、Mocha、QUnit 资料取自《JavaScript高级程序设计&#xff08;第5版&#xff09;》。 查看总目录&#xff1a;红宝书学习大纲 一、单元测试是什么&#xff1f; 就像给代码做“体检”&#xff0c;帮你检查…...

视觉分析AI赋能智慧水务多场景应用

利用视觉分析的方式智慧水务的AI算法方案 一、背景 在传统水务监管中&#xff0c;面临着诸多痛点。例如&#xff0c;对于河道污染、水面异常、河湖四乱问题以及水生态环境差等情况&#xff0c;传统监管效率低下&#xff0c;预警不及时&#xff0c;资源分散&#xff0c;监控功…...

网络2 IP与MAC IP地址

IP地址与MAC地址 一 1.关系&#xff1a; 网卡有唯一的物理地址&#xff1a;MAC地址&#xff0c;IP是配置在网卡上的逻辑地址。 IP地址、MAC地址是进行网络通信必不可少的 2.MAC地址是物理地址&#xff0c;不可更改&#xff0c;通常与IP地址绑定 3.MAC地址&#xff1a;48位 IP地…...

spark-Core

运行架构 核心组件 由上图可以看出&#xff0c;对于 Spark 框架有两个核心组件&#xff1a; Driver&#xff0c;Spark 驱动器节点 其中Spark 驱动器节点&#xff0c;用于执行 Spark 任务中的 main 方法&#xff0c;负责实际代码的执行工作。 Driver 在 Spark 作业执行时主要…...

前端开发中的问题排查与定位:HTML、CSS、JavaScript(报错的解决方式)

目录 1.html 1. 结构错误调试&#xff1a;标签未正确嵌套 2. 语法问题调试&#xff1a;缺失引号 3. 断点调试&#xff1a;动态生成内容时的 JavaScript 错误 4. 网络调试&#xff1a;资源加载错误 5. 性能调试&#xff1a;页面加载性能 总结&#xff1a; 2.CSS 1. 定位…...

VMware Fusion Pro 13 for Mac虚拟机

VMware Fusion Pro 13 for Mac虚拟机 文章目录 VMware Fusion Pro 13 for Mac虚拟机一、介绍二、效果下载 一、介绍 VMware Fusion Pro for Mac&#xff0c;是一款mac虚拟机软件&#xff0c;跟Parallels Desktop一样&#xff0c;都可以让你的 Mac 同时运行一个或多个不同的操作…...

使用cline(VSCode插件)、continue(IDEA插件)、cherry-studio玩转MCP

安装环境 uv&#xff08;python&#xff09; 为什么不用pip&#xff1f; 使用 uv 时无需进行特定安装。使用 uvx 直接运行。 ⚡️ 比pip快10-100x https://github.com/pypa/pip https://ossinsight.io/analyze/pypa/pip?vsastral-sh%2Fuv#overview 安装 https://github…...