拷贝

nova虚拟机迁移一

a 夏天 提交于 2020-02-01 22:22:20
虚拟机迁移 虚拟机迁移也就是把一台虚拟机从原计算节点迁移到一个新的计算节点,并且能够保证虚拟机在新的计算节点可以正常工作, 虚拟机的迁移根据虚拟机的运行状态可以分为两种1、动态迁移;2、静态迁移 虚拟机动态迁移 虚拟机的动态迁移又被称之为热迁移,或者被称之为在线迁移。 虚拟机的动态迁移,便是在虚拟机处于运行中的状态下,在保证虚拟机业务不中断的情况下,将虚拟机从源计算节点迁移到目标计算节点,整个过程对用户来说没有较大影响,用户的业务工作正常进行。 迁移过程中,主要处理的是虚拟机的数据在线迁移,而虚拟机的数据主要包含三个方面 虚拟机内存数据 虚拟机在开机运行状态,内存会保留系统运行中的所有所需数据,所有程序的运行都是在内存中进行的,因此内存的数据对虚拟机的影响非常大。 虚拟机设备状态 及虚拟机运行过程中的所有相关设备的状态标记,例如CPU寄存器、显存等。 虚拟机磁盘文件 虚拟机的磁盘文件,便是虚拟机的系统文件,相当于PC的硬盘。是虚拟机所有数据的保存地方。 动态迁移根据虚拟机的系统盘磁盘文件是否在共享存储上分为基于共享存储的动态迁移和基于本地存储的块迁移。 基于共享存储的动态迁移 基于共享存储的动态迁移,也就是虚拟机的磁盘文件在共享存储上,并没有存放在虚拟机所在的计算节点上,而是通过一定的协议(网络协议、iscsi协议)关联到计算节点上并提供给虚拟机使用。

c++深拷贝/浅拷贝

独自空忆成欢 提交于 2020-02-01 16:30:18
  拷贝构造函数,是一种特殊的构造函数,它由 编译器 调用来完成一些基于同一类的其他对象的构建及初始化。 其唯一的参数(对象的引用)是不可变的(const类型) 。此函数经常用在函数调用时用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。 如果可以的话 ,它将用常量方式调用,另外,也可以用非常量方式调用。 一.什么时候对调用拷贝构造函数? 对象以值传递的方式传入函数参数 对象以值传递的方式从函数返回 对象需要通过另外一个对象进行初始化 二. 浅拷贝(位拷贝)和深拷贝   浅拷贝:也称位拷贝,编译器只是直接将指针的值拷贝过来,结果多个对象共用同一块内存,当一个对象将这块内存释放掉之后,另一些对象不知道该块空间已经还给了系统,以为还有效,所以在对这段内存进行操作的时候,发生了访问违规。   深拷贝: 如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配 防止默认拷贝发生   通过对对象复制的分析,我们发现对象的复制大多在进行“值传递”时发生,这里有一个小技巧可以防止按值传递——声明一个私有拷贝构造函数。甚至不必去定义这个拷贝构造函数,这样因为拷贝构造函数是私有的,如果用户试图按值传递或函数返回该类对象,将得到一个编译错误,从而可以避免按值传递或返回对象。 // 防止按值传递 class CExample { private: int a;

javascript中的对象拷贝

≡放荡痞女 提交于 2020-02-01 08:02:35
js中的数据类型 在介绍javascript中的对象的拷贝之前,我先介绍一个基础的东西,javascript中的数据类型。 我们做前端的应该都知到在es6 之前,javascript中的数据类型 Boolean 、 Number 、 String 、 Undefined 、 Object 、 Null ,后来在es6 中又引入了一种新的数据类型为: Symbol 。而这些数据类型又被分为基本数据类型和引用数据类型,基本数据类型存储在栈中;引用数据类型存储在堆中。其中基本数据类型包括有: Boolean 、 Number 、 String 、 Undefined 、 Null 以及刚刚提到的新的数据类型 Symbol ,引用类型包括: Object 、 Function 、 Array 。我为甚么会提到 Function 和 Array 主要是因为我么在对象的深拷贝过程中需要对这两种数据类型进行特殊处理。 什么是对象的拷贝 介绍完了js中的数据类型之后,来看一下拷贝,什么是对象的拷贝,说白了就是复制,将原来的东西给复制一份。就比如说,将磁盘上的一个文件给拷贝一份,就是将磁盘中的文件给复制了一个一模一样的新的文件。就比如说下面的例子; var a = 123; var b = a; var c = {name: 'zhangsan', age: 18}; var d = c; var

这些面试题你会怎么答? (系列一)

