拷贝

关于JS的assign() 方法

为君一笑 提交于 2020-03-02 00:06:38
先看这样一个示例: JS示例 输出的结果是这样的: 输出 结果是我的obj的name对象被覆盖。 如何解决呢? 这里查到了一个assign()的方法。 关于assign()方法,MDN上是这样解释的:Object.assign() 方法用于将所有可枚举的属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 于是我们用assign()方法改写一下代码: 改写代码 执行结果是这样的: 改写完的输出 这样我们的obj对象的属性就不会被覆盖啦~~ 注意事项: 在属性拷贝过程中可能会产生异常,比如目标对象的某个只读属性和源对象的某个属性同名,这时该方法会抛出一个 TypeError 异常,拷贝过程中断,已经拷贝成功的属性不会受到影响,还未拷贝的属性将不会再被拷贝。 注意, Object.assign 会跳过那些值为 null 或 undefined 的源对象。 Object.assign() 拷贝的是属性值。假如源对象的属性值是一个指向对象的引用,它也只拷贝那个引用值。 它无法实现深层复制 比如: 深层复制 输出结果: 结果 虽然进行了复制,但是它只能实现浅层复制,e的指向和f的指向没有发生改变。 作者:7天苹果 链接:https://www.jianshu.com/p/fd3f8a45d5fd 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。 来源:

ByteBuf和Channel和Pipeline

无人久伴 提交于 2020-03-01 22:13:02
BytetBuf ByteBuf就是JDK nio中Buffer的新轮子 buffer 的主要目的进行流量整形,把突发的大数量较小规模的 I/O 整理成平稳的小数量较大规模的 I/O,以 减少响应次数 ByteBuffer: 长度固定,一旦分配完成,它的容量不能动态扩展和收缩,当需要编码的POJO对象大于ByteBuffer的容量时,会发生索引越界异常; ByteBuffer只有一个标识位控的指针position,读写的时候需要手工调用flip()和rewind()等,使用者必须小心谨慎地处理这些API,否则很容易导致程序处理失败; ByteBuffer的API功能有限,一些高级和实用的特性它不支持,需要使用者自己编程实现。 需要的话,可以自定义buffer类型; 通过组合buffer类型,可实现透明的zero-copy; 提供动态的buffer类型,如StringBuffer一样,容量是按需扩展; 如果c<t,则n从阈值t(4MB)开始,以每次增加2倍的方式扩容,直到双倍后的大小小于c; 如果c>t,则n=c/t*t+t 无需调用flip()方法;方法反转(讲Buffer从读模式变成写模式) 常常比 ByteBuffer (JDK的)快 使用了读写两个指针,分别记录读写的位置,复杂操作更简单 堆内存和直接内存

Python面试一百题——综合题(2)

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-01 03:25:13
目录 浅拷贝(copy)和深拷贝(deepcopy) 编写一个生成器,将一个二维列表转换为一维列表 请编写一个递归生成器,将任意多维的列表转换为一维列表 如何分别获取当前日期的年月日以及在一年中的第几天 进程之间的通信 如何为一个线程函数传递参数 在线程中如何创建和使用全局对象 你了解协程吗 0.1浅拷贝(copy)和深拷贝(deepcopy) ''' copy:只复制深层对象的引用 deepcopy:复制深层对象的本身 ''' import copy a = [ 1 , 2 , 3 , 4 , [ 'a' , 'b' ] ] c = copy . copy ( a ) # 浅拷贝 d = copy . deepcopy ( a ) # 深拷贝 a . append ( 5 ) # 在顶层,无论浅还是深,顶层都完全复制 print ( c ) # [1, 2, 3, 4, ['a', 'b']] print ( d ) # [1, 2, 3, 4, ['a', 'b']] a [ 4 ] [ 0 ] = 'x' print ( a ) # [1, 2, 3, 4, ['x', 'b'], 5] print ( d ) # [1, 2, 3, 4, ['a', 'b']] 总结 0.2编写一个生成器,将一个二维列表转换为一维列表 ''' 生成器:yield ''' def

C++之保护和私有构造函数与析构函数

只谈情不闲聊 提交于 2020-02-28 19:57:43
一、构造函数 1、保护 构造函数定义为protected后,就意味着你不能在类的外部构造对象了,而只能在外部构造该类的子类的对象,比如: class Base { protected: Base() {} ... }; class Derived : public Base { public: Derived() {} ... }; Base b; //error Derived d; //ok 2、私有 构造函数定义为private后,意味着不仅仅不能在类的外部构造对象了,而且也不能在外部构造该类的子类的对象了,只能通过类的static静态函数来访问类的内部定义的对象,单件singleton模式就是私有构造函数的典型实例: class CLog { private: CLog() {}; public: ~CLog() {}; public: static CLog* GetInstance() { if (NULL == m_sopLogInstance) { CLock oInstanceLock; oInstanceLock.Lock(); if (NULL == m_sopLogInstance) { m_sopLogInstance = new CLog(); } oInstanceLock.Unlock(); } return m_sopLogInstance; }

day 11:列表推导式与深浅拷贝

非 Y 不嫁゛ 提交于 2020-02-28 19:16:00
1、列表推导式 通过使用列表推导式,用简洁的代码实现复杂功能 例如: 打印10与10各个数字的组合 res = [ ( x , y ) for x in range ( 10 ) for y in range ( 10 ) ] print ( res ) 打印偶数奇数的组合 res = [ ( x , y ) for x in range ( 10 ) if x % 2 == 0 for y in range ( 10 ) if y % 2 == 1 ] print ( res ) 打印ABC与123的组合 res = [ x + y for x in "ABC" for y in "123" ] print ( res ) #会先循环先写的 练习: 给一列表M打印要求数据 #给一列表M打印要求数据 M = [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] , [ 7 , 8 , 9 ] ] #求 1 4 7 res = [ var [ 0 ] for var in M ] print ( res ) #求1 5 9 res = [ M [ i ] [ i ] for i in range ( len ( M ) ) ] print ( res ) 给一列表,求每一元素的长度的列表 #涉及到每一个元素就使用for var in L L = [ "continue" ,

Linux常用命令总结

瘦欲@ 提交于 2020-02-28 07:11:57
Linux 命令总结 启动终端: ctr+alt+t 终端字体放大: ctr+shift+'+',终端字体缩小: ctr+'-' ls: 查看当前目录下的文件信息 pwd: 查看目录所在的路径 touch: 创建文件 mkdir: 创建文件夹 rmdir: 删除文件夹,提示:只能是空文件夹 rm: 默认删除的是文件,如果删除文件夹需要加上-r选项,-r:以递归的方式把文件夹下的所有文件信息删除掉 cd:切换目录 9.1 cd 目录名 : 切换到指定目录 9.2 cd .: 切换到当前目录 9.3 cd ..: 切换到上一级目录 9.4 cd ~: 切换到当前用户的目录 9.5 cd: 等价与cd ~ 切换到当前用户的目录 9.6 cd -: 切换到上一次目录 绝对路径: 从根目录算起的路径叫做绝对路径,比如: /home/python 相对路径: 从当前目录算起的路径叫做相对路径, 比如: ./AAA ../BBB 路径的使用总结: 如果离当前目录近使用相对路径,如果离根目录近使用绝对路径,如果进入的是中间目录建议使用绝对路径 自动补全: 两次tab键 cp: 拷贝 14.1 cp 文件名 路径: 把文件拷贝到指定路径 14.2 cp 路径/文件名 路径: 把指定路径的文件拷贝到指定路径 14.3 cp 文件名 路径/新的文件名 : 先把文件拷贝到指定目录然后再重命名 14.4

JDK源码阅读-------自学笔记(五)(浅析数组)

谁说胖子不能爱 提交于 2020-02-28 01:46:19
一、数组基础 1、定义和特点 数组也可以看做是对象,数组变量属于引用类型,数组中每个元素相当于该队形的成员变量,数组对象存储在堆中. 2、初始化数组 常用类初始化 1 // 整型初始化 2 int[] integerInitialization = new int[10]; View Code 对象初始化 1 // 对象初始化 2 User[] usersInitialization = new User[10]; View Code 3、数组赋值 动态初始化(根据数组角标) 1 // 整型初始化 2 int[] integerInitialization = new int[10]; 3 4 // 整型赋值 5 integerInitialization[0] = 1; 6 integerInitialization[1] = 2; View Code 循环赋值 1 // 整型初始化 2 int[] integerInitialization = new int[10]; 3 4 // 循环赋值 5 for (int i = 0; i < integerInitialization.length; i++) { 6 integerInitialization[i]=10*i; 7 } View Code 静态初始化 常用类初始化 1 // 整型初始化 2 int[]

多进程拷贝大文件

孤街浪徒 提交于 2020-02-27 09:30:51
主要运用了进程创建 mmap映射区 等知识点 #include<stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <fcntl.h> #include <sys/mman.h> #include <unistd.h> #include <sys/wait.h> int main(){ int new_fd,old_fd,i; long int size; char *p_old, *p_new; pid_t pid; old_fd = open("src.txt", O_RDWR,0644);//源文件 自己设定 if (old_fd < 0){ perror("open error\n"); exit(1); } size = lseek(old_fd, 0, SEEK_END); p_old = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, old_fd, 0); ////////////////////////////////////////// new_fd = open("result", O_RDWR | O_CREAT | O_TRUNC, 0644); if (new_fd < 0){

成员变量是指针的注意点

耗尽温柔 提交于 2020-02-27 07:10:17
若使用成员拷贝,则指针指向同一块区域,不行,目的是指向拷贝一份相同存储空间区域过来 若使用赋值运算符,则需要判断传入的参数不是自己,若是自己则指针指向的那份待拷贝空间没了,即使保留一段时间,但是再次拷贝出空间时候,值会消失,接下来没了拷贝的值 来源: CSDN 作者: Tine Chan 链接: https://blog.csdn.net/chanleoo/article/details/104457850

C++】模板特化的应用---类型萃取

試著忘記壹切 提交于 2020-02-27 00:46:39
在C++中,内置类型的遍历,我们只需要进行浅拷贝就可以,但自定义类型就不一定了。比如之前类与对象中,如果类中对象涉及到资源,我们使用 深拷贝 的方式进行拷贝构造等操作,如果不涉及资源,则使用简单的 浅拷贝 ,在模拟实现string类\vector等中也遇到。这样虽然可以,但代码效率低。 所以,为了将内置类型与自定义类型区分开,就有了 类型萃取,它是类模板特化的应用 。那么我们先来了解类模板特化以及非类型模板参数 非类型模板参数 模板参数分为类型形参与非类型形参 注意: 浮点数,类对象以及字符串是不允许作为非类型模板参数的 非类型模板参数必须在编译期就能确认结果 模板的特化 有时我们使用模板实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结果,看下面代码 代码1 template < class T > T MAX ( T left , T right ) { return left > right ? left : right ; } int main ( ) { char * p1 = "world" ; char * p2 = "hello" ; cout << MAX ( p1 , p2 ) << endl ; 比较字符串大小时,这里面比较的是指针类型,因此不管p1、p2是什么字符串,打印的都是p2,所以如果不直接将函数直接给出,用模板的话,就要将模板特化了