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

【前端高频面试题--Vuex下篇】

🚀 作者 :“码上有前”
🚀 文章简介 :前端高频面试题
🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬

在这里插入图片描述

前端高频面试题--Vuex篇

  • 往期精彩内容
  • Vuex 的原理
  • Vuex中action和mutation的区别
  • Vuex 和 localStorage 的区别
  • Redux 和 Vuex 区别和共同思想
  • 为什么要用 Vuex 或者 Redux
  • Vuex有哪几种属性?
  • Vuex和单纯的全局对象有什么区别?
  • 为什么 Vuex 的 mutation 中不能做异步操作?
  • Vuex的严格模式是什么,有什么作用,如何开启?
  • 如何在组件中批量使用Vuex的getter属性
  • 如何在组件中重复使用Vuex的mutation

往期精彩内容

【前端高频面试题–HTML篇】
【前端高频面试题–CSS上篇】
【前端高频面试题–CSS下篇】
【前端高频面试题–JS上篇】
【前端高频面试题–JS下篇】
【前端高频面试题–ES6篇】
【前端高频面试题–ES7-ES11】
【前端–异步编程】
【前端高频面试题–TypeScript篇】

【前端高频面试题–git篇】
【前端高频面试题–微信小程序篇】

【前端高频面试题–Vue基础篇】
【前端高频面试题–虚拟DOM篇】
【前端高频面试题–Vue3.0篇】
【前端高频面试题–Vuex上篇】
【前端高频面试题–Vuex下篇】
【前端高频面试题–Vue生命周期篇】
【前端高频面试题–Vue组件通信篇】
【前端高频面试题–Vue路由篇】

【前端-Vue3创建一个新项目】
【前端大屏自适应缩放】
【前端Vue3 + TS项目开发一般流程】

Vuex 的原理

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用了集中式存储管理应用的所有组件的状态,并提供了一种可预测的方式来管理和修改状态。下面是 Vuex 的基本原理:

  1. 单一状态树:Vuex 通过创建一个单一的状态树来管理应用的所有状态。这个状态树存储在 Vuex 的 store 对象中,它包含了应用的所有状态数据。

  2. 状态是响应式的:Vuex 使用 Vue.js 的响应式系统来跟踪状态的变化。这意味着当状态发生变化时,相关的组件会自动更新。

  3. 使用 getters 获取状态:Vuex 提供了 getters 来获取状态,类似于 Vue 组件中的计算属性。getters 可以对状态进行派生、计算和过滤,使得组件可以直接从 store 中获取经过处理的状态。

  4. 提交 mutations 修改状态:Vuex 使用 mutations 来修改状态。mutations 是包含修改状态的函数的对象。每个 mutation 函数都会接收当前的状态和可选的负载(payload)参数,通过对状态的修改来实现数据的变化。mutations 只能进行同步操作。

  5. 通过 actions 异步修改状态:对于异步操作,例如发起网络请求或定时器,Vuex 使用 actionsactions 包含了一系列的动作函数,这些函数可以触发 mutations 来修改状态。actions 可以进行异步操作,然后再提交 mutations 来修改状态。

  6. 使用模块化组织代码:当应用的状态变得复杂时,Vuex 允许将状态分割成模块。每个模块都有自己的状态、mutationsactionsgetters,可以通过模块化的方式组织和管理代码。

通过以上机制,Vuex 实现了状态的集中管理和可预测的状态变更。它使得多个组件可以共享和修改相同的状态,避免了状态在组件之间的传递和同步的复杂性。Vuex 的原理可以帮助开发者更好地组织和管理 Vue.js 应用的状态,并提升代码的可维护性和可测试性。

Vuex中action和mutation的区别

在 Vuex 中,actionmutation 是两种不同的概念,各自有着不同的作用和用途。下面是它们之间的区别:

Mutations(变更状态)

  • Mutations 是 Vuex 中用于修改状态的函数。
  • Mutations 是同步操作,它们直接修改状态并且是在组件之外进行的。
  • 只有通过 mutations 修改状态,才能保证状态变更的追踪和记录,以及能够被 Vue 的响应式系统检测到状态的变化。
  • Mutations 通过提交(commit)来触发,并且在调用时需要指定一个唯一的字符串类型的标识符,用于指定要触发的 mutation 函数。
  • Mutations 应该是纯函数,即给定相同的输入,始终返回相同的输出,而不产生副作用。

Actions(异步操作和封装)

  • Actions 是用于处理异步操作、封装复杂业务逻辑的函数。
  • Actions 可以包含任意异步操作,如发送网络请求、定时器等。
  • Actions 可以通过调用 mutations 来修改状态,从而实现状态的变更。
  • Actions 在组件中通过分发(dispatch)来触发,并且也需要指定一个字符串类型的标识符来指定要触发的 action 函数。
  • Actions 可以用于封装和组织复杂的业务逻辑,例如根据条件判断是否触发某个 mutation,或者在多个 mutation 之间进行协调。

