深入理解Vue响应式系统:数据绑定探索

news2024/9/22 19:44:18

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁
🦄 博客首页——猫头虎的博客🎐
🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大小厂~💐

🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

文章目录

  • 深入理解Vue响应式系统:数据绑定探索
    • 摘要:
    • 一、引言
    • 二、初识Vue响应式系统
      • 2.1 什么是Vue的响应式系统?
      • 2.2 响应式系统的重要性
        • 简化开发
        • 提高可维护性
        • 增强用户体验
        • 支持复杂交互
    • 三、数据绑定原理
      • 3.1 单向绑定
      • 3.2 双向绑定
      • 3.3 数据响应机制和依赖追踪
      • 3.4 总结
    • 四、Vue响应式系统的核心概念
      • 4.1 响应式对象
      • 4.2 观察者
      • 4.3 依赖
      • 4.4 响应式系统的协作
    • 五、数据的响应式更新过程
      • 5.1 数据的响应式绑定
      • 5.2 数据的更新
      • 5.3 视图的自动更新
      • 5.4 计算属性的响应式更新
      • 5.5 总结
    • 六、深入响应式系统
      • 6.1 响应式系统的内部实现
      • 6.2 Vue 3.x的改进与优化
        • 6.2.1 Proxy代替Object.defineProperty
        • 6.2.2 更好的类型推导
        • 6.2.3 优化的编译器
      • 6.3 总结
    • 七、常见响应式陷阱与最佳实践
      • 7.1 避免直接修改数组或对象
      • 7.2 在计算属性中处理复杂逻辑
      • 7.3 合理使用`v-if`和`v-show`
      • 7.4 合理使用`watch`和计算属性
      • 7.5 合理使用`key`属性
      • 7.6 避免不必要的响应式数据
      • 7.7 使用`$refs`时要注意
      • 7.8 使用`v-if`和`v-for`时要注意
      • 7.9 使用`$nextTick`处理DOM更新
      • 7.10 注意事件处理中的`this`
      • 7.11 合理使用组件
      • 7.12 合理使用懒加载
      • 7.13 使用开发者工具进行性能分析
      • 7.14 参考Vue官方文档和社区资源
      • 7.15 总结
    • 八、结论
    • 九、参考资料
  • 原创声明

在这里插入图片描述

深入理解Vue响应式系统:数据绑定探索

摘要:

在本篇博客中,我们将深入探讨Vue.js的响应式系统,揭开其数据绑定的核心原理。我们将从初识Vue响应式系统开始,逐步解释其优势及在Vue开发中的重要性。接着,我们将详细解释Vue的数据绑定原理,包括单向绑定和双向绑定,同时介绍Vue中的数据响应机制和依赖追踪是如何实现的。随后,我们将讨论Vue响应式系统的核心概念,如响应式对象、观察者、依赖等,阐述这些概念在Vue内部如何相互配合,实现数据的响应式更新。接着,通过具体的代码示例,演示数据在Vue中是如何响应式更新的,并探讨数据的变化是如何通过响应式系统通知视图的更新的。我们还将深入研究Vue响应式系统的内部实现细节,深入理解Vue源码中与响应式相关的部分,并对Vue 3.x版本的响应式系统相较于2.x版本的改进和优化进行解释。除此之外,我们将提醒读者在使用Vue响应式系统时可能遇到的一些常见陷阱,并分享一些Vue响应式系统的最佳实践和使用建议。最后,我们将对本文进行简要总结,强调学习和理解响应式系统对于高效开发Vue应用的重要性。本文还附带了参考资料,列出了撰写博客时所参考的书籍、文章、官方文档等资源,以供读者深入学习。

一、引言

在当今前端开发中,Vue.js作为一款流行的前端框架,拥有着广泛的应用和巨大的用户群体。它以其简洁灵活的设计和强大的功能在开发社区中备受推崇。其中,Vue.js的响应式系统是其最为核心和独特的特性之一。

