对象存储

40个Java集合面试问题和答案

一曲冷凌霜 提交于 2019-12-07 05:08:14
1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久。它还包括在Java并发包中,阻塞接口以及它们的实现。集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类。 (2)随着使用经过严格测试的集合框架类,代码质量会得到提高。 (3)通过使用JDK附带的集合类,可以降低代码维护成本。 (4)复用性和可操作性。 2.集合框架中的泛型有什么优点? Java1.5引入了泛型,所有的集合接口和实现都大量地使用它。泛型允许我们为集合提供一个可以容纳的对象类型,因此,如果你添加其它类型的任何元素,它会在编译时报错。这避免了在运行时出现ClassCastException,因为你将会在编译时得到报错信息。泛型也使得代码整洁,我们不需要使用显式转换和instanceOf操作符。它也给运行时带来好处,因为不会产生类型检查的字节码指令。 3.Java集合框架的基础接口有哪些? Collection为集合层级的根接口 。一个集合代表一组对象,这些对象即为它的元素。Java平台不提供这个接口任何直接的实现。

R语言

风流意气都作罢 提交于 2019-12-06 23:24:26
1、R语言介绍 R和RStudio 是与计算机进行对话的两个工具 RStudio 是话筒 R是沟通所用的语言 R的由来:基于S语言,由新西兰奥克兰大学的Robert Gentleman和Ross Ihaka开发,因两位开发者名字首字母都是R,所以该语言命名为R。 怎样理解R 一种计算机语言 一种用于统计分析、绘图的操作环境 用户接口 R 语言特点 R 是一款开源、免费的软件,可以跨平台运行 R 提供了非常丰富的统计分析技术 有很多非常实用并包含最新技术的R包,而且更新速度非常快 R的绘图功能十分强大 软件界面: 配置文件,选择SDI单窗口 选择save进行直接保存修改,不需要更改路径 效果图: R环境下的提示符: 2、R包的安装 下载包: 查看所有包的命名: (.packages(all=T)) 加载包命令: 没有任何提示表示结果正常 向量的长度=向量的个数 字符串向量,双引号 “ ” c函数:拼接功能 同时下载两个包 install.packages(c("reshape2","dplyr")) 创建R对象 R语言区分大小写 对象sz <-赋值符号 1:6数值 sz<-1:6 连续赋值: ls()函数调取所有对象 get()函数得到变量的数值 删除对象: 删除所有对象 rm(list=ls()) 统计函数 sum() sz+1:2 sz+1:4 元素方式运算

使用 HTML5 IndexedDB API

拟墨画扇 提交于 2019-12-06 22:48:04
HTML5 的一个重要特性是本地数据持久性,它使用户能够在线和离线访问 Web 应用程序。此外,本地数据持久性使移动应用程序更灵敏,使用的带宽更少,而且能够在低带宽场景中更高效地工作。HTML5 提供了一些本地数据持久性选项。第一个选项是 localstorage,它支持您使用一个简单的键值对来存储数据。IndexedDB(一个更加强大的选项)支持您本地存储大量对象,并使用健壮的数据访问机制检索数据。 IndexedDB API 取代了 Web Storage API,后者在 HTML5 规范中已不推荐使用。(但一些领先的浏览器仍然支持 Web Storage,其中包括苹果公司的 Safari 和 Opera Web 浏览器)与 Web Storage 相比,IndexedDB 具有多个优势,其中包括索引、事务处理和健壮的查询功能。本文将通过一系列的示例来展示如何管理 IndexedDB 数据库。(参见 下载 一节,获取示例的完整源代码。) 重要概念 一个网站可能有一个或多个 IndexedDB 数据库,每个数据库必须具有惟一的名称。 一个数据库可包含一个或多个对象存储。一个对象存储(由一个名称惟一标识)是一个记录集合。每个记录有一个键 和一个值。该值是一个对象,可拥有一个或多个属性。键可能基于某个键生成器,从一个键路径衍生出来,或者是显式设置。一个键生成器自动生成惟一的连续正整数

MySQL优化-2-数据库对象

