空间数据

第1章 基础知识小结

烂漫一生 提交于 2020-02-09 02:56:19
汇编语言的组成 汇编语言发展至今, 有以下3类指令组成: (1)汇编指令:机器码的助记符,有对应的机器码。 (2)伪指令:没有对应的机器码,由编译器执行,计算机并不执行。 (3)其他符号:如+,-,*,/等,由编译码识别,没有对应的机器码。 存储单元 1Byte(字节) = 8bit (二进制位) 1KB = 1024B 1MB = 1024KB 1GB = 1024MB 一个存储单元可以存储8个bit CPU对存储器的读写 CPU通过总线将地址、数据和控制信息传到存储器芯片中。 CPU通过地址总线来指定存储单元, 若一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以寻找2的N次方个内存单元。 地址总线的宽度决定了CPU的寻址能力。 CPU与内存或其他器件之间的数据传送是通过数据总线来进行的。数据总线的宽度决定了CPU和外界的数据传送速度。 8根数据总线一次可传送一个8位二进制数据 。 CPU对外部器件的控制是通过控制总线来进行的,控制总线的宽度决定了CPU对系统中其他器件的控制能力。 在存储器中,指令和数据没有任何区别,都是二进制信息。 8086CPU数据总线宽度为16根,一次可以传送的数据为2B 接口卡 CPU通过总线向接口卡发送命令,接口卡根据CPU的命令控制外设进行工作。 内存地址空间 内存地址空间的大小受CPU地址总线宽度的限制。

『嗨威说』数据结构 - 第三章学习内容小结

删除回忆录丶 提交于 2020-02-08 09:37:43
本文内容: 本章内容小结 完成作业或实践时解决困难的经验分享 参考资料、说明推荐理由及列出相关链接(或书目名称,具体页码) 目前学习过程中存在的困难,待解决或待改进的问题 接下来的目标 一、本章内容小结:(栈与队列)   (1)基本概念: 栈(Stack): 只允许在一端进行插入或删除操作的线性表。首先栈是一种线性表,但是限定这种线性表只能在某一端进行插入和删除操作 栈顶(top): 线性表允许进行插入和删除的那一端。(开口的那一端) 栈底(bottom): 固定的,不允许进行插入和删除的另一端。(封死的那一端) 空栈: 不含任何元素的空表。 栈的两种表示方式: 栈的本质是线性表,那么它就同样有线性表的两种表示形式:顺序栈 和 链式栈(简称“链栈”) 两者的区别:存储的数据元素在物理结构上是否是相互紧挨着的。顺序栈存储元素预先申请连续的存储单元;链栈需要即申请,数据元素不紧挨着。 栈的“上溢”和“下溢”问题: “上溢”:在栈已经存满数据元素的情况下,如果继续向栈内存入数据,栈存储就会出错。(栈满还存会“上溢”) “下溢”:在栈内为空的状态下,如果对栈继续进行取数据的操作,就会出错。(栈空再取会“下溢”) 对于栈的两种表示方式来说,顺序栈两种情况都有可能发生;而链栈由于“随时需要,随时申请空间”的存储结构,不会出现“上溢”的情况。 栈的基本操作:   InitStack(&S)

内核空间和用户空间的数据交换

