对象存储

面试(二)

陌路散爱 提交于 2020-01-09 18:51:32
4.介绍一下java的数据结构,然后手写一个栈的类 主要可以分为两类: 1)Java中定义了一个接口collection,用来存储一个元素集合 2)另一种是定义了映射(map)用来存储键/值对。 Collection接口为线性表(list)、向量(vector)、栈(stack)、队列(queue)、优先队列(priority queue)以及规则集(set)定义了通用的操作 Set(规则集) 用于存储一组不重复的元素。 重要的实现类: HashSet 。 List(线性表) 用于存储一个有序元素的集合(允许重复)。两个重要的实现类: ArrayList (数组线性表类)和 LinkedList (链表类)。 Stack(栈) 用于存储采用后进先出方式处理的对象。 Queue(队列) 用于采用先进先出方式处理的对象。不过队列用双向链表 LinkedList 实现更好 PriorityQueue用于存储按照优先级顺序处理的对象。 map(映射)是一个存储“键/值对”集合的容器对象。键很像索引,在List中,索引是整数;在Map中,键可以是任意类型的对象。映射中不能有重复的键,每个键都对于一个值。 线性表、栈、队列、优先队列: ArrayList、LinkedList 都是线程不安全的 。 vector是线程安全的。 ArrayList :用数组存储元素。这个数组是动态创建的

Java基础加强之集合

本秂侑毒 提交于 2020-01-09 04:04:45
集合整体框架图 各集合框架的概述 1. Collection(常用List和Set,不常用Queue和Vector),单元素集合。 2. Map(常用HashMap和TreeMap,不常用HashTable),key-value映射关系。 3. Iterator(迭代器) 4. Comparable和Comparator比较器 5. Collections和Arrays工具类 Java中结合和数组的比较 1.  数组的长度在初始化时指定,只能保存定长的数据。   而集合可以保存不确定长度的数据。同时可以保存具有映射关系的数据(即关联数组,键值对key-value)。 2.  数据元素既可以是基本类型的值,也可以是对象,集合只能保存对象 (实际上是只保存对象的引用变量),基本数据类型的变量要转换成对应的包装类才能放入集合中。 常用集合特性概述 List系 List的特点: 元素有放入顺序,元素可以重复 。 List接口的三个实现类:ArrayList、LinkedList和Vector。 ArrayList、LinkedList和Vector的区别 LinkedList:底层是基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时也存储下一个元素的内存地址。 链表增删快,查找慢。 ArrayList和Vector: 两者底层都是基于数组实现的,查询快,增删慢。

浅谈hashCode