大城市里の小女人 提交于 2020-02-01 02:44:47
这些面试题你会怎么答? (系列一) Vue中文社区 8月16日 前言 最近参加了几场面试,积累了一些高频面试题,我把面试题分为两类,一种是基础试题: 主要考察前端技基础是否扎实,是否能够将前端知识体系串联。一种是开放式问题: 考察业务积累,是否有自己的思考,思考问题的方式,这类问题没有标准答案。 基础题 题目的答案提供了一个思考的方向,答案不一定正确全面,有错误的地方欢迎大家请在评论中指出,共同进步。 怎么去设计一个组件封装 组件封装的目的是为了重用,提高开发效率和代码质量 低耦合,单一职责,可复用性,可维护性 前端组件化设计思路 js 异步加载的方式 渲染引擎遇到 script 标签会停下来,等到执行完脚本,继续向下渲染 defer 是“渲染完再执行”,async 是“下载完就执行”,defer 如果有多个脚本,会按照在页面中出现的顺序加载,多个async 脚本不能保证加载顺序 加载 es6模块的时候设置 type=module,异步加载不会造成阻塞浏览器,页面渲染完再执行,可以同时加上async属性,异步执行脚本(利用顶层的this等于undefined这个语法点,可以侦测当前代码是否在 ES6 模块之中) css 动画和 js 动画的差异 代码复杂度,js 动画代码相对复杂一些 动画运行时,对动画的控制程度上,js 能够让动画,暂停,取消,终止,css动画不能添加事件

这些面试题你会怎么答?

对着背影说爱祢 提交于 2020-02-01 02:42:21
前言 最近参加了几场面试,积累了一些高频面试题,我把面试题分为两类,一种是基础试题: 主要考察前端技基础是否扎实,是否能够将前端知识体系串联。一种是开放式问题: 考察业务积累,是否有自己的思考,思考问题的方式,这类问题没有标准答案。 基础题 题目的答案提供了一个思考的方向,答案不一定正确全面,有错误的地方欢迎大家请在评论中指出,共同进步。 怎么去设计一个组件封装 组件封装的目的是为了重用,提高开发效率和代码质量 低耦合,单一职责,可复用性,可维护性 前端组件化设计思路 js 异步加载的方式 渲染引擎遇到 script 标签会停下来,等到执行完脚本,继续向下渲染 defer 是“渲染完再执行”,async 是“下载完就执行”,defer 如果有多个脚本,会按照在页面中出现的顺序加载,多个async 脚本不能保证加载顺序 加载 es6模块的时候设置 type=module,异步加载不会造成阻塞浏览器,页面渲染完再执行,可以同时加上async属性,异步执行脚本(利用顶层的this等于undefined这个语法点,可以侦测当前代码是否在 ES6 模块之中) css 动画和 js 动画的差异 代码复杂度,js 动画代码相对复杂一些 动画运行时,对动画的控制程度上,js 能够让动画,暂停,取消,终止,css动画不能添加事件 动画性能看,js 动画多了一个js 解析的过程,性能不如 css

javascript: 数据类型深入理解

寵の児 提交于 2020-02-01 01:52:35
1.基本类型(值类型或者原始类型): Number、Boolean、String、NULL、Undefined以及ES6的Symbol 2.引用类型:Object、Array、Function、Date等 1 、在内存中的位置不同 基本类型: 占用空间固定,保存在 栈中 ; 引用类型:占用空间不固定,保存在 堆中 ; 栈(stack)为自动分配的内存空间,它由系统自动释放;使用一级缓存,被调用时通常处于存储空间中,调用后被立即释放。 堆(heap)则是动态分配的内存,大小不定也不会自动释放。使用二级缓存,生命周期与虚拟机的GC算法有关 当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法的内存栈也将自然销毁了。因此,所有在方法中定义的变量都是放在栈内存中的;栈中存储的是基础变量以及一些对象的引用变量,基础变量的值是存储在栈中,而引用变量存储在栈中的是指向堆中的数组或者对象的地址,这就是为何修改引用类型总会影响到其他指向这个地址的引用变量。 当我们在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为对象的创建成本通常较大),这个运行时数据区就是堆内存。堆内存中的对象不会随方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变量所引用(方法的参数传递时很常见)

深拷贝,浅拷贝