总结起来,mutations 用于同步修改状态,而 actions 则用于处理异步操作和封装复杂业务逻辑。mutations 的作用是直接修改状态,而 actions 则可以通过调用 mutations 来间接修改状态。通过使用 actions,我们可以更好地组织和管理异步操作,同时也可以在需要时进行状态的变更。

Vuex 和 localStorage 的区别

Vuex 和 localStorage 是两种不同的状态管理和数据存储方式,它们有以下区别:

1. 数据持久性:

  • Vuex:Vuex 是一个在内存中管理状态的工具,用于在 Vue.js 应用程序中共享和管理状态。Vuex 中的状态是临时存储的,只在当前页面的生命周期中存在。当页面刷新或关闭时,状态将被重置。
  • localStorage:localStorage 是 Web 浏览器提供的一种持久化存储数据的机制。数据存储在浏览器的本地存储中,即使关闭了页面或浏览器,数据仍然保留在本地,下次访问时可以继续使用。

2. 数据共享范围:

  • Vuex:Vuex 用于在 Vue.js 应用程序中共享状态。它的数据共享范围是在应用程序的所有组件之间,可以跨越组件层级传递和共享数据。
  • localStorage:localStorage 存储的数据是全局可访问的,可以在同一域名下的所有页面中读取和写入数据。

3. 数据更新方式:

  • Vuex:Vuex 遵循一种可预测的状态管理模式,通过 mutations 和 actions 来更新和操作状态。状态的变更是通过提交 mutations 或调用 actions 来触发的,以确保对状态的修改是可追踪和可控的。
  • localStorage:localStorage 提供了简单的键值对存储,可以直接读写数据。数据的更新是直接通过修改 localStorage 中的值来实现的。

4. 功能和用途:

  • Vuex:Vuex 主要用于管理 Vue.js 应用程序中的共享状态,它提供了一种集中式的方式来管理状态,方便状态的共享和修改。Vuex 还提供了一些工具和机制,如 getters、mutations 和 actions,用于处理复杂的状态逻辑和异步操作。
  • localStorage:localStorage 主要用于在浏览器中持久化存储少量的数据。它适用于需要在多个页面或会话之间共享数据,或者需要在页面刷新或关闭后仍然保留数据的情况。

需要注意的是,尽管 Vuex 和 localStorage 在某些方面有相似之处,但它们的用途和设计目标不同。Vuex 更适合于在 Vue.js 应用程序中管理复杂的状态和数据流,而 localStorage 更适合于简单的数据存储和持久化需求。在具体的应用场景中,可以根据需求选择合适的方式来管理和存储数据。

Redux 和 Vuex 区别和共同思想

Redux 和 Vuex 是两个用于状态管理的流行工具,它们有一些区别和共同的思想。

区别:

  1. 生态系统和框架: Redux 是一个独立的状态管理库,可以与多个 JavaScript 框架(如 React、Angular 和 Vue)一起使用。而 Vuex 是专门为 Vue.js 应用程序开发的状态管理库,与 Vue.js 紧密集成。

  2. 概念和术语: Redux 和 Vuex 在概念和术语上有一些差异。Redux 强调纯函数和不可变性,使用 reducer 来处理状态变更。而 Vuex 强调使用 mutationaction 来修改状态,同时支持 Vue.js 的响应式系统。

  3. 语法和用法: Redux 和 Vuex 在语法和用法上也有一些差异。Redux 使用纯 JavaScript,需要编写大量的样板代码来定义 actionreducerstore。而 Vuex 使用 Vue.js 的语法,通过创建 statemutationactiongetter 对象来定义状态和操作。

共同思想:

  1. 单一状态树: Redux 和 Vuex 都采用了单一状态树(单一数据源)的思想,将应用的所有状态存储在一个对象中,使得状态的变化可预测和可追踪。

  2. 状态不可变性: Redux 和 Vuex 强调状态的不可变性,即不直接修改状态,而是通过创建新的状态对象来实现状态的变更。这有助于追踪状态的变化,并且可以更好地进行状态的比较和调试。

  3. 通过动作修改状态: Redux 和 Vuex 都使用动作来修改状态。在 Redux 中,通过 dispatch action 来触发 reducer 来修改状态。在 Vuex 中,通过 commit mutation 或 dispatch action 来触发 mutation 来修改状态。

  4. 中心化管理: Redux 和 Vuex 都提供了集中化的状态管理机制,将状态存储在一个中心化的存储对象中,并且可以在多个组件之间共享和访问状态。

  5. 时间旅行调试: Redux 和 Vuex 都支持时间旅行调试的功能,可以记录和回放状态的变化,以便开发者进行调试和查看状态的历史。

尽管 Redux 和 Vuex 在实现细节和用法上有一些差异,但它们都遵循类似的思想和原则,旨在简化状态管理、提高可维护性,并促使开发者编写可预测和可测试的代码。

为什么要用 Vuex 或者 Redux

