空间数据

JavaSE(7续)

夙愿已清 提交于 2019-11-26 13:59:15
5. List 的三个子类的特点 ArrayList 底层结构是数组,底层查询快,增删慢。 LinkedList 底层结构是链表型的,增删快,查询慢。 voctor 底层结构是数组 线程安全的,增删慢,查询慢。 6 . List 和 Map、Set 的区别**** 6.1 结构特点 List 和 Set 是存储单列数据的集合,Map 是存储键和值这样的双列数据的集合;List 中存储的数据是有顺序,并 且允许重复;Map 中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的,Set 中存储的数据是无 序的,且不允许有重复,但元素在集合中的位置由元素的 hashcode 决定,位置是固定的(Set 集合根据 hashcode 来进行数据的存储,所以位置是固定的,但是位置不是用户可以控制的,所以对于用户来说 set 中的元素还是无序的); 6.2 实现类 List 接口有三个实现类(LinkedList:基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢;ArrayList:基于数组实现,非线程安全的,效率高,便于索引,但不便于插入删除;Vector:基于数组实现,线程安全的,效率低)。 Map 接口有三个实现类(HashMap:基于 hash 表的 Map 接口实现,非线程安全,高效,支持 null 值和 null键

SQL性能优化(efficacious )

跟風遠走 提交于 2019-11-26 12:46:55
1、优化目标 减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段。 降低 CPU 计算 除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了。order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算)。当我们的 IO 优化做到一定阶段之后,降低 CPU 计算也就成为了我们 SQL 优化的重要目标 2、优化方法 一、改变 SQL 执行计划 明确了优化目标之后,我们需要确定达到我们目标的方法。对于 SQL 语句来说,达到上述2个目标的方法其实只有一个,那就是 改变 SQL 的执行计划,让他尽量“少走弯路”,尽量通过各种“捷径”来找到我们需要的数据 ,以达到 “ 减少 IO 次数 ” 和 “ 降低 CPU 计算 ” 的目标 常见误区 (1)count(1)和count(primary_key) 优于 count(*) X 很多人为了统计记录条数,就使用 count(1) 和 count(primary_key) 而不是 count(*) ,他们认为这样性能更好,其实这是一个误区。对于有些场景,这样做可能性能会更差

C语言

旧街凉风 提交于 2019-11-26 02:31:56
一、编译链接过程 编译 预处理 删除注释,宏替换,头文件展开,条件编译 编译 词法分析,语法分析,语义分析,符号汇总(生成汇编代码) 汇编 将形成的汇编代码转为二进制代码,形成对应的符号表 链接 合并段表以及符号表的重定位 二、指针和数组 数组和指针的区别和联系 联系 表达式中的数组名就是指针 C语言中把数组下标作为指针的偏移量 ==作为函数参数的数组名等同于指针== 区别 数组名在传参时会退化为指针,指针不会(所以一定不要在函数内部对传参后的数组名进行sizeof大小) 内存中数组是一块连续开辟的空间,指针只占一个指针类型的大小空间(32位为4字节,64位为8字节) 数组可以通过下标直接进行访问,指针需要进行计算间接访问 数组名具有常属性,不能进行++,--操作;指针可以 数组指针和指针数组区别 以 int (*p)[n] 为例,从右往左理解,() 高优先级,先定义一个指针,然后看[],说明这是一个指向数组的指针,最后 int 型。 数组指针(int (*p)[n]) 代表一个指向有n个int类型的数组的指针,也叫行指针 指针数组(int *p[n]) 代表一个有n个int* 指针的数组 区别:数组指针由于是一个指针,所以内存中只消耗一个指针大小的空间;指针数组是一个数组,消耗n个对应类型指针大小的空间。 需要注意的点 sizeof字符串指针大小为对应平台下指针大小

压缩20M文件从30秒到1秒的优化过程

