拷贝

day009学习笔记

让人想犯罪 __ 提交于 2019-11-29 18:18:25
驻留机制 涉及开发时程序不能正常使用的可能性 存在意义:节省内存,提高效率 ==:判断等号两边内容是否相同 is:判断两边值的内存地址是否相同 驻留机制顺序:代码块----->小数据池(理解为代码块与代码块之间) 代码块驻留机制(pycharm中测试) 定义:一个py文件,一个函数,一个模块,一个类,交互模式(终端)下的每一行 以下情况内存地址相同 数字:-5~正无穷(实际上-5~256的内存地址在所有地方都相同) a = 256 b = 256 print(a is b) #True print(id(a),id(b)) #1516347472 1516347472 相同(固定地址) a = 257 b = 257 print(a is b) #True print(id(a),id(b)) #3075275480848 3075275480848 相同(可变地址) a = -6 b = -6 print(a is b) #False print(id(a),id(b)) #2228967021296 2228967021200 不相同(可变地址) 字符串 定义时内容相同,内存地址就相同 a = "123中文english%*-" b = "123中文english%*-" print(a is b) #True print(id(a),id(b)) #2064241611472

虚拟机扩容遇到的问题以及解决方法

折月煮酒 提交于 2019-11-29 18:01:40
目录 虚拟机拷贝大文件存在的问题 问题一:虚拟机扩容 问题二: 反复拷贝大文件导致Ubuntu空间不足 2.1 派生问题:隐藏文件显示 2.2 派生问题:给根目录的文件权限 参考 虚拟机拷贝大文件存在的问题 问题一:虚拟机扩容 VMware 编辑虚拟机设置 下载Gparted分区工具 sudo apt-get install gparted # 下载后打开 sudo gparted width = "500" height = "313" align =center /> 删除与unallocated隔着的所有文件,其中有些文件加锁,将linux-swap分区先swapoff 之后再删除。 具体细节:打开软件之后就是类似如下界面,我们要做得就是删除掉/dev/sdv2和他里面的子文件。最后一栏是我们还没有分配的空间。 对/dev/sdv2和他里面的子文件右键选择swapoff,你会发现名字旁边的钥匙图标消失,这个时候我们就可以对其进行删除了。右键delete,可能会弹出警告的对话框,无视他点确定,把/dev/sdv2和他里面的子文件都删除掉,然后我们点击状态栏中最后一个对号图标,此时应该是绿色状态。 这个时候就只剩下/dev/sda1和未分配的,我们单击sda1并右键选择Resize 在弹出的界面中,我们按住鼠标左键向右拖动到最后,但是要保留一部分空间(留1-2G就可以

C++类和对象(三)之拷贝构造函数

不想你离开。 提交于 2019-11-29 16:33:14
1.概念: 构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。 2.特征 拷贝构造函数是构造函数的一个重载形式。 拷贝构造函数的参数只有一个且必须使用引用传参,使用传值方式会引发无穷递归调用。 若未显示定义,系统生成默认的拷贝构造函数。 默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝我们叫做浅拷贝,或者值拷贝。 class Date { public: Date(int year = 1900, int month = 1, int day = 1) { _year = year; _month = month; _day = day; } Date(const Date& d) //传引用 { _year = d._year; _month = d._month; _day = d._day; } private: int _year; int _month; int _day; }; int main() { Date d1; Date d2(d1); return 0; } 问:为什么传值会引起无限递归调用? 答: 因为传值调用时,形参是实参的一份拷贝。 看不懂需要更详细的请点击: C++拷贝构造函数的参数为什么必须使用引用 来源: https://blog.csdn.net

反射和拷贝

这一生的挚爱 提交于 2019-11-29 15:42:52
反射 57. 什么是反射? 反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力 Java反射 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法 Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类。 在运行时构造任意一个类的对象。 在运行时判断任意一个类所具有的成员变量和方法。 在运行时调用任意一个对象的方法。 58. 什么是 java 序列化?什么情况下需要序列化? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。 什么情况下需要序列化: a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候; b)当你想用套接字在网络上传送对象的时候; c)当你想通过RMI传输对象的时候; 59. 动态代理是什么?有哪些应用? 动态代理: 当想要给实现了某个接口的类中的方法,加一些额外的处理。比如说加日志,加事务等。可以给这个类创建一个代理,故名思议就是创建一个新的类,这个类不仅包含原来类方法的功能,而且还在原来的基础上添加了额外处理的新类。这个代理类并不是定义好的,是动态生成的。具有解耦意义