使用 Vuex 或 Redux 主要有以下几个原因:

  1. 集中式状态管理: 当应用程序变得复杂,组件之间的状态共享和通信可能变得困难。Vuex 和 Redux 提供了集中式的状态管理,将应用程序的状态存储在一个中心化的存储对象中,使得状态的读取和修改变得简单和可预测。这样可以更好地组织和管理应用程序的状态,减少了组件之间的耦合性。

  2. 可预测的状态变更: Vuex 和 Redux 强调通过定义明确的 actionmutation 来修改状态。这种显式的状态变更方式使得状态的变化变得可预测,开发者可以更好地理解和追踪状态的变化。同时,这也使得状态的修改变得可控,不会出现隐式的状态变更。

  3. 方便的状态调试: Vuex 和 Redux 提供了强大的调试工具和开发者工具,可以方便地进行状态的调试和监控。开发者可以查看状态的变化历史,回放状态的变化,以及在开发过程中更好地理解和调试状态的变化。

  4. 提高代码的可维护性: 使用 Vuex 或 Redux 可以将状态逻辑从组件中抽离出来,使得组件更专注于 UI 的渲染和交互。这样可以提高代码的可维护性,减少了组件的复杂性,使得代码更易于理解、调试和测试。

  5. 支持异步操作和副作用管理: Vuex 和 Redux 提供了机制来处理异步操作和副作用。通过定义 action,可以封装和管理复杂的异步操作,如网络请求、定时器等。这样可以使应用程序的异步逻辑更可控、可测试,并且与同步逻辑保持一致。

需要注意的是,使用 Vuex 或 Redux 并不是必需的,特别是对于简单的应用程序或组件之间的简单状态传递,直接使用 Vue.js 或 React 的本地状态管理也是可以的。Vuex 和 Redux 更适合于大型、复杂的应用程序,或者需要跨组件共享状态和处理异步操作的场景。

Vuex有哪几种属性?

在 Vuex 中,有以下几种属性:

  1. state(状态): state 是存储应用程序的状态的对象。它可以包含应用程序中需要共享的数据。state 对象是响应式的,当 state 中的数据发生变化时,会自动更新相关的组件。

  2. getters(获取器): getters 提供了对 state 中数据的计算属性。可以通过定义 getters 来获取、计算和派生 state 中的数据,类似于 Vue 组件中的计算属性。

  3. mutations(突变): mutations 是用于修改 state 的方法。每个 mutation 都有一个字符串类型的事件名称和一个回调函数,在回调函数中可以修改 state 的数据。mutations 应该是同步的操作。

  4. actions(动作): actions 是用于处理异步操作和触发 mutations 的方法。每个 action 都有一个字符串类型的事件名称和一个回调函数,在回调函数中可以执行异步操作,然后通过调用 commit 方法来触发 mutations 修改 state。

  5. modules(模块): modules 允许将 Vuex 的状态和逻辑拆分为多个模块。每个模块拥有自己的 state、getters、mutations 和 actions。模块化的结构使得状态的管理更加灵活和可扩展。

需要注意的是,这些属性是 Vuex 的核心概念,但在实际使用中,可以根据应用程序的需求选择性地使用它们。

Vuex和单纯的全局对象有什么区别?

Vuex 和单纯的全局对象之间有几个区别:

  1. 状态的集中管理: Vuex 提供了一个中心化的存储对象,用来存储应用程序的状态。相比于单纯的全局对象,Vuex 提供了更结构化、规范化的方式来管理状态。它定义了明确的状态属性、getters、mutations 和 actions,使得状态的读取、修改、计算和异步处理更加清晰和可控。

  2. 响应式: Vuex 中的状态是响应式的,当状态发生变化时,相关的组件会自动更新。这是 Vue.js 的核心特性之一,通过使用 Vuex,可以确保状态的变化在整个应用程序中保持同步,并且能够自动触发组件的重新渲染。

  3. 状态变更的追踪和调试: Vuex 提供了强大的调试工具和开发者工具,可以追踪和记录状态的变化。开发者可以查看状态的历史记录、回放状态的变化,以及在开发过程中更好地理解和调试状态的变化。而对于单纯的全局对象,需要自己实现状态变更的追踪和调试功能。

  4. 状态变更的控制和约束: Vuex 强调使用 mutations 来修改状态,而 mutations 是同步的操作,通过这种方式可以确保状态的修改是可控的、可追踪的,并且能够遵循一定的规范。相比之下,单纯的全局对象没有这样的约束,状态的修改可能会比较随意,导致状态管理变得混乱和难以维护。

总之,Vuex 提供了一种结构化、规范化的方式来管理状态,使得状态的读取、修改、计算和异步处理更加清晰、可控和可追踪。相比于单纯的全局对象,Vuex 提供了更好的状态管理方案,特别适用于大型、复杂的应用程序,或者需要跨组件共享状态和处理异步操作的场景。

为什么 Vuex 的 mutation 中不能做异步操作?

在 Vuex 中,mutations 是用来同步地修改状态的方法,而不应该包含异步操作的逻辑。这是因为 mutations 的主要目的是追踪状态的变化,使得状态的修改可追踪、可预测和可调试。如果在 mutations 中包含异步操作,就会破坏这种可追踪性和可预测性。