拈花ヽ惹草 提交于 2019-12-06 22:29:58
优化表的数据类型 - PROCEDURE ANALYSE() 表需要使用何种数据类型,是需要根据应用来判断的。虽然应用设计的时候需要考虑字段的长度留有一定的冗余,但是不推荐让很多字段都留有大量的冗余,这样即浪费存储也浪费内存。我们可以使用PROCEDURE ANALYSE()对当前已有应用的表类型的判断,该函数可以对数据表中的列的数据类型提出优化建议,可以根据应用的实际情况酌情考虑是否实施优化。 语法: SELECT * FROM tbl_name PROCEDURE ANALYSE(); SELECT * FROM tbl_name PROCEDURE ANALYSE(16,256); 输出的每一列信息都会对数据表中的列的数据类型提出优化建议。第二个例子告诉PROCEDURE ANALYSE()不要为那些包含的值多于16 个或者256 字节的ENUM 类型提出建议。如果没有这样的限制,输出信息可能很长;ENUM 定义通常很难阅读。 在对字段类型进行优化时,可以根据统计信息并结合应用的实际情况对其进行优化。 通过拆分提高表的访问效率: 这里我们所说的拆分,主要是针对Myisam 类型的表,拆分的方法可以分成两种情况: 1. 纵向拆分: 纵向拆分是只按照应用访问的频度,将表中经常访问的字段和不经常访问的字段拆分成两个表,经常访问的字段尽量是定长的

java的内存管理机制

不打扰是莪最后的温柔 提交于 2019-12-06 21:23:29
C++内存管理详解: 内存分配方式简介   在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。   栈,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。   堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。   自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。   全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。   常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。 堆和栈究竟有什么区别? 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事

String引发的提问,我差点跪了

做~自己de王妃 提交于 2019-12-06 21:13:42
面试官:下面代码执行结果是什么?String t0 = "helloworld";String t1 = new String("helloworld");System.out.println(t0==t1); 小白:(心里嘀咕:不会这么简单吧)false 面试官:详细解释一下为什么? 小白:在Java虚拟机栈中创建一个String类型变量t0,然后会优先在方法区的运行时常量池中查找是否已经存在相同的字符串,倘若已经存在,栈中t0变量直接指向该字符串;倘若不存在,则在常量池中创建一个"helloworld"字符串,再将栈中t0变量指向该字符串。通过new关键字创建字符串对象,首先当前类被加载后,会在方法区的运行时常量池中查找是否已经存在"helloworld"字符串,如果不存在,则将编译期生成的"helloworld"存到运行时常量池中,如果已存在不存放,在堆中生成一个String类型的对象,栈中t1变量指向该对象。因为t0和t1指向的对象不同,当使用==做比较时,比较的是对象的引用(可能是指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其它与此对象相关的位置),自然返回的是false。 面试官:那下面代码的运行结果又是什么?String t0 = new String("hello") + new String("world");t0.intern();String

Spark (三) 性能优化

∥☆過路亽.° 提交于 2019-12-06 20:35:05
参数配置 1、spark-env.sh 2、程序通过SparkConf或System.setProperty 性能观察与日志 1)Web UI。 2)Driver程序控制台日志。 3)logs文件夹下日志。 4)work文件夹下日志。 5)Profiler工具。 调度与分区优化 1.小分区合并 频繁的过滤或者过滤掉的数据量过大就会产生问题,造成大量小分区的产生。Spark是每个数据分区都会分配一个任务执行,如果任务过多,则每个任务处理的数据量很小,会造成线程切换开销大,很多任务等待执行,并行度不高; 解决方式:可以采用RDD中重分区的函数进行数据紧缩,减少分区数,将小分区合并变为大分区。 通过coalesce函数来减少分区。这个函数会返回一个含有numPartitions数量个分区的新RDD,即将整个RDD重分区。 当分区由10000重分区到100时,由于前后两个阶段的分区是窄依赖的,所以不会产生Shuffle的操作。 但是如果分区数量急剧减少,如极端状况从10000重分区为一个分区时,就会造成一个问题:数据会分布到一个节点上进行计算,完全无法开掘集群并行计算的能力。为了规避这个问题,可以设置shuffle=true 由于Shuffle可以分隔Stage,这就保证了上一阶段Stage中的上游任务仍是10000个分区在并行计算。如果不加Shuffle

如何设计一个本地缓存