开发必配的Finder设置

眉间皱痕 提交于 2019-11-29 15:03:45
1、显示标签页、显示路径栏、显示状态栏的设置位置,在访达->显示-> 显示状态栏 个人三个都设置了,但是觉得显示状态栏用的并不多,反而多一行,下面是显示状态栏的效果,主要可以一眼看出有多少项目和多少存储空间可用。 显示标签页 设置之后,可以在一个finder窗口打开多个finder标签,就像浏览器的便签也一样 点击右边的加号+可以打开多个标签 这个功能自己用的非常多 显示路径栏 设置后的效果,在Finder窗口下面可以看到路径。 选中文件也能看到文件的路径: 这里把文件路径或者文件夹路径显示出来之后,就可以接着设置更方便的功能了,接着看下面的。 拷贝文件路径,拷贝文件夹路径 右键或者两指同时选中路径,就能看到拷贝为路径的选项。 拷贝文件路径操作类似,先选中文件,然后选中路径,调出上下文菜单 在终端打开文件夹 开发中这个功能也很实用。 Linux系统默认就有。 Windows也有,按住shift,并右键文件管理器空白区域,就可以看到在此处打开命令行窗口,或者在此处打开PowerShell窗口 下面说说Mac的设置 就是接着上面的拷贝文件夹路径的部分,前提就是把显示路径栏设置一下。 具体看下面的截图: 如果你的默认没有,在访达的服务偏好设置中设置一下: 1、打开服务偏好设置 2、在如图位置看看这两个有没有勾选:新建位于文件夹位置的终端标签页、新建位于文件夹位置的终端窗口 相信看到这里

Clone()方法详解