所谓响应式系统,是指Vue.js能够智能地跟踪数据的变化,并自动将数据的变化反映到视图上。在Vue.js中,你可以将数据和视图进行绑定,使得数据的更新能够即时地反映在用户界面上,无需手动操作DOM,极大地简化了开发的复杂度。

Vue.js的响应式系统的优势在于它能够实现高效的数据绑定,使得数据与视图保持同步,从而使开发者可以更专注于业务逻辑的实现,而无需过多考虑数据与界面之间的同步问题。这种响应式的特性使得Vue.js在构建交互性强、用户体验优秀的现代Web应用方面有着巨大的优势。

在本篇博客中,我们将深入探讨Vue.js的响应式系统,探寻其背后的实现原理以及对开发带来的便利。我们将逐步剖析其核心概念,包括响应式对象、观察者模式等,并通过具体的代码示例演示数据绑定的过程。最后,我们将总结Vue.js响应式系统的重要性,并展望其在未来发展中的潜力。

让我们一同踏上深入理解Vue.js响应式系统的旅程,开启数据绑定探索之旅!

二、初识Vue响应式系统

在这里插入图片描述

2.1 什么是Vue的响应式系统?

vue响应式

在Vue.js中,响应式系统是指一种数据绑定机制,它能够自动追踪数据的变化并实时更新对应的视图。这意味着当数据发生改变时,相关的视图将会自动更新,无需手动干预DOM。这一机制极大地简化了前端开发的复杂性,使得开发者能够更专注于业务逻辑的实现,而不必过多考虑数据与视图之间的同步问题。

在Vue中,你可以通过简单的数据绑定语法将数据和视图进行关联。只需要在数据上声明一个变量,然后在视图中使用该变量,Vue就会自动建立数据与视图之间的联系。当数据发生变化时,Vue会及时通知视图更新,保持数据与视图的同步。

2.2 响应式系统的重要性

Vue的响应式系统在Vue开发中扮演着至关重要的角色。其重要性体现在以下几个方面:

简化开发

通过响应式系统,我们无需手动监听数据变化并手动更新视图,Vue会自动处理数据的变化和视图的更新。这使得开发变得更加简单高效,代码量大幅减少,开发者可以更专注于业务逻辑的实现。

提高可维护性

响应式系统使数据和视图之间的关联变得明确和直观。这样的设计使得代码更易于理解和维护,也方便团队合作开发。

增强用户体验

响应式系统使得页面能够实时响应用户的操作和数据变化,用户无需刷新页面就能立即看到最新结果,从而增强了用户体验。

支持复杂交互

对于复杂的前端交互,响应式系统能够更好地管理数据和视图的同步,使得交互性强的Web应用更易于开发。

总的来说,Vue的响应式系统是Vue.js框架的核心特性之一,它为前端开发带来了许多便利,使得开发者能够更高效地构建现代化的Web应用。在接下来的内容中,我们将深入探讨Vue响应式系统的实现原理和相关核心概念,帮助读者全面理解Vue的数据绑定机制。

三、数据绑定原理

在Vue.js中,数据绑定是实现响应式系统的核心机制。它使得数据与视图能够实时同步,为用户提供了更好的交互体验。数据绑定主要分为单向绑定和双向绑定两种形式,下面我们将详细解释它们的工作原理。

3.1 单向绑定

单向绑定是指数据流动的方向只能从数据源流向视图。当数据发生变化时,视图会自动更新以反映最新的数据。在Vue中,我们可以通过使用插值表达式({{ data }})、v-bind指令或简写的冒号语法来实现单向绑定。

单向绑定的工作原理是,Vue会在数据对象中设置一个观察者(Watcher),用于追踪数据的变化。当数据发生改变时,观察者会通知对应的视图进行更新。这样,无论是通过代码修改数据还是用户的交互行为引起数据变化,视图都会及时更新。

3.2 双向绑定

双向绑定是单向绑定的扩展,它允许数据的变化能够反映到视图中,同时用户在视图中的修改也能自动同步到数据源。在Vue中,我们可以通过使用v-model指令实现双向绑定,它通常应用在表单元素上,如输入框、复选框等。

