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

Vue 系列之:基础知识

什么是 MVVM

MVVM(Model-View-ViewModel)一种软件设计模式,旨在将应用程序的数据模型(Model)与视图层(View)分离,并通过 ViewModel 来实现它们之间的通信。降低了代码的耦合度。

Model 代表数据模型,是应用程序中用于处理数据的部分。在 Vue.js 中,Model 通常指的是组件的 data 函数返回的对象,或者 Vue 实例的 data 属性。

View 是用户界面,是用户与应用程序进行交互的部分。在 Vue.js 中,View 通常指的是 Vue 组件的模板(template),它使用声明式的语法来描述如何渲染数据。Vue 的模板语法允许开发者以声明的方式将 DOM 绑定到底层 Vue 实例的数据上。

ViewModel 是 MVVM 模式的核心,它作为 View 和 Model 之间的桥梁,负责将 Model 的数据同步到 View 显示出来,以及将用户对 View 的操作反映到 Model 上。

Vue 实例通过其响应式系统(基于 ES6 的 Proxy 或 Object.defineProperty 实现)来监听 Model 的变化,并自动更新 DOM(View)

Vue 钩子函数

钩子函数(hook)是在系统在进行消息的传递处理时候利用钩子机制截取消息,可以对一些特定的消息进行处理。

为什么要叫钩子?

钩子就是用来挂的嘛,在线程执行的过程中,我们想要在步骤1和步骤2直接挂一个函数,什么东西可以挂呢?钩子!所以就有钩子函数 这个叫法了。
在这里插入图片描述

Vue 八大生命周期钩子函数:

Vue2Vue3调用时间
beforeCreatesetupvue 实例初始化之前调用
createdsetupvue 实例初始化之后调用
beforeMountonBeforeMount挂载到 DOM 树之前调用
mountedonMounted挂载到 DOM 树之后调用
beforeUpdateonBeforeUpdate数据更新之前调用
updatedonUpdated数据更新之后调用
beforeDestroyonBeforeUnmountvue实例销毁之前调用
destroyedonUnmountedvue实例销毁之后调用

Vue.js 官方文档

Vue 实例

每个 Vue 应用都是通过用 Vue 构造函数创建一个新的 Vue 实例开始的

// vue2
var vm = new Vue({// 选项
})
// vue3
import { createApp } from 'vue'const app = createApp({/* 根组件选项 */
})

Vue 实例和 Vue 生命周期有什么关系?

在 Vue 中,当创建一个组件或 Vue 实例时,它会经历一系列初始化步骤,这就是所谓的生命周期。

Vue 生命周期描述了 Vue 实例从创建到销毁的整个过程。

Vue2 实例方法

Vue3 应用实例

Vue3 组件实例

Vue.prototype

用途:

  • Vue.prototype 是 Vue 构造函数的原型对象,用于向所有 Vue 实例添加共享的方法和属性。

  • 通过在 Vue.prototype 上定义方法或属性,可以确保这些方法或属性在所有 Vue 实例中都是可用的。

用法:

  • 添加全局方法:Vue.prototype.$myMethod = function() { ... };

  • 添加全局属性:Vue.prototype.$myProperty = 'some value';

为什么要以 $ 符号开头?

这是 Vue 中的一个简单约定,为了避免和组件中定义的数据、方法、计算属性产生冲突。

Vue.prototype 加一个变量,只是给每个组件加了一个属性,这个属性的值并不具有全局性。

例如:

// main.js
Vue.prototype.$test = "测试"//test1.vue
mounted() {this.$test = "哈哈"console.log(this.$test) // 哈哈this.$router.push("/test2")
}//test2.vue
mounted() {console.log(this.$test) // 测试
}

如果要实现全局变量的功能,需要把属性变为引用类型

// main.js
Vue.prototype.$test = { name: "测试" }//test1.vue
mounted() {this.$test.name= "哈哈"console.log(this.$test) // 哈哈this.$router.push("/test2")
}//test2.vue
mounted() {console.log(this.$test) // 哈哈
}

created 和 mounted 区别

  • created:在模板渲染成 html 前调用,通常初始化某些属性值,然后再渲染成视图。

  • mounted:在模板渲染成 html 后调用,通常是初始化页面完成后,再对 html 的 dom 节点进行一些需要的操作。

    例如 chart.js 的使用 var ctx = document.getElementById(id),这个就一定要等 html 渲染完成后才可以完成,这就要用 mounted

computed 和 watch 区别

computed 计算属性:

  • 只有当计算属性所依赖的响应式数据发生变化时,计算属性才会重新求值。如果多次访问计算属性,但依赖项没有变化,那么它将返回之前的计算结果,而不是重新计算。

  • 在模板中可以直接使用计算属性

  • 计算属性总是返回一个值