只愿长相守 提交于 2019-11-29 14:09:30
一、克隆的原理与应用 clone在堆上分配内存,分配的内存和源对象(即调用clone方法的对象)相同,然后再使用原对象中对应的各个域,填充新对象的域, 填充完成之后,clone方法返回,一个新的相同的对象被创建,同样可以把这个新对象的引用发布到外部。如果,想要对该对象进行处理,又想保留原来数据进行接下来的操作,clone就很方便。 二、克隆的实现 1、被克隆的类必须自己实现Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。Cloneable 接口实际上是个标识接口,没有任何接口方法。 2、覆盖Object.clone()方法。 三、浅拷贝与深拷贝 浅拷贝: 在填充新对象域的时候,进行简单的字段赋值。 深拷贝: 按照惯例,此方法返回的对象应该独立于该对象(正被复制的对象)。要获得此独立性,在 super.clone 返回对象之前,有必要对该对象的一个或多个字段进行修改。这通常意味着要复制包含正在被复制对象的内部“深层结构”的所有可变对象,并使用对副本的引用替换对这些对象的引用。如果一个类只包含基本字段或对不变对象的引用,那么通常不需要修改 super.clone 返回的对象中的字段。(简单来说,就是将该对象内部的对象也克隆一份,而不是简单的引用赋值) ( 可变对象: 对象创建后字段值可以改变) 浅拷贝: class Head {

zero copy图解

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-29 12:29:25
原文链接: https://www.jianshu.com/p/8c6b056f73ce 1 传统的IO读写 传统的IO读写有两种方式:IO终端和DMA。他们各自的原理如下。 1.1 IO中断原理 整个流程如下: 1.用户进程调用read等系统调用向操作系统发出IO请求,请求读取数据到自己的内存缓冲区中。自己进入阻塞状态。 2.操作系统收到请求后,进一步将IO请求发送磁盘。 3.磁盘驱动器收到内核的IO请求,把数据从磁盘读取到驱动器的缓冲中。此时不占用CPU。当驱动器的缓冲区被读满后,向内核发起中断信号告知自己缓冲区已满。 4.内核收到中断,使用CPU时间将磁盘驱动器的缓存中的数据拷贝到内核缓冲区中。 5.如果内核缓冲区的数据少于用户申请的读的数据,重复步骤3跟步骤4,直到内核缓冲区的数据足够多为止。 6.将数据从内核缓冲区拷贝到用户缓冲区,同时从系统调用中返回。完成任务。 缺点:用户的每次IO请求,都需要CPU多次参与。 1.2 DMA原理 1.用户进程调用read等系统调用向操作系统发出IO请求,请求读取数据到自己的内存缓冲区中。自己进入阻塞状态。 2.操作系统收到请求后,进一步将IO请求发送DMA。然后让CPU干别的活去。 3.DMA进一步将IO请求发送给磁盘。 4.磁盘驱动器收到DMA的IO请求,把数据从磁盘读取到驱动器的缓冲中。当驱动器的缓冲区被读满后

Java中的深拷贝(深复制)和浅拷贝(浅复制)

≯℡__Kan透↙ 提交于 2019-11-29 09:55:59
深拷贝(深复制)和浅拷贝(浅复制)是两个比较通用的概念,尤其在C++语言中,若不弄懂,则会在delete的时候出问题,但是我们在这幸好用的是Java。虽然java自动管理对象的回收,但对于深拷贝(深复制)和浅拷贝(浅复制),我们还是要给予足够的重视,因为有时这两个概念往往会给我们带来不小的困惑。 浅拷贝是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象。深拷贝不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象。举例来说更加清楚:对象A1中包含对B1的引用,B1中包含对C1的引用。浅拷贝A1得到A2,A2 中依然包含对B1的引用,B1中依然包含对C1的引用。深拷贝则是对浅拷贝的递归,深拷贝A1得到A2,A2中包含对B2(B1的copy)的引用,B2 中包含对C2(C1的copy)的引用。 若不对clone()方法进行改写,则调用此方法得到的对象即为浅拷贝,下面我们着重谈一下深拷贝。 运行下面的程序,看一看浅拷贝: class Professor0 implements Cloneable { String name; int age; Professor0(String name, int age) { this .name = name; this .age = age; } public Object clone() throws

Java中的深拷贝(深复制)和浅拷贝(浅复制)

感情迁移 提交于 2019-11-29 09:55:34
深拷贝(深复制)和浅拷贝(浅复制)是两个比较通用的概念,尤其在C++语言中,若不弄懂,则会在delete的时候出问题,但是我们在这幸好用的是Java。虽然java自动管理对象的回收,但对于深拷贝(深复制)和浅拷贝(浅复制),我们还是要给予足够的重视,因为有时这两个概念往往会给我们带来不小的困惑。 浅拷贝是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象。深拷贝不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象。 举例来说更加清楚:对象A1中包含对B1的引用,B1中包含对C1的引用。浅拷贝A1得到A2,A2 中依然包含对B1的引用,B1中依然包含对C1的引用。深拷贝则是对浅拷贝的递归,深拷贝A1得到A2,A2中包含对B2(B1的copy)的引用,B2 中包含对C2(C1的copy)的引用。 若不对clone()方法进行改写,则调用此方法得到的对象即为浅拷贝,下面我们着重谈一下深拷贝。 运行下面的程序,看一看浅拷贝: class Professor0 implements Cloneable { //实现Cloneable接口,将clone重定义为public,Cloneable只是标记接口,没有具体方法,唯一目的就是用instanceof进行类型检查 String name; int age; Professor0(String name,

图解Python深拷贝和浅拷贝

自闭症网瘾萝莉.ら 提交于 2019-11-29 09:53:45
Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果。 下面本文就通过简单的例子介绍一下这些概念之间的差别。 对象赋值 直接看一段代码: will = ["Will", 28, ["Python", "C#", "JavaScript"]] wilber = will print id(will) print will print [id(ele) for ele in will] print id(wilber) print wilber print [id(ele) for ele in wilber] will[0] = "Wilber" will[2].append("CSS") print id(will) print will print [id(ele) for ele in will] print id(wilber) print wilber print [id(ele) for ele in wilber] 代码的输出为: 下面来分析一下这段代码: 首先,创建了一个名为will的变量,这个变量指向一个list对象,从第一张图中可以看到所有对象的地址(每次运行,结果可能不同) 然后,通过will变量对wilber变量进行赋值,那么wilber变量将指向will变量对应的对象(内存地址),也就是说"wilber