双向绑定的实现原理是,Vue会在数据对象中设置一个观察者和一个指令。观察者负责监听数据的变化,指令负责监听视图元素的变化。当视图元素的值发生改变时,指令会通知观察者,然后观察者再更新数据。反过来,当数据发生变化时,观察者会通知指令更新视图,实现数据和视图的双向同步。

3.3 数据响应机制和依赖追踪

Vue的数据响应机制是实现数据绑定的基础。在Vue中,每个组件实例都会创建一个响应式系统,用于追踪其所依赖的数据。当组件渲染时,Vue会自动收集模板中使用的数据,并创建一个依赖图谱。

当数据发生变化时,Vue会遍历依赖图谱,找到受影响的组件,并通知它们进行更新。这种机制保证了数据的变化能够正确地反映在视图上,实现了数据与视图的自动同步。

3.4 总结

数据绑定是Vue.js响应式系统的核心,它通过单向绑定和双向绑定,实现了数据与视图的实时同步。Vue的数据响应机制和依赖追踪保证了数据变化时视图的自动更新。深入理解数据绑定的原理,有助于开发者更好地运用Vue.js的特性,提高开发效率和应用性能。

在接下来的内容中,我们将继续探讨Vue的响应式系统的核心概念,包括响应式对象、观察者等,以便更加深入地理解Vue的数据绑定机制。敬请关注下一节的内容!

四、Vue响应式系统的核心概念

在Vue.js中,响应式系统的核心概念是关键性的,它们共同构成了Vue数据绑定的基础。在本节中,我们将深入探讨这些核心概念,包括响应式对象、观察者和依赖。

在这里插入图片描述

4.1 响应式对象

Vue中的响应式对象是指那些通过Vue的特殊处理使其成为响应式数据的对象。在Vue实例创建时,Vue会对数据对象进行递归地遍历,将每个属性都转换为getter和setter。这样一来,当我们访问响应式对象的属性时,Vue能够监听到属性的读取,并自动建立依赖关系,一旦属性发生变化,Vue就会自动更新相应的视图。

要注意的是,只有在创建Vue实例时已经存在的属性才会被转换为响应式对象。对于后期添加的属性,Vue无法自动进行响应式处理,需要通过Vue.set方法或者直接赋值的方式进行处理。

4.2 观察者

在Vue的响应式系统中,观察者充当着重要的角色。当模板中的数据绑定依赖于响应式对象的属性时,Vue会创建一个观察者来跟踪这些依赖。观察者会将自己添加到对应属性的依赖列表中,一旦属性发生变化,观察者就会通知依赖它的地方进行更新。

Vue中的观察者使用了观察者模式,它们之间实现了一种一对多的依赖关系。当一个响应式对象的属性被修改时,它会通知所有依赖于它的观察者进行更新,从而实现数据与视图的同步。

4.3 依赖

在Vue的响应式系统中,依赖用于追踪数据与视图之间的关系。每个响应式对象的属性都对应着一个依赖列表,列表中保存着依赖于这个属性的所有观察者。当属性发生变化时,依赖会通知观察者进行更新。

依赖追踪是Vue实现数据绑定的关键,它保证了数据的变化能够正确地反映在视图上。通过依赖追踪,Vue能够在数据变化时自动更新与之相关联的视图,提供了高效且准确的数据绑定机制。

4.4 响应式系统的协作

Vue的响应式系统中,响应式对象、观察者和依赖三者相互协作,共同构成了数据绑定的基础。当数据发生变化时,观察者会通知相应的依赖进行更新,从而保持数据与视图的同步。

总结来说,Vue响应式系统的核心概念能够使数据的变化自动反映在视图上,实现了数据与视图的实时同步。深入理解这些概念有助于开发者更好地理解Vue.js的数据绑定机制,并能更加灵活地运用Vue的特性。