心已入冬 提交于 2019-11-25 22:53:46
文章来源公众号: IT牧场 有一个需求需要将前端传过来的10张照片,然后后端进行处理以后压缩成一个压缩包通过网络流传输出去。之前没有接触过用Java压缩文件的,所以就直接上网找了一个例子改了一下用了,改完以后也能使用,但是随着前端所传图片的大小越来越大的时候,耗费的时间也在急剧增加,最后测了一下压缩20M的文件竟然需要30秒的时间。压缩文件的代码如下。 public static void zipFileNoBuffer() { File zipFile = new File(ZIP_FILE); try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile))) { //开始时间 long beginTime = System.currentTimeMillis(); for (int i = 0; i < 10; i++) { try (InputStream input = new FileInputStream(JPG_FILE)) { zipOut.putNextEntry(new ZipEntry(FILE_NAME + i)); int temp = 0; while ((temp = input.read()) != -1) { zipOut.write(temp); }

hadoop设计思路和目标

女生的网名这么多〃 提交于 2019-11-25 20:46:52
本文主要是作者自己的学习过程,主要是对原文的翻译及理解,某些地方根据自己的理解,在表述上稍做些改动,以便更易于理解。 官方原文 hdfs与现有的分布式文件系统有许多相似之处。但是,与其他分布式文件系统的区别非常明显。HDFS是高度容错的,设计用于部署在低成本硬件上。HDFS提供对应用程序数据的高吞吐量访问,适用于具有大数据集的应用程序。HDFS放宽了一些POSIX要求,以支持对文件系统数据的流式访问。 硬件故障 首先明确:硬件故障是常态而不是意外。检测到错误并且自动的,快速的恢复是hdfs的核心架构目标 流式数据访问 运行在HDFS上的应用程序需要对其数据集进行流访问。它们不是通常在通用文件系统上运行的通用应用程序。HDFS更多的是为批处理而设计的,而不是用户的交互使用。 重点是数据访问的高吞吐量,而不是数据访问的低延迟 。POSIX强加了许多针对HDFS的应用程序不需要的硬需求 大数据集 运行在HDFS上的应用程序拥有大型数据集。HDFS中的一个典型文件的大小是gb到tb。因此,HDFS被调优为支持大文件。它应该提供高聚合数据带宽,并可扩展到单个集群中的数百个节点。它应该在一个实例中支持数千万个文件。 简单一致性模型 HDFS应用需要文件的write-once-read-many访问模型。文件一旦被创建,写和关闭操作出了追加和截断,无需修改操作。支持将内容附加到文件末尾

kubernetes 存储卷与数据持久化

为君一笑 提交于 2019-11-25 20:31:06
一 总述 1 存储卷概念 POD 自身具有生命周期,因此其内部运行的容器及相关数据无法完成持久化,docker支持配置容器使用存储卷将数据持久存储于自身文件系统之外的存储系统,其可以是节点文件系统或网络文件系统。相应的Kubernetes 提供的存储卷属于POD资源级别,共享与POD内的所有容器,可用于在勇气的文件系统之外存储应用程序的相关数据,甚至还可独立于POD生命周期之外实现数据持久化 存储卷: 定义在POD资源之上,可被其内部的所有容器挂载的共享目录,它关联至某外部的存储设备之上的存储空间,从而独立于容器自身的文件系统,而数据是否具有持久能力则取决于存储卷自身能否支持持久化 2 存储卷类型 1 节点级别的存储卷 empty: 其生命周期和POD资源相同 hostPath:其虽然可实现持久化存储,但若POD被调度至其他节点,则该节点的存储资源需要被迁移到指定节点,否则将无法持久化 2 网络级别存储卷 NFS ceph GlusterFS ... 其可实现数据的持久化存储 3 特殊存储卷 secret: 用于向POD传递某些敏感信息,如密码、私钥、证书等。 configmap:用于向POD中注入非敏感数据,如配置文件,其可实现容器配置文件集中化定义和管理 3 存储卷使用方式 1 直接在POD中进行指定和配置 POD中定义的存储有两部分组成: 1 pods.spec

C++的栈空间和堆空间

久未见 提交于 2019-11-25 20:08:49
https://www.csdn.net/gather_2b/NtDaIg5sMTktYmxvZwO0O0OO0O0O.html 一直都把堆栈放一起,所以很多人会误以为他们的组合是一个词语,就像“衣服”一样简单,其实不然,今天在下就将最近学习总结的一些与大家分享。 一个由C/C++编译的程序占用的内存分为以下几个部分: 1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈。 2、堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于数据结构的链表。 3、全局区(static):也叫静态数据内存空间,存储全局变量和静态变量,全局变量和静态变量的存储是放一块的,初始化的全局变量和静态变量放一块区域,没有初始化的在相邻的另一块区域,程序结束后由系统释放。 4、文字常量区:常量字符串就是放在这里,程序结束后由系统释放。 5、程序代码区:存放函数体的二进制代码。 堆和栈的区别: 一、由以上综述就可以得知,他们程序的内存分配方式不同。 二、申请和响应不同: 1、申请方式:stack由系统自动分配,heap需要程序员自己申请,C中用函数malloc分配空间,用free释放,C++用new分配,用delete释放。 2、申请后系统的响应: 栈

面向对象介绍

跟風遠走 提交于 2019-11-25 19:08:45
面向对象 一、什么是面向对象 1.1 面向过程编程思想 1.2 面向对象编程思想 二、如何产生对象 2.1 什么是类 2.2 如何定义类 2.2.1 函数的名称空间和类的名称空间的区别 三、什么是对象 2.3 类的操作 四、类和对象的操作:增、删、查、改 4.1 查看类和对象的名称空间 4.2 类和对象的属性(类中的变量)操作 4.2.1 查找类和对象的属性 4.2.2 增加类和对象中的属性 4.2.3 修改类和对象中的属性 4.2.4 删除类和对象中的属性 五、类中的数据属性(类中的变量) 六、类中的方法(类中的函数) 七、对象属性的查找顺序 八、对象绑定方法的特殊之处 九、一切皆对象 TOC 面向对象 一、什么是面向对象 注意:编程思想仅仅是一门思想,与任何技术无关。 面向对象是一门编程思想 1.1 面向过程编程思想 核心是 过程 二字,过程指的是解决问题的步骤,即先干什么再干什么 基于该编程思想编写程序,就好比在设计一条工厂流水线,一种机械式的思维方式。 优点 将复杂的问题流程化,进而简单化 缺点 牵一发而动全身,程序的可扩展性差 1.2 面向对象编程思想 核心是 对象 二字,对象指的是 特征与技能 的结合体。 基于该编程思想编写程序,就好比在创造世界,一种 上帝式 的思维方式。 优点 可扩展性高 缺点 编写程序的复杂程度比面向过程高 二、如何产生对象