Vue配置项data
data
目录
- data
- 目录
- 类型介绍
- 关键原理
- 编译过程
- Vue2
- Vue3
📌
Vue.js
中的data
(Obj/Function)属性是Vue
实例的一个配置选项
类型介绍
-
对象式
对于根实例或者非复用组件,通常直接提供一个对象字面量作为
data
的值。在对象式中,data
属性是一个普通的对象,并且直接作为组件实例的一个属性// 对象形式 (适用于根实例或非复用组件) new Vue({data: {message: 'Hello, Vue!',count: 0,user: {name: 'John Doe',age: 30}},// 其他选项... })
- 区别:
data
是一个普通的对象,通过对象属性初始化数据 - 优点:
- 语法简洁,直观易懂。可以通过对象字面量的方式一次性定义多个属性,方便管理多个数据。
- 缺点:
- 数据共享风险:所有组件实例共享同一个数据对象,如果
data
仍然是一个纯粹的对象,当多个组件修改同一个属性时,则所有的实例将共享引用同一个数据对象!可能会造成意外的数据污染,不方便追踪数据的变化来源。
- 数据共享风险:所有组件实例共享同一个数据对象,如果
- 区别:
-
在函数式中,
data
属性是一个返回一个对象的函数。对于复用型组件(如.vue文件),推荐使用函数形式来返回一个新对象实例// 函数形式 (适用于复用组件) Vue.component('my-component', {data() {return {localMessage: 'Hello from Component!' //此处的this是Vue实例对象,data函数不能写成箭头函数,不然this会指向window};}},// 其他选项... })
- 区别:
data
是一个返回包含数据对象的函数 - 优点:
- 数据独立性:每个组件实例都有独立的数据对象,避免了数据共享风险
- 可以在函数中进行复杂的数据处理或计算,对数据进行响应式处理
- 缺点:
- 代码略显繁琐,**需要使用 **
return
关键字返回数据对象 - 不如对象式写法直观,特别是当需要定义多个属性时,需要书写更多的代码
- 代码略显繁琐,**需要使用 **
- 区别:
-
限制: 组件的定义只接受
function
-
访问与更新:
在模板中,可以通过
Mustache
语法 ({{ }}
) 来显示data
中的数据。同时,Vue
提供了响应式系统,任何通过Vue
实例方法或计算属性对data
的更改都会触发相应的视图更新 -
注意事项:
- 由
Vue
管理的函数,一定不要写箭头函数,一旦写了箭头函数,this
就不再是Vue
实例了。用来定义要在当前vue
实例中使用的数据
- 由
关键原理
Vue
实例的数据对象。Vue
将会递归将data
的property
转换为getter
/setter
,从而让data
的property
能够响应数据变化(后续添加的不会有变化,除非使用Vue.$set)。浏览器API
创建的原生对象,原型上的property
会被忽略。vue
对于数组也有特殊的变更检测机制(仅仅是修改数组的几个方法,vue
进行了重写)- 实例创建之后,可以通过
vm.$data
访问原始数据对象。Vue
实例代理了data
对象上的所有属性,因此通过vm.a
访问等同于vm.$data.a
- 以
_
或$
开头的property
不会被Vue
实例代理,因为它们可能和Vue
内置的property
、API
方法冲突。你可以使用例如vm.$data._property
的方式访问这些property
- 通过提供
data
函数,每次创建一个新实例后,能够调用data
函数,以便返回一个全新副本的初始数据对象。如果需要,可以通过将vm.$data
传入JSON.parse(JSON.stringify(...))
来获得原始数据对象的深拷贝
编译过程
📌Vue.js 中的
data
是Vue
实例的核心配置选项之一,它用于定义组件或实例的状态(数据)。在Vue
中,数据与视图是双向绑定的,这意味着当data
中的数据发生变化时,依赖这些数据的DOM
元素会自动更新;反之,用户对视图中的表单元素进行交互,也会相应地更新data
中的数据
Vue2
1. Vue 实例初始化
在创建 Vue 实例时,会调用 _init
方法,该方法会初始化各种选项,包括 data
。
Vue.prototype._init = function (options) {const vm = this;vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {});initState(vm);// ...
};
2. 初始化状态
initState
方法会根据组件选项初始化 props
、methods
、data
、computed
和 watch
。
function initState(vm) {const opts = vm.$options;if (opts.data) {initData(vm);}// ...
}
3. 初始化数据
initData
方法负责初始化 data
选项并将其转换为响应式数据。
function initData(vm) {let data = vm.$options.data;data = vm._data = typeof data === 'function' ? data.call(vm, vm) : data || {};for (const key in data) {proxy(vm, `_data`, key);}observe(data, true /* asRootData */);
}
4. 数据代理
proxy
方法将 data
对象上的属性代理到 Vue 实例上,使得可以通过 this.property
直接访问 data
中的数据。
function proxy(target, sourceKey, key) {Object.defineProperty(target, key, {configurable: true,enumerable: true,get() {return target[sourceKey][key];},set(val) {target[sourceKey][key] = val;}});
}
5. 数据观察(响应式)
observe
方法将数据对象转换为响应式对象,使用 Observer
类来实现。
function observe(value, asRootData) {if (!isObject(value) || value instanceof VNode) {return;}let ob;if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {ob = value.__ob__;} else if (shouldObserve &&(Array.isArray(value) || isPlainObject(value)) &&Object.isExtensible(value) &&!value._isVue) {ob = new Observer(value);}if (asRootData && ob) {ob.vmCount++;}return ob;
}
6. 定义响应式属性
defineReactive
方法将对象的每个属性转换为响应式,通过 Object.defineProperty
实现。
function defineReactive(obj, key, val, customSetter, shallow) {const dep = new Dep();const property = Object.getOwnPropertyDescriptor(obj, key);if (property && property.configurable === false) {return;}const getter = property && property.get;const setter = property && property.set;if ((!getter || setter) && arguments.length === 2) {val = obj[key];}let childOb = !shallow && observe(val);Object.defineProperty(obj, key, {enumerable: true,configurable: true,get() {const value = getter ? getter.call(obj) : val;if (Dep.target) {dep.depend();if (childOb) {childOb.dep.depend();if (Array.isArray(value)) {dependArray(value);}}}return value;},set(newVal) {const value = getter ? getter.call(obj) : val;if (newVal === value || (newVal !== newVal && value !== value)) {return;}if (setter) {setter.call(obj, newVal);} else {val = newVal;}childOb = !shallow && observe(newVal);dep.notify();}});
}
7. 依赖收集和变化通知
Dep
类用于依赖收集和变化通知。
class Dep {constructor() {this.id = uid++;this.subs = [];}addSub(sub) {this.subs.push(sub);}removeSub(sub) {remove(this.subs, sub);}depend() {if (Dep.target) {Dep.target.addDep(this);}}notify() {const subs = this.subs.slice();for (let i = 0, l = subs.length; i < l; i++) {subs[i].update();}}
}Dep.target = null;
8. Watcher
Watcher
类用于更新视图,当数据变化时调用更新函数。
class Watcher {constructor(vm, expOrFn, cb, options) {this.vm = vm;vm._watchers.push(this);this.getter = expOrFn;this.cb = cb;this.value = this.get();}get() {Dep.target = this;const value = this.getter.call(this.vm, this.vm);Dep.target = null;return value;}addDep(dep) {dep.addSub(this);}update() {const value = this.get();if (value !== this.value) {const oldValue = this.value;this.value = value;this.cb.call(this.vm, value, oldValue);}}
}
以下是一个简单的实现示例:
class Vue {constructor(options) {this.$options = options;this._data = options.data();this.init();}init() {initState(this);}
}function initState(vm) {let data = vm._data;for (let key in data) {proxy(vm, '_data', key);}observe(data);
}function proxy(target, sourceKey, key) {Object.defineProperty(target, key, {enumerable: true,configurable: true,get() {return target[sourceKey][key];},set(val) {target[sourceKey][key] = val;}});
}function observe(value) {if (!isObject(value)) return;new Observer(value);
}function isObject(obj) {return obj !== null && typeof obj === 'object';
}class Observer {constructor(value) {this.value = value;if (Array.isArray(value)) {} else {this.walk(value);}}walk(obj) {for (let key in obj) {defineReactive(obj, key, obj[key]);}}
}function defineReactive(obj, key, val) {const dep = new Dep();let childOb = observe(val);Object.defineProperty(obj, key, {enumerable: true,configurable: true,get() {if (Dep.target) {dep.depend();}return val;},set(newVal) {if (newVal === val) return;val = newVal;childOb = observe(newVal);dep.notify();}});
}class Dep {constructor() {this.subs = [];}addSub(sub) {this.subs.push(sub);}depend() {if (Dep.target) {Dep.target.addDep(this);}}notify() {const subs = this.subs.slice();for (let i = 0; i < subs.length; i++) {subs[i].update();}}
}Dep.target = null;class Watcher {constructor(vm, expOrFn, cb) {this.vm = vm;this.getter = expOrFn;this.cb = cb;this.value = this.get();}get() {Dep.target = this;const value = this.getter.call(this.vm, this.vm);Dep.target = null;return value;}addDep(dep) {dep.addSub(this);}update() {const value = this.get();if (value !== this.value) {const oldValue = this.value;this.value = value;this.cb.call(this.vm, value, oldValue);}}
}const vm = new Vue({data() {return {message: 'Hello Vue!'};}
});new Watcher(vm, function () {console.log(`Message is: ${this.message}`);
}, (newVal, oldVal) => {console.log(`Updated message from ${oldVal} to ${newVal}`);
});vm.message = 'Hello World!';
这个示例展示了 Vue 2 中 data
选项的底层实现逻辑,包括响应式系统的核心原理。
Vue3
Vue 的 data
选项底层逻辑主要涉及响应式系统的实现,它包括数据初始化、数据代理、依赖收集和变化通知等。以下是详细的实现过程:
1. 数据初始化
在 Vue 实例初始化时,会调用 _init
方法,其中会初始化组件的 data
选项。
Vue.prototype._init = function (options) {const vm = this;// 合并选项vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {});// 初始化数据initState(vm);// ...
};
2. 初始化状态
initState
方法会根据组件选项初始化 props
、methods
、data
、computed
和 watch
。
function initState(vm) {const opts = vm.$options;if (opts.data) {initData(vm);}// ...
}
3. 初始化数据
initData
方法负责初始化 data
选项并将其转换为响应式数据。
function initData(vm) {let data = vm.$options.data;// 支持函数形式的 datadata = vm._data = typeof data === 'function' ? data.call(vm, vm) : data || {};// 将 data 代理到 vm 上for (const key in data) {proxy(vm, `_data`, key);}// 观察数据,转换为响应式observe(data, true);
}
4. 数据代理
proxy
方法将 data
对象上的属性代理到 Vue 实例上,使得可以通过 this.property
直接访问 data
中的数据。
function proxy(target, sourceKey, key) {Object.defineProperty(target, key, {configurable: true,enumerable: true,get() {return target[sourceKey][key];},set(val) {target[sourceKey][key] = val;}});
}
5. 数据观察(响应式)
observe
方法将数据对象转换为响应式对象,使用 Observer
类来实现。
function observe(value, asRootData) {if (!isObject(value)) return;let ob;if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {ob = value.__ob__;} else {ob = new Observer(value);}return ob;
}class Observer {constructor(value) {this.value = value;this.dep = new Dep();def(value, '__ob__', this);if (Array.isArray(value)) {// 处理数组protoAugment(value, arrayMethods);this.observeArray(value);} else {this.walk(value);}}walk(obj) {for (const key in obj) {defineReactive(obj, key);}}observeArray(items) {for (let i = 0, l = items.length; i < l; i++) {observe(items[i]);}}
}
6. 定义响应式属性
defineReactive
方法将对象的每个属性转换为响应式,通过 Object.defineProperty
实现。
function defineReactive(obj, key, val) {const dep = new Dep();const property = Object.getOwnPropertyDescriptor(obj, key);if (property && property.configurable === false) return;const getter = property && property.get;const setter = property && property.set;if ((!getter || setter) && arguments.length === 2) {val = obj[key];}let childOb = observe(val);Object.defineProperty(obj, key, {enumerable: true,configurable: true,get() {const value = getter ? getter.call(obj) : val;if (Dep.target) {dep.depend();if (childOb) {childOb.dep.depend();if (Array.isArray(value)) {dependArray(value);}}}return value;},set(newVal) {const value = getter ? getter.call(obj) : val;if (newVal === value || (newVal !== newVal && value !== value)) return;if (setter) {setter.call(obj, newVal);} else {val = newVal;}childOb = observe(newVal);dep.notify();}});
}
7. 依赖收集和变化通知
Dep
类用于依赖收集和变化通知。
class Dep {constructor() {this.subs = [];}addSub(sub) {this.subs.push(sub);}removeSub(sub) {remove(this.subs, sub);}depend() {if (Dep.target) {Dep.target.addDep(this);}}notify() {const subs = this.subs.slice();for (let i = 0, l = subs.length; i < l; i++) {subs[i].update();}}
}Dep.target = null;
8. Watcher
Watcher
类用于更新视图,当数据变化时调用更新函数。
class Watcher {constructor(vm, expOrFn, cb, options) {this.vm = vm;vm._watchers.push(this);this.getter = expOrFn;this.cb = cb;this.value = this.get();}get() {Dep.target = this;const value = this.getter.call(this.vm, this.vm);Dep.target = null;return value;}addDep(dep) {dep.addSub(this);}update() {const value = this.get();if (value !== this.value) {const oldValue = this.value;this.value = value;this.cb.call(this.vm, value, oldValue);}}
}
以下是一个简单的实现示例:
// 模拟 Vue
class Vue {constructor(options) {this.$options = options;this._data = options.data();this.init();}init() {initState(this);}
}function initState(vm) {let data = vm._data;// 代理for (let key in data) {proxy(vm, '_data', key);}// 观察数据observe(data);
}function proxy(target, sourceKey, key) {Object.defineProperty(target, key, {enumerable: true,configurable: true,get() {return target[sourceKey][key];},set(val) {target[sourceKey][key] = val;}});
}function observe(value) {if (!isObject(value)) return;new Observer(value);
}function isObject(obj) {return obj !== null && typeof obj === 'object';
}class Observer {constructor(value) {this.value = value;if (Array.isArray(value)) {// 处理数组} else {this.walk(value);}}walk(obj) {for (let key in obj) {defineReactive(obj, key, obj[key]);}}
}function defineReactive(obj, key, val) {const dep = new Dep();let childOb = observe(val);Object.defineProperty(obj, key, {enumerable: true,configurable: true,get() {if (Dep.target) {dep.depend();}return val;},set(newVal) {if (newVal === val) return;val = newVal;childOb = observe(newVal);dep.notify();}});
}class Dep {constructor() {this.subs = [];}addSub(sub) {this.subs.push(sub);}depend() {if (Dep.target) {Dep.target.addDep(this);}}notify() {const subs = this.subs.slice();for (let i = 0; i < subs.length; i++) {subs[i].update();}}
}Dep.target = null;class Watcher {constructor(vm, expOrFn, cb) {this.vm = vm;this.getter = expOrFn;this.cb = cb;this.value = this.get();}get() {Dep.target = this;const value = this.getter.call(this.vm, this.vm);Dep.target = null;return value;}addDep(dep) {dep.addSub(this);}update() {const value = this.get();if (value !== this.value) {const oldValue = this.value;this.value = value;this.cb.call(this.vm, value, oldValue);}}
}// 使用示例
const vm = new Vue({data() {return {message: 'Hello Vue!'};}
});new Watcher(vm, function () {console.log(`Message is: ${this.message}`);
}, (newVal, oldVal) => {console.log(`Updated message from ${oldVal} to ${newVal}`);
});vm.message = 'Hello World!';
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
Vue配置项data
data 目录 data 目录类型介绍关键原理编译过程 Vue2Vue3 📌Vue.js 中的 data(Obj/Function)属性是 Vue 实例的一个配置选项 类型介绍 对象式 对于根实例或者非复用组件,通常直接提供一个对象字面量作为 data 的值。在对象式中…...
![](https://img-blog.csdnimg.cn/direct/d3da6c7299fb4b0b808762079b7952f1.png)
在IDEA 2024.1.3 (Community Edition)中创建Maven项目
本篇博客承继自博客:Windows系统Maven下载安装-CSDN博客 Maven版本:maven-3.9.5 修改设置: 首先先对Idea的Maven依赖进行设置;打开Idea,选择“Costomize”,选择最下边的"All settings" 之后找…...
![](https://img-blog.csdnimg.cn/direct/df25fbf59f2d49d6bb061033d06b0d06.png#pic_center)
动手学深度学习(Pytorch版)代码实践 -卷积神经网络-28批量规范化
28批量规范化 """可持续加速深层网络的收敛速度""" import torch from torch import nn import liliPytorch as lp import matplotlib.pyplot as pltdef batch_norm(X, gamma, beta, moving_mean, moving_var, eps, momentum):""&quo…...
![](https://img-blog.csdnimg.cn/direct/14c0985bfee64e6da5c1aad1c9dca81d.png)
Apache Paimon系列之:Append Table和Append Queue
Apache Paimon系列之:Append Table和Append Queue 一、Append Table二、Data Distribution三、自动小文件合并四、Append Queue五、压缩六、Streaming Source七、Watermark Definition八、Bounded Stream 一、Append Table 如果表没有定义主键,则默认为…...
![](https://img-blog.csdnimg.cn/direct/935fec7f3f5b4a0fae2b7afb1c3cf7ba.gif)
Vue使用vue-esign实现在线签名 加入水印
Vue在线签名 一、目的二、样式三、代码1、依赖2、代码2.1 在线签名组件2.1.1 基础的2.1.2 携带时间水印的 2.2父组件 一、目的 又来了一个问题,直接让我在线签名(还不能存储base64),并且还得上传,我直接***违禁词。 好…...
![](https://www.ngui.cc/images/no-images.jpg)
与码无关:分数限制下,选好专业还是选好学校?
本文的目标读者:24届的高考生和家长。 写这篇非技术性文章,是因为我看到了24届考生和21年的我同样迷茫。 事先声明,本文带有强烈的个人思考色彩,可能会引起不适,如有不同观点,欢迎在评论区讨论。 一、前言…...
![](https://www.ngui.cc/images/no-images.jpg)
什么是负载均衡技术?
随着网络技术的快速发展,互联网行业也越来越广泛,人们的日常生活中也离不开网络技术,大量的用户进行浏览访问网站时,企业会使用负载均衡技术,降低当前网站的负载,以此来提高网站的访问速度。 今天小编就来给…...
![](https://www.ngui.cc/images/no-images.jpg)
存在重复元素Ⅱ python3
存在重复元素Ⅱ 问题描述解题思路代码实现复杂度 问题描述 给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在,返回 true ;否则ÿ…...
![](https://img-blog.csdnimg.cn/img_convert/041a9de750fa5c32d4a18e51f217f9bf.gif)
【CV炼丹师勇闯力扣训练营 Day13:§6二叉树1】
CV炼丹师勇闯力扣训练营 代码随想录算法训练营第13天 二叉树的递归遍历 二叉树的迭代遍历、统一迭代 二叉树的层序遍历 一、二叉树的递归遍历(深度优先搜索) 【递归步骤】 1.确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理…...
![](https://www.ngui.cc/images/no-images.jpg)
代码随想录算法训练营第46天 [ 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 123.买卖股票的最佳时机III ]
代码随想录算法训练营第46天 [ 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 123.买卖股票的最佳时机III ] 一、121. 买卖股票的最佳时机 链接: 代码随想录. 思路:dp[i][0] 第i天持有股票的最大利润 dp[i][1] 第i天不持有股票的最大利润 做题状态:…...
![](https://img-blog.csdnimg.cn/direct/0976a995c209470c9352dadca86b639d.png)
基于IDEA的Maven简单工程创建及结构分析
目录 一、用 mvn 命令创建项目 二、用 IDEA 的方式来创建 Maven 项目。 (1)首先在 IDEA 下的 Maven 配置要已经确保完成。 (2)第二步去 new 一个 project (创建一个新工程) (3)…...
![](https://img-blog.csdnimg.cn/direct/668fd21ddd9541ccb463518259aed30b.png)
解锁空间数据奥秘:ArcGIS Pro与Python双剑合璧,处理表格数据、矢量数据、栅格数据、点云数据、GPS数据、多维数据以及遥感云平台数据等
ArcGISPro提供了用户友好的图形界面,适合初学者快速上手进行数据处理和分析。它拥有丰富的工具和功能,支持各种数据格式的处理和分析,适用于各种规模的数据处理任务。ArcGISPro在地理信息系统(GIS)领域拥有广泛的应用&…...
![](https://img-blog.csdnimg.cn/direct/45f04b1f208142c08c19344228738b5e.png)
后端路线指导(4):后端春招秋招经验分享
后端春招&秋招经验分享 春招(暑期实习) /秋招是应届生非常重要的应聘时间,每一个想就业的同学一定要有所了解! 本篇内容,老白将与大家分享暑期实习和秋招如何应对招聘的个人经验,希望每个同学看完都能有所收获! 首先说明一下老白对于面试核心竞争力的…...
![](https://www.ngui.cc/images/no-images.jpg)
面完小红书算法岗,心态崩了。。。
暑期实习基本结束了,校招即将开启。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。提前准备才是完全之策。 最近,我们又陆续整理了很多大厂的面试题,…...
Android 断点续传进阶之多线程下载
今天继续下载的风骚走位内容—多线程多文件断点续传 Android 断点续传基础之单线程下载:http://blog.csdn.net/qq_27489007/article/details/53897653 效果图: 文件关系: 所需内容 多文件下载列表的显示 启动多个线程分段下载 使用通知栏…...
![](https://img-blog.csdnimg.cn/img_convert/c606cff0483a91e71c3c7d8a1b8798bb.gif)
Python爬虫学习 | Scrapy框架详解
一.Scrapy框架简介 何为框架,就相当于一个封装了很多功能的结构体,它帮我们把主要的结构给搭建好了,我们只需往骨架里添加内容就行。scrapy框架是一个为了爬取网站数据,提取数据的框架,我们熟知爬虫总共有四大部分&am…...
![](https://img-blog.csdnimg.cn/img_convert/65fd31cc1556a399b2513b9a9e994e0a.png)
用户态协议栈05—架构优化
优化部分 添加了in和out两个环形缓冲区,收到数据包后添加到in队列;经过消费者线程处理之后,将需要发送的数据包添加到out队列。添加数据包解析线程(消费者线程),架构分层 #include <rte_eal.h> #inc…...
![](https://www.ngui.cc/images/no-images.jpg)
模拟退火算法
模拟退火算法(Simulated Annealing, SA)是一种用于全局优化问题的概率搜索算法,其灵感来自于金属退火过程。在金属退火中,材料被加热到高温,然后缓慢冷却,以减少其晶格中的缺陷并达到最小能量状态。模拟退火…...
![](https://www.ngui.cc/images/no-images.jpg)
Java匿名类
Java 匿名类是一种特殊的内部类,它没有名字,并且通常用来简化代码实现,尤其是在实现接口或者抽象类的实例时。匿名类可以在实例化时定义其行为,而不需要创建单独的类文件。 匿名类的特点 没有名字:匿名类是没有名字的…...
![](https://img-blog.csdnimg.cn/img_convert/1d804aa8063db3b9e7b3f2dddc908ec7.png)
G7易流赋能化工物流,实现安全、环保与效率的共赢
近日,中国物流与采购联合会在古都西安举办了备受瞩目的第七届化工物流安全环保发展论坛。以"坚守安全底线,追求绿色发展,智能规划化工物流未来"为主题,该论坛吸引了众多政府部门、行业专家和企业代表的参与。G7易流作为…...
![](https://www.ngui.cc/images/no-images.jpg)
y=sin(2x)
函数 \( y \sin(2x) \) 是一个正弦函数,其中 \( x \) 是自变量,\( y \) 是因变量。这个函数描述了一个周期性波动的波形,其特点是: 1. **振幅**:正弦函数的振幅是 1,这意味着波形在 \( y \) 轴上的最大值…...
![](https://img-blog.csdnimg.cn/direct/2741d56138e9490dab94ff8b52f66292.png)
快捷方式(lnk)--加载HTA-CS上线
免责声明:本文仅做技术交流与学习... 目录 CS: HTA文档 文件托管 借助mshta.exe突破 本地生成lnk快捷方式: 非系统图标路径不同问题: 关于lnk的上线问题: CS: HTA文档 配置监听器 有效载荷---->HTA文档--->选择监听器--->选择powershell模式----> 默认生成一…...
![](https://img-blog.csdnimg.cn/direct/54d62452204c400ca46787734d7a5280.png#pic_center)
从同—视角理解扩散模型(Understanding Diffusion Models A Unified Perspective)
从同—视角理解扩散模型 Understanding Diffusion Models A Unified Perspective【全公式推导】【免费视频讲解】 B站视频讲解 视频的论文笔记 从同一视角理解扩散模型【视频讲解笔记】 配合视频讲解的同步笔记。 整个系列完整的论文笔记内容如下,仅为了不用—一回复…...
![](https://img-blog.csdnimg.cn/direct/0c1d4505e9db43e59b8fe765b7fb59cb.png)
docker 基本用法及跨平台使用
一、Docker的优点 docker 主要解决的问题就是程序开发过程中编译和部署中遇到的环境配置的问题。 1.1 Docker与其他虚拟机层次结构的区别** 运行程序重点关注点在于环境。 VM虚拟机是基于Hypervisor虚拟化服务运行的。 Docker是基于内核的虚拟化技术实现的。 1.2 Docker的技…...
![](https://img-blog.csdnimg.cn/direct/385673353c0f4257b756c114550f7b9f.png)
Vscode远程ubuntu
远程连接 到这里vscode远程到ubuntu和关闭远程连接,已完成 配置python环境 在远程目录下新建.vscode隐藏文件夹,文件夹里新建一个 settings.json 文件, 先远程服务器看下conda下的python虚拟环境位置 settings.json位置及内容如下 测试pyt…...
![](https://img-blog.csdnimg.cn/direct/a984d89bf30543d88fd8562da21222f3.png)
SHA256 安全散列算法加速器实验
1、SHA256 介绍 SHA256 加速器是用来计算 SHA-256 的计算单元, SHA256 是 SHA-2 下细分出的一种算法。 SHA-2 名称来自于安全散列算法 2 (英语: Secure Hash Algorithm 2 )的缩写,一种密码散列函 数算法标准…...
![](https://www.ngui.cc/images/no-images.jpg)
Elasticsearch-ES查询单字段去重
ES 语句 整体数据 GET wkl_test/_search {"query": {"match_all": {}} }结果: {"took" : 123,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0…...
![](https://img-blog.csdnimg.cn/img_convert/68844cc171a252a17e80a5f4c40313a8.png)
【Apache Doris】周FAQ集锦:第 7 期
【Apache Doris】周FAQ集锦:第 7 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和…...
![](https://img-blog.csdnimg.cn/img_convert/a104573d7b36e85ba0782e784bfeeb6d.jpeg)
EE trade:炒伦敦金的注意事项及交易指南
在贵金属市场中,伦敦金因其高流动性和全球认可度,成为广大投资者的首选。然而,在炒伦敦金的过程中,投资者需要注意一些关键点。南华金业小编带您一起来看看。 国际黄金报价 一般国际黄金报价会提供三个价格: 买价(B…...
![](https://img-blog.csdnimg.cn/direct/38e0bf1532c3440f84103ab74f684124.png)
JAVA医院绩效考核系统源码 功能特点:大型医院绩效考核系统源码
JAVA医院绩效考核系统源码 功能特点:大型医院绩效考核系统源码 医院绩效管理系统主要用于对科室和岗位的工作量、工作质量、服务质量进行全面考核,并对科室绩效工资和岗位绩效工资进行核算的系统。医院绩效管理系统开发主要用到的管理工具有RBRVS、DRGS…...
![](https://common.cnblogs.com/images/copycode.gif)
电子商务网站建设前的分析/百度seo搜索
1、问题描述: 最近百度总爱做一些破坏用户信任度的事——文库金币变券、网盘限速,吓得我赶紧想办法把存在百度云音乐中的歌曲下载到本地。 http://yinyueyun.baidu.com/ 可问题是云音乐中并没有批量下载,而上面我总共存了700多首音乐…...
想要将网站信息插到文本链接怎么做/如何建站
如果启动前不对Linux内核做任何更改,那么Redis启动会报出警告,共三个:如下图所示第一个警告:The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.意思是…...
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
一个网站需要怎么做/免费做网站网站
输入一个无向图<V,E> V<1e5, E<3e5 现在另外给k条边(u1,vs[k],wy[k]) 问在不影响从结点1出发到所有结点的最短路的前提下,最多可以删除k条边的多少条 跑最短路的时候维护或者统计就好了 一开始用spfa.然后TLE 45...好久没写 Dij堆优化 ... p.s.优…...
![](/images/no-images.jpg)
做网站的故意给中病毒/网站seo诊断分析报告
# 准备工作 参见章节: [准备工作](https://tcaplusdb.tencent.com/UserGuide/04TcaplusDB SDK/03TDR表SDK/02TDR表JavaSDK/02TDR表JavaSDK示例代码/01准备工作.html)。 # 示例代码 注意:按部分Key字段值读取数据之前,先要创建以对应键值为…...
![](/images/no-images.jpg)
网站收录网/中国搜索网站排名
import osprint(os.getcwd())os.chdir(C:\Python33\HeadFirstPython\hfpy_code\chapter6) #将工作空间修改为文件所在的目录#定义函数get_filedata从文件中取值def get_filedata(filename):try:with open(filename) as f: #with语句打开和自动关闭文件dataf.readline() #从文件…...
![](https://img-blog.csdnimg.cn/img_convert/dd87b9956d6b3242262fdd3f40debe71.png)
企业网站最底下做的是什么/营销咨询公司排名
java selenium 开发环境搭建很多同学问我java selenium的开发环境怎么搭建,在这里简要说明一下。安装jdk这个自己一定要会下载IDE对于初学者来说java IDE无疑是消除初学者恐惧症的绝佳工具。很诚实的说intellij比eclipse要好用,不过对于初学者来说eclips…...