在接下来的内容中,我们将继续探讨Vue的数据绑定原理,包括数据的响应式更新过程和深入响应式系统的内部实现细节。敬请关注下一节的内容!

五、数据的响应式更新过程

在前面的章节中,我们已经了解了Vue响应式系统的核心概念,包括响应式对象、观察者和依赖。在本节中,我们将通过具体的代码示例演示数据在Vue中是如何响应式更新的,以及数据的变化是如何通过响应式系统通知视图的更新,实现页面的动态刷新。

5.1 数据的响应式绑定

假设我们有一个Vue实例,并在数据对象中定义了一个响应式属性message

new Vue({
  data() {
    return {
      message: "Hello, Vue!"
    };
  }
});

我们可以在模板中使用插值表达式将message绑定到页面:

<div id="app">
  <p>{{ message }}</p>
</div>

此时,页面会显示Hello, Vue!

5.2 数据的更新

现在,我们通过修改message的值来更新数据:

this.message = "Hello, Vue.js!";

在上述代码中,我们将message的值从"Hello, Vue!"更新为"Hello, Vue.js!"

5.3 视图的自动更新

由于message是一个响应式对象的属性,当我们修改了它的值后,Vue会自动追踪这个变化,并通知与之相关联的视图进行更新。因此,在我们将message的值更新后,页面上的文本也会自动更新为Hello, Vue.js!,无需手动进行DOM操作。

这种自动更新的过程正是Vue响应式系统的精髓所在。Vue能够在数据变化时及时通知与之相关的视图进行更新,使得数据与视图保持同步,为我们带来了极大的开发便利。

5.4 计算属性的响应式更新

除了直接修改响应式数据,我们还可以使用计算属性来实现数据的响应式更新。计算属性是一种根据其他数据计算得到的属性,它会自动根据它所依赖的数据的变化而更新自身的值。

new Vue({
  data() {
    return {
      firstName: "John",
      lastName: "Doe"
    };
  },
  computed: {
    fullName() {
      return this.firstName + " " + this.lastName;
    }
  }
});

在上述代码中,我们定义了一个计算属性fullName,它依赖于firstNamelastName。当firstNamelastName发生变化时,fullName会自动更新,无需手动调用。

5.5 总结

通过本节的代码示例,我们演示了数据在Vue中是如何响应式更新的。不论是直接修改响应式数据,还是使用计算属性,Vue都能自动追踪数据的变化,并通知相应的视图进行更新,实现页面的动态刷新。

理解这一过程对于开发者更好地运用Vue.js的特性至关重要。在接下来的内容中,我们将深入探讨Vue响应式系统的内部实现细节,以帮助读者更深入地理解Vue源码中与响应式相关的部分。敬请关注下一节的内容!

六、深入响应式系统

在本节中,我们将深入探讨Vue响应式系统的内部实现细节,带您一窥Vue框架的底层机制。了解响应式系统的实现原理将帮助您更好地理解Vue的工作方式和性能优化。

6.1 响应式系统的内部实现

Vue的响应式系统是通过使用JavaScript的Object.defineProperty方法来实现的。当我们创建Vue实例时,Vue会遍历数据对象中的每个属性,并使用Object.defineProperty将它们转换为getter和setter。

getter用于依赖收集,每当我们访问一个响应式对象的属性时,Vue会将正在渲染的组件实例与该属性建立联系,从而在属性发生变化时通知依赖更新。

setter用于依赖触发,每当我们修改一个响应式对象的属性时,setter会被触发,从而通知与该属性相关联的依赖进行更新,最终更新视图。

6.2 Vue 3.x的改进与优化

Vue 3.x相较于2.x版本在响应式系统方面进行了一些改进和优化,使得Vue的性能更加出色。

6.2.1 Proxy代替Object.defineProperty

Vue 3.x采用了Proxy代理对象来实现响应式系统,取代了Object.defineProperty。Proxy提供了更加强大和灵活的拦截器,能够监听对象的任何操作,从而实现更细粒度的响应式更新。

6.2.2 更好的类型推导