以下是几个原因解释为什么 Vuex 的 mutation 中不能做异步操作:

  1. 可预测性和追踪性: Vuex 的核心思想之一是提供可预测的状态变更。在 mutations 中进行异步操作会导致状态变化的时机变得不确定,不容易预测。同时,由于异步操作的执行是非阻塞的,多个异步操作可能会交叉执行,导致状态的变化变得混乱,难以追踪和调试。

  2. 状态快照和时间旅行: Vuex 支持状态的快照和时间旅行调试。如果 mutations 中包含异步操作,就无法保证状态的快照和回放的一致性。异步操作可能会导致状态的变化无法被记录下来,从而影响调试工具的正确性和可用性。

  3. 批量提交和性能优化: Vuex 可以通过批量提交 mutations 来优化性能。如果 mutations 中包含异步操作,就无法保证 mutations 的执行顺序和批量提交的效果,可能会导致性能上的问题。

为了解决异步操作的问题,Vuex 提供了 actions 这个特殊的属性。Actions 用于处理异步操作,并通过提交 mutations 来修改状态。这样可以保持 mutations 的同步性,同时又能处理异步逻辑。通过分离异步操作和同步状态修改的职责,可以更好地控制和管理状态的变化。

Vuex的严格模式是什么,有什么作用,如何开启?

Vuex 的严格模式(strict mode)是一种开发模式,用于在开发过程中检测不合法的状态修改,并给出警告。它的作用是帮助开发者更早地发现和修复潜在的问题,提高应用程序的健壮性和可维护性。

严格模式主要有以下作用:

  1. 检测状态的非法修改: 在严格模式下,Vuex 会监测状态的修改操作是否是通过 mutations 进行的。如果在 mutations 外部直接修改了状态,会触发警告。这有助于防止意外的状态修改,确保状态的变化是可追踪和可控的。

  2. 检测异步操作中的状态修改: 严格模式还可以检测异步操作中对状态的修改。在严格模式下,如果在 actions 中进行了异步操作并直接修改了状态,会触发警告。这有助于开发者遵循 Vuex 的设计原则,将异步操作放在 actions 中,通过提交 mutations 来修改状态。

为了开启 Vuex 的严格模式,可以在创建 Vuex 的实例时传入一个选项对象,其中的 strict 属性设置为 true。例如:

import Vuex from 'vuex';const store = new Vuex.Store({// ...state、mutations、actions 等配置项...strict: true
});

需要注意的是,严格模式应该在开发阶段启用,而在生产环境中禁用。这是因为严格模式会对性能产生一些影响,并且在生产环境中,我们通常不需要实时监测状态的修改。可以通过构建工具或条件判断来确定是否开启严格模式。

如何在组件中批量使用Vuex的getter属性

要在组件中批量使用 Vuex 的 getter 属性,可以使用 Vuex 提供的 mapGetters 辅助函数。mapGetters 函数可以帮助我们将 getter 属性映射到组件的计算属性中,从而可以方便地在模板中使用。

以下是使用 mapGetters 的步骤:

  1. 在组件的脚本部分,首先导入 mapGetters 辅助函数:
import { mapGetters } from 'vuex';
  1. 在组件的 computed 属性中,使用 mapGetters 将 getter 属性映射为计算属性。可以传入一个数组或对象来指定需要映射的 getter 属性。
computed: {...mapGetters(['getter1', 'getter2']),// 或者...mapGetters({computedGetter1: 'getter1',computedGetter2: 'getter2'})
}

在上述代码中,getter1getter2 是需要映射的 getter 属性,通过使用 mapGetters,它们将分别映射为组件的计算属性 getter1getter2

  1. 在组件的模板中,就可以直接使用映射后的计算属性了:
<template><div><p>{{ getter1 }}</p><p>{{ getter2 }}</p></div>
</template>

通过以上步骤,我们成功地将 Vuex 的 getter 属性批量映射到了组件的计算属性中,并在模板中使用。

需要注意的是,为了使用 mapGetters,你需要确保 Vuex 已经正确地设置和配置,并且需要在组件中使用 Vuex 的 store 对象。

如何在组件中重复使用Vuex的mutation

要在组件中重复使用 Vuex 的 mutation,可以使用 Vuex 提供的 mapMutations 辅助函数。mapMutations 函数可以将指定的 mutation 映射到组件的方法中,从而可以在组件中直接调用这些 mutation。

以下是使用 mapMutations 的步骤:

  1. 在组件的脚本部分,首先导入 mapMutations 辅助函数:
import { mapMutations } from 'vuex';
  1. 在组件的 methods 属性中,使用 mapMutations 将需要重复使用的 mutation 映射为组件的方法。可以传入一个数组或对象来指定需要映射的 mutation。
methods: {...mapMutations(['mutation1', 'mutation2']),// 或者...mapMutations({customMutation1: 'mutation1',customMutation2: 'mutation2'})
}

在上述代码中,mutation1mutation2 是需要映射的 mutation,通过使用 mapMutations,它们将分别映射为组件的方法 mutation1mutation2

  1. 在组件中,就可以直接调用映射后的方法来触发相应的 mutation:
<template><div><button @click="mutation1">Trigger Mutation 1</button><button @click="mutation2">Trigger Mutation 2</button></div>
</template>

通过以上步骤,我们成功地将 Vuex 的 mutation 批量映射到了组件的方法中,并在模板中使用。

需要注意的是,在使用 mapMutations 时,你需要确保 Vuex 已经正确地设置和配置,并且需要在组件中使用 Vuex 的 store 对象。同时,映射后的方法名称与 mutation 名称保持一致,可以直接在组件中调用这些方法来触发对应的 mutation。
看到这了,点个赞吧,嘿嘿🚀

相关文章:

【前端高频面试题--Vuex下篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;前端高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac;前端高频面试题--Vuex篇 往期精彩内容Vuex 的原理Vuex中action和mutation的区别Vuex 和 localStor…...

MySQL性能调优篇(4)-查询语句的优化与重构

MySQL数据库查询语句的优化与重构 MySQL是一种常用的关系型数据库管理系统&#xff0c;广泛应用于Web开发中。在实际应用中&#xff0c;对数据库查询语句的优化和重构是提高应用性能和响应速度的重要手段。本文将介绍一些常见的优化技巧和重构方法&#xff0c;帮助开发者提高数…...

LInux、源码编译安装

步骤&#xff1a; 步骤1&#xff1a;安装开发工具gcc与make&#xff0c;释放源代码至指定目录 yum -y install gcc make 步骤2&#xff1a;tar解包&#xff0c;释放源代码至指定目录 tar -xf /root/tools.tar.gz -C /usr/local 步骤3&#xff1a;./configure 配置&#xff0c;…...

wordpress好的网站主题

有什么好的网站主题&#xff0c;都分享在这里了。 蓝色风格的wordpress模板&#xff0c;好的wordpress网站主题&#xff0c;需要既好看&#xff0c;又好用。 https://www.zhanyes.com/qiye/6305.html 血红色的好看的wordpress主题&#xff0c;布局经典&#xff0c;设计好的&am…...

【Java多线程】对进程与线程的理解

目录 1、进程/任务&#xff08;Process/Task&#xff09; 2、进程控制块抽象(PCB Process Control Block) 2.1、PCB重要属性 2.2、PCB中支持进程调度的一些属性 3、 内存分配 —— 内存管理&#xff08;Memory Manage&#xff09; 4、线程&#xff08;Thread&#xff09;…...

C# CAD交互界面-自定义面板集-查找定位(六)

运行环境 vs2022 c# cad2016 调试成功 一、代码说明 1. 类成员变量声明&#xff1a; List<ObjectId> objectIds new List<ObjectId>(); // 用于存储AutoCAD实体对象的ObjectId列表 private static Autodesk.AutoCAD.Windows.PaletteSet _ps2; // 自定义浮动面板…...

5.7 BCC工具之disksnoop.py解读

一,disksnoop.py简介 disksnoop工具用于追踪块设备的I/O操作的延迟,它会在每次I/O执行完成后打印一行摘要信息。我们根据这些摘要日志,来分析当前的I/O操作是否存在延迟,以判断I/O是否达到了瓶颈。 二,代码示例 #!/usr/bin/python # # disksnoop.py Trace block device…...

QT:实现图片选择器

一、效果图 二、用到的类 qApp&#xff1a;可以快速获取到项目目录位置。 QSettings &#xff1a;编写config文件&#xff0c;记录上次打开图片的位置&#xff0c;下次打开图片会从上次的位置查找图片。 QPixmap&#xff1a;用于图片的缩放&#xff0c;防止图片过小&#xff0…...

LLM大模型相关问题汇总---包括问题与答案

一、基础篇 1. 目前主流的开源模型体系有哪些&#xff1f; - Transformer体系&#xff1a;由Google提出的Transformer模型及其变体&#xff0c;如BERT、GPT等。 - PyTorch Lightning&#xff1a;一个基于PyTorch的轻量级深度学习框架&#xff0c;用于快速原型设计和实验…...

自动化测试定位不到元素怎么办?

1.动态id定位不到元素 分析原因&#xff1a;每次打开页面&#xff0c;ID都会变化。用ID去找元素&#xff0c;每次刷新页面ID都会发生变化。 解决方案&#xff1a;推荐使用xpath的相对路径方法或者cssSelector查找到该元素。 2.iframe原因定位不到元素 分析原因&#xff1a;…...

1 scala集合-数组

1 定长数组 定长数组&#xff0c;是指数组长度不可变。定义定长数组的方法有如下两种&#xff1a; 方法1&#xff1a; var/val variable_name new Array[元素类型](数组长度) // 通过制定长度定义例如&#xff0c;定义一个长度为20的Int 类型数组。 scala> val a new …...

双场板功率GaN HEMT电容模型以精确模拟开关行为

标题&#xff1a;Capacitance Modeling in Dual Field-Plate Power GaN HEMT for Accurate Switching Behavior&#xff08;TED.16年&#xff09; 摘要 本文提出了一种基于表面电位的紧凑模型&#xff0c;用于模拟具有栅极和源极场板&#xff08;FP&#xff09;结构的AlGaN/G…...