只谈情不闲聊 提交于 2020-01-09 00:55:18
《Java编程思想》中对hashCode的描述: 设计hashCode()时最重要的因素就是:无论何时,对同一个对象调用hashCode()都应该产生同样的值。如果将一个对象用put()添加进HashMap时产生一个hashCdoe()值,而用get()取出时却产生了另一个hashCode()值,那么就无法重新取得该对象了。所以如果你的hashCode()方法依赖于对象中易变的数据,用户就要当心了,因为此数据发生变化时,hashCode()方法就会生成一个不同的散列码,相当于产生了一个不同的键。 1. HashCode源代码分析 1.1 Object中的HashCode源代码 public int hashCode() { int lockWord = shadow$_monitor_; final int lockWordStateMask = 0xC0000000; // Top 2 bits. final int lockWordStateHash = 0x80000000; // Top 2 bits are value 2 (kStateHash). final int lockWordHashMask = 0x0FFFFFFF; // Low 28 bits. if ((lockWord & lockWordStateMask) == lockWordStateHash

Digital Imaging and Communication in Medicine

我的未来我决定 提交于 2020-01-09 00:20:42
Digital Imaging and Communication in Medicine DICOM 3.0 DICOM是Digital Imaging and Communications in Medicine的英文缩写,即医学数字成像和通信标准。是 ACR (American College of Radiology,美国放射学会)和NEMA(National Electrical Manufactorers Association,国家电子制造商协会)为主制定的用于数字化医学影像传送、显示与存储的标准。在DICOM标准中详细定义了影像及其相关信息的组成格式和交换方法,利用这个标准,人们可以在影像设备上建立一个接口来完成影像数据的输入/输出工作。 DICOM标准以计算机网络的工业化标准为基础,它能帮助更有效地在医学影像设备之间传输交换数字影像,这些设备不仅包括CT、MR、核医学和超声检查,而且还包括CR、胶片数字化系统、视频采集系统和HIS/RIS信息管理系统等。 该标准1985年产生。目前版本为2003年发布的 DICOM 3.0 2003 版本。 DICOM 发展历史 1982 - ACR和NEMA联合成立了一个委员会,制定DICOM标准。 1985 - 公布1.0版本(ACR-NEMA V1.0)。 1988 - 公布2.0版本(ACR-NEMA V2.0)。

表空间Tablespace

别说谁变了你拦得住时间么 提交于 2020-01-08 22:09:28
Oracle Schema Objects Table Storage O racle 数据库 如何保存表数据? Oracle Database uses a data segment in a tablespace to hold table data. Oracle 数据库使用 表空间 中的 数据段 保存表 数据 。 As explained in "User Segments" , a segment contains extents made up of data blocks . 如 " 用户段 " 所述, 段 包含 由 数据块 组成的 扩展盘区 。 The data segment for a table (or cluster data segment, when dealing with a table cluster ) is located in either the default tablespace of the table owner or in a tablespace named in the CREATE TABLE statement. 表数据段 (或涉及表簇时的簇数据段)位于表所有者的默认空间中,或 CREATE TABLE 语句中所指定的表空间中。 表空间、段、区、块的关系 逻辑存储结构包括 表空间,段,区,数据块 。逻辑结构之间的关系是

Java面试题-集合框架篇三

感情迁移 提交于 2020-01-08 21:45:11
21、ArrayList和Vector的区别 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,并且其中的数据是允许重复的,这是与HashSet之类的集合的最大不同处,HashSet之类的集合不可以按索引号去检索其中的元素,也不允许有重复的元素。 ArrayList与Vector的区别主要包括两个方面:. (1)同步性: Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。 (2)数据增长: ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间,每次要增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定的平衡。Vector默认增长为原来两倍,而ArrayList的增长策略在文档中没有明确规定

ceph 对象存储s3

最后都变了- 提交于 2020-01-08 19:47:34
ceph s3cmd的命令 问题: 1. 使用access_key和secret_key获取的对象url,会缓存在浏览器disk cache中,导致每次第二次访问资源的时候,会报no-cors的错误 2. 浏览器获取数据时,会显示(from disk cache) 针对问题2,调研 强缓存 强缓存 强缓存:不会向服务器发送请求,直接从缓存中读取资源,在 chrome 控制台的 Network 选项中可以看到该请求返回 200 的状态码,并且 Size 显示 from disk cache 或 from memory cache。强缓存可以通过设置两种 HTTP Header 实现:Expires 和 Cache-Control。 1.Expires 缓存过期时间,用来指定资源到期的时间,是服务器端的具体的时间点。也就是说,Expires=max-age + 请求时间,需要和 Last-modified 结合使用。Expires 是 Web 服务器响应消息头字段,在响应 http 请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。 Expires 是 HTTP/1 的产物,受限于本地时间,如果修改了本地时间,可能会造成缓存失效。Expires: Wed, 22 Oct 2018 08:41:00 GMT表示资源会在 Wed, 22 Oct 2018 08

关于hashcode和equals方法说明

扶醉桌前 提交于 2020-01-08 11:11:31
一、前言 我们都知道,要比较两个对象是否相等时需要调用对象的equals()方法,即判断对象引用所指向的对象地址是否相等,对象地址相等时,那么与对象相关的对象句柄、对象头、对象实例数据、对象类型数据等也是完全一致的,所以我们可以通过比较对象的地址来判断是否相等。 二、Object源码理解 对象在不重写的情况下使用的是Object的equals方法和hashcode方法,从Object类的源码我们知道,默认的equals 判断的是两个对象的引用指向的是不是同一个对象;而hashcode也是根据对象地址生成一个整数数值; 另外我们可以看到Object的hashcode()方法的修饰符为native,表明该方法是否操作系统实现,java调用操作系统底层代码获取哈希值。 public class Object { public native int hashCode(); /** * Indicates whether some other object is "equal to" this one. * <p> * The {@code equals} method implements an equivalence relation * on non-null object references: * <ul> * <li>It is <i>reflexive</i>: for any

JVM中锁优化,偏向锁、自旋锁、锁消除、锁膨胀

雨燕双飞 提交于 2020-01-08 10:25:16
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt364 本文将简单介绍HotSpot虚拟机中用到的锁优化技术。 自旋锁 互斥同步对性能最大的影响是阻塞的实现,挂起线程和恢复线程的操作都需要转入内核态中完成,这些操作给系统的并发性能带来了很大的压力。而在很多应用上,共享数据的锁定状态只会持续很短的一段时间。若实体机上有多个处理器,能让两个以上的线程同时并行执行,我们就可以让后面请求锁的那个线程原地自旋(不放弃CPU时间),看看持有锁的线程是否很快就会释放锁。为了让线程等待,我们只须让线程执行一个忙循环(自旋),这项技术就是自旋锁。 如果锁长时间被占用,则浪费处理器资源,因此自旋等待的时间必须要有一定的限度,如果自旋超过了限定的次数仍然没有成功获得锁,就应当使用传统的方式去挂起线程了(默认10次)。 JDK1.6引入自适应的自旋锁:自旋时间不再固定,由前一次在同一个锁上的自旋时间及锁的拥有者的状态来决定。如果在同一个锁对象上,自旋等待刚刚成功获得过锁,并且持有锁的线程正在运行中,那么虚拟机就会认为这次自旋也很有可能再次成功,进而它将允许自旋等待持续相对更长的时间。 锁削除 锁削除是指虚拟机即时编译器在运行时,对一些代码上要求同步,但是被检测到不可能存在共享数据竞争的锁进行削除

Map的底层实现原理

走远了吗. 提交于 2020-01-08 09:58:28
一,前言 1.1,概述 ​ 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射(K-V)。Java提供了专门的集合类用来存放这种对象关系的对象,即 java.util.Map 接口。 Collection 中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。 Map 中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键(K)可以找对所对应的值(V)。 Collection 中的集合称为单列集合, Map 中的集合称为双列集合。 需要注意的是, Map 中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。 ​ 通过查看Map接口描述,看到Map有多个子类,这里我们主要讲解常用的HashMap集合、LinkedHashMap集合。 HashMap<K,V> :存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。 LinkedHashMap<K,V> :HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法