Vue 3.x利用TypeScript的优势,提供了更好的类型推导支持。这使得在使用Vue时,IDE能够提供更准确的代码提示和类型检查,减少了开发中的错误。

6.2.3 优化的编译器

Vue 3.x的编译器进行了优化,生成的代码更加紧凑和高效。这使得Vue应用在运行时的性能得到了明显的提升。

6.3 总结

通过深入了解Vue响应式系统的内部实现细节,我们可以更好地理解Vue框架的底层机制。同时,Vue 3.x版本在响应式系统方面的改进和优化使得Vue在性能和开发体验方面都有了显著的提升。

在接下来的内容中,我们将探讨Vue响应式系统的常见陷阱和最佳实践,以及如何在开发中避免一些常见问题。敬请关注下一节的内容!

七、常见响应式陷阱与最佳实践

在使用Vue响应式系统时,有一些常见的陷阱可能会导致意料之外的结果。为了帮助您避免这些问题,本节将提供一些常见响应式陷阱的解释,并分享一些Vue响应式系统的最佳实践和使用建议。

7.1 避免直接修改数组或对象

在Vue的响应式系统中,直接修改数组或对象的某个元素,Vue无法检测到这种变化。这是因为对数组或对象的直接修改不会触发setter,从而无法通知依赖进行更新。

// 避免直接修改数组
this.myArray[0] = "new value";

// 避免直接修改对象属性
this.myObject.prop = "new value";

为了避免这个问题,应该使用Vue提供的变异方法来修改数组或对象,以确保Vue能够监听到变化。

// 使用Vue提供的变异方法
this.myArray.splice(0, 1, "new value");
this.myObject.prop = "new value";

7.2 在计算属性中处理复杂逻辑

计算属性是一个非常有用的特性,但是要注意避免在计算属性中处理过于复杂的逻辑。由于计算属性会根据它所依赖的数据自动更新,如果计算属性的逻辑过于复杂,可能会导致性能问题。

如果遇到复杂的逻辑,可以考虑使用方法(Method)来替代计算属性。

7.3 合理使用v-ifv-show

v-ifv-show都可以根据条件控制元素的显示与隐藏,但它们的使用场景是不同的。

  • 使用v-if在条件为假时会将元素完全从DOM中移除,适用于条件不经常改变的情况。
  • 使用v-show在条件为假时只是通过CSS将元素隐藏,适用于条件经常改变的情况。

根据实际情况选择合适的指令,可以优化页面性能。

7.4 合理使用watch和计算属性

在使用Vue的watch和计算属性时,要注意避免过度使用它们。频繁的数据监听和计算会导致性能问题。

  • 使用watch监听较大的数据对象时要谨慎,可能会影响性能。
  • 计算属性会在每次渲染时都重新计算,所以要确保它们的计算逻辑是轻量级的。

7.5 合理使用key属性

在使用v-for循环渲染列表时,如果列表中的元素可以进行重排序或删除、增加,要为每个元素设置唯一的key属性。这样可以告诉Vue哪些元素是稳定的,哪些是需要重新渲染的,从而提高性能。

<div v-for="item in items" :key="item.id">
  {{ item.name }}
</div>

7.6 避免不必要的响应式数据

有些数据并不需要响应式更新,可以使用Vue的Object.freeze方法将其冻结,阻止其被响应式系统转换。

const data = Object.freeze({
  // data that does not need reactivity
});

7.7 使用$refs时要注意

在模板中使用$refs引用DOM元素时,要注意它的生命周期。$refs只有在组件渲染完成后才会填充,因此在模板中尽量避免在渲染期间访问$refs

7.8 使用v-ifv-for时要注意

在同一个元素上同时使用v-ifv-for时,要注意它们的优先级。v-for的优先级比v-if高,因此v-if将在每次迭代中都执行。

<!-- 不推荐 -->
<div v-for="item in items" v-if="item.visible">
  {{ item.name }}
</div>

<!-- 推荐 -->
<div v-for="item in filteredItems" :key="item.id">
  {{ item.name }}
