拷贝

java拷贝

匿名 (未验证) 提交于 2019-12-02 21:53:52
1.为什么要拷贝java对象呢? 在某些情况下,我们需要保存当前对象的某种状态,那么我们需要将状态的值赋给一个新的对象。首先想到的是将变量一个一个的赋值给新对象,但是这样做如果变量多的情况下,会很麻烦。那么有没有好一点的办法呢?那就是通过拷贝的方式,来实现一次性将全部变量赋值。 注意:我们常见的Object a=new Object();Object b;b=a;这种形式的代码复制的是引用,即对象在内存中的地址,a和b对象仍然指向了同一个对象。而通过clone方法赋值的对象跟原来的对象时同时独立存在的 2.实现拷贝 java拷贝分为浅拷贝和深拷贝 2.1浅拷贝步骤 (一) 被复制的类需要实现Clonenable接口(不实现的话在调用clone方法会抛出CloneNotSupportedException异常), 该接口为标记接口(不含任何方法) (二) 覆盖clone()方法,访问修饰符设为public。方法中调用super.clone()方法得到需要的复制对象。(native为本地方法) 具体实现如下 //Address类 public class Address { private String add; public String getAdd () { return add; } public void setAdd (String add) { this .add =

js arr_slice数组的切片与拷贝.html

匿名 (未验证) 提交于 2019-12-02 20:32:16
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>arr_slice</title> </head> <body> <script> // slice,数组切片,原理是在原来的数组基础上复制了一份,再操作。 // 即创建了新的数组,和原来的数组没有关系了。 let arr1 = [1,2,3]; let arr2 = arr1.slice(); console.log('arr1;', arr1); // [1, 2, 3] console.log('arr2;', arr2); // [1, 2, 3] arr1.push(4); console.log('arr1;', arr1); // [1, 2, 3, 4] console.log('arr2;', arr2); // [1, 2, 3] </script> </body> <

Linux设备驱动程序 之 read和write

梦想的初衷 提交于 2019-12-02 19:11:44
read和write原型 read和write方法完成的任务是相似的,亦即,拷贝数据到应用程序空间,或者反过来从应用程序空间拷贝数据;因此,它们的原型很相似,如下: 1 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); 2 3 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); 其中参数filp是文件指针,参数count是请求传输的数据长度,参数buff指向用户空间的缓冲区,这个缓冲区或者保存将要写入的数据,或者是一个存放新读入数据的空缓冲区;offp指明了用户在文件中进行存放操作的位置; 一般而言,调用read和write都应该更新*offp所指向的文件位置,以便反应新系统调用成功完成之后当前文件的位置; 返回值: read- n==count,说明所请求的字节数成功完成; n>0 && n<count,说明只有部分数据传输成功,大部分情况下,程序会重新读取数据;如果用fread函数读取数据,则库函数会不断的调用系统调用,直至所有的数据传输完成; n==0,到达了文件尾; n<0,意味着发生了错误,该值指明了发生了什么错误; write- n==count,说明所请求数目的字节数成功完成; n>0 && n

Swift面试题

柔情痞子 提交于 2019-12-02 18:37:40
class 和 struct 的区别 1.struct是值类型,class是引用类型。 值类型的变量直接包含它们的数据,对于值类型都有它们自己的数据副本,因此对一个变量操作不可能影响另一个变量。 引用类型的变量存储对他们的数据引用,因此后者称为对象,因此对一个变量操作可能影响另一个变量所引用的对象。 2.二者的本质区别: struct是深拷贝,拷贝的是内容;class是浅拷贝,拷贝的是指针。 3.property的初始化不同: class 在初始化时不能直接把 property 放在 默认的constructor 的参数里,而是需要自己创建一个带参数的constructor;而struct可以,把属性放在默认的constructor 的参数里。 4.变量赋值方式不同: struct是值拷贝;class是引用拷贝。 5.immutable变量: swift的可变内容和不可变内容用var和let来甄别,如果初始为let的变量再去修改会发生编译错误。struct遵循这一特性;class不存在这样的问题。 6.mutating function: struct 和 class 的差別是 struct 的 function 要去改变 property 的值的时候要加上 mutating,而 class 不用。 7.继承: struct不可以继承,class可以继承。 8

linux基础练习10

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-02 18:35:17
1、实现sshd免密登录 ssh服务默认安装系统的时候会自动安装,即使最小化安装也会安装,可以不用我们手动安装,需要实现ssh服务免密登录需要生产秘钥对 客户端上生成的公钥拷贝至服务端后,当客户端在发送连接请求后,服务端得到客户端的请求后,会在authorized_key文件中查找公钥,如果有响应的ip和用户,就会随机生成一个字符串,服务端将生成的随机字符串利用拷贝过来的公钥加密之后发送给客户端,客户端会利用自己的私钥进行解密,解密完的字符串在发回给服务端,服务端跟之前的字符串进行比对,如果一致,就允许免密登录 利用在客户端生成秘钥对后,会默认放在用户家目录中.ssh隐藏目录中会有秘钥对 ssh-keygen 生成秘钥对 可以指定 -t 加密算法 -f指定生成的秘钥对放在哪。我这就不指定,表示为默认 ssh-copy-id -i .ssh/id_rsa.pub 192.168.23.114将私钥拷贝至服务端 如果只写ip地址将表示拷贝至对方机器root家目录中 也可以指定 用户名@ip 指定用户 第一次连接需要输入对方机器用户账号的密码 因为是基于ssh协议 默认生成了一个authorized_keys文件,里面存放着客户端发送过来的公钥 查看客户端公钥和服务端公钥,一模一样 接着,我们直接ssh 连接服务端,连接成功,不需要输入密码 2、编译安装dropbear实现SSH登录

