Vue2和Vue3的区别
响应式系统
Vue 2
- 技术基础:使用
Object.defineProperty
实现响应式。 - 局限性:
- 无法监听新增属性:如果在创建实例后添加新属性,这些属性不会自动成为响应式的。
- 数组变更检测问题:直接通过索引设置值或长度不会触发更新。
示例:Vue 2 中的响应式数据
// Vue 2 示例
new Vue({data() {return {message: 'Hello, Vue 2!',items: []};},methods: {addItem() {// 直接修改数组不会触发视图更新this.items[0] = 'New Item';// 正确的做法是使用 Vue.set 或 this.$setthis.$set(this.items, 1, 'Another Item');}}
});
Vue 3
- 技术基础:基于 ES6
Proxy
的全新响应式系统。 - 优势:
- 全面监听:可以拦截对象的所有操作,包括属性的添加、删除、访问和修改。
- 深层嵌套对象:对深层嵌套的对象也能自动追踪变化。
示例:Vue 3 中的响应式数据
// Vue 3 示例
import { reactive } from 'vue';const state = reactive({message: 'Hello, Vue 3!',items: []
});state.items.push('New Item'); // 自动触发视图更新
state.items[0] = 'Updated Item'; // 自动触发视图更新
组合式 API (Composition API)
Vue 2
- 逻辑复用:依赖于混入(mixins),容易导致命名冲突和维护困难。
Vue 3
- 逻辑复用:引入了 Composition API,允许开发者将相关逻辑封装到函数中,并在不同的组件之间共享。
示例:组合式 API 使用
// 定义一个可重用的逻辑钩子
import { ref, onMounted } from 'vue';function useMousePosition() {const x = ref(0);const y = ref(0);function update(event) {x.value = event.pageX;y.value = event.pageY;}onMounted(() => window.addEventListener('mousemove', update));return { x, y };
}// 在组件中使用
export default {setup() {const { x, y } = useMousePosition();return {x,y};}
};
生命周期钩子
Vue 2
- 钩子名称:提供了明确的生命周期钩子,如
beforeCreate
,created
,beforeMount
,mounted
,beforeUpdate
,updated
,beforeDestroy
, 和destroyed
。
Vue 3
- 钩子调整:保留了大部分原有的钩子,但为了统一命名规则,做了如下更改:
beforeDestroy
改为beforeUnmount
destroyed
改为unmounted
setup()
钩子:这是一个新的组件选项,运行在实例创建之前。
示例:Vue 3 中使用生命周期钩子
import { onMounted, onUnmounted } from 'vue';export default {setup() {onMounted(() => {console.log('Component is mounted');});onUnmounted(() => {console.log('Component is unmounted');});return {};}
};
模板支持与渲染函数
Vue 2
- 根节点限制:模板必须有一个单一的根元素。
Vue 3
- 片段支持:移除了单个根节点的要求,允许模板中有多个顶级元素。
示例:Vue 3 中的多根节点模板
<template><h1>Title</h1><p>Paragraph</p>
</template>
性能提升
Vue 2
- 虚拟 DOM:尽管已经很高效,但在大规模应用中仍可能遇到性能瓶颈。
Vue 3
- 改进的虚拟 DOM:重新设计的虚拟 DOM 实现,采用了更高效的算法来比较和更新 DOM 树。
示例:Vue 3 中的性能优化
虽然性能优化更多体现在框架内部,但从开发者的角度来看,减少不必要的计算和渲染可以帮助提高性能。例如,使用 computed
属性而不是方法来缓存计算结果:
import { computed } from 'vue';export default {setup() {const count = ref(0);const doubleCount = computed(() => count.value * 2);return {count,doubleCount};}
};
TypeScript 支持
Vue 2
- 类型支持:虽然可以结合 TypeScript 使用,但不是从一开始就设计好的。
Vue 3
- 全面支持:核心库完全用 TypeScript 编写,提供了强大的类型定义和支持。
示例:Vue 3 中使用 TypeScript
import { defineComponent, ref } from 'vue';export default defineComponent({name: 'MyComponent',props: {msg: {type: String as PropType<string>,required: true}},setup(props) {const count = ref<number>(0);return {count,increment: () => count.value++};}
});
包大小
Vue 2
- 体积问题:随着功能的增加,Vue 2 的核心库体积也在增大。
Vue 3
- 模块化设计:通过 tree-shaking 技术,Vue 3 能够只打包实际使用的代码,显著减小了最终打包文件的体积。
示例:Vue 3 中的按需加载
// 只导入需要的部分
import { createApp, ref } from 'vue';
组件注册与全局配置
Vue 2
- 组件注册:可以使用
Vue.component
注册全局组件,或者在单文件组件中通过components
选项注册局部组件。 - 全局配置:如全局事件总线、全局过滤器等,通常通过
Vue.prototype
或者Vue.mixin
实现。
Vue 3
- 组件注册:推荐使用
app.component
来注册全局组件,局部组件仍然可以通过components
选项注册。 - 全局配置:不再推荐使用
Vue.prototype
或Vue.mixin
,而是提供了新的 API 如app.config.globalProperties
和provide/inject
来实现类似功能。
示例:Vue 3 中的全局属性
import { createApp } from 'vue';
import App from './App.vue';const app = createApp(App);// 添加全局属性或方法
app.config.globalProperties.$globalMethod = () => {console.log('This is a global method');
};app.mount('#app');
插件系统
Vue 2
- 插件安装:通过
Vue.use(plugin)
安装插件,插件可以添加全局组件、指令、混入等。
Vue 3
- 插件安装:依然使用
app.use(plugin)
安装插件,但插件的设计更加模块化,鼓励按需加载和更细粒度的功能分割。
示例:Vue 3 中的插件
// 插件定义
export default {install(app, options) {// 添加一个全局方法app.config.globalProperties.$myPluginMethod = function() {console.log('Plugin method called');};// 添加一个全局指令app.directive('focus', {mounted(el) {el.focus();}});}
};// 使用插件
import myPlugin from './plugins/myPlugin';const app = createApp(App);
app.use(myPlugin);
app.mount('#app');
指令系统
Vue 2
- 自定义指令:通过
Vue.directive
或者在组件内部使用directives
选项来定义自定义指令。
Vue 3
- 自定义指令:仍然支持自定义指令,但 API 略有变化,现在是通过
app.directive
来定义。此外,钩子函数的名称也做了调整(例如,bind
改为mounted
)。
示例:Vue 3 中的自定义指令
import { createApp } from 'vue';const app = createApp({});app.directive('colorize', {mounted(el, binding) {el.style.color = binding.value || 'red'; // 默认颜色为红色}
});app.mount('#app');// 在模板中使用
<template><p v-colorize="'blue'">这段文本应该是蓝色。</p>
</template>
自定义渲染器
Vue 2
- 自定义渲染器:如果需要创建自定义渲染器(例如用于不同的 DOM 环境),则需要从头开始编写,这相对复杂。
Vue 3
- 自定义渲染器:引入了
@vue/runtime-core
和@vue/runtime-dom
,使得创建自定义渲染器变得更加简单和模块化。开发者可以利用这些包提供的工具函数快速搭建适合特定环境的渲染逻辑。
示例:Vue 3 中的自定义渲染器
虽然这个例子较为复杂,但它展示了如何创建一个简单的自定义渲染器:
import { createRenderer } from '@vue/runtime-core';const renderer = createRenderer({createElement(type) {return document.createElement(type);},patchProp(el, key, prevValue, nextValue) {if (key.startsWith('on')) {const event = key.slice(2).toLowerCase();el.addEventListener(event, nextValue);} else {if (nextValue == null) {el.removeAttribute(key);} else {el.setAttribute(key, nextValue);}}},insert(child, parent, anchor = null) {parent.insertBefore(child, anchor);},remove(child) {const parent = child.parentNode;if (parent) {parent.removeChild(child);}},setElementText(node, text) {node.textContent = text;}
});renderer.createApp(App).mount(document.querySelector('#app'));
响应式数据类型
Vue 2
- 响应式数据类型:仅限于对象和数组。
Vue 3
- 响应式数据类型:除了对象和数组外,还支持原始类型的响应式包装(如
ref
和reactive
)。这允许对基本类型(如数字、字符串)进行响应式处理。
示例:Vue 3 中的 ref
和 reactive
import { ref, reactive } from 'vue';// 使用 ref 包装基本类型
const count = ref(0);// 使用 reactive 包装对象
const state = reactive({message: 'Hello, Vue!',items: []
});// 更新响应式数据
count.value++;
state.items.push('New Item');
错误处理与调试
Vue 2
- 错误处理:主要依赖于开发者手动捕获错误并在代码中处理,Vue Devtools 提供了一些基本的帮助。
Vue 3
- 错误处理:增强了内置的错误处理机制,提供了更友好的错误捕获和报告方式。同时,Vue Devtools 也得到了显著改进,增加了更多调试选项,如时间旅行调试、性能分析等。
示例:Vue 3 中的错误处理
import { createApp } from 'vue';const app = createApp(App);// 设置全局错误处理器
app.config.errorHandler = (err, vm, info) => {console.error(`Error in ${info}: ${err.message}`);
};app.mount('#app');
插槽(Slots)
Vue 2
- 语法多样:既有具名插槽也有作用域插槽,存在多种语法形式。
Vue 3
- 统一语法:
v-slot
成为了指定作用域插槽的唯一方式。
示例:Vue 3 中的作用域插槽
<!-- 父组件 -->
<template><child-component v-slot="slotProps">{{ slotProps.message }}</child-component>
</template><!-- 子组件 -->
<template><slot :message="msg"></slot>
</template><script>
export default {data() {return {msg: 'Hello from child'};}
};
</script>
新增功能
Vue 3
- Teleport:用于解决弹出层等场景下的 DOM 结构问题。
- Suspense:用于等待异步依赖加载完成。
示例:使用 Teleport 和 Suspense
<!-- 使用 Teleport 将内容移动到 body -->
<template><teleport to="body"><div id="modal">Modal content</div></teleport>
</template><script>
import { defineAsyncComponent } from 'vue';export default {components: {AsyncComponent: defineAsyncComponent(() => import('./components/AsyncComponent.vue'))}
};
</script><!-- 使用 Suspense 等待异步组件加载 -->
<template><suspense><template #default><async-component /></template><template #fallback><div>Loading...</div></template></suspense>
</template>
移除的功能
Vue 3
.native
修饰符:移除,现在可以直接在自定义组件上监听原生事件。- keyCode 事件修饰符:移除,推荐使用键盘事件对象进行键码判断。
- 过滤器:移除,鼓励使用计算属性或其他替代方案。
示例:Vue 3 中处理键盘事件
<template><input @keyup.enter="submitForm" />
</template><script>
export default {methods: {submitForm(event) {if (event.key === 'Enter') {// 处理表单提交逻辑}}}
};
</script>
其他改进
Vue 3
- 调试工具:Vue Devtools 得到了增强,提供了更多调试选项。
- SSR 支持:改善了服务器端渲染的支持。
- 错误处理:提供了更友好的错误捕获和报告机制。
示例:Vue 3 中的全局错误处理
import { createApp } from 'vue';const app = createApp(App);app.config.errorHandler = (err, vm, info) => {// 处理错误console.error(`Error in ${info}: ${err.message}`);
};app.mount('#app');
相关文章:
Vue2和Vue3的区别
响应式系统 Vue 2 技术基础:使用 Object.defineProperty 实现响应式。局限性: 无法监听新增属性:如果在创建实例后添加新属性,这些属性不会自动成为响应式的。数组变更检测问题:直接通过索引设置值或长度不会触发更新…...
JavaEE-经典多线程样例
文章目录 单例模式设计模式初步引入为何存在单例模式饿汉式单例模式饿汉式缺陷以及是否线程安全懒汉式单例模式基础懒汉式缺陷以及是否线程安全懒汉式单例模式的改进完整代码(变量volatile) 阻塞队列生产者消费者模型生产者消费者模型的案例以及优点请求与响应案例解耦合削峰填…...
Android显示系统(04)- OpenGL ES - Shader绘制三角形
一、前言: OpenGL 1.0采用固定管线,OpenGL 2.0以上版本重要的改变就是采用了可编程管线,Shader 编程是指使用着色器(Shader)编写代码来控制图形渲染管线中特定阶段的处理过程。在图形渲染中,着色器是在 GP…...
PMP–一、二、三模、冲刺–分类–10.沟通管理
文章目录 技巧十、沟通管理 一模10.沟通管理--1.规划沟通管理--文化意识--军事背景和非军事背景人员有文化差异5、 [单选] 项目团队由前军事和非军事小组成员组成。没有军事背景的团队成员认为前军事团队成员在他们的项目方法中过于结构化和僵化。前军事成员认为其他团队成员更…...
flutter windows 使用c++、dll等实践记录
在flutter的windows平台引入dll文件 https://juejin.cn/post/7223676609794015287 google官方说法(感觉不太实用) https://groups.google.com/a/dartlang.org/g/misc/c/fyh2W38AEVo Using a C DLL in Flutter Windows desktop app(未尝试&…...
JUnit介绍:单元测试
1、什么是单元测试 单元测试是针对最小的功能单元编写测试代码(Java 程序最小的功能单元是方法)单元测试就是针对单个Java方法的测试。 2、为什么要使用单元测试 确保单个方法运行正常; 如果修改了代码,只需要确保其对应的单元…...
电脑插入耳机和音响,只显示一个播放设备
1. 控制面板-硬件和声音-Realtek高清音频-扬声器-设备高级设置-播放设备里选择使用前部和后部输出设备同时播放两种不同的音频流 在声音设置中就可以看到耳机播放选项...
【每日刷题】Day162
【每日刷题】Day162 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 3302. 字典序最小的合法序列 - 力扣(LeetCode) 2. 44. 通配符匹配 - 力扣&…...
使用 EasyExcel 实现高效的 Excel 读写操作
在日常开发中,Excel 文件的读写操作是一个常见的需求。EasyExcel 是阿里巴巴开源的一个高性能、易用的 Excel 读写库,可以大幅提高处理 Excel 文件的效率。它通过事件驱动模型优化了大数据量 Excel 的读写性能,非常适合处理大文件或高并发场景…...
千益畅行,旅游卡有些什么优势?
千益畅行共享旅游卡是一种创新的旅游服务模式,旨在通过整合各类旅游资源,为用户提供一站式的旅游解决方案。这张旅游卡支持2至6人同行,涵盖了接机、酒店、用餐、大巴、导游、景区门票等服务,用户只需自行承担往返交通费用即可享受…...
Hive分区裁剪(Partition Pruning)详解
Hive分区裁剪是一种优化技术,旨在查询时只读取与条件匹配的分区,从而减少不必要的数据扫描。这种机制依赖于分区表的设计和查询优化器的工作,特别是在处理大规模数据时,分区裁剪可以显著提高查询性能。 1. 什么是分区裁剪…...
云原生数据库 PolarDB
PolarDB 是阿里云推出的一款云原生数据库,旨在为企业提供高性能、高可靠性的数据库解决方案。它基于云计算环境设计,特别适用于云上的大规模数据处理和存储需求。PolarDB 是一种兼具关系型数据库(RDS)和分布式数据库特性的新型数据…...
数据库原理-期末基础知识
1、数据库管理系统有哪些功能? 数据定义功能、数据操作功能、数据库的运行管理、数据库的建立与维护。 2、数据库设计分哪几个阶段? 需求分析->概念设计->逻辑设计->物理设计->数据库实施->数据的运营与维护 3、简述三级封锁协议的内…...
Java版-速通数据结构-树基础知识
现在面试问mysql,红黑树好像都是必备问题了。动不动就让手写红黑树或者简单介绍下红黑树。然而,我们如果直接去看红黑树,可能会一下子蒙了。在看红黑树之前,需要先了解下树的基础知识,从简单到复杂,看看红黑树是在什么…...
量化交易系统开发-实时行情自动化交易-8.4.MT4/MT5平台
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来会对于MT4/MT5平台介绍。 MetaT…...
Git 的基本概念和使用方式
Git是一个分布式版本控制系统,用于跟踪文件内容的变化和协作开发。 Git的主要概念包括: 仓库(Repository):存储代码和历史记录的地方。可以是本地仓库(Local Repository)或远程仓库(…...
Conda-Pack打包:高效管理Python环境
在Python开发中,环境管理是一个不可忽视的重要环节。Conda是一个流行的包管理器和环境管理器,它允许用户创建隔离的环境,以避免不同项目之间的依赖冲突。Conda-pack是一个工具,可以帮助我们将一个conda环境打包成一个可移植文件&a…...
Python语法基础---正则表达式
🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 我们这个文章所讲述的,也是数据分析的基础文章,正则表达式 首先,我们在开始之前,引出一个问题。也是我们接下来想要解决的问题。…...
深入理解ROS中的参数服务器及其应用
深入理解ROS中的参数服务器及其应用 在Robot Operating System (ROS) 中,参数服务器(Parameter Server)是一个中心化服务,它允许节点在运行时存储和检索配置信息。这种机制是为了支持数据的共享和灵活的参数管理而设计的…...
Kafka 常见面试题深度解析
一、基础概念 1. 请简要介绍 Kafka 的基本架构。 Kafka 主要由生产者(Producer)、消费者(Consumer)、代理(Broker)、主题(Topic)和分区(Partition)等组成。…...
数学建模之熵权法
熵权法 概述 **熵权法(Entropy Weight Method,EWM)**是一种客观赋权的方法,原理:指标的变异程度越小,所包含的信息量也越小,其对应的权值应该越低(例如,如果对于所有样本而言,某项指标的值都相…...
交易所 Level-2 历史行情数据自动化导入攻略
用户部署完 DolphinDB 后,需要将历史股票数据批量导入数据库,再进行数据查询、计算和分析等操作。DolphinDB 开发了 ExchData 模块,主要用于沪深交易所 Level-2 行情原始数据的自动化导入,目前已支持的数据源包括: 沪…...
从 scratch开始构建一个最小化的 Hello World Docker 镜像-docker的镜像源头
在这篇文章中,我们将学习如何从零开始构建一个最小化的 Docker 镜像,基于 scratch 镜像,并在其中运行一个简单的 “Hello World” 程序。 Scratch 是一个空白的基础镜像,适用于构建轻量化、独立的容器。由于 scratch 不包含任何系…...
【openGauss︱PostgreSQL】openGauss或PostgreSQL查表、索引、序列、权限、函数
【openGauss︱PostgreSQL】openGauss或PostgreSQL查表、索引、序列、权限、函数 一、openGauss查表二、openGauss查索引三、openGauss查序列四、openGauss查权限五、openGauss或PostgreSQL查函数六、PostgreSQL查表七、PostgreSQL查索引八、PostgreSQL查序列九、PostgreSQL查权…...
MySQL - 性能优化
使用 Explain 进行分析 Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句。 比较重要的字段有: select_type : 查询类型,有简单查询、联合查询、子查询等 key : 使用的索引 rows : 扫描的行数 type :…...
数据结构:二叉树遍历
在 JavaScript 中实现二叉树的遍历,可以使用递归或迭代的方式。以下是三种常见的遍历方式:前序遍历(Pre-order)、中序遍历(In-order)和后序遍历(Post-order)。 定义二叉树节点类 c…...
【热门主题】000075 探索嵌入式硬件设计的奥秘
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【热…...
mac启动jmeter
// 设置使用java8,使用21版本会有问题 export JAVA_HOME/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/ export PATH$JAVA_HOME/bin:$PATH cd /Users/user/software/apache-jmeter-5.1.1 //设置不使用代理 sh jmeter -Jhttp.proxyHost -J…...
JavaScript的作用域与闭包
文章目录 一. 什么是作用域?二. var a 2是如何赋值并添加到作用域中的?三. 作用域链四. js中的各种作用域五. 闭包?六. 参考 今天开始读了《你所不知道的JavaScript(上卷)》的一部分, 自己对于 JS 的理解还是非常浅薄的; 本着学习与分享的目的, 对这本书的第一章的内容进行…...
Qt入门7——Qt事件
目录 1. Qt事件介绍: 2. 事件的处理 示例1:鼠标进入(enterEvent)与离开事件(leaveEvent) 示例2:鼠标点击事件(mousePressEvent) 示例3:鼠标移动事件(mouseMoveEvent) 3. 按键事件 4. 定时器 5. 窗口事件 1. Qt事件介绍&a…...
【Linux操作系统】多线程控制(创建,等待,终止、分离)
目录 一、线程与轻量级进程的关系二、进程创建1.线程创建线程创建函数(pthread)查看和理解线程id主线程与其他线程之间的关系 三、线程等待(回收)四、线程退出线程退出情况线程退出方法 五、线程分离线程的优点线程的缺点 一、线程…...
VR眼镜可视化编程:开启医疗信息系统新纪元
一、引言 随着科技的飞速发展,VR 可视化编程在医疗信息系统中的应用正逐渐成为医疗领域的新趋势。它不仅为医疗教育、手术培训、疼痛管理等方面带来了新的机遇,还在提升患者体验、推动医疗信息系统智能化等方面发挥着重要作用。 在当今医疗领域…...
数据结构自测题6
第7章 图 自测卷解答 一、单选题(每题1分,共16分) ( C )1. 在一个图中,所有顶点的度数之和等于图的边数的 倍。 A.1/2 B. 1 C. 2 D. 4 ( B )2. 在一个有向图中࿰…...
Marvell第四季度营收预计超预期,定制芯片需求激增
芯片制造商Marvell Technology(美满电子科技)(MRVL)在周二发布了强劲的业绩预告,预计第四季度的营收将超过市场预期,得益于企业对其定制人工智能芯片的需求激增。随着人工智能技术的快速发展,特…...
从智能合约到去中心化AI:Web3的技术蓝图
Web3正在成为互联网发展的重要方向,其核心理念是去中心化、用户主权和自治。随着区块链技术、智能合约以及人工智能(AI)等技术的发展,Web3不仅重新定义了数据存储和交易方式,还为更智能化、去中心化的数字生态系统铺平…...
opencvocr识别手机摄像头拍摄的指定区域文字,文字符合规则就语音报警
安装python,pycharm,自行安装。 Python下安装OpenCv 2.1 打开cmd,先安装opencv-python pip install opencv-python --user -i https://pypi.tuna.tsinghua.edu.cn/simple2.2 再安装opencv-contrib-python pip install opencv-contrib-python --user …...
python 笔记之线程同步和死锁
同步: 共享数据: 如果多个线程共同对某个数据修改,则可能出现不可预测的结果,为了保证数据的正确性,需要对多个数据进行同步 同步:一个一个的完成,一个做完另一个才能进来 效率会降低 使用Thre…...
解决Error resolving plugin xxx
问题信息 Error resolving plugin [id: com.android.library, version: 8.6.0] > The request for this plugin could not be satisfied because the plugin is already on the classpath with an unknown version, so compatibility cannot be checked.* Try: > Run wi…...
Word2vec、词向量是什么? |Gensim中word2vec模型的参数定义
前言: 最近在忙毕设,要学习一些AI的技术。很多资料看来看去,感觉只是在大脑皮层表面略过了一下,遂还是决定采用老方法,写博客!!!对了,我也只是一个萌新,博客的…...
<工具 Claude Desktop> 配置 MCP server 连接本地 SQLite, 本机文件夹(目录) 网络驱动器 Windows 11 系统
也是在学习中... 起因: 抖音博客 艾克AI分享 他的视频 #143《Claude开源MCP彻底打破AI的信息孤岛》 提到: Claude开源的MCP太强了,视频后面是快速演示,反正看了好几遍也没弄明白。菜单都不一样,感觉用的不是同一家 Claude. 探…...
Android10 设备死机的问题分析和解决
最近客户反馈一个问题,设备偶现死机。最后解决,在此记录。 目录 一死机的现象 二死机的类型 三 死机问题分析 1 死机现象的梳理 2 死机日志 1)日志分析一 2 日志分析二(正确方案) 一死机的现象 设备死机&#x…...
Linux操作系统性能优化
Linux操作系统性能优化 1. TCP连接出现大量ESTABLISHED连接解决方法 1. TCP连接出现大量ESTABLISHED连接解决方法 TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于…...
【图像处理】用Python和OpenCV实现简单的图像增强与特征提取
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 图像处理是计算机视觉领域的重要基础,而图像增强和特征提取是其中的关键技术。本文将详细探讨如何使用 Python 和 OpenCV 实现图像增强与特征提取。通过具体示例,我们将介绍滤波、直方图均衡化、边缘检测…...
【技术学习网站】
小黄鸭:面试鸭 - 程序员求职面试刷题神器,高频编程题目免费刷 编程导航:编程导航 - 程序员一站式编程学习交流社区,做您编程学习路上的导航员 博客园:博客园 - 开发者的网上家园 前端开发:HTTP 缓存 - H…...
程序员需要具备哪些知识?
程序员需要掌握的知识广泛而深厚,这主要取决于具体从事的领域和技术方向。不过,有些核心知识是共通的,就像建房子的地基一样,下面来讲讲这些关键领域: 1. 编程语言: 无论你是搞前端、后端、移动开发还是嵌…...
架构10-可观测性
零、文章目录 架构10-可观测性 1、可观测性 (1)可观测性的背景 **历史沿革:**可观测性最初由匈牙利数学家鲁道夫卡尔曼提出,用于线性动态控制系统。后来,该概念被引入到计算机科学中。**现代意义:**在分…...
Active RIS-Aided ISAC Systems: Beamforming Design and Performance Analysis
文章目录 II. SYSTEM MODELC. Active RIS Model III. PROBLEM FORMULATIONA. Radar Performance MetricC. Optimize Φ V. PERFORMANCE ANALYSIS OF THE RADAR SINR IN ACTIVE RIS-AIDED SENSING SYSTEMSA. Simplified System SettingB. Power Scaling Law AnalysisC. Active R…...
oracle 11g中如何快速设置表分区的自动增加
在很多业务系统中,一些大表一般通过分区表的形式来实现数据的分离管理,进而加快数据查询的速度。分区表运维管理的时候,由于人为操作容易忘记添加分区,导致业务数据写入报错。所以我们一般通过配置脚本或者利用oracle内置功能实现…...
HCIA-openGauss_1_4基本功能介绍
openGauss支持标准SQL SQL是用于访问和处理数据库的标准计算机语言,SQL标准的定义分成核心特性以及可选特性,绝大部分的数据库都没有100%支撑SQL标准。openGuass支持SQL2003标准语法,支持主备部署的高性能可用关系型数据库。openGauss数据库…...
el-menu导航三级数据结构及数据展示
1:数据展示 <el-col><el-menu:default-active"$route.path"class"el-menu-vertical-demo"routerunique-openedbackground-color"#545c64"text-color"#fff"active-text-color"#ffd04b"><div v-for"item …...