</div>

7.9 使用$nextTick处理DOM更新

在修改数据后立即访问DOM可能不会立即反映数据的变化。这是因为Vue的DOM更新是异步的。如果需要在DOM更新后执行一些操作,可以使用$nextTick方法。

this.message = "Hello, Vue!";
this.$nextTick(() => {
  // DOM 更新后执行操作
});

7.10 注意事件处理中的this

在事件处理函数中,this的指向可能会出现问题。可以使用箭头函数或在模板中使用@click等语法糖来绑定函数的上下文。

// 使用箭头函数
methods: {
  handleClick: () => {
    // 在这里的this指向Vue实例
  }
}

// 或者在模板中使用语法糖
<button @click="handleClick"></button>

7.11 合理使用组件

组件是Vue的重要特性,它可以帮助将复杂的UI拆分成独立的功能模块,提高代码的可维护性和复用性。但是过度使用组件也会导致性能问题,因为每个组件都需要额外的资源和开销。

因此,在设计应用时要合理使用组件,避免过度拆分。

7.12 合理使用懒加载

如果应用中包含大量组件,可以考虑使用懒加载来优化加载性能。Vue支持异步组件和路由懒加载,可以根据需要动态加载组件,提高应用的初始加载速度。

7.13 使用开发者工具进行性能分析

Vue提供了强大的开发者工具,可以帮助我们分析应用的性能瓶颈和优化点。使用这些工具可以更好地了解应用的运行情况,从而进行针对性的优化。

7.14 参考Vue官方文档和社区资源

Vue拥有丰富的官方文档和社区资源,其中包含了许多优秀的实践和最佳推荐。阅读这些资源可以帮助您更好地理解Vue的特性,并学习其他开发者的经验。

7.15 总结

通过避免常见的响应式陷阱,并采用最佳实践和使用建议,您可以优化Vue应用的性能和开发体验。合理地使用Vue的特性,如计算属性、方法、指令和组件,可以让您更加高效地开发Vue应用。

希望本节的内容能帮助您更好地使用Vue响应式系统,并优化您的开发过程。在接下来的结论中,我们将简要总结Vue响应式系统的重要性和优势,强调学习和理解响应式系统对于高效开发Vue应用的重要性。敬请关注下一节的内容!

八、结论

Vue响应式系统是Vue.js框架的核心特性之一,它为我们提供了强大的数据绑定机制,使得数据与视图之间能够实时同步,带来了更加流畅和高效的前端开发体验。在本篇博客中,我们深入探索了Vue响应式系统的原理和实现机制,从引言开始,逐步介绍了初识Vue响应式系统、数据绑定原理、核心概念以及数据的响应式更新过程。

了解Vue响应式系统的重要性不仅有助于我们更好地使用Vue框架,还可以帮助我们解决在开发过程中可能遇到的一些常见陷阱和问题。通过避免直接修改响应式数据、合理使用计算属性和方法、注意v-ifv-for的使用等最佳实践,我们可以优化Vue应用的性能和开发效率。

然而,Vue响应式系统只是Vue框架众多特性之一。Vue还提供了许多其他强大的功能,如Vue组件系统、路由、状态管理等,都值得我们深入学习和应用。深入理解Vue的特性和功能,加上合理的项目架构和代码组织,将为我们开发高效、可维护的Vue应用提供有力的支持。

最后,我鼓励各位读者继续深入学习Vue.js,探索更多有关Vue的知识,并不断实践和应用所学,提升自己在前端开发领域的技能和能力。愿您在Vue的世界里创造出令人瞩目的Web应用!

九、参考资料

  • Vue.js官方文档
  • Vuex官方文档
  • Vue Mastery (Vue.js学习资源)
  • 本节视频

    第7节-Vue的class与style绑定

通过本篇博客,我们希望读者能够全面了解Vue响应式系统的工作原理,掌握数据绑定的核心概念,并能在实际开发中灵活运用Vue的响应式特性,提升应用的性能和用户体验。

原创声明