拈花ヽ惹草 提交于 2020-02-07 09:04:51
用户空间执行的代码是不能访问内核空间的,如当用户空间调用 read(fd,buf,len)时,到内核中会调用 sys_read,然后sysread找到应该具体调用的read函数,该 系统调用和内核、为内核增加一个系统调用 文章中有具体描述,最后由内核调用磁盘驱动获取数据 将数据写入buf。write(fd,buf,len)同理,最后由内核调用磁盘驱动将buf中的数据写入磁盘。 内核空间执行的代码也不直接操作用户空间,内核在读写用户空间内存时 先做权限检查,内核中提供了两个函数完成权限检查 并操作用户空间内存 long copy_to_user(void __user *to, const void *from, unsigned long n) to, 目标地址 取值范围 0~3G from, 源数据地址 取值范围 3G~4G n, 连续操作的字节数 返回值,拷贝失败的字节数 内核源码 static inline long copy_to_user ( void __user * to , const void * from , unsigned long n ) { might_sleep ( ) ; if ( access_ok ( VERIFY_WRITE , to , n ) ) return __copy_to_user ( to , from , n ) ; else

K最邻近分类

徘徊边缘 提交于 2020-02-07 06:19:47
最邻近分类是分类方法中比较简单的一种,下面对其进行介绍 1.模型结构说明 最邻近分类模型属于“基于记忆”的非参数局部模型,这种模型并不是立即利用训练数据建立模型,数据也不再被函数和参数所替代。在对测试样例进行类别预测的时候,找出和其距离最接近的 个样例,以其中数量最多的类别作为该样例的类预测结果。 最邻近分类模型的结构可以用下图来说明,图中叉号表示输入的待分类样例,对其分类时选定一个距离范围(虚线圆圈表示的范围),在该范围内包含有 个样例(除去待分类样例外,这里 =5),这里所说的距离并不专指距离度量(如曼哈顿距离、欧氏距离等),它可以是任意一种邻近度度量(在我的博文《数据测量与相似性分析》中有介绍),此时最邻近的5个样例中,有3个“+”例,2个“-”例,故待分类样例的类别定位“+”。为了便于确定类别, 一般取奇数。 ​ 2.模型构建 2.1 K值选取 从 最邻近分类方法的分类过程可知, 值对模型的误分类率影响较大。 较小时,相当于用较小邻域中的样例进行预测,“学习”的近似误差会减小,但是“学习“的估计误差会增大,且对邻域内的样例非常敏感,若邻近的样例中包含部分噪声,预测结果就会出错, 较大时的情况则相反。 总的来说, 值减小意味着整体模型变复杂,容易发生过拟合, 值增大意味着模型变简单,导致忽略“训练”样例中一些有用信息,预测误分类率会增高。在应用中,一般 取较小的值

【操作系统】第五章虚存技术

匆匆过客 提交于 2020-02-07 05:02:34
5.1虚拟内存的起因 理想中的存储器: 更大,更快,更便宜的非易性存储器 硬盘的速度远远的慢于内存的执行。 磁带比硬盘的存储容量更加的庞大。 现有的物理内存掉电之后数据还是会丢失的。 以上设计了三种技术: 1)手动覆盖技术:只把指令和数据保存在内存中 2)自动交换技术:将程序导出内存到硬盘上 3)虚拟内存技术(前两种是虚拟内存还没出现的情况下诞生的):以更小的力度把数据导出导入到内存中来,充分的利用了内存空间的手段 5.2覆盖技术 一、覆盖技术的基础 目标: 是在较小的可用内存中运行较大(相对而言的)的程序。常用与多道程序系统,与分区存储管理配合使用。 原理: 把程序按照其自身的逻辑结构,划分为若干个功能上相对独立的程序模块,那些不会同时执行的模块共享同一块内存区域,按时间先后来运行。 必要部分(常用功能)的代码和数据常驻内存; 可选部分(不常用内存)在其他程序模块中实现,平时存放在外存中,在需要用到时才装入内存; 不存在调用关系的模块不必同时装入到内存,从而可以相互覆盖,既这些模块共有一个分区。 二、应用例子 例子一: 1)bc是对等的,相互之间不会调用,所以分在一个区;A调用b的时候,c是不会执行的,所以只需要将b放在内存中即可。 2)def也是对等的,相互之间也不会调用,所以也分在一个区;当C调用e的时候,df通用是不会被调用的,所以也只需要将e放在内存中即可。 例子二:

C++内存模型

岁酱吖の 提交于 2020-02-06 04:59:34
C++内存模型 一文了解所有C++内存的问题 AlexCool 目录 一 C++内存模型 二 C++对象内存模型 三 C++程序运行内存空间模型 四 C++栈内存空间模型 五 C++堆内存空间模型 六 C++内存问题及常用的解决方法 七 C++程序内存性能测试 环境: uname -a Linux alexfeng 3.19.0-15-generic #15-Ubuntu SMP Thu Apr 16 23:32:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux cat /proc/cpuinfo bugs : bogomips : 4800.52 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual cat /proc/meminfo MemTotal: 4041548 kB(4G) MemFree: 216304 kB MemAvailable: 2870340 kB Buffers: 983360 kB Cached: 1184008 kB SwapCached: 54528 kB GNU gdb (Ubuntu 7.9-1ubuntu1) 7.9 g++ (Ubuntu 4.9.2-10ubuntu13) 4.9.2

Postgis加载空间数据(二)

允我心安 提交于 2020-02-05 15:29:13
本文所用数据库为postgresql 12,postgis扩展为3.0.0版本 空间数据导入数据库 将pgAdmin打开,创建数据库。 为新生成的数据库创建postgis扩展。 可在扩展中找到postgis。 打开postgis shapfile。 打开postgis shapefile导入文件, 切记文件路径不能有中文,否则会产生dbf文件无法打开的错误,使得shp文件导入失败。 对数据库进行刷新,可在架构中的表中查看到导入的数据。 在qgis中查看上面导入数据库的数据。 SRID SRID是Spatial Reference IDentifier(空间参考标识符)。它定义了我们数据的 地理坐标系统 和 投影 的所有参数。 prj投影文件转换为SRID编号网址: 点此进入 常见坐标系对应的srid参数: 坐标系名称 SRID GCS_Beijing_1954 4214 GCS_WGS_1984 4326 GCS_China_Geodetic_Coordinate_System_2000 4490 GCS_New_Beijing 4555 GCS_Xian_1980 4610 来源: CSDN 作者: qq_42272508 链接: https://blog.csdn.net/qq_42272508/article/details/104181527

