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

vue3和vue2的区别有哪些差异点

Vue3 vs Vue2 主要差异对比指南

官网

1. 核心架构差异

1.1 响应式系统

  • Vue2:使用 Object.defineProperty 实现响应式

    // Vue2 响应式实现
    Object.defineProperty(obj, 'key', {get() {// 依赖收集return value},set(newValue) {// 触发更新value = newValue}
    })
    
  • Vue3:使用 Proxy 实现响应式

    // Vue3 响应式实现
    const proxy = new Proxy(target, {get(target, key) {// 依赖收集track(target, key)return target[key]},set(target, key, value) {// 触发更新target[key] = valuetrigger(target, key)return true}
    })
    

1.2 组合式 API vs 选项式 API

  • Vue2:主要使用选项式 API

    // Vue2 组件
    export default {data() {return {count: 0}},methods: {increment() {this.count++}},computed: {doubleCount() {return this.count * 2}}
    }
    
  • Vue3:引入组合式 API

    // Vue3 组件
    import { ref, computed } from 'vue'export default {setup() {const count = ref(0)const doubleCount = computed(() => count.value * 2)function increment() {count.value++}return {count,doubleCount,increment}}
    }
    

2. 性能优化

2.1 虚拟 DOM

  • Vue2

    • 虚拟 DOM 更新时需要遍历整个虚拟 DOM 树
    • 组件级别的更新优化
  • Vue3

    • 引入静态树提升
    • 引入 Patch Flag 标记动态内容
    • 基于 Block 的更新机制
    <!-- Vue3 模板编译优化 -->
    <div><h1>静态内容</h1><div :id="dynamicId">{{ dynamicContent }}</div>
    </div>
    

2.2 编译优化

  • Vue2

    • 运行时确定更新范围
    • 需要遍历更多不必要的节点
  • Vue3

    • 编译时优化
    • Tree-shaking 支持
    • 更小的打包体积
    // Vue3 按需导入
    import { ref, onMounted } from 'vue'
    

3. 新特性对比

3.1 Fragment

  • Vue2:模板必须有一个根节点

    <!-- Vue2 -->
    <template><div><h1>标题</h1><p>内容</p></div>
    </template>
    
  • Vue3:支持多个根节点

    <!-- Vue3 -->
    <template><h1>标题</h1><p>内容</p>
    </template>
    

3.2 Teleport

  • Vue2:需要第三方库实现
  • Vue3:内置支持
    <!-- Vue3 Teleport -->
    <teleport to="body"><modal-component />
    </teleport>
    

3.3 Suspense

  • Vue2:不支持
  • Vue3:内置支持异步组件
    <!-- Vue3 Suspense -->
    <Suspense><template #default><async-component /></template><template #fallback><loading-component /></template>
    </Suspense>
    

4. API 差异

4.1 生命周期钩子

  • Vue2

    // Vue2 生命周期
    export default {beforeCreate() {},created() {},beforeMount() {},mounted() {},beforeUpdate() {},updated() {},beforeDestroy() {},destroyed() {}
    }
    
  • Vue3

    // Vue3 生命周期
    import { onBeforeMount,onMounted,onBeforeUpdate,onUpdated,onBeforeUnmount,onUnmounted
    } from 'vue'export default {setup() {onBeforeMount(() => {})onMounted(() => {})onBeforeUpdate(() => {})onUpdated(() => {})onBeforeUnmount(() => {})onUnmounted(() => {})}
    }
    

4.2 全局 API

  • Vue2:直接在 Vue 构造函数上挂载

    // Vue2
    Vue.component('my-component', {})
    Vue.directive('my-directive', {})
    Vue.mixin({})
    
  • Vue3:使用应用实例

    // Vue3
    const app = createApp({})
    app.component('my-component', {})
    app.directive('my-directive', {})
    app.mixin({})
    

5. TypeScript 支持

5.1 类型系统

  • Vue2

    • 需要额外的装饰器支持
    • 类型推导有限
    // Vue2 with TypeScript
    @Component
    export default class MyComponent extends Vue {message: string = 'Hello'
    }
    
  • Vue3

    • 原生支持 TypeScript
    • 更好的类型推导
    // Vue3 with TypeScript
    import { defineComponent, ref } from 'vue'export default defineComponent({setup() {const message = ref<string>('Hello')return { message }}
    })
    

6. 其他重要变化

6.1 v-model 变化

  • Vue2

    <!-- Vue2 -->
    <custom-inputv-model="value"@input="value = $event"
    />
    
  • Vue3

    <!-- Vue3 -->
    <custom-inputv-model:modelValue="value"@update:modelValue="value = $event"
    />
    

6.2 自定义指令

  • Vue2

    // Vue2 自定义指令
    Vue.directive('my-directive', {bind(el, binding) {},inserted(el, binding) {},update(el, binding) {},componentUpdated(el, binding) {},unbind(el, binding) {}
    })
    
  • Vue3

    // Vue3 自定义指令
    app.directive('my-directive', {beforeMount(el, binding) {},mounted(el, binding) {},beforeUpdate(el, binding) {},updated(el, binding) {},beforeUnmount(el, binding) {},unmounted(el, binding) {}
    })
    

7. 最佳实践建议

7.1 Vue3 推荐做法

  1. 使用组合式 API 管理复杂逻辑
  2. 利用 TypeScript 增强类型安全
  3. 使用新的内置组件(Fragment、Teleport、Suspense)
  4. 采用按需导入优化打包体积

7.2 迁移策略

  1. 渐进式迁移,可以同时使用选项式 API 和组合式 API
  2. 优先更新核心功能和性能瓶颈
  3. 使用官方迁移工具辅助迁移
  4. 关注废弃的特性和 Breaking Changes
    简述:

Vue 3 vs Vue 2 主要区别

1. 响应式系统

  • Vue 2:使用 Object.defineProperty() 来实现数据的响应式。
  • Vue 3:使用 Proxy 对象进行数据响应式处理。相比 Vue 2,Proxy 具有更好的性能和更强的功能,支持更多的数据操作。

2. Composition API

  • Vue 2:采用 Options API 进行组件组织,使用 datamethodscomputed 等选项来定义组件的状态和行为。
  • Vue 3:引入了 Composition API,通过 setup() 函数来组织组件的逻辑,使得逻辑更加灵活且易于复用。你可以使用 refreactivecomputed 等 API 来管理状态和副作用。

3. 性能提升

  • Vue 2:性能相对较低,尤其在复杂的组件树和大量数据绑定时。
  • Vue 3:引入了虚拟 DOM 重写和优化,使得性能显著提升。Vue 3 的渲染机制更高效,尤其在大规模应用中,性能提升非常明显。

4. 生命周期钩子

  • Vue 2:生命周期钩子包括 createdmountedupdateddestroyed 等。

  • Vue 3:增加了新的生命周期钩子,主要有:

    • onBeforeMount
    • onMounted
    • onBeforeUpdate
    • onUpdated
    • onBeforeUnmount
    • onUnmounted

    这些钩子可以在 Composition API 中使用。

5. TypeScript 支持

  • Vue 2:Vue 2 对 TypeScript 的支持较为有限,虽然有类型声明,但开发体验并不完全。
  • Vue 3:Vue 3 对 TypeScript 的支持非常好,几乎所有的 Vue 核心 API 都可以直接通过 TypeScript 进行类型推导,提升了开发体验和类型安全性。

6. Fragment 支持

  • Vue 2:组件只能有一个根元素(必须是一个包裹元素)。
  • Vue 3:引入了 Fragment 组件,允许组件有多个根元素,从而简化组件结构,避免不必要的 DOM 元素嵌套。

7. Teleport

  • Vue 2:需要借助第三方库或手动实现,才能将某个组件渲染到 DOM 的其他部分。
  • Vue 3:内置了 Teleport 组件,允许将子组件渲染到 DOM 的任意位置,非常适用于模态框、弹出层等需求。

8. Suspense

  • Vue 2:没有原生的 Suspense 机制,需要手动处理异步加载。
  • Vue 3:引入了 Suspense 组件,支持异步组件的加载和错误处理,提升了异步渲染的开发体验。

9. 动态组件

  • Vue 2:动态组件支持 v-bindv-slot,通过 $set 动态更新组件内容。
  • Vue 3:支持 Suspensev-is 动态组件选择,增强了动态组件的灵活性和易用性。

10. 其他 API 改进

  • Vue 2$refs$children 存在一些限制,特别是在动态组件中。
  • Vue 3:对 $refs$children 的访问进行了优化,支持更灵活的组件引用管理。

11. 模板编译器

  • Vue 2:模板编译器的能力较为有限,模板的执行效率相对较低。
  • Vue 3:模板编译器进行了重写,支持静态树提升、编译时优化等,使得渲染更加高效。

12. 其他功能

  • Vue 2:支持 vue-router、vuex 等插件,但对 Vue 3 中的多个新特性(如 provide/inject)的支持不如 Vue 3。
  • Vue 3:除了原生支持 provide/inject,还通过 defineAsyncComponent 等增强了异步组件的功能,进一步提升了开发的灵活性。

总结

Vue 3 在性能、灵活性、TypeScript 支持等方面都有显著提升。对于大型项目,Vue 3 提供了更强大的 Composition API 和更高效的响应式系统,而对于 Vue 2 开发者来说,Vue 3 的新特性可能需要一段时间的学习和适应。

相关文章:

vue3和vue2的区别有哪些差异点

Vue3 vs Vue2 主要差异对比指南 官网 1. 核心架构差异 1.1 响应式系统 Vue2&#xff1a;使用 Object.defineProperty 实现响应式 // Vue2 响应式实现 Object.defineProperty(obj, key, {get() {// 依赖收集return value},set(newValue) {// 触发更新value newValue} })Vue3…...

记录备战第十六届蓝桥杯的过程

1.学会了原来字符串也有比较方法&#xff0c;也就是字符串987 > 98 等等&#xff0c;可以解决拼最大数问题 题目链接&#xff1a;5.拼数 - 蓝桥云课 (lanqiao.cn) 2.今天又复习了一下bfs&#xff0c;感觉还是很不熟练&#xff0c;可能是那个过程我些许有点不熟悉&#xff…...

【PVE】Proxmox VE8.0+创建LXC容器安装docker

为了不影响PVE宿主机&#xff0c;通常使用套娃的形式安装Docker容器&#xff0c;再安装相关docker应用。首先在CT模板中创建 Linux 容器&#xff0c;推荐使用Debian。开启ssh登录&#xff0c;修改debian配置&#xff0c;安装docker 一、创建 LXC 容器 1、CT模板下载 点击“模…...

Semantic Kernel - Kernel理解

目录 一、关于Kernel 二、案例实战 三、运行截图 一、关于Kernel 微软的 Semantic Kernel 项目中,Semantic Kernel 是一个工具框架,旨在使得开发人员能够更容易地将大语言模型(如GPT)集成到不同的应用中。它通过提供一组接口、任务模板和集成模块,使开发者能够轻松地设计…...

【JavaWeb06】Tomcat基础入门:架构理解与基本配置指南

文章目录 &#x1f30d;一. WEB 开发❄️1. 介绍 ❄️2. BS 与 CS 开发介绍 ❄️3. JavaWeb 服务软件 &#x1f30d;二. Tomcat❄️1. Tomcat 下载和安装 ❄️2. Tomcat 启动 ❄️3. Tomcat 启动故障排除 ❄️4. Tomcat 服务中部署 WEB 应用 ❄️5. 浏览器访问 Web 服务过程详…...

「 机器人 」利用冲程对称性调节实现仿生飞行器姿态与方向控制

前言 在仿生扑翼飞行器中,通过改变冲程对称性这一技术手段,可以在上冲与下冲两个阶段引入不对称性,进而产生额外的力或力矩,用于实现俯仰或其他姿态方向的控制。以下从原理、在仿生飞行器中的应用和典型实验示例等方面进行梳理与阐述。 1. 冲程对称性原理 1.1 概念:上冲与…...

力扣算法题——11.盛最多水的容器

目录 &#x1f495;1.题目 &#x1f495;2.解析思路 本题思路总览 借助双指针探索规律 从规律到代码实现的转化 双指针的具体实现 代码整体流程 &#x1f495;3.代码实现 &#x1f495;4.完结 二十七步也能走完逆流河吗 &#x1f495;1.题目 &#x1f495;2.解析思路…...

企业微信SCRM开创客户管理新纪元推动私域流量高效转化

内容概要 在当今瞬息万变的数字化时代&#xff0c;企业面临着前所未有的客户管理挑战。消费者的需求日益多样化&#xff0c;他们希望能够随时随地与品牌沟通。因此&#xff0c;越来越多的企业意识到&#xff0c;传统的客户管理方式已无法满足市场的需求。在这样的背景下&#…...

C++和Python实现SQL Server数据库导出数据到S3并导入Redshift数据仓库

用C实现高性能数据处理&#xff0c;Python实现操作Redshift导入数据文件。 在Visual Studio 2022中用C和ODBC API导出SQL Server数据库中张表中的所有表的数据为CSV文件格式的数据流&#xff0c;用逗号作为分隔符&#xff0c;用双引号包裹每个数据&#xff0c;字符串类型的数据…...

ESP8266 NodeMCU与WS2812灯带:实现多种花样变换

在现代电子创意项目中&#xff0c;LED灯带的应用已经变得极为广泛。通过结合ESP8266 NodeMCU的强大处理能力和FastLED库的高效功能&#xff0c;我们可以轻松实现多达100种灯带变换效果。本文将详细介绍如何使用Arduino IDE编程&#xff0c;实现从基础到高级的灯光效果&#xff…...

OpenAI 发布首个 AI 智能体

OpenAI 发布首个 AI 智能体 当地时间 1 月 23 日&#xff0c;OpenAI 发布了首个 AI 智能体 Operator124。以下是关于它的详细介绍2&#xff1a; 功能用途 操作网页&#xff1a;可模拟人类操作网页浏览器&#xff0c;能进行点击、滚动、输入等操作&#xff0c;例如在 OpenTable…...

【Linux】gcc/g++的使用

目录 一、gcc/g简介 二、编译和链接 预处理 编译 汇编 连接&#xff08;生成可执行文件或库文件&#xff09; 三、动态链接和静态链接 静态库和动态库 gcc其他常用选项 合集传送门&#xff1a;Linux_uyeonashi的博客-CSDN博客 一、gcc/g简介 GCC&#xff08;GNU Com…...

Kmesh v1.0 正式发布!7 大特性提升网络流量管理效率和安全性

Kmesh v1.0 正式发布&#xff01;7 大特性提升网络流量管理效率和安全性 2025 年新年伊始&#xff0c;Kmesh 团队正式发布了 Kmesh v1.0234。以下是 Kmesh v1.0 提升网络流量管理效率和安全性的 7 大特性35&#xff1a; 加密通信&#xff1a;引入 IPsec 协议对节点间流量加密&a…...

Day45:元组的创建

在 Python 中&#xff0c;元组&#xff08;tuple&#xff09;是一种不可变的序列类型。与列表&#xff08;list&#xff09;不同&#xff0c;元组一旦创建就无法修改它们的内容。元组是有序的&#xff0c;可以包含不同类型的元素&#xff0c;支持索引和切片操作&#xff0c;但不…...

Rust:如何动态调用字符串定义的 Rhai 函数?

在 Rust 中使用 Rhai 脚本引擎时&#xff0c;你可以动态地调用传入的字符串表示的 Rhai 函数。Rhai 是一个嵌入式脚本语言&#xff0c;专为嵌入到 Rust 应用中而设计。以下是一个基本示例&#xff0c;展示了如何在 Rust 中调用用字符串传入的 Rhai 函数。 首先&#xff0c;确保…...

在 Ubuntu22.04 上安装 Splunk

ELK感觉太麻烦了&#xff0c;换个日志收集工具 Splunk 是一种 IT 工具&#xff0c;可帮助在任何设备上收集日志、分析、可视化、审计和创建报告。简单来说&#xff0c;它将“机器生成的数据转换为人类可读的数据”。它支持从虚拟机、网络设备、防火墙、基于 Unix 和基于 Windo…...

单片机基础模块学习——数码管(二)

一、数码管模块代码 这部分包括将数码管想要显示的字符转换成对应段码的函数&#xff0c;另外还包括数码管显示函数 值得注意的是对于小数点和不显示部分的处理方式 由于小数点没有单独占一位&#xff0c;所以这里用到了两个变量i,j用于跳过小数点导致的占据其他字符显示在数…...

DAY01 面向对象回顾、继承、抽象类

学习目标 能够写出类的继承格式public class 子类 extends 父类{}public class Cat extends Animal{} 能够说出继承的特点子类继承父类,就会自动拥有父类非私有的成员 能够说出子类调用父类的成员特点1.子类有使用子类自己的2.子类没有使用,继承自父类的3.子类父类都没有编译报…...

LeetCode:40. 组合总和 II(回溯 + 剪枝 Java)

目录 40. 组合总和 II 题目描述&#xff1a; 实现代码与解析&#xff1a; 回溯 剪枝 原理思路&#xff1a; 40. 组合总和 II 题目描述&#xff1a; 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target …...

周末总结(2024/01/25)

工作 人际关系核心实践&#xff1a; 要学会随时回应别人的善意&#xff0c;执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己&#xff0c;抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内&#xff0c;职场社交不要放在5min以外 职场的人际关系在面对利…...

解决日志中 `NOT NULL constraint failed` 异常的完整指南

在开发和运维过程中,日志是我们排查问题的重要工具。然而,当日志中出现类似 NOT NULL constraint failed 的异常时,往往意味着数据库约束与代码逻辑不匹配。本文将详细分析此类问题的原因,并提供完整的解决方案。 © ivwdcwso (ID: u012172506) 问题描述 在同步 AWS …...

线性规划:机器学习中的优化利器

一、线性规划的基本概念 线性规划&#xff08;Linear Programming, LP&#xff09;是运筹学中数学规划的一个重要分支&#xff0c;用于在一组线性不等式的约束条件下&#xff0c;找到线性目标函数的最大值或最小值。其问题可以表述为&#xff1a; 在一组线性约束条件 s.t.&am…...

Flutter子页面向父组件传递数据方法

在 Flutter 中&#xff0c;如果父组件需要调用子组件的方法&#xff0c;可以通过以下几种方式实现。以下是常见的几种方法&#xff1a; 方法 1&#xff1a;使用 GlobalKey 和 State 调用子组件方法 这是最直接的方式&#xff0c;通过 GlobalKey 获取子组件的 State&#xff0c…...

乐鑫 ESP32-C6 通过 Thread 1.4 互操作性认证

乐鑫信息科技 (688018.SH) 很高兴地宣布&#xff0c;ESP32-C6 已经成功通过 Thread 1.4 互操作性认证。这一成就标志着乐鑫在提供先进物联网解决方案之路上又迈进了重要一步。ESP32-C6 在 Thread Group 授权实验室的严格测试中&#xff0c;展现了与最新 Thread 1.4 协议的无缝兼…...

机器学习2 (笔记)(朴素贝叶斯,集成学习,KNN和matlab运用)

朴素贝叶斯模型 贝叶斯定理&#xff1a; 常见类型 算法流程 优缺点 集成学习算法 基本原理 常见方法 KNN&#xff08;聚类模型&#xff09; 算法性质&#xff1a; 核心原理&#xff1a; 算法流程 优缺点 matlab中的运用 朴素贝叶斯模型 朴素贝叶斯模型是基于贝叶斯…...

docker安装elk6.7.1-搜集java日志

docker安装elk6.7.1-搜集java日志 如果对运维课程感兴趣&#xff0c;可以在b站上、A站或csdn上搜索我的账号&#xff1a; 运维实战课程&#xff0c;可以关注我&#xff0c;学习更多免费的运维实战技术视频 0.规划 192.168.171.130 tomcat日志filebeat 192.168.171.131 …...

苍穹外卖-day06

[!IMPORTANT] HttpClient 是什么&#xff1f;它的作用是什么&#xff1f;在微信登录流程中&#xff0c;code 是什么&#xff1f;它的作用是什么&#xff1f;微信登录的具体步骤有哪些&#xff1f;在微信登录流程中&#xff0c;token 的作用是什么&#xff1f;在微信登录中&…...

iic、spi以及uart

何为总线&#xff1f; 连接多个部件的信息传输线&#xff0c;是部件共享的传输介质 总线的作用&#xff1f; 实现数据传输&#xff0c;即模块之间的通信 总线如何分类&#xff1f; 根据总线连接的外设属于内部外设还是外部外设将总线可以分为片内总线和片外总线 可分为数…...

如何高效启动并优化你的Google广告?

在现代数字营销中&#xff0c;Google广告&#xff08;Google Ads&#xff09;已经成为提升品牌曝光、吸引潜在客户和推动销售增长的重要工具。无论你是刚接触广告投放的新手&#xff0c;还是希望优化广告效果的资深营销人员&#xff0c;理解如何有效启动并管理Google广告至关重…...

【Android】布局文件layout.xml文件使用控件属性android:layout_weight使布局较为美观,以RadioButton为例

目录 说明举例 说明 简单来说&#xff0c;android:layout_weight为当前控件按比例分配剩余空间。且单个控件该属性的具体数值不重要&#xff0c;而是多个控件的属性值之比发挥作用&#xff0c;例如有2个控件&#xff0c;各自的android:layout_weight的值设为0.5和0.5&#xff0…...

低代码系统-产品架构案例介绍、简道云(七)

今天分析另外一个零代码、低代码产品-简道云&#xff0c;跟所有低代码产品的架构图一样&#xff0c;高、大、炫、美。 依然是从下至上&#xff0c;从左到右的顺序。 开发层 搭建中心 表单、流程、报表、用户中心&#xff0c;还是这些内容&#xff0c;自定义打印很多平台都有&am…...

RabbitMQ 分布式高可用

文章目录 前言一、持久化与内存管理1、持久化机制2、内存控制1、命令行2、配置文件 3、内存换页4、磁盘控制 二、集群1、Erlang的分布式特性2、RabbitMQ的节点类型2.1、磁盘节点 (Disk Node)2.2、内存节点 (RAM Node) 3、构建集群3.1 普通集群3.2 镜像队列3.3、高可用实现方案3…...

使用Pytest Fixtures来提升TestCase的可读性、高效性

关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理&#xff0c;构建成功的基石 在自动化测试工作之前&#xff0c;你应该知道的10条建议 在自动化测试中&#xff0c;重要的不是工具 在编写单元测试时&#xff0c;你是否发现自己有很多重复代码&#xff1f; 数据库设…...

qt QUrl详解

1、概述 QUrl是Qt框架中用于处理URL&#xff08;统一资源定位符&#xff09;的类&#xff0c;它提供了构建、解析、编码、解码和处理URL的功能。QUrl支持多种协议&#xff0c;如HTTP、HTTPS、FTP以及文件URL等&#xff0c;并能处理URL的各个组成部分&#xff0c;如协议、主机、…...

从0到1:C++ 开启游戏开发奇幻之旅(一)

目录 为什么选择 C 进行游戏开发 性能卓越 内存管理精细 跨平台兼容性强 搭建 C 游戏开发环境 集成开发环境&#xff08;IDE&#xff09; Visual Studio CLion 图形库 SDL&#xff08;Simple DirectMedia Layer&#xff09; SFML&#xff08;Simple and Fast Multim…...

IGBT的损耗计算的学习【2025/1/24】

可以通过示波器实测IGBT电压电流波形&#xff0c;然后通过示波器的math功能将电压电流波形乘积后积分求损耗。 软开管&#xff1a;给了导通信号&#xff0c;但是电流并没有从此IGBT流过 IGBT&#xff08;绝缘栅双极晶体管&#xff09;的损耗主要分为 导通损耗 和 开关损耗 两部…...

Python从0到100(八十五):神经网络-使用迁移学习完成猫狗分类

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能…...

Oracle迁移DM数据库

Oracle迁移DM数据库 本文记录使用达梦官方数据迁移工具DTS&#xff0c;将Oracle数据库的数据迁移至达梦数据库。 1 数据准备 2 DTS工具操作步骤 2.1 创建工程 打开DTS迁移工具&#xff0c;点击新建工程&#xff0c;填写好工程信息&#xff0c;如图&#xff1a; 2.2 新建迁…...

通过 NAudio 控制电脑操作系统音量

根据您的需求&#xff0c;以下是通过 NAudio 获取和控制电脑操作系统音量的方法&#xff1a; 一、获取和控制系统音量 &#xff08;一&#xff09;获取系统音量和静音状态 您可以使用 NAudio.CoreAudioApi.MMDeviceEnumerator 来获取系统默认音频设备的音量和静音状态&#…...

AI刷题-最小化团建熟悉程度和

目录 问题描述 输入格式 输出格式 解题思路&#xff1a; 状态表示 状态转移 动态规划数组 预处理 实现&#xff1a; 1.初始化&#xff1a; 2.动态规划部分&#xff1a; &#xff08;1&#xff09;对于已分组状态的&#xff0c;跳过&#xff1a; &#xff08;2&…...

Day36:统计字符串个数

在 Python 中&#xff0c;字符串的统计功能是处理文本数据时非常重要的一部分。我们可以使用多种方法来统计字符串中的字符、子字符串、单词以及出现次数等。Python 提供了内建的方法和函数&#xff0c;如 count()、len() 和正则表达式&#xff0c;可以帮助我们高效地进行这些统…...

数字图像处理:实验六

uu们&#xff01;大家好&#xff0c;2025年的新年就要到来&#xff0c;咸鱼哥在这里祝大家在2025年每天开心快乐&#xff0c;天天挣大钱&#xff0c;自由自在&#xff0c;健健康康&#xff0c;万事如意&#xff01;&#xff08;要是咸鱼哥嘴笨的话&#xff0c;还望大家多多包涵…...

【2025年数学建模美赛C题】第1-5问F奖解题思路+高级绘图+可运行代码

基于多模型分析的奥运会奖牌预测与影响因素研究 解题思路一、问题重述二、问题分析三、模型假设与符号说明四、数据预处理五、奖牌榜预测5.1 基于LSTM长短期记忆循环神经网络的预测模型的建立5.2 模型预测结果 六、首枚奖牌预测6.1 BP神经网络的建立6.2 模型预测结果 七、各国奖…...

记一次STM32编译生成BIN文件过大的问题(基于STM32CubeIDE)

文章目录 问题描述解决方法更多拓展 问题描述 最近在一个项目中使用了 STM32H743 单片机&#xff08;基于 STM32CubeIDE GCC 开发&#xff09;&#xff0c;它的内存分为了 DTCMRAM RAM_D1 RAM_D2 …等很多部分。其中 DTCM 的速度是比通常的内存要快的&#xff0c;缺点是不支持…...

【设计模式-行为型】备忘录模式

一、什么是备忘录模式 来到备忘录模式了&#xff0c;这个模式我感觉相对简单一些&#xff0c;就是备份&#xff0c;或者快照。跟前面一样为了加深理解&#xff0c;我们引入一个电影情结来说明啥是备忘录模式&#xff0c;以来加深大家对备忘录模式的认识。那么&#xff0c;在电影…...

使用Cline+deepseek实现VsCode自动化编程

不知道大家有没有听说过cursor这个工具&#xff0c;类似于AIVsCode的结合体&#xff0c;只要绑定chatgpt、claude等大模型API&#xff0c;就可以实现对话式自助编程&#xff0c;简单闲聊几句便可开发一个软件应用。 但cursor受限于外网&#xff0c;国内用户玩不了&#xff0c;…...

React 前端框架实战教程

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 引言 React 是由 Facebook 开发的前端 JavaScript 库&#xff0c;旨在构建高效、灵活的用户界面&#xff0c;尤其适用于单页应用…...

输入带空格的字符串,求单词个数

输入带空格的字符串&#xff0c;求单词个数 __ueooe_eui_sjje__ ---->3syue__jdjd____die_ ---->3shuue__dju__kk ---->3 #include <stdio.h> #include <string.h>// 自定义函数来判断字符是否为空白字符 int isSpace(char c) {return c || c \t || …...

Kafka 日志存储 — 日志清理

Kafka 提供两种日志清理策略&#xff1a;日志清理(Log Delete)与日志压缩(Log Compaction)。 1 日志清理 通过broker端参数log.cleanup.policy来设置日志清理策略&#xff0c;默认值为“delete”。如果要采用日志压缩的清理策略&#xff0c;则设置为“compact”。可以同时支持…...

51单片机入门_02_C语言基础0102

C语言基础部分可以参考我之前写的专栏C语言基础入门48篇 以及《从入门到就业C全栈班》中的C语言部分&#xff0c;本篇将会结合51单片机讲差异部分。 课程主要按照以下目录进行介绍。 文章目录 1. 进制转换2. C语言简介3. C语言中基本数据类型4. 标识符与关键字5. 变量与常量6.…...