======= ·

  • 原创作者: 猫头虎

作者wx: [ libin9iOak ]

  • 今日已学习

本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。

作者保证信息真实可靠,但不对准确性和完整性承担责任

未经许可,禁止商业用途。

如有疑问或建议,请联系作者。

感谢您的支持与尊重。

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/811511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

某某大学某学院后台Phar反序列化GetShell

觉得这个洞还算有点意思&#xff0c;可以记录一下 首先在另一个二级学院进行目录扫描时发现源码www.rar&#xff0c;并且通过一些页面测试推测这两个二级学院应该是使用了同一套CMS 分析源码&#xff0c;发现使用的是ThinkPHP 5.1.34 LTS框架 通过APP、Public得到后台访问路径…

开放自动化软件的硬件平台

自动化行业的产品主要以嵌入式系统为主&#xff0c;历来对产品硬件的可靠性和性能都提出很高的要求。最典型的产品要数PLC。PLC 要求满足体积小&#xff0c;实时性&#xff0c;可靠性&#xff0c;可扩展性强&#xff0c;环境要求高等特点。它们通常采用工业级高性能嵌入式SoC 实…

无涯教程-jQuery - Selectable选择函数

选择能力功能可与JqueryUI中的交互一起使用。此功能可在任何DOM元素上启用选择能力功能。用光标绘制一个框以选择项目。按住Ctrl键可进行多个不相邻的选择。 Select able - 语法 $( "#selectable" ).selectable(); Select able - 示例 以下是一个简单的示例&…

反弹shell确认是否是docker容器

反弹shell确认是否是docker容器 方法一 如果根目录中存在.dockerwenv文件&#xff0c;证明是doker容器 ls /.dockerenv方法二 出现以下类似内容&#xff0c;证明是在doker容器内 cat /proc/1/cgroup

回归预测 | MATLAB实现GRNN广义回归神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现GRNN广义回归神经网络多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现GRNN广义回归神经网络多输入单输出回归预测(多指标,多图)效果一览基本介绍程序设计参考资料效果一览 基本介绍 MATLAB实现GRNN广义回归神经网络多输入单输出回归…

