对象存储

C++笔记8

回眸只為那壹抹淺笑 提交于 2020-02-05 11:33:18
构造函数和析构函数什么时候被调用 ·构造函数用来初始化的,就是说存储空间已经有了。构造函数不负责盖房子,只是装修房子。 ·析构函数也不是回收者整个对象所占的存储空间,只是在这个对象被操作系统回收之前做一些善后工作。(不拆房子,比如把值钱东西搬走这样) 来源: https://www.cnblogs.com/AirBirdDD/p/12262828.html

day13_Collection、泛型

旧时模样 提交于 2020-02-05 01:54:38
Collection集合 集合概述 在前面基础班我们已经学习过并使用过集合ArrayList ,那么集合到底是什么呢? 集合: 集合是java中提供的一种容器,可以用来存储多个数据。 集合和数组的区别 数组的长度是固定的。集合的长度是可变的。 数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。 学习集合的目标 会使用集合存储数据 会遍历集合,把数据取出来 掌握每种集合的特性 学习集合的方式 学习顶层: 学习顶层的接口/抽象类共性的方法,所有的子类都可以使用 使用底层: 顶层不是抽象类就是接口,无法创建对象使用。我们要使用底层的实现类来创建对象使用。 集合框架 JAVASE提供了满足各种需求的API,在使用这些API前,先了解其继承与接口操作架构,才能了解何时采用哪个类,以及类之间如何彼此合作,从而达到灵活应用。集合按照其存储结构可以分为两大类,分别是单列集合java.util.Collection 和双列集合 java.util.Map。Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是java.util.List 和 java.util.Set 。其中, List 的特点是元素有序、元素可重复丶有索引可以使用普通for循环遍历。

块存储、文件存储、对象存储这三者的本质差别是什么?

时光毁灭记忆、已成空白 提交于 2020-02-05 00:44:30
【块存储】 典型设备:磁盘阵列,硬盘 块存储主要是将裸磁盘空间整个映射给主机使用的,就是说例如磁盘阵列里面有5块硬盘(为方便说明,假设每个硬盘1G),然后可以通过划逻辑盘、做Raid、或者LVM(逻辑卷)等种种方式逻辑划分出N个逻辑的硬盘。(假设划分完的逻辑盘也是5个,每个也是1G,但是这5个1G的逻辑盘已经于原来的5个物理硬盘意义完全不同了。例如第一个逻辑硬盘A里面,可能第一个200M是来自物理硬盘1,第二个200M是来自物理硬盘2,所以逻辑硬盘A是由多个物理硬盘逻辑虚构出来的硬盘。) 接着块存储会采用映射的方式将这几个逻辑盘映射给主机,主机上面的操作系统会识别到有5块硬盘,但是操作系统是区分不出到底是逻辑还是物理的,它一概就认为只是5块裸的物理硬盘而已,跟直接拿一块物理硬盘挂载到操作系统没有区别的,至少操作系统感知上没有区别。 此种方式下,操作系统还需要对挂载的裸硬盘进行分区、格式化后,才能使用,与平常主机内置硬盘的方式完全无异。 优点: 1、 这种方式的好处当然是因为通过了Raid与LVM等手段,对数据提供了保护。 2、 另外也可以将多块廉价的硬盘组合起来,成为一个大容量的逻辑盘对外提供服务,提高了容量。 3、 写入数据的时候,由于是多块磁盘组合出来的逻辑盘,所以几块磁盘可以并行写入的,提升了读写效率。 4、 很多时候块存储采用SAN架构组网,传输速率以及封装协议的原因

Redis的五种数据类型---String, Hash, List, Set, Zset