OpenCV Mat实例详解 四

OpenCV Mat实例详解三中详细介绍来了OpenCV Mat类的公有静态成员函数&#xff0c;下面介绍OpenCV Mat类的其他常用成员函数。 OpenCV Mat类常用成员函数 Mat & adjustROI (int dtop, int dbottom, int dleft, int dright)&#xff1b; dtop ROI 上边界移动值&#xff0c;如…...

Fluke ADPT 连接器新增对福禄克万用 Fluke 106 的支持

所需设备&#xff1a; 1、Fluke ADPT连接器&#xff1b; 2、Fluke 106&#xff1b; Fluke 106 拆机图&#xff1a; 显示界面如下图&#xff1a; 并且可以将波形导出到EXCEL: 福禄克万用表需要自己动手改造&#xff01;&#xff01;&#xff01;...

算法-3-基本的数据结构

单双链表 1.单链表双链表如何反转 import java.util.ArrayList; import java.util.List;public class Code01_ReverseList {public static class Node {public int value;public Node next;public Node(int data) {value data;}}public static class DoubleNode {public int…...

探秘Java反射:灵活编程的利器

前言 大家好&#xff0c;我是chowley&#xff0c;不知道大家在学习Java的过程中有没有听过反射的概念&#xff0c;今天我来总结一下我心中的Java反射。 在Java编程中&#xff0c;反射是一种强大的工具&#xff0c;它允许程序在运行时检查和操作类、方法、属性等&#xff0c;而…...

记录 | ubuntu pyqt5 pycharm配置

Ubuntu16.04pycharmpyqt5安装与配置_ubuntu pycharm pyqt5-CSDN博客pycharm激活码 6ZUMD7WWWU-eyJsaWNlbnNlSWQiOiI2WlVNRDdXV1dVIiwibGljZW5zZWVOYW1lIjoiSmV0cyBHcm91cCIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN…...

ESP32学习(1)——环境搭建

使用的ESP32板子如下图所示 它可以用Arduino 软件&#xff0c;基于C语言开发。但是&#xff0c;在这里&#xff0c;我是用Thonny软件&#xff0c;基于micro_python对其进行开发。 1.安装Thonny Thonny的软件安装包&#xff0c;可以去它官网上下载。Thonny, Python IDE for begi…...

Attention Is All Your Need论文笔记

论文解决了什么问题&#xff1f; 提出了一个新的简单网络架构——transformer&#xff0c;仅仅是基于注意力机制&#xff0c;完全免去递推和卷积&#xff0c;使得神经网络训练地速度极大地提高。 We propose a new simple network architecture, the Transformer, based sole…...

vue-进阶语法(四)

目录 v-model原理 v-model应用于组件 sync修饰符 ref 和 $refs&#xff08;重点&#xff09; $nextTick v-model原理 原理&#xff1a;v-model本质上是一个语法糖。例如应用在输入框上&#xff0c;就是 value属性 和 input事件 的合写。 作用&#xff1a;提供数据的双向…...

CGAL::2D Arrangements-7

7 几何Traits 几何Traits封装了几何实体的定义以及处理这些几何实体的几何predicates和构造的实现&#xff0c;供Arrangement_on_surface_2类模板和其他周边模块使用。应用于Arrangement的各种算法所确定的最小要求被组织在精细几何特征概念的层次中。每个概念列出的需求只包括…...

linux系统下vscode portable版本的rust环境搭建004:rust

目的&#xff1a;希望在获得一个新的系统之后&#xff0c;以最简便快速的方式搭配一个rust的编程环境命令在线安装只执行这句就行了 &#xff1a;curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh&#xff0c;因为是要portable安装所以按照以下的方式执行。 下载…...

从汇编角度解释线程间互斥-mutex互斥锁与lock_guard的使用

多线程并发的竞态问题 我们创建三个线程同时进行购票&#xff0c;代码如下 #include<iostream> #include<thread> #include<list> using namespace std; //总票数 int ticketCount100; //售票线程 void sellTicket(int idx) {while(ticketCount>0){cou…...

高程 | 多态性(c++)

文章目录 &#x1f4da;多态&#x1f4da;运算符重载&#x1f407;定义&#x1f407;规则&#x1f407;友元运算符重载函数&#x1f407;成员运算符重载函数 &#x1f4da;虚函数&#x1f4da;纯虚函数和抽象类 &#x1f4da;多态 多态&#xff1a;同样的消息被不同类型的对象…...

LV.23 D2 开发环境搭建及平台介绍 学习笔记

一、Keil MDK-ARM简介及安装 Keil MDK&#xff0c;也称MDK-ARM&#xff0c;Realview MDK &#xff08;Microcontroller Development Kit&#xff09;等。目前Keil MDK 由三家国内代理商提供技术支持和相关服务。 MDK-ARM软件为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备…...

[uniapp生命周期]详细讲解uniapp中那些属于vue生命周期,那些属于uniapp独有的生命周期,以及这中间的区别 相关的内容和api 代码注释

目录 1. Vue.js生命周期函数2.Vue生命周期函数代码beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyed$nextTick$forceUpdate$destroy 3. UniApp独有的生命周期函数onLaunchonShowonHideonError 4.总结 在UniApp中&#xff0c;除了Vue.js的生命周…...

【动态规划】【记忆化搜索】【状态压缩】1681. 最小不兼容性

作者推荐 【数位dp】【动态规划】【状态压缩】【推荐】1012. 至少有 1 位重复的数字 本文涉及知识点 动态规划汇总 状态压缩 记忆化搜索 1681. 最小不兼容性 给你一个整数数组 nums​​​ 和一个整数 k 。你需要将这个数组划分到 k 个相同大小的子集中&#xff0c;使得同一…...

JVM-类加载器 双亲委派机制

申明&#xff1a;文章内容是本人学习极客时间课程所写&#xff0c;文字和图片基本来源于课程资料&#xff0c;在某些地方会插入一点自己的理解&#xff0c;未用于商业用途&#xff0c;侵删。 什么是JVM JVM是Java Virtual Machine&#xff08;Java虚拟机&#xff09;的缩写&a…...

vue axios 请求后端无法传参问题

vue请求后端无法传参问题 问题描述处理过程总结 问题描述 在学习vue时&#xff0c;使用axios调用后端&#xff0c;发现无法把参数正确传到后端&#xff0c;现象如下&#xff1a; 使用vue发起请求&#xff0c;浏览器上已经有传参&#xff0c;但是后端没接收到对应的用户名密码&…...

打印最小公倍数

打印最小公倍数 题目描述&#xff1a; 输入2个整数m和n&#xff0c;计算m和n的最小公倍数&#xff0c;并打印出结果 测试1&#xff1a; 输入&#xff1a;18 24 输出&#xff1a;72 测试2&#xff1a; 输入&#xff1a;18 6 输出&#xff1a;18解法思路: 最小公倍数是指两个…...

[AIGC] Java 和 Kotlin 的区别

好的&#xff0c;我还是以“萌萌哒小码农”的身份继续回答您的问题。 Java 和 Kotlin 是两种不同的编程语言&#xff0c;它们有许多共同点&#xff0c;但也有一些重要的区别。以下是一些常见的 Java 和 Kotlin 的区别&#xff1a; 语法 Kotlin 的语法比 Java 简洁得多&#…...

蓝桥杯电子类单片机提升一——超声波测距

前言 单片机资源数据包_2023 一、超声波测距原理 二、超声波测距的应用 1.超声波的发射 2.单片机知识补充&#xff1a;定时器 3.超声波的接收与计时 4.距离的计算 1&#xff09;定时器1为16位自动重载&#xff0b;1T11.0592MHz 2&#xff09;定时器1为16位自动重载&am…...

前端架构: 脚手架开发流程中的难点梳理

脚手架的开发流程 1 &#xff09;开发流程 创建 npm 项目创建脚手架入口文件&#xff0c;最上方添加&#xff1a; #!/usr/bin/env node 配置 package.json, 添加 bin 属性编写脚手架代码将脚手架发布到 npm 2 &#xff09;使用流程 安装脚手架 npm install -g your-own-cli …...

django中配置使用websocket

Django 默认情况下并不支持 WebSocket&#xff0c;但你可以通过集成第三方库如 channels 来实现 WebSocket 功能。channels 是一个 Django 应用&#xff0c;它提供了对 WebSocket、HTTP2 和其他协议的支持。 下面是如何在 Django 项目中使用 WebSocket 的基本步骤&#xff1a;…...

Rust复合类型详解

在Rust中&#xff0c;复合类型是一种能够将多个值组合在一起的数据类型。本篇博客将介绍两种常见的复合类型&#xff1a;元组&#xff08;Tuple&#xff09;和数组&#xff08;Array&#xff09;。 Tuple&#xff08;元组&#xff09; 元组是Rust中的一种复合类型&#xff0c…...

学习 JavaScript 闭包

1. 前言 闭包是 JavaScript 中一种非常重要的概念&#xff0c;它允许函数访问其外部作用域中的变量&#xff0c;即使在函数被返回或者在其原始定义的作用域之外执行时仍然可以访问这些变量。 在讲解闭包之前我们得弄清楚下面的概念&#xff1a; 作用域链&#xff1a; JavaSc…...

VScode中配置 C/C++ 环境 | IT拯救者

文章目录 0 引言1. 下载编辑器VScode2. 下载编译器MinGW并解压3. 将MinGW添加至环境变量4. 配置VScode插件5. 运行代码6. 调整和优化7. 提示8. 例行格式条款9. 例行格式条款 0 引言 由于VScode毛毛张使用不习惯&#xff0c;因此配置教程记不住&#xff0c;不过毛毛张看到一篇不…...

基于Python实现Midjourney集成到(个人/公司)平台中

目前Midjourney没有对外开放Api&#xff0c;想体验他们的服务只能在discord中进入他们的频道进行体验或者把他们的机器人拉入自己创建的服务器中&#xff1b;而且现在免费的也用不了了&#xff0c;想使用就得订阅。本教程使用midjourney-api这个开源项目&#xff0c;搭建Midjou…...

蓝桥杯刷题--python-6

0最大距离 - 蓝桥云课 (lanqiao.cn) n=int(input()) nums=list(map(int,input().split()))max_=float(-inf) for i in range (n):for j in range (i+1,n):tmp=abs(i-j)+abs(nums[i]-nums[j])max_=max(tmp,max_) print(max_) 0最长递增 - 蓝桥云课 (lanqiao.cn) import os im…...

node+vue3+mysql前后分离开发范式——实现对数据库表的增删改查

文章目录 ⭐前言⭐ 功能设计与实现💖 node后端操作数据库实现增删改查💖 vue3前端实现增删改查⭐ 效果⭐ 总结⭐ 结束⭐结束⭐前言 大家好,我是yma16,本文分享关于 node+vue3+mysql前后分离开发范式——实现对数据库表的增删改查。 技术选型 前端:vite+vue3+antd 后端:…...

【Android】使用Apktool反编译Apk文件

文章目录 1. 下载Apktool1.1 Apktool官网下载1.2 百度网盘下载 2. 安装Apktool3. 使用Apktool3.1 配置Java环境3.2 准备Apk文件3.3 反编译Apk文件3.3.1 解包Apk文件3.3.2 修改Apk文件3.3.3 打包Apk文件3.3.4 签名Apk文件 1. 下载Apktool 要使用Apktool&#xff0c;需要准备好 …...

(04)Hive的相关概念——order by 、sort by、distribute by 、cluster by

Hive中的排序通常涉及到order by 、sort by、distribute by 、cluster by 一、语法 selectcolumn1,column2, ... from table [where 条件] [group by column] [order by column] [cluster by column| [distribute by column] [sort by column] [limit [offset,] rows]; …...

Django模板(二)

标签if 标签在渲染过程中提供使用逻辑的方法,比如:if和for 标签被 {% 和 %} 包围,如下所示: 由于在模板中,没有办法通过代码缩进判断代码块,所以控制标签都需要有结束的标签 if判断标签{% if %} {% endif %} : # athlete_list 不为空 {% if athlete_list %}# 输出 ath…...

勒索病毒最新变种.faust勒索病毒来袭,如何恢复受感染的数据?

引言&#xff1a; 随着我们进入数字化时代&#xff0c;数据的重要性变得愈发显著&#xff0c;而网络安全威胁也日益增加。.faust勒索病毒是其中一种备受恶意分子钟爱的危险工具&#xff0c;它通过加密用户文件并勒索高额赎金来对个人和组织发起攻击。本文将深入探讨.faust勒索…...

python 人脸检测器

import cv2# 加载人脸检测器 关键文件 haarcascade_frontalface_default.xml face_cascade cv2.CascadeClassifier(haarcascade_frontalface_default.xml)# 读取图像 分析图片 ren4.png image cv2.imread(ren4.png) gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 进行人脸…...

机器学习与深度学习

什么是机器学习 机器学习是一门跨学科的学科&#xff0c;它致力于研究和开发让计算机能够模拟人类学习行为的技术和方法。机器学习涉及多个学科的知识&#xff0c;如概率论、统计学、逼近论、凸分析、算法复杂度理论等&#xff0c;这些学科为机器学习提供了理论基础和数学工具…...

算法训练营day27(补),贪心算法1

import "sort" //455. 分发饼干 func findContentChildren(g []int, s []int) int { sort.Ints(g) sort.Ints(s) // g代表胃口数组&#xff0c; s代表饼干数组 count : 0 // 统计数量 //饼干下标 index : len(s) - 1 // 胃口循环 for i : len(g) - 1; i > 0; i--…...

[office] excel2003限定单元格输入值范围教程 #微信#经验分享

excel2003限定单元格输入值范围教程 在Excel中录入数据前都会设置单元格的一些格式&#xff0c;其中会有限定单元格输入值范围的需求&#xff0c;或许有的朋友并不知道单元格该如何限定输入范围&#xff0c;如果不懂的朋友欢迎一起来学习研究。下面是小编带来的关于excel2003限…...

OLED显示红外遥控键码

基本原理 本遥控器的编码是NEC编码&#xff0c;为PWM&#xff08;脉冲宽度调制&#xff09;。 发射红外载波的时间固定&#xff0c;通过改变不发射载波的时间来改变占空比。 逻辑“0”是由0.56ms的38KHZ载波和0.560ms的无载波间隔组成&#xff1b;逻辑“1”是由0.56ms的38KHZ…...

LabVIEW智能温度监控系统

LabVIEW智能温度监控系统 介绍了一个基于LabVIEW的智能温度监控系统&#xff0c;实现对工业环境中温度的实时监控与调控。通过集成传感器技术和LabVIEW软件平台&#xff0c;系统能够自动检测环境温度&#xff0c;及时响应温度变化&#xff0c;并通过图形用户界面(GUI)为用户提…...