【设计模式——学习笔记】23种设计模式——享元模式Flyweight(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 案例引入介绍基本介绍原理类图外部状态和内部状态 登场角色 案例实现案例1类图代码实现 案例2类图代码实现 享元模式在JDK源码中的使用总结 案例引入 你的公司主要做一些小型的外包项目&#xff0c;之前给客户A做一个产品展示网站&#xff0c;客户A的朋友感觉效果不错…

uniapp小程序自定义loding,通过状态管理配置全局使用

一、在项目中创建loding组件 在uniapp的components文件夹下创建loding组件&#xff0c;如图&#xff1a; 示例代码&#xff1a; <template><view class"loginLoading"><image src"../../static/loading.gif" class"loading-img&q…

SpringBoot统一异常处理和统一返回格式

上篇博客我们讲解了使用AOP来进行统一的用户登录判断&#xff0c;其实像这种功能统一且使用较多的地方&#xff0c;都可以用AOP来处理&#xff0c;除了统⼀的⽤户登录判断之外&#xff0c;AOP 还可以实现&#xff1a; 统⼀⽇志记录统⼀⽅法执⾏时间统计&#xff08;在性能优化…

8.事件对象

8.1获取事件对象 ●事件对象是什么 也是个对象&#xff0c;这个对象里有事件触发时的相关信息 例如&#xff1a;鼠标点击事件中&#xff0c;事件对象就存了鼠标点在哪个位置等信息 ●使用场景 可以判断用户按下哪个键&#xff0c;比如按下回车键可以发布新闻 可以判断鼠标点击…

【动态规划】子数组系列

文章目录 动态规划&#xff08;子数组系列&#xff09;1. 最大子数组和2. 环形子数组的最大和3. 乘积最大子数组4. 乘积为正的最长子数组的长度5. 等差数列划分6. 最长湍流子数组7. 单词拆分8. 环形字符串中的唯一的子字符串 动态规划&#xff08;子数组系列&#xff09; 1. 最…

ETHERCAT转CCLINK网关连接ethercat转换器

你们有没有遇到这样的问题&#xff1f;在生产管理系统中&#xff0c;数据互联互通是非常重要的&#xff0c;但ETHERCAT和CCLINK这两个协议之间的通讯一直是个大问题。今天&#xff0c;我给大家带来了一个好消息——捷米JM-ECT-CCLK&#xff0c;这是一款让各种CCLINK总线和ETHER…

WEB:php_rce

背景知识 Linux命令 thinkPHPv5漏洞 题目 打开页面&#xff0c;页面显示为thinkphp v5的界面&#xff0c;可以判断框架为thinkPHP&#xff0c;可以去网上查找相关的漏洞 由题目可知&#xff0c;php rec是一个通过远程代码执行漏洞来攻击php程序的一种方式 因为不知道是php版…

三数之和——力扣15

文章目录 题目描述法一 双指针排序 题目描述 法一 双指针排序 class Solution{ public:vector<vector<int>> threeSum(vector<int>& nums){int nnums.size();vector<vector<int>> ans;sort(nums.begin(), nums.end());for(int first0;first&…

项目实战 — 消息队列(2){创建核心类}

目录 一、创建项目 二、创建核心类 &#x1f345; 1、 编写交换机类&#xff0c;Exchange &#x1f345; 2、编写存储消息的队列&#xff0c;MSGQueue &#x1f345; 3、编写绑定类&#xff0c;binding &#x1f345; 4、编写消息&#xff0c;Message 一、创建项目 二、创…

【Golang 接口自动化04】 解析接口返回JSON串

目录 前言 解析到结构体 json数据与struct字段是如何相匹配的呢&#xff1f; 解析到interface Go类型和JSON类型 实例代码 simpleJson 总结 资料获取方法 前言 上一次我们一起学习了如何解析接口返回的XML数据&#xff0c;这一次我们一起来学习JSON的解析方法。 JSO…

Mysql 索引失效

1、模糊查询%在前面&#xff0c;无法排序所以失效 2、函数计算 3、表达式计算length(NAME) 4、隐式转换 5、联合索引非最左匹配 6、or 必须都为索引列 事务特性 &#xff08;来自小林coding 事务隔离级别是怎么实现的&#xff1f; | 小林coding (xiaolincoding.com)&#…

基于Open3D的点云处理13-分割

平面分割&#xff08;基于RANSAC&#xff09; 使用RANSAC算法从点云中拟合平面&#xff1b; 接口&#xff1a;segment_plane 测试&#xff1a;Plane-segmentation import open3d as o3dpcd_point_cloud o3d.data.PCDPointCloud() pcd o3d.io.read_point_cloud(pcd_point_cl…

从零开始学Docker(二):启动第一个Docker容器

宿主机环境&#xff1a;RockyLinux 9 这个章节不小心搞成命令学习了&#xff0c;后面在整理成原理吧 Docker生命周期 拉取并启动Nginx容器 # 查找镜像 例如&#xff1a;nginx [root192 ~]# docker search nginx 我们可以看到&#xff0c;第一个时官方认证构建的nginx # 拉…

beego通过gorm访问mysql数据库

一、下载golang 二、解压下载包到C盘 三、配置golang系统环境变量 四、进入新建的工作目录C:\project下载并安装beego 五、将新生成的bee.exe所在的路径c:\project\bin加入到系统变量path里面 六、下载并安装mysql 例如在上图中&#xff0c; 选“No thanks,just start my down…

iOS开发-实现上下翻转轮播循环信息播报效果

iOS开发-实现上下翻转轮播循环信息播报效果 在开发中经常遇到需要实现轮播信息播报&#xff0c;例如以下效果 一、使用UITableView实现展示列表 UITableView 定义UITableView的实例&#xff0c;并让当前视图遵守UITableView的两个协议 property (nonatomic, weak, nullable)…