会有一股神秘感。 提交于 2020-02-04 23:39:56
前言 Redis有五种数据类型: String, Hash, List, Set, Zset,下面对对这几种类型作详细的介绍 一. String (相当于Java中的字符串) 1.1简介: string 是redis最基本的类型,一个key对应一个value string类型是二进制安全的,意思是redis的string可以包含任何数据。比如jpg图片或者序列化对象。 string 类型是Redis最基本的数据类型,一个键最大能存储512MB 二进制安全是指,在传输数据时,保证二进制数据的信息安全,也就是不被篡改,破译等。如果被攻击,能够及时检测出来。 二进制安全特点: <1>编码,解码发生在客户端完成,执行效率高 <2>不需要频繁的编解码,不会出现乱码 1.2 String命令: (命令不用区分大小写) 赋值语法: [1] Redis set 命令常用于设置key的值,如果key已存储值,set 就是写旧值,且无视类型 set key_name value [2] 只有在key不存在时设置key的值。 Setnx(SET if Not exists) 命令在指定的key不存在时,为key设置指定的值 setnx key value //(面试问题) 解决分布锁的方案之一 [3] 同时设置一个或多个key-value对 mset key value [key value....]

String 类

独自空忆成欢 提交于 2020-02-04 19:15:55
基本概念: 在Java里面String 是作为一个对象来使用的,所以在堆栈里面:栈存储String对象名,而堆是存储对象名所对应的字符串的。 首先基本了解下栈与堆例如: int de=12; int ed=12; Integer de11=new Integer(12); Integer de1=12; 我们都知道,栈内存是用来存放基本类型(类型值及变量名)和引用类型的变量名的。 在8大‘基本’数据类型里面,上面的变量属性都存在栈里面,并且相等的数据都用同一个地址来表示。 就如上面的例子来说,de和ed它们虽然声明了两个不同的变量名,但是存储地址是一样的。new的Integer对象虽然与前两个相同,但是地址指向的是堆内存。 注意:没有new的Integer跟int没有啥区别,都是存储的常量,放在栈里面。 String de="你好婷婷"; String de1="你好婷婷"; System.out.println(de==de1); String都是以一个对象来使用的,所以在声明一个String变量时,变量名是存在栈里面,而变量对应的字符串是存在”堆“里面的。 de所对应的堆内存地址与de1是相同的。所以上面输出结果应该是true (当创建String de="你好婷婷";,在创String de1="你好婷婷"; ,de1会在内存地址查找是否有相同的,查到de时

java中String常量的存储原理

半世苍凉 提交于 2020-02-04 02:00:41
从一个博客上看到的6个题,先看看吧,如果都会了,这部分的知识就掌握的不错啦!输出结果在代码注释后面: test1: package StringTest; public class test1 { public static void main(String[] args){ String a = "a1";//“a1”在编译的时候就能确定,所以编译的时候,a1被放进了常量池中,同时a指向常量池中的a1对象 String b = "a"+ 1;//a和1这两个常量都能在编译时确定,所以他们相加的结果也能确定,因此编译器检查常量池中是否有值为a1的String对象,发现有了,因此b也指向常量池中的a1对象 System.out.println(a==b);//==判断的是a和b是否指向同一个对象,也就是同一块内存区域 }//true } test2: package StringTest; public class test2 { public static void main(String[] args){ String a = "ab"; String bb = "b"; String b = "a"+ bb; //编译器不能确定为常量 System.out.println(a==b); }//false } test3: package StringTest; public

java中String常量的存储原理

别说谁变了你拦得住时间么 提交于 2020-02-04 01:59:48
java中String常量的存储原理 从一个博客上看到的6个题,先看看吧,如果都会了,这部分的知识就掌握的不错啦!输出结果在代码注释后面: test1: package StringTest; public class test1 { public static void main(String[] args){ String a = " a1 " ;//“a1”在编译的时候就能确定,所以编译的时候,a1被放进了常量池中,同时a指向常量池中的a1对象 String b = " a " + 1 ;//a和1这两个常量都能在编译时确定,所以他们相加的结果也能确定,因此编译器检查常量池中是否有值为a1的String对象,发现有了,因此b也指向常量池中的a1对象 System.out.println(a == b);//==判断的是a和b是否指向同一个对象,也就是同一块内存区域 } // true } test2: package StringTest; public class test2 { public static void main(String[] args){ String a = " ab " ; String bb = " b " ; String b = " a " + bb; // 编译器不能确定为常量 System.out.println(a == b); } //

Git内部原理探索

人走茶凉 提交于 2020-02-03 02:14:21
目录 前言 Git分区 .git版本库里的文件/目录是干什么的 Git是如何存储文件信息的 当我们执行git add、git commit时,Git背后做了什么 Git分支的本质是什么 HEAD引用 参考 @ 前言 洞悉技术的本质,可以让我们在层出不穷的框架面前仍能泰然处之。用了那么久的 Git,不懂点内部原理,那可不行!懂点原理可以让我们遇到问题的时候能够更好更快的理清解决问题的思路。 博客原文 要真正读懂本文可能需要以下基础: 有 Git 使用经验 对 Git 的三个分区有所了解 熟悉常用的 Linux 命令 对经典哈希算法有一定的了解,比如 SHA-1 、SHA-256、MD5等 在开始之前,让我们先抛出几个问题,然后一一解决、回答它们 .git版本库里的文件/目录是干什么的? Git是如何存储文件信息的? 当我们执行git add、git commit时,Git背后做了什么? Git分支的本质是什么? Git分区 在真正开始之前,让我们先回顾下Git的三个分区(Workspace、Index / Stage、git repository) 工作区(Workspace):此处进行代码文件的编辑 索引或称暂存区(Index / Stage):存储文件状态信息,进行commit前会对此时的文件状态作快照(Snapshot) Git版本库(git repository):由Git

day07_Scanner类、Random类、ArrayList 类

自作多情 提交于 2020-02-03 00:31:39
API 概述 API(Application Programming Interface),应用程序编程接口。Java API是一本程序员的 字典 ,是JDK中提供给我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。 API使用步骤 打开帮助文档。 点击显示,找到索引,看到输入框。 你要找谁?在输入框里输入,然后回车。 看包。java.lang下的类不需要导包,其他需要。 看类的解释和说明。 学习构造方法。 使用成员 。 引用类型使用步骤 类属于引用类型的一种,所以符合引用类型的使用步骤 1:导包 使用import关键字导包,在类的所有代码之前导包,引入要使用的类型,java.lang包下的所有类无需导入。 格式: 2:创建对象 使用该类的构造方法,创建一个该类的对象。 格式: 3:调用方法 调用该类的成员方法,完成指定功能。 格式: int i = sc.nextInt(); // 接收一个键盘录入的整数 Scanner类 一个可以解析基本类型和字符串的简单文本扫描器。Scanner类的功能:可以实现键盘输入数据,到程序当中。 Scanner使用步骤 查看类 java.util.Scanner :该类需要import导入后使用。

会话技术——Session

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-01 14:31:55
目录 什么是Session? 实现原理 Session的操作 Session持久化处理 Session的细节 Session 什么是Session? 跳转到目录 Session是 服务器端技术 ,服务器在运行时可以为每一个用户的浏览器创建一个独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其他web资源时,其他web资源再从用户各自的session中取出数据为用户服务.总而言之,将 数据保存在服务器 . Session的特点 session 用于存储一次会话的多次请求的数据 session 数据存储在服务器中 session 可以存储任意类型,任意大小的数据 Session的原理 跳转到目录 Session其本质就是一个会话Cookie( 浏览器关闭后,Session就失效了 ) 使用Cookie和Session发送请求的内容 Session的操作 跳转到目录 一、 获取Session对象 request.getSession(true) : 获取Session对象,如果没有Session对象,直接创建一个新的返回,缺省值 request.getSession(false) : 获取Session对象,如果没有返回null request.getSession()