决策树的几何理解

[亡魂溺海] 提交于 2020-02-05 02:00:21
决策树的几何理解 一、决策树的实质是对空间的分割 对于一个多维数据,可以将它的每一个属性看成一个维度。如一个二维数据可以看成一个平面,一个三维数据可以看成一个立方体。各属性的取值表示标签的空间位置。那么决策树的每一次测试可以看成对某一维空间的一次分割。 1、树的深度则指的是取多少个维度进行分割,显然树的深度不能超过属性个数,因为属性个数意味着维度,你不允许对一个三维物体从第四维开刀。 2、树的分支个数,指的是你对一个维度“切了几刀”(更精确的是,树的分支个数减一是你的“刀数”。 因为一刀分两段,两刀分三段。。 3、树的叶子节点个数本质是你把空间分割成了几份。 4、剪枝意味着对分割空间的合并。 剪枝的意义: 从上文我们知道决策树的每一次对空间的分割都是“贯穿”的,可以理解成“一刀两段”。而“剪枝”则又将被分割的空间进行局部的“缝补”。这种“缝补”不是任意的,只能“缝补”原本就“相邻”的空间。 举个分类问题的例子,我们现在需要根据已有三维数据把目标分成两类。我们不妨把我们的三维数据想象成一个空间立方体(如一个石块),把任务理解成:通过不断的分割,找到数据里属于“维纳斯的部分”和“不属于维纳斯的部分”(对应任务的“分成两类”) 好了,我们现在成功把一个二分类问题想象成把石块雕刻成维纳斯的过程。 如果没有剪枝过程,决策树最终得到的是“方块状”的空间。显然我们永远不可能得到一个维纳斯的形状

Redis百亿级Key存储方案

岁酱吖の 提交于 2020-02-04 23:53:14
1 需求背景 该应用场景为DMP缓存存储需求,DMP需要管理非常多的第三方id数据,其中包括各媒体cookie与自身cookie(以下统称supperid )的mapping关系,还包括了supperid的人口标签、移动端id(主要是idfa和imei)的人口标签,以及一些黑名单id、ip等数据。 在hdfs的帮助下离线存储千亿记录并不困难,然而DMP还需要提供毫秒级的实时查询。由于cookie这种id本身具有不稳定性,所以很多的真实用户的浏览行为会导致大量的新cookie生成,只有及时同步mapping的数据才能命中DMP的人口标签,无法通过预热来获取较高的命中,这就跟缓存存储带来了极大的挑战。 经过实际测试,对于上述数据,常规存储超过五十亿的kv记录就需要1T多的内存,如果需要做高可用多副本那带来的消耗是巨大的,另外kv的长短不齐也会带来很多内存碎片,这就需要超大规模的存储方案来解决上述问题。 2 存储何种数据 人⼝标签主要是cookie、imei、idfa以及其对应的gender(性别)、age(年龄段)、geo(地域)等;mapping关系主要是媒体cookie对supperid的映射。以下是数据存储⽰示例: 1) PC端的ID: 媒体编号-媒体cookie=>supperid supperid => { age=>年龄段编码,gender=>性别编码,geo=

JVM 完整深入解析

末鹿安然 提交于 2020-02-04 22:17:58
工作之余,想总结一下JVM相关知识。 Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图: 1、程序计数器:指向当前线程正在执行的字节码指令。线程私有的。 2、虚拟机栈:虚拟机栈是Java执行方法的内存模型。每个方法被执行的时候,都会创建一个栈帧,把栈帧压人栈,当方法正常返回或者抛出未捕获的异常时,栈帧就会出栈。 (1)栈帧:栈帧存储方法的相关信息,包含局部变量数表、返回值、操作数栈、动态链接 a、局部变量表:包含了方法执行过程中的所有变量。局部变量数组所需要的空间在编译期间完成分配,在方法运行期间不会改变局部变量数组的大小。 b、返回值:如果有返回值的话,压入调用者栈帧中的操作数栈中,并且把PC的值指向 方法调用指令 后面的一条指令地址。 c、操作数栈:操作变量的内存模型。操作数栈的最大深度在编译的时候已经确定(写入方法区code属性的max_stacks项中)。操作数栈的的元素可以是任意Java类型,包括long和double,32位数据占用栈空间为1, 64 位数据占用2。方法刚开始执行的时候,栈是空的,当方法执行过程中