<div>{{test}}</div>data() {return {name: '张三',age: 10}
},
computed: {test() {return `姓名${this.name},年龄${this.age}`;}
}

watch 监听器:

  • watch 中的回调函数可以执行异步操作,而 computed 则不可以。

  • 没有缓存,每次触发时重新计算

  • 接收两个参数(newValue, oldValue)

data() {return {user: {name: "张三",age: 10,},};
},
watch: {user: {handler(newVal, oldVal) {console.log("用户信息发生变化:", newVal);},deep: true, // 深度监听immediate: true, // 立即触发},
}

总结:

  • 当多个属性通过计算影响一个属性的时候,建议用 computed

  • 当一个值发生变化之后,会引起一系列的操作,这种情况就适合用 watch

computed 如何传参

<div :title="text('123')"></div>computed: {text(){return function (params) {console.log(params) // 123return params}}
}

执行顺序

父子组件生命周期执行顺序

  • 页面初始化时:

    父 beforeCreate -> 父 created -> 父 beforeMount -> 子 beforeCreate -> 子 created -> 子 beforeMount -> 子 mounted-> 父 mounted

  • 页面销毁时:

    父 beforeDestroy -> 子 beforeDestroy -> 子 destroyed-> 父 destroyed

页面跳转的生命周期执行顺序

  • 旧页面跳转到新页面:

    新页面 created > 新 beforeMount > 旧 beforeDestroy > 旧 destroyed > 新 mounted

computed 、watch、created 、mounted 的先后顺序

  • immediate [ɪˈmiːdiət] 为 false 时: created => computed => mounted => watch

  • immediate 为 true 时: watch =>created=> computed => mounted

$nextTick

原理

Vue 采用异步更新策略,当你修改响应式数据时,Vue 不会立即更新 DOM,而是将这些 DOM 更新操作放入一个队列中,等到下一个事件循环时,再批量执行这些更新操作。$nextTick 的作用就是将回调函数(即传递给 $nextTick 的函数)添加到这个队列的末尾,确保在 DOM 更新完成后再执行回调。

批量的意思是指:当有多个 DOM 更新操作时,Vue 不会立即逐个地去更新 DOM,而是将这些更新操作收集起来,在下次事件循环时一次性处理,而不是循环依次更新。

在 Vue 里,数据是响应式的。当一个响应式数据发生变化时,与之绑定的 DOM 就需要更新。要是每次数据变化都立即更新 DOM,会带来大量的重排和重绘操作,严重影响性能。重排和重绘是浏览器渲染页面时开销较大的操作,频繁进行会导致页面卡顿。

JavaScript 的事件循环机制

实现细节

Vue 会根据不同的环境,选择不同的异步执行方法,优先顺序如下:

  • Promise.then:现代浏览器支持的异步方法,优先使用。

  • MutationObserver:用于监听 DOM 变化的 API,在不支持 Promise 的环境中使用。

  • setImmediate:IE 浏览器和 Node.js 环境支持的异步方法。

  • setTimeout:作为最后的兜底方案,所有环境都支持。

使用场景

  • 当你修改了数据后,需要立即操作更新后的 DOM 元素时,必须使用 $nextTick。

  • 当你修改了数据后,需要立即获取更新后的组件状态(如计算属性、子组件的状态等),必须使用 $nextTick。

  • 当你使用 v-if 或 v-for 动态渲染 DOM 元素后,需要立即操作这些元素时,必须使用 $nextTick。

  • 当你在 watch 监听器中监听数据变化,并需要操作 DOM 时,必须使用 $nextTick 确保 DOM 已经更新。

总结起来就是在操作执行完成时需要理解操作 DOM 或子组件的,都要使用 $nextTick

@click.native

  • @click:主要用于监听 Vue 组件内部自定义的点击事件,适用于普通 HTML 元素和自定义组件。当用于自定义组件时,需要在组件内部通过 $emit 触发自定义的 click 事件,外部才能监听到。

  • @click.native:用于监听原生 DOM 元素的点击事件,即使是在自定义组件上使用,它监听的也是组件根元素的原生点击事件,而不是自定义事件。对于普通 HTML 元素,@click.native 和 @click 效果相同。

意思就是:如果你想在组件内的子组件上绑定一个点击事件,如果你使用的是 @click,如果你的子组件内部没有通过 $emit 触发自定义的 click 事件,那么 @click 无效。

例如:

<!--子组件-->
<template><div class="children"><div class="my-class">子组件内容</div></div>
</template><!--父组件-->
<template><div id="app"><Children @click="handleClick"></Children></div>
</template>
<script>
import Children from "./Children.vue";
export default {components: { Children },methods: {handleClick(e) {console.log(e);}}
}
</script>

此时 handleClick 是不会触发的,除非把子组件改成:

<template><div class="children" @click="handleChildClick"><div class="my-class">子组件内容</div></div>
</template><script>
export default {methods: {handleChildClick() {// 通过 $emit 触发父组件的 click 事件this.$emit('click', '这是子组件触发的事件');}}
}
</script>

但是如果你使用的是 @click.native 就不会有这个问题,因为它监听的是组件根元素的原生点击事件,而不是自定义事件。

再举个例子加深理解:

<el-card @click="handleClick1"></el-card>
<el-card @click.native="handleClick2"></el-card><script>
methods: {handleClick1() {// 不会触发,因为 element-ui 的 el-card 组件没有定义 click 事件},handleClick2() {// 可以触发,因为是原生点击事件}
}
</script>

你以为你已经掌握了全部吗?不,对于 Vue2 来说,确实是这样,但是对于 Vue3 来说,情况又有不同:

<!--子组件-->
<template><div class="children"><div class="my-class">子组件内容</div></div>
</template><!--父组件-->
<template><div id="app"><Children @click="handleClick"></Children></div>
</template>
<script setup>
import Children from "./Children.vue";
const handleClick = e => {console.log(e);
}
</script>

发现也可以触发!为什么?

因为在 Vue 3 里,当父组件向子组件传递事件监听器时,如果子组件没有通过 emits 选项显式声明这些事件,那么这些事件监听器会被自动绑定到子组件的根元素上,这就是所谓的事件继承特性

上面的例子就是因为子组件没有显式定义 emits 选项,父组件中的 @click 会被当作原生 DOM 事件绑定到子组件的根元素上。

@click.stop

阻止事件冒泡,即阻止事件向父级元素传递。

<div id="app"><div v-on:click="parentClick"><button v-on:click="childClick">阻止单击事件继续传递</button></div>
</div><script>
var app = new Vue({el: "#app",data: {name: "Vue.js"},methods: {parentClick: function () {alert("parentClick");},childClick: function () {alert("childClick");},}
});
</script><!--点击按钮,将会先弹出 "childClick", 再弹出 "parentClick"-->
<div id="app"><div v-on:click="parentClick"><button v-on:click.stop="childClick">阻止单击事件继续传播</button></div>
</div><script>
var app = new Vue({el: "#app",data: {name: "Vue.js"},methods: {parentClick: function () {alert("parentClick");},childClick: function () {alert("childClick");},}
});
</script><!--点击按钮,只弹出 "childClick"-->

使用场景:点击子元素区域的的时候,不触发父级元素的点击事件。

@click.prevent

阻止事件的默认行为。

<!--点击链接时,阻止 a 标签跳转,仅执行函数 test4-->
<a href="http://www.baidu.com" @click.prevent="test4">百度一下</a>   <!--点击按钮时,阻止表单默认提交行为 action,仅执行函数 test5-->
<form action="/xxx" @submit.prevent="test5">   <input type="submit" value="注册">
</form>

@keyup.enter

按键修饰符。

<!--按下键盘 enter 健时,执行方法 test7-->
<input type="text" @keyup.enter="test7">

directive 自定义指令

什么是自定义指令?

vue2.js 官方链接

vue3.js 官方链接

Vue 的自定义指令允许你对 DOM 进行低级别的操作。自定义指令通过 Vue 的全局方法 Vue.directive() 或组件的 directives 选项来注册。注册之后,你可以在 Vue 模板中通过 v- 前缀加上指令名来使用这个指令。

低级别操作是指直接通过 JavaScript 对 DOM 树中节点的进行增删改查,以及对节点的属性、样式、事件等进行操作。

全局自定义指令

Vue2:

// 在main.js中
// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', {// 当被绑定的元素插入到 DOM 中时……inserted: function (el) {// 聚焦元素el.focus()}
})

Vue3:

const app = createApp({})// 使 v-focus 在所有组件中都可用
app.directive('focus', {/* ... */
})

局部组件指令

Vue2:

created() {},
directives: {focus: {// 指令的定义inserted: function (el) {el.focus()}}
}

Vue3:

<script setup> 中,任何以 v 开头的驼峰式命名的变量都可以被用作一个自定义指令。

<template><input v-focus />
</template><script setup>
// 在模板中启用 v-focus
const vFocus = {mounted: (el) => el.focus()
}
</script>

或:

<template><input v-focus />
</template><script>
export default {setup() {/*...*/},directives: {// 在模板中启用 v-focusfocus: {/* ... */}}
}
</script>

钩子函数

Vue2:

函数描述
bind只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
inserted被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
update所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。
componentUpdated指令所在组件的 VNode 及其子 VNode 全部更新后调用。
unbind只调用一次,指令与元素解绑时调用。

Vue3:

函数描述
created在绑定元素的 attribute 前或事件监听器应用前调用
beforeMount在元素被插入到 DOM 前调用
mounted在绑定元素的父组件及他自己的所有子节点都挂载完成后调用
beforeUpdate绑定元素的父组件更新前调用
updated在绑定元素的父组件及他自己的所有子节点都更新后调用
beforeUnmount绑定元素的父组件卸载前调用
unmounted绑定元素的父组件卸载后调用

钩子函数参数:

  • el:指令绑定到的元素。这可以用于直接操作 DOM。

  • binding:一个对象,包含指令值(value)、旧的指令值(oldValue)、参数(arg)等等

  • vnode

  • oldVnode

原理

当 Vue 组件的模板被编译时,Vue 会识别出模板中所有的 v- 前缀指令,这会包含 Vue 的内置指令和自定义指令。对于自定义指令,Vue 会根据注册的钩子函数生成相应的指令对象,这些对象包含了指令的名称、参数、表达式等信息。然后会将这些信息存储在之后生成的 VNode 对象中。最后在生成真实 DOM 的时候,Vue 会在相应的 DOM 元素上调用自定义指令的钩子函数。

v-model 的原理

v-model 是 Vue.js 中的一个语法糖,它内部实际上是使用了 v-bind (:)和 v-on (@)两个指令。

  • v-bind:实现数据到 DOM 的绑定

    • 修改 data 中的属性值会体现在页面上

    • 原理主要是基于 Vue 的响应式系统,当数据变化时触发相应的 setter,来触发渲染过程,以更新 DOM

  • v-on:实现 DOM 到数据的绑定

    • 在页面上修改的属性值会作用到 data 中

    • 原理是监听 DOM 元素上指定的事件,当事件发生时,执行相应的 JavaScript 代码或方法,从而更新属性值。

Vue 中使用 CSS 变量

<template><!-- 方式一:在根或父或当前节点使用 --varName 来定义变量 然后当前节点使用 var(--varName) 来使用变量 --><div class="parent"><!-- 方式二:可以在 data 中定义变量,在 template 中直接使用 --><span :style="{ color: myColor1 }">parent</span><!-- 方式三:data 中定义变量,css 中使用 v-bind 绑定变量 --><div class="child1">child1</div><!-- 方式四:通过 style module --><div :class="classModule.child2">child2</div><!-- 方式五:不好理解,不知道这样写的意义在哪里 --><div class="child3" :style="{ '--my-color': myColor3 }">child3</div></div>
</template><script lang="ts" setup>
const myColor1 = 'red'; // 方式二
const myColor2 = 'yellow'; // 方式三
const myColor3 = 'blue'; // 方式五
</script><style>
.parent {/* 方式一 */--parent-bg-color: skyblue;/* 方式一 */background-color: var(--parent-bg-color);
}.child1 {/* 方式三 */color: v-bind(myColor2);
}.child3 {/* 方式五 */color: var(--my-color);
}
</style><style module="classModule">
/* 方式四 */
.child2 {color: green;
}
</style>

Vue 项目结构

文件名注释
build项目构建(webpack)相关代码
config项目配置
dev.env.js开发环境变量
prod.env.js生产环境变量
test.env.js测试环境变量
index.js项目配置文件
package.jsonnpm 包配置文件,npm 脚本
src日常开发主要在这个文件夹
asset放置静态资源,会被 webpack 构建
main.js项目入口文件
components公共组件
App.vue根组件
pages页面文件
api接口文件
router路由文件
static纯静态资源,不会被 webpack 构建
index.html首页入口文件
README.md项目的说明文档
dist打包之后的文件

相关文章:

Vue 系列之:基础知识

什么是 MVVM MVVM&#xff08;Model-View-ViewModel&#xff09;一种软件设计模式&#xff0c;旨在将应用程序的数据模型&#xff08;Model&#xff09;与视图层&#xff08;View&#xff09;分离&#xff0c;并通过 ViewModel 来实现它们之间的通信。降低了代码的耦合度。 M…...

知识库功能测试难点

图表交互功能测试难点 知识库图表类型多&#xff0c;每种图表交互功能不同。像柱状图&#xff0c;可能有点击柱子查看详细数据、鼠标悬停显示数据提示等交互&#xff1b;折线图除了这些&#xff0c;还可能支持缩放查看不同时间段数据。多种交互操作在不同图表间存在差异&#x…...

一文掌握 Scrapy 框架的详细使用,包括实战案例

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. Scrapy 简介2. Scrapy 的核心组件3. 安装 Scrapy4. 创建 Scrapy 项目4.1 创建项目4.2 创建 Spider5. 编写 Spider5.1 定义 Item5.2 编写 Spider 逻辑6. 运行 Scrapy 爬虫6.1 运行爬虫6.2 保存爬取数据7. Scrapy 的高…...

奔图Pantum M7165DN黑白激光打印一体机报数据清除中…维修

故障描述: 一台奔图Pantum M7165DN黑白激光打印一体机开机自检正常,自检过后就不能工作了,按键面板无任何反应一直提示数据清除中…,如果快速操作的话也能按出菜单、功能啥的,不过一会又死机了,故障请看下图: 故障检修: 经分析可能是主板数据出现了问题,看看能不能快速…...

微服务架构与传统的单体架构有什么区别?微服务架构(Spring Cloud + Maven)强在哪?

微服务架构与传统的单体架构&#xff08;Spring Boot Maven 项目&#xff09;在设计和实现上有显著差异&#xff0c;主要体现在系统拆分方式、部署模式、技术栈选择、维护成本等方面。以下是具体对比&#xff1a; 1. 架构设计 维度单体架构微服务架构系统拆分所有功能模块集…...

二、QT和驱动模块实现智能家居----2、编译支持QT的系统

因为我们的Linux内核文件不支持QT系统&#xff08;当然如果你的支持&#xff0c;完全跳过这篇文章&#xff09;&#xff0c;所以我们要从网上下载很多软件包&#xff0c;这里直接用百问网的软件包&#xff0c;非常方便。 一&#xff1a;Ubuntu 配置 1 设置交叉编译工具链 以…...

游戏引擎学习第128天

开始 然而&#xff0c;我们仍然有一些工作要做&#xff0c;渲染部分并没有完全完成。虽然现在已经能够运行游戏&#xff0c;而且帧率已经可以接受&#xff0c;但仍然有一些东西需要进一步完善。正在使用调试构建编译版本&#xff0c;虽然调试版本的性能不如优化版本&#xff0…...

【量化策略】套利交易策略

【量化策略】套利交易策略 &#x1f680;量化软件开通 &#x1f680;量化实战教程 技术背景与应用场景 在金融市场中&#xff0c;套利交易策略是一种利用市场价格差异来获取无风险利润的交易方式。这种策略通常涉及同时买入和卖出不同市场上的相同或相似金融产品&#xff0…...

laravel11设置中文语言包

安装中文语言包 Laravel 11 默认没有内置完整中文语言包&#xff0c;推荐使用第三方维护的完整翻译&#xff1a; # 通过 Composer 安装语言包 composer require laravel-lang/common --dev# 发布中文语言文件到项目 php artisan lang:add zh_CN这会自动将中文语言文件生成到 l…...

Javaweb数据库多表查询 内连接 外连接 子查询

内连接 外连接 左外连接&#xff0c;左边是全部表 表名&#xff0c;即使没有匹配右边的数据&#xff0c;也要查询出来 子查询 案例 1.没有说所有的部门&#xff0c;所有的员工&#xff0c;用内连接&#xff08;隐式内连接&#xff09;...

欧氏距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、马氏距离理解学习

目录 一、欧氏距离&#xff08;Euclidean Distance&#xff09;公式&#xff1a;原理&#xff1a; 二、曼哈顿距离&#xff08;Manhattan Distance&#xff09;公式&#xff1a;原理&#xff1a; 三、切比雪夫距离&#xff08;Chebyshev Distance&#xff09;公式&#xff1a;原…...

【地图视界-Leaflet4】绘制自定义图形

引言 在前面的文章中&#xff0c;我们学会了如何在 Leaflet 中添加标记、弹窗以及切换不同的底图和叠加图层。但是在很多实际应用中&#xff0c;我们需要在地图上绘制多边形、圆形、矩形、折线等几何图形&#xff0c;用于标记区域、路径规划、范围分析等。 本篇文章将介绍如何…...

华为hcia——Datacom实验指南——STP工作基本原理及STP/RSTP基本功能配置

什么时候需要用到STP 在二层交换网络中&#xff0c;为了避免环路产生。 什么是STP STP生成树协议&#xff0c;是用来在冗余链路上消除二层环路。在众多交换机中&#xff0c;需要设置出一个根桥&#xff0c;其余的交换机称为非根桥&#xff0c;根桥是整个交换网络的核心&…...

游戏引擎学习第127天

仓库:https://gitee.com/mrxiao_com/2d_game_3 为本周设定阶段 我们目前的渲染器已经实现了令人惊讶的优化&#xff0c;经过过去两周的优化工作后&#xff0c;渲染器在1920x1080分辨率下稳定地运行在60帧每秒。这个结果是意料之外的&#xff0c;因为我们没有预计会达到这样的…...

PostgreSQL 创建表格

PostgreSQL 创建表格 在数据库管理中&#xff0c;表格&#xff08;Table&#xff09;是数据存储的基础。PostgreSQL作为一款强大的开源对象关系型数据库管理系统&#xff08;ORDBMS&#xff09;&#xff0c;创建表格是其最基本的功能之一。本文将详细讲解如何在PostgreSQL中创…...

AF3 deduplicate_unpaired_sequences函数解读

AlphaFold3 msa_pairing模块的deduplicate_unpaired_sequences 函数的作用是移除 chain[msa] 中那些已经存在于 chain[msa_all_seq] 中的序列。换句话说&#xff0c;它保留那些不在 chain[msa_all_seq] 中的序列&#xff0c;从而确保未配对的 MSA 序列不会与配对的 MSA 序列重复…...

图像处理之图像边缘检测算法

目录 1 图像边缘检测算法简介 2 Sobel边缘检测 3 经典的Canny边缘检测算法 4 演示Demo 4.1 开发环境 4.2 功能介绍 4.3 下载地址 参考 1 图像边缘检测算法简介 图像边缘检测是计算机视觉和图像处理中的基本问题&#xff0c;主要目的是提取图像中明暗变化明显的边缘细节…...

unity使用input system实现相机屏幕手势丝滑拖拽

input action设置 操作对象设置 camera 具体操作类 PlayerInputView类 using System.Collections; using UnityEngine; using UnityEngine.InputSystem; using TouchPhase UnityEngine.InputSystem.TouchPhase;public class FingerScale : MonoBehaviour {private Vector3…...

Leetcode-853. Car Fleet [C++][Java]

目录 一、题目描述 二、解题思路 Leetcode-853. Car Fleethttps://leetcode.com/problems/car-fleet/description/ 一、题目描述 There are n cars at given miles away from the starting mile 0, traveling to reach the mile target. You are given two integer array …...

建易WordPress

建易WordPress是一家专业的WordPress建站服务提供商&#xff0c;专注于为企业和个人提供一站式的WordPress网站建设、维护、托管、运营推广以及搜索引擎优化(SEO)服务。 服务内容 1. 网站建设 提供模板建站和定制开发两种服务&#xff0c;满足不同客户的需求。模板建站价格为…...

计算机三级网络技术备考(3)

【知识点补充&#xff1a;带宽是是链路的传输速率&#xff0c;宽带是一种服务】 第四章&#xff1a;路由设计技术 考点1&#xff1a;IP路由选择与路由汇聚 核心层&#xff1a;s0两个IP进行汇聚就行 汇聚层&#xff1a;聚合后两个以上的往前进几位&#xff08;因为主机号不够因…...

工程化与框架系列(13)--虚拟DOM实现

虚拟DOM实现 &#x1f333; 虚拟DOM&#xff08;Virtual DOM&#xff09;是现代前端框架的核心技术之一&#xff0c;它通过在内存中维护UI的虚拟表示来提高渲染性能。本文将深入探讨虚拟DOM的实现原理和关键技术。 虚拟DOM概述 &#x1f31f; &#x1f4a1; 小知识&#xff1…...

Java实现pdf文件压缩(aspose-pdf实现压缩、itextpdf去除aspose-pdf版权水印)

Java实现pdf文件压缩 时间换空间&#xff0c;实现pdf文件无损压缩。 1、依赖准备 市面上操作pdf文件的组件有spire.pdf.free、itextpdf、openpdf、pdfbox等&#xff0c;它们各有千秋。我们主要完成的场景为压缩&#xff0c;减少文件大小去优化存储、传输等。 在这里选取的组件…...

生态安全相关

概念&#xff1a;生态安全指一个国家具有支撑国家生存发展的较为完整、不受威胁的生态系统&#xff0c;以及应对内外重大生态问题的能力。 &#xff08;1&#xff09;国外生态安全的研究进展 国际上对生态安全的研究是从“环境”与“安全”之间的关系展开的。开始的阶段&#x…...

通过 ANSYS Discovery 进行 CFD 分析,增强工程设计

概括 工程师使用计算流体动力学 (CFD) 分析来研究和优化各种应用中的流体流动和传热分析。ANSYS Discovery 是一个用户友好的软件平台&#xff0c;使工程师能够轻松设置和解决 CFD 模型&#xff0c;并能够通知设计修改 在这篇博文中&#xff0c;我们将重点介绍在 Ansys Disc…...

2. 在后端代码中加入日志记录模块

1. 说明 日志模块基本上是每一个软件系统开发中必不可少的&#xff0c;主要用于持久记录一些代码运行中的输出信息&#xff0c;辅助编码人员进行代码调试&#xff0c;以及后期软件上线运行报错分析。在Python中加入日志模块比较简单&#xff0c;只需要借助logging和RotatingFi…...

MySQL锁分类

一、按锁的粒度划分 全局锁 定义&#xff1a;锁定整个数据库实例&#xff0c;阻止所有写操作&#xff0c;确保数据备份一致性。加锁方式&#xff1a;通过FLUSH TABLES WITH READ LOCK实现&#xff0c;释放需执行UNLOCK TABLES。应用场景&#xff1a;适用于全库逻辑备份&#xf…...

软件测试之白盒测试知识总结

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 概念与定义 白盒测试&#xff1a;侧重于系统或部件内部机制的测试&#xff0c;类型分为分支测试&#xff08;判定节点测试&#xff09;、路径测试、语句测试…...

看视频学习方法总结

以下是提高教学视频吸收率的系统性方法&#xff0c;结合认知科学原理和实际学习场景&#xff0c;帮助您最大化学习效果&#xff1a; 一、观看前的黄金准备阶段 60秒快速扫描法 用1分钟快速浏览视频目录、章节标题和简介&#xff0c;建立知识框架。荷兰伊拉斯姆斯大学实验表明&…...

nvm的学习

学习 nvm&#xff08;Node Version Manager&#xff09; 是掌握 Node.js 开发的关键技能之一。以下是系统的学习路径和实战指南&#xff0c;涵盖从基础到进阶的内容&#xff1a; 一、基础入门 1. nvm 的核心作用 多版本共存&#xff1a;安装和管理多个 Node.js 版本&#xff…...

OpenCV计算摄影学(5)处理一系列图像(例如视频帧)的非局部均值去噪的函数fastNlMeansDenoisingColoredMulti()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 对用于彩色图像序列的 fastNlMeansDenoisingMulti 函数的修改。 cv::fastNlMeansDenoisingColoredMulti 函数是 OpenCV 中用于处理一系列图像&am…...

mysql安装教程,超详细图文教程(附安装包)MySQL8.0安装教程

文章目录 前言一、MySQL安装包下载二、mysql安装教程 前言 本教程旨在为大家提供详细、清晰的 mysql安装教程&#xff0c;帮助你轻松跨过安装门槛&#xff0c;顺利开启数据库管理与开发的精彩之旅。 一、MySQL安装包下载 MySQL 是一款备受欢迎的开源关系型数据库管理系统&…...

Spark内存迭代计算

一、宽窄依赖 窄依赖&#xff1a;父RDD的一个分区数据全部发往子RDD的一个分区 宽依赖&#xff1a;父RDD的一个分区数据发往子RDD的多个分区&#xff0c;也称为shuffle 二、Spark是如何进行内存计算的&#xff1f;DAG的作用&#xff1f;Stage阶段划分的作用&#xff1f; &a…...

Odoo免费开源CRM技术实战:从商机线索关联转化为售后工单的应用

文 / 开源智造 Odoo金牌服务 Odoo&#xff1a;功能强大且免费开源的CRM Odoo 引入了一种高效的客户支持管理方式&#xff0c;即将 CRM 线索转换为服务台工单。此功能确保销售和支持团队能够无缝协作&#xff0c;从而提升客户满意度并缩短问题解决时间。通过整合 CRM 模块与服…...

对seacmsv9进行sql注入,orderby,过滤information_schema

对seacmsv9进行sql注入&#xff0c;orderby&#xff0c;过滤information_schema 1.对seacmsv9进行sql注入 海洋影视管理系统&#xff08;seacms&#xff0c;海洋cms&#xff09;是一套专为不同需求的站长而设计的视频点播系统&#xff0c;采用的是 php5.Xmysql 的架构 seacm…...

跨AWS账户共享SQS队列以实现消息传递

在现代分布式系统中,不同的服务和组件通常需要进行通信和协作。Amazon Simple Queue Service (SQS)提供了一种可靠、可扩展且完全托管的消息队列服务,可以帮助您构建分布式应用程序。本文将介绍如何在一个AWS账户(账户A)中创建SQS队列,并授权另一个AWS账户(账户B)中的用户和角色…...

Starrocks 写入报错 primary key memory usage exceeds the limit

背景 本文基于 StarRocks 3.3.5 单个Starrocks BE配置是 16CU 32GB 在Flink Yaml CDC 任务往 Starrocks写数据的过程中&#xff0c;突然遇到了primary key memory usage exceeds the limit 问题&#xff0c;具体如下&#xff1a; java.lang.RuntimeException: com.starrocks.…...

【Java】I/O 流篇 —— 打印流与压缩流

目录 打印流概述字节打印流构造方法成员方法代码示例 字符打印流构造方法成员方法代码示例 打印流的应用场景 解压缩/压缩流解压缩流压缩流 Commons-io 工具包概述Commons-io 使用步骤Commons-io 常见方法代码示例 Hutool 工具包 打印流 概述 分类&#xff1a;打印流一般是指…...

刷屏(0和1)

计算机有一个“好东西”&#xff0c;它就是2进制&#xff0c;虽然无法快速转换&#xff0c;but可以通过编程来实现。 附代码&#xff1a; #include <bits/stdc.h> using namespace std; int main() {int a,b,c;cout<<" …...

keil主题(vscode风格)

#修改global.prop文件&#xff0c;重新打开keil即可 # Keil uVision Global Properties File # This file is used to customize the appearance of the editor# Editor Font editor.font.nameConsolas editor.font.size10 editor.font.style0# Editor Colors editor.backgro…...

windows服务器更新jar包脚本

【需求】Java每次发布新的版本都需要先kill掉原来的服务&#xff0c;然后再启动新的包 有了这个脚本只需要把包替换掉&#xff0c;服务会自动kill 以6001 为例 完整的脚本如下 echo off REM 检查端口 6001 是否被占用 netstat -ano | findstr :6001 > nul IF %ERRORLE…...

前端实现OSS上传图片(Vue3+vant)

首先&#xff0c;下面这些信息从阿里云服务器OSS管理中获取 aliyun:oss:file:endpoint: "oss-cn-beijing.aliyuncs.com"keyid: "xxxxxxxxx"keysecret: "xxxxxxxxxxxx"bucketname: "xxxx"一、安装OSS npm install ali-oss 二、以下步…...

Vue.js 组件开发指南:实现、传值与优缺点分析

1. 组件的实现与使用 1.1 组件的定义 在 Vue.js 中&#xff0c;组件是独立的、可复用的 Vue 实例。每个组件可以包含自己的模板、逻辑和样式。 // 定义一个简单的组件 Vue.component(my-component, {template: <div>这是一个自定义组件</div> });1.2 组件的使用…...

vulnhub靶场之【kioptrix-5】靶机

前言 靶机&#xff1a;kioptrix-5&#xff0c;IP地址为192.168.10.10 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.6 都采用VMware虚拟机&#xff0c;网卡为桥接模式 这里需要注意&#xff0c;在靶机安装后&#xff0c;先把原本的网卡删除&#xff0c;重新添加一个…...

#渗透测试#批量漏洞挖掘#(0day)某智能终端操作平台前台存在通用SQL注入漏洞(CVE-2022-21047)

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…...

Linux系统中proc是做什么的?

在 Linux 系统中&#xff0c;/proc 是一个虚拟文件系统&#xff08;Virtual Filesystem&#xff09;&#xff0c;它不对应实际的磁盘文件&#xff0c;而是内核在内存中动态生成的。/proc 文件系统提供了一种与内核数据结构交互的方式&#xff0c;它主要用于存放与系统运行状态、…...

el-table修改表格颜色

文章目录 一、el-table属性修改表格颜色1.1、header-row-class-name修改表头行颜色1.2、header-row-style修改表头样式1.3、row-class-name修改行颜色 二、el-table-column属性修改表格颜色2.1、class-name修改整列的颜色2.2、label-class-name修改列标题颜色 本文讲解vue修改e…...

014存储期(时间)

一、基本概念 C语言中&#xff0c;变量都是有一定的生存周期的&#xff0c;所谓生存周期指的是从分配到释放的时间间隔。为变量分配内存相当于变量的诞生&#xff0c;释放其内存相当于变量的死亡。从诞生到死亡就是一个变量的生命周期。 根据定义方式的不同&#xff0c;变量的…...

执行git操作时报错:`remote: [session-b8xxxda3] Access denied ...`解决方案

问题描述&#xff1a; 执行git push -u origin "master"时报错&#xff1a; > remote: [session-b849cda3] Access denied > fatal: unable to access https://gitee.com/jyunee/maibobo.git/: The requested URL returned error: 403表示没有权限访问远程仓库…...

Redis版本的EOL策略与升级路径(刷到别划走)

各位看官&#xff0c;刷到就点进来&#xff0c;大数据已经抓到你喽&#xff5e;&#x1f60a; 前言 在软件行业做服务端开发的我们&#xff0c;多多少少都会接触到Redis&#xff0c;用它来缓存数据、实现分布式锁等&#xff0c;相关八股文烂熟于心&#xff0c;但是往往会忽略具…...