喜欢而已 提交于 2020-01-31 10:16:16
浅拷贝:引用copy.copy 深拷贝:复制copy.deepcopy !!! 列表拷贝 浅拷贝的就是列表里的东西不会拷贝,只是引用。 a = [ 11 , 22 ] b = [ 33 , 44 ] c = [ a , b ] e = c f . copy ( c ) g . copy . deepcopy ( c ) 以上e,f,g三个每个都不一样 为e指向c,id是一样的即内存一样 f浅拷贝c ,f和c的id会不一样但是c里的a和b是指向,不是真正的复制 g深拷贝c,g和c的id不一样,不仅如此,里边的a和b也不一样 !!! 元组拷贝 用copy拷贝时元组不拷贝,因为元组不能增删改查。所以遇到元组是自动指向。 如果元组里有指向不可变类型的数据时浅拷贝和深拷贝一样,都是指向 如果元组里有可变类型数据时(例如列表)浅拷贝不变,深拷贝会递归把所有的东西都拷贝 !!! 某些操作依然拷贝( 列表切片) 面试题 [a,b,c,d]变成[d,c,b,a]的话怎么做? a = [11,22] b = [33,44] c = [a,b] d = c[ : ] d的意思就是把c复制一份,但是呢id发生了改变 !!! 字典 字典是无序的key通过哈希来得到,字典里的key和value,key在字典里存着但是value不在字典里存着。例如以下 d = dict(name = "meiya",age

javascript中的深拷贝与浅拷贝

眉间皱痕 提交于 2020-01-31 09:29:48
javascript中的深拷贝与浅拷贝 基础概念 在了解深拷贝与浅拷贝的时候需要先了解一些基础知识 核心知识点之 堆与栈 栈(stack)为自动分配的内存空间,它由系统自动释放; 堆(heap)则是动态分配的内存,大小不定也不会自动释放。 基本数据类型存放在栈中,基本数据类型主要是: undefined,boolean,number,string,null 。 在 js 中我们对基础数据类型的操作主要是赋值为主 引用类型存放在堆中 引用类型 (object) 其变量实际上 var a = [1,2,3]; var b = [1,2,3]; console.log(a === b); // false console.log(a == b); // false 其内存位置不同,尽管内容相同,但本质却不同,可简单的认为是同一户型的两套房子,内部一模一样但并不是同一套房子 传值与传址 基本数据类型的赋值操作,就是只在内存中开辟新的栈内存,将值赋到新的栈中, 而引用类型的赋值是传址 ,即改变指针的指向,故如果两个变量指向同一对象的话,两者间会相互影响 浅拷贝 浅拷贝只复制一层对象的属性,并不包括对象里面的为引用类型的数据。 ES6 当中提供了 Object.assign(target, obj) 方法来进行对拷贝,这一方法进行的是浅拷贝,拷贝的是对象的属性的引用,而不是对象本身

javascript的浅拷贝和深拷贝

浪尽此生 提交于 2020-01-31 09:13:23
什么是浅拷贝和深拷贝 拷贝:指拷贝源对象到目标对象,又分为浅拷贝和深拷贝两种 浅拷贝:如拷贝的对象有属性值是非基础类型(即对象),则浅拷贝拷贝的是对象的引用,而非对象本身,拷贝完成以后更改目标对象,源对象也会被更改 深拷贝:深拷贝完美解决了浅拷贝存在的问题,目标对象是一个全新的对象,更改目标对象不会影响到源对象 浅拷贝 Object.assign() // 对象的属性值都是基础类型 console . log ( '--------对象的属性值都是基础类型--------' ) const src1 = { a : 'aa' } const target1 = Object . assign ( { } , src1 ) // 输出源对象 console . log ( '源对象: ' , src1 ) // {a: "aa"} // 输出拷贝后的目标对象 console . log ( '目标对象: ' , target1 ) // {a: "aa"} // 更改目标对象 target1 . a = 'aaa' console . log ( '更改目标对象后的结果: ' ) // 输出更改后的目标对象 console . log ( '目标对象: ' , target1 ) // {a: "aaa"} // 输出源对象,发现源对象没有被改变 console . log (

JavaScript中的浅拷贝和深拷贝

我怕爱的太早我们不能终老 提交于 2020-01-31 08:25:34
在JavaScript中,对于 Object 和 Array 这类引用类型值,当从一个变量向另一个变量赋值引用类型值时,这个值的副本其实是一个指针,两个变量指向同一个堆对象,改变其中一个变量,另一个也会受到影响。 这种拷贝分为两种情况:拷贝引用和拷贝实例,也就是我们说的浅拷贝和深拷贝 浅拷贝(shallow copy) 拷贝原对象的引用,这是最简单的浅拷贝。 // 对象 var o1 = {a: 1}; var o2 = o1; console.log(o1 === o2); // =>true o2.a = 2; console.log(o1.a); // => 2 // 数组 var o1 = [1,2,3]; var o2 = o1; console.log(o1 === o2); // => true o2.push(4); console.log(o1); // => [1,2,3,4] 拷贝原对象的实例,但是对其内部的引用类型值,拷贝的是其引用,常用的就是如jquey中的 $.extend({}, obj); Array.prototype.slice() 和 Array.prototype.concat() 都会返回一个数组或者对象的浅拷贝,举个例子: var o1 = ['darko', {age: 22}]; var o2 = o1.slice(); //