耗尽温柔 提交于 2019-12-06 20:23:31
前言 最近在看Mybatis的源码,刚好看到缓存这一块,Mybatis提供了一级缓存和二级缓存;一级缓存相对来说比较简单,功能比较齐全的是二级缓存, 沈阳SEO 基本上满足了一个缓存该有的功能;当然如果拿来和专门的缓存框架如ehcache来对比可能稍有差距;本文我们将来整理一下实现一个本地缓存都应该需要考虑哪些东西。 考虑点 考虑点主要在数据用何种方式存储,能存储多少数据,多余的数据如何处理等几个点,下面我们来详细的介绍每个考虑点,以及该如何去实现; 1.数据结构 首要考虑的就是数据该如何存储,用什么数据结构存储,最简单的就直接用Map来存储数据;或者复杂的如redis一样提供了多种数据类型哈希,列表,集合,有序集合等,底层使用了双端链表,压缩列表,集合,跳跃表等数据结构; 2.对象上限 因为是本地缓存,内存有上限,所以一般都会指定缓存对象的数量比如1024,当达到某个上限后需要有某种策略去删除多余的数据; 3.清除策略 上面说到当达到对象上限之后需要有清除策略,常见的比如有LRU(最近最少使用)、FIFO(先进先出)、LFU(最近最不常用)、SOFT(软引用)、WEAK(弱引用)等策略; 4.过期时间 除了使用清除策略,一般本地缓存也会有一个过期时间设置,比如redis可以给每个key设置一个过期时间,这样当达到过期时间之后直接删除,采用清除策略+过期时间双重保证; 5.线程安全

Ceph对象存储介绍与安装

那年仲夏 提交于 2019-12-06 17:10:38
一:概念介绍 Ceph对象网关是建立在librados之上的对象存储接口,可为应用程序提供通往Ceph存储集群的RESTful网关, Ceph对象存储支持两个接口 1.S3兼容:为对象存储功能提供与Amazon S3 RESTful API的大部分子集兼容的接口 2.Swift兼容:为对象存储功能提供与OpenStack Swift Ceph对象存储使用Ceph对象网关守护进程(radosgw),该守护进程是用于与Ceph存储群集进行交互的HTTP服务器,由于它提供与OpenStack Swift和Amazon S3兼容的接口,因此Ceph对象网关具有自己的用户管理。,Ceph对象网关可以将数据存储在一个同时拥有Ceph的文件系统客户端或Ceph块设备客户端的数据的一个Ceph存储群集中。 S3和Swift API共享一个公共的名称空间,因此您可以使用一个API写入数据,而使用另一个API读出数据。 二:安装 从Firefly(v0.80)开始,Ceph对象网关运行在Civetweb(嵌入到ceph-radosgw守护程序中)中,而不是Apache和FastCGI上,使用Civetweb可以简化Ceph对象网关的安装和配置,另外,从v0.80后开始,Ceph对象网关不支持SSL。您可以使用SSL设置反向代理服务器,以将HTTPS请求作为HTTP请求发送到CivetWeb。

ceph pg知识点

谁说胖子不能爱 提交于 2019-12-06 16:52:45
Pg 和 pgp 的含义: PG 是指定存储池存储对象的目录有多少个, PGP 是存储池 PG 的 OSD 分布组合个数 PG 的增加会引起 PG 内的数据进行分裂,分裂到相同的 OSD 上新生成的 PG 当中 PGP 的增加会引起部分 PG 的分布进行变化,但是不会引起 PG 内对象的变动 存储池 pg 的计算: Pg 数量 = ( osd 数量 *200 ) / 副本数 例子 1 :创建存储池时,有 10 个硬盘,副本数为 2 。 PgNumBase = (10 * 200) / 2 = 1000 ,找到的 N 为 9 ,即 29 < 1000 < 210 ,因为 1000 > ( 29 * 1.25 ) ,所以最后得到 PgNum = 1024 。 例子 2 :创建存储池时,有 9 个硬盘,副本数为 3 。 PgNumBase = (9 * 200) / 3 = 600 ,找到的 N 为 9 ,即 29 < 600 < 210 ,因为 600 <= ( 29 * 1.25 ) ,所以最后得到的 PgNum = 512 。 Pg 的角色 正常情况下同一个 pg 所有的实例保存的内容完全相同,原则上不需要对它们的身份加以区分,但是出于数据一致性考虑,仍然需要从中选出一个起主导作用的实例,称为 Primary ,由其作为集中点对所有任务进行统筹管理。 Primary