拷贝

Linux基础命令:ssh

别来无恙 提交于 2019-11-28 01:35:47
SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息。 ssh服务端由2部分组成: openssh(提供ssh服务) openssl(提供加密的程序) ssh的客户端可以用 XSHELL,Securecrt, Mobaxterm等工具进行连接 SSH的工作机制 服务器启动的时候自己产生一个密钥(768bit公钥),本地的ssh客户端发送连接请求到ssh服务器,服务器检查连接点客户端发送的数据和IP地址,确认合法后发送密钥(768bits)给客户端,此时客户端将本地私钥(256bit)和服务器的公钥(768bit)结合成密钥对key(1024bit),发回给服务器端,建立连接通过key-pair数据传输。 SSH的加密技术 加密技术:传输过程,数据加密。 1.SSH1没有对客户端的秘钥进行校验,很容易被植入恶意代码 2.SSH2增加了一个确认联机正确性的Diffe_Hellman机制,每次数据的传输,Server都会检查数据来源的正确性,避免黑客入侵。 SSH2支持RSA和DSA密钥 DSA:digital signature Algorithm 数字签名 RSA:既可以数字签名又可以加密 SSH知识小结 1.SSH是安全的加密协议

java设计模式---原型模式

一笑奈何 提交于 2019-11-27 23:52:44
原型模式也是创建型的设计模式,通过拷贝原型创建新的对象,理解原型模式必须理解java中的浅复制和深复制。复制也称为克隆。 会发生深拷贝的有java中的8中基本类型以及他们的封装类型,另外还有String类型。其余的都是浅拷贝。 浅克隆:浅克隆仅仅克隆所考虑的对象,而不克隆它所引用的对象。 深克隆:深克隆不仅克隆所考虑的对象,也克隆它所引用的对象。 它的核心是就是原型类Prototype。Prototype类需要具备以下两个条件: 实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。 重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中有一个clone方法,作用是返回对象的一个拷贝,但是其作用域protected类型的,一般的类无法调用,因此,Prototype类需要将clone方法的作用域修改为public类型。实现一个接口,重写一个方法即完成了原型模式。 实现类 class Prototype implements Cloneable { public Prototype clone(){

【设计模式学习笔记】原型模式

自作多情 提交于 2019-11-27 23:32:42
原型模式,估计这是最简单的模式了。这个模式可以用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。额外说一句,这里的创建对象只是浅拷贝的。 文章目录 1.1 浅拷贝 1.2 测试 1.3 结果 2.1 深拷贝 2.2 测试深拷贝 2.3 结果 参考 没什么好说的,直接看程序吧。要实现对象的浅拷贝,需要让待拷贝对象实现Cloneable接口。 1.1 浅拷贝 package prototype ; public class Model implements Cloneable { private String name ; private String price ; private A a = new A ( "a" ) ; public String getName ( ) { return name ; } public String getPrice ( ) { return price ; } public A getA ( ) { return a ; } protected Object clone ( ) { try { return super . clone ( ) ; } catch ( CloneNotSupportedException e ) { e . printStackTrace ( ) ;

.NET Framework学习笔记(四)

两盒软妹~` 提交于 2019-11-27 22:49:58
类型与通用语言运行时 5. 基元类型、引用类型与值类型 编译器直接支持的数据类型称为 基元类型 primitive type . 基元类型和 .NET 框架类库 FCL 中的类型有直接的映射关系,对于那些和 CLS 兼容的类型,其他语言也都提供了类似的基元类型。 提倡使用 FCL 类型名。 编译器能够在基元类型之间进行隐式或者显示的转型,如果转型存在潜在的 不安全 ( 造成数据丢失 ) ,则要求显示转换 System.Convert 关于 C# 溢出的检查,默认情况下是关闭的 ; C# 编译器提供了 /checked+ 命令行开关来控制溢出检查。 同时, C# 也提供了 checked 和 unchecked 操作符,及相应的语句; Byte b=100; b=checked((byte)(b+200)); checked{ Byte b=100; b=(byte)(b+100); } //checked 操作符和语句只影响加、减、乘以及 IL 指令产生的版本,在 checked 操作符和语 // 句内调用一个方法并不会对该方法产生任何影响 。 当开发应用程序时,应使用编译器的 /checked+ 命令行开关,此时系统会对任何代码做溢出检查。 CLR 不会把 System.Decima l 看做一个基元类型,当编译使用 Decimal 值的代码时,编译器产生的代码实际上会通过调用

47-Python进阶小结

旧城冷巷雨未停 提交于 2019-11-27 22:01:51
目录 Python进阶小结 一.异常TODO 二、深浅拷贝 2.1拷贝 2.2 浅拷贝 2.3 深拷贝 三、数据类型内置方法 3.1 数字类型内置方法 3.1.1 整型 3.1.2 浮点型 3.2 字符串类型内置方法 3.2.1方法 3.3 列表类型内置方法 3.3.1 方法 3.4 元祖类型内置方法 3.4.1 方法 3.5 字典类型内置方法 3.5.1 方法 3.6 集合类型内置方法 3.6.1方法 3.7 布尔类型 四、数据类型分类 4.1 按值个数 4.2 按有序无序 4.3 按可变不可变 Python进阶小结 一.异常TODO 万能捕捉异常公式 try: # 逻辑代码 1/0 except Exception as e: print(e) division by zero 二、深浅拷贝 拷贝/浅拷贝/深拷贝都是针对可变类型数据而言的 2.1拷贝 l1 = ['a','b','c',['d','e','f']] l2 = l1 l1.append('g') print(l1) print(l2) # ['a', 'b', 'c', ['d', 'e', 'f'], 'g'] # ['a', 'b', 'c', ['d', 'e', 'f'], 'g'] 如果l2是l1的拷贝对象,则l1内部的任何数据类型的元素变化,则l2内部的元素也会跟着改变,因为可变类型值变id不变 2

构造、拷贝构造、赋值、析构

﹥>﹥吖頭↗ 提交于 2019-11-27 21:59:06
需要注意的问题(当数据成员函数指针型变量,需要申请空间赋值时) 1.构造函数 ①需要给空指针申请一个‘\0’的空间 2.拷贝构造函数 ①传入的参数,必须 引用传递 否则会出现无休止的拷贝构造 ②对其参数值不做修改,传入的参数需要加const ③避免浅拷贝的产生,每次拷贝构造,都重新申请空间赋值。 3.赋值= ①需要返回引用型变量,否则会再返回值时,创建临时对象,又会无休止的拷贝构造 ②对其参数值不做修改,传入的参数需要加const ③ 最重要先判断是否是给自己赋值,如果是,直接返回 ④为考虑到异常安全,此时采用拷贝构造一个 参数(n) 的 临时对象(temp) ,来交换他们指针所指向的空间,在出此作用域后,临时对象就会释放。 4.析构 ①如果有派生类,需要将析构函数声明为虚函数,来避免内存泄漏。 #include <iostream> using namespace std; class Node { public: Node(const char*str="",int a = 0):m_a(a) { if (str == NULL) { m_p = new char[1]; m_p[0] = '\0'; } else { m_p = new char[strlen(str)+1]; strcpy(m_p, str); m_p[strlen(str)] = '\0'; } }

[转帖]linux命令dd

拈花ヽ惹草 提交于 2019-11-27 21:53:45
linux命令dd dd 是diskdump 的含义 之前学习过 总是记不住 用的还是少. http://embeddedlinux.org.cn/emb-linux/entry-level/201504/25-3100.html dd 使用dd这个linux命令可以创建一定大小文件。 linux创建文件命令:dd命令 把指定的输入文件拷贝到指定的输出文件中,并且在拷贝的过程中可以进行格式转换。语法: CODE:[Copy to clipboard]dd 〔选项〕 QUOTE: if =输入文件(或设备名称)。 of =输出文件(或设备名称)。 ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。 skip = blocks 跳过读入缓冲区开头的ibs*blocks块。 obs = bytes 一次写入bytes字节,即写 入缓冲区的字节数。 bs = bytes 同时设置读/写缓冲区的字节数(等于设置obs和obs)。 cbs = bytes 一次转换bytes字节。 count = blocks 只拷贝输入的blocks块。 conv = ASCII 把EBCDIC码转换为ASCII码。 conv = ebcdic 把ASCII码转换为EBCDIC码。 conv = ibm 把ASCII码转换为alternate EBCDIC码。 conv = blick

Python深浅copy小数据

无人久伴 提交于 2019-11-27 21:12:30
单词 set copy is == id 用法 # is # 判断两个内存地址是否相同 # 必须记住 # == # 判断等号两边的值是否相同 # 必须记住 # = 代表赋值 改变指向 代码块 同一代码块 # 在python中一个模块,一个函数,一个类,一个文件等都是一个代码块。 # 机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其重用。换句话说:执行同一个代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录那么它会重复使用这个字典中的之前的这个值。所以在你给出的例子中,文件执行时(同一个代码块)会把i1、i2两个变量指向同一个对象,满足缓存机制则他们在内存中只存在一个,即:id相同。 # 适用对象: int(float),str,bool。 不同代码块(小数据池) # 先执行代码块,不符合代码块才会执行小数据 # 代码块: 一个文件,一个模块,一个函数,一个类,终端中每一行都一个代码块 # 小数据池就是Python中一种提高效率的方式,固定数据类型使用同一个内存地址 # 小数据池 不同代码块的 # -5 ~ 256 *记住 # 字符串: # 1.字符串在做乘法的时候总长度不能超过20,进行驻留 # 记住 # 2.自己定义的字符串 长度不限制

拷贝构造

安稳与你 提交于 2019-11-27 19:39:42
相对于构造和析构 拷贝构造是构造的一种方式 1 //头文件 2 #pragma once 3 #include<iostream> 4 #include<string.h> 5 using namespace std; 6 class ss 7 { 8 int ID; 9 char *name;//默认私有 只能在类的内部使用 10 public://共有方法 里面写共有属性 11 static int x;//全局静态常量区 在类外初始化 12 ss(int id, char name[]); 13 ss(const ss&other);//拷贝构造 参数是同类对象的引用 14 ss();//申请释放对内存 15 void getData()const; 16 static void getX(); 17 void showData(); 18 ~ss();//释放对象申请的内存 19 }; 20 21 //在头文件中声明函数 在cpp文件中定义类对象 外部定义 1 #include "ss.h" 2 int ss::x = 0; 3 ss::ss() 4 { 5 ID = 0; 6 name = new char[1]; 7 strcpy(name, ""); 8 cout << "构造函数" << endl;//测试调用几次构造函数 9 10 } 11 12 13 ss::

string类的深浅拷贝复习

感情迁移 提交于 2019-11-27 18:37:16
浅拷贝:被拷贝对象的所有变量都含有与之前对象变量相同的值,而其对所有对象的引用都指向之前的对象,在拷贝值的同时也拷贝了地址,造成两个指针指向同一个地址,在释放资源的时候,同一指针会被释放两次,造成资源泄露。 深拷贝:解决浅拷贝问题,在拷贝的同时,会重新开辟一段空间,用来存储被拷贝对象。 模拟实现String类 #include<iostream> #include<string> using namespace std; class String{ public: String(const char* str) :_str(new char[strlen(str) + 1]){ strcpy(_str, str); } String(const String& d) :_str(new char[strlen(d._str) + 1]){ strcpy(_str, d._str); } ~String(){ cout << "~String" << endl; delete[]_str; _str = NULL; } //深拷贝的传统写法 /*String& operator=(const String& d){ if (_str == d.str){ return *this; } else{ delete[]_str; _str = new char[strlen(d._str