python之深拷贝和浅拷贝

﹥>﹥吖頭↗ 提交于 2019-12-02 16:57:41
1.当拷贝的是不可变数据类型(数值、字符串、元组),不管是深拷贝和浅拷贝,都指向的是同一地址; 2.当拷贝的对象是可变数据类型(列表、字典): (1)当浅拷贝的对象中无复杂子对象,原来值的改变不会影响浅拷贝的值,同时浅拷贝值的改变不会影响原来的值。原来值的id和浅拷贝出来对象的id不同。 (2)当浅拷贝的对象中有复杂子对象,(例如列表中的一个子元素是一个列表),改变原来的值 中的复杂子对象的值 ,会影响浅复制的值,但它们各自的id没变。 (3)当深拷贝时,完全独立,包括内存列表和字典。 来源: https://www.cnblogs.com/xiximayou/p/11756043.html

js实现深度拷贝

人盡茶涼 提交于 2019-12-02 16:14:58
js实现拷贝,使用普通赋值对象,在操作其中一个对象值的时候,另一个也会更改,不符合需求 因此引入深度拷贝,以下为实现深度拷贝的几种法: Object.assign // 合并多个对象 var target = { a: 1, b: 1 }; var source1 = { b: 2, c: 2 }; var source2 = { c: 3 }; Object.assign(target, source1, source2); 注意: 这个是伪深度拷贝,只能拷贝第一层 递归拷贝 function deepClone(source){ const targetObj = source.constructor === Array ? [] : {}; // 判断复制的目标是数组还是对象 for(let keys in source){ // 遍历目标 if(source.hasOwnProperty(keys)){ if(source[keys] && typeof source[keys] === 'object'){ // 如果值是对象,就递归一下 targetObj[keys] = source[keys].constructor === Array ? [] : {}; targetObj[keys] = deepClone(source[keys]); }else{ //

什么是“零拷贝”技术

拥有回忆 提交于 2019-12-02 14:29:23
高频交易的研究者有时会遇到“零拷贝”(zero-copy)技术这个名词,那么什么是“零拷贝”呢? 一般的文件传输过程 考虑这样一种常用的情形:开发者需要将静态内容(类似图片、数据表、文件)展示给远程的用户。那么这个情形就意味着开发者需要先将静态内容从磁盘中拷贝出来放到一个内存buf中,然后将这个buf通过socket传输给用户,进而用户或者静态内容的展示。这看起来再正常不过了,但是实际上这是很低效的流程,我们把上面的这种情形抽象成下面的过程: 首先调用read将静态内容,这里假设为数据文件A,读取到tmp_buf, 然后调用write将tmp_buf写入到socket中,如图: 在这个过程中数据文件A的经历了4次复制的过程: 首先,调用read时,数据文件A拷贝到了kernel模式; 之后,CPU控制将kernel模式数据复制到user模式下; 调用write时,先将user模式下的内容复制到到kernel模式下的socket的buffer中; 最后将kernel模式下的socket buffer的数据复制到网卡设备中传送; 从上面的过程可以看出,数据白白从kernel模式到user模式走了一圈,浪费了2次copy(第一次,从kernel模式拷贝到user模式;第二次从user模式再拷贝回kernel模式,即上面4次过程的第2和3步骤)

(CentOS7)上搭建Redis-5.0.4集群(多台机器、密码验证)

旧巷老猫 提交于 2019-12-02 11:21:46
Redis集群搭建并不麻烦,只是步骤较多,跟着步骤走,就简单了。 环境以及搭建说明 : 说明:本人只有三台虚拟机,所以本人将三个master分别放在三台虚拟机上;本人同时又考虑了主备模式,所以又 需要搭建三个slave,同时又不想将成对的主备放在同一台机器上(因为如果某一台Linux崩了,那岂不是该 Redis的主和备都崩了),所以这里将Redis的主与备相互错开放置进三个Linux里,若某一台机器崩了,那么 仍然有三个“有效的”Redis节点。 追注:若果机器有6个的话,就不需要考虑这个问题,一个机器上一个节点就完事了。 注:由于redis在创建集群时,需要考虑到单点故障以及高可用。所以需要采用主备模式。同时redis在管理集群判断 节点是否健康采用的是投票策略,所以主节点的数量一定是单数的。 如:创建redis的最小的集群,应该是三个实例,在加上主备模式,那么一共应该是6个redis实例;如果不考虑主备的 话,3个实例就能搭建最简单的Redis集群了。 CentOS7上搭建Redis集群 第一步:准备Redis节点 提示: 可以挨个挨个安装6个单机版的Redis,也可以在安装完一个Redis后进行拷贝。本人就是安装完一个 Redis后进行的拷贝,具体的操作步骤是: 第一小步 : 按照 https://blog.csdn.net/justry_deng/article