空间数据

05-1_链表的定义

北慕城南 提交于 2019-11-30 08:39:36
1. 链表的定义 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)。 2. 为什么需要链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。 链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。 来源: https://www.cnblogs.com/nichengshishaonian/p/11576097.html

线性表——顺序表的实现与讲解(C++描述)

眉间皱痕 提交于 2019-11-30 07:54:46
线性表 引言 新生安排体检,为了 便管理与统一数据,学校特地规定了排队的方式,即按照学号排队,谁在前谁在后,这都是规定好的,所以谁在谁不在,都是非常方便统计的,同学们就像被一条线(学号)联系起来了,这种组织数据(同学)的方式我们可以称作线性表结构 定义 线性表 :具有零个或多个(具有相同性质,属于同一元素的)数据元素的有限序列 若将线性表记为 ( a 0 , a 1 ,a i -1 a i ,a i +1 , ... , a n - 1 , a n ) 注意:i 是任意数字,只为了说明相对位置,下标即其在线性表中的位置) 前继和后继 :由于前后元素之间存在的是 顺序关系 ,所以除了首尾元素外,每个元素均含有 前驱 和 后继 ,简单的理解就是 前一个 元素和后一个元素 空表 :如果线性表中元素的个数 n 为线性表长度,那么 n = 0 的时候,线性表为空 首节点、尾节点 : 上面表示中的 :a 0 称作首节点,a n 称作尾节点 抽象数据类型 数据类型 :一组 性质相同 的值的集合及定义在此集合上的一些操作的 总称 抽象数据类型 :是指一个数学模型及定义在该模型上的一组操作 关于数据类型我们可以举这样一个例子 例如:我们常常用到的 整数型 浮点型 数据 这些都是数据的总称,所有符合其性质特征的都可以用其对应数据类型来定义,例如 520是一个满足整数特征的数据,所以可以赋值给

【转帖】Linux 内核系统架构

孤街浪徒 提交于 2019-11-30 06:21:18
Linux 内核系统架构 描述Linux内核的文章已经有上亿字了 但是对于初学者,还是应该多学习多看,毕竟上亿字不能一下子就明白的。 即使看了所有的Linux 内核文章,估计也还不是很明白,这时候,还是需要fucking the code. 28年前(1991年8月26日)Linus公开Linux的代码,开启了一个伟大的时代。这篇文章从进程调度,内存管理,设备驱动,文件系统,网络等方面讲解Linux内核系统架构。Linux的系统架构是一个经典的设计,它优秀的分层和模块化,融合了数量繁多的设备和不同的物理架构,让世界各地的内核开发者能够高效并行工作。先来看看Linus在多年前公开Linux的邮件。 "Hello everybody out there using minix - I’m doing a (free) operating system (just a hobby, won’t be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I’d like any feedback on things people like/dislike in minix, as my OS

【JVM学习】2.Java虚拟机运行时数据区

拜拜、爱过 提交于 2019-11-30 06:19:44
来源: 公众号: 猿人谷 这里我们先说句题外话,相信大家在面试中经常被问到 介绍Java内存模型 ,我在面试别人时也会经常问这个问题。但是,往往都会令我比较尴尬,我还话音未落,面试者就会“背诵”一段(Java虚拟机是由堆、方法区、虚拟机栈,吧啦吧啦。。。),估计心里还一脸自豪的想幸好哥提前在网上搜过,早有准备。每每这个时候,我都不忍心打断,因为“背诵”的真的太顺畅了! 这也怪不得面试者,首先Java虚拟机方面的知识,对中高级程序猿来说,工作中正面接触Java虚拟机的东西不多。其次,这个其次咱得好好唠唠,网上搜个Java内存模型,度娘推的第一页大都是介绍Java运行时数据区的,起到了一定的误导作用,大写的尴尬。 本篇将给各位小伙伴先详细介绍Java运行时数据区的组成,Java内存模型也是虚拟机里面的重点,后面会单独抽出一篇来进行介绍。 1.运行时数据区介绍 程序运行所需的内存空间,有些是不能在编译期就能确定,得要在运行期根据实际运行状况动态地在系统中创建。Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。 如图所示,堆和方法区是所有线程共享的公共区域,堆和方法区所占的内存空间是由JVM负责管理的

【JVM学习】2.Java虚拟机运行时数据区

左心房为你撑大大i 提交于 2019-11-30 06:19:34
来源: 公众号: 猿人谷 这里我们先说句题外话,相信大家在面试中经常被问到 介绍Java内存模型 ,我在面试别人时也会经常问这个问题。但是,往往都会令我比较尴尬,我还话音未落,面试者就会“背诵”一段(Java虚拟机是由堆、方法区、虚拟机栈,吧啦吧啦。。。),估计心里还一脸自豪的想幸好哥提前在网上搜过,早有准备。每每这个时候,我都不忍心打断,因为“背诵”的真的太顺畅了! 这也怪不得面试者,首先Java虚拟机方面的知识,对中高级程序猿来说,工作中正面接触Java虚拟机的东西不多。其次,这个其次咱得好好唠唠,网上搜个Java内存模型,度娘推的第一页大都是介绍Java运行时数据区的,起到了一定的误导作用,大写的尴尬。 本篇将给各位小伙伴先详细介绍Java运行时数据区的组成,Java内存模型也是虚拟机里面的重点,后面会单独抽出一篇来进行介绍。 1.运行时数据区介绍 程序运行所需的内存空间,有些是不能在编译期就能确定,得要在运行期根据实际运行状况动态地在系统中创建。Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。 如图所示,堆和方法区是所有线程共享的公共区域,堆和方法区所占的内存空间是由JVM负责管理的

快速了解MongoDB

落花浮王杯 提交于 2019-11-30 05:54:08
简介 MongoDB是一款为广泛的现代应用程序设计的高性能、可扩展、分布式数据库系统。MongoDB可用于不同规模大小的组织,为那些对系统低延迟、高吞吐量以及可持续性有很高要求的应用提供稳定关键的服务。 尽管MongoDB与传统的关系型数据库的有些特性不一样,但是对于之前部署和操作其他数据库系统的人员来说,MongoDB的很多概念,比如操作、策略、存储过程还是很相似的。公司的DBA和运营团队可以在保持现有系统的前提下,直接把MongoDB集成到生产环境中,并且不需要定制操作流程和工具 本文档为部署和管理MongoDB提供了最佳实践的指导。看本文档的前提需要你熟悉MongoDB的基本架构并理解企业软件部署的相关知识。 关于文档中的涉及到有些话题的更多详情,可以访问MongoDB的在线文档:mongodb.com。本文档也提供了相应的链接。 角色和职责 与其他数据库系统一样,部署在MongoDB的应用需要精心规划以及公司IT团队每个角色的协力合作才能保证稳定的部署。传统数据库中相关的角色以及角色的定位同样适用于MongoDB:数据库管理员、系统管理员、应用开发人员、网络管理员、需求分析人员以及数据架构师。 一般小公司中一个人员可能会担当多个角色,而大公司中,每个角色都是由一个人或者一个团队专门负责的。比如,在大的投资银行中,DBA的职责和系统管理员的职责差别就很大。 DBA

Linux内存描述之内存页面page–Linux内存管理(四)

可紊 提交于 2019-11-30 05:51:59
服务器体系与共享存储器架构 日期 内核版本 架构 作者 GitHub CSDN 2016-06-14 Linux-4.7 X86 & arm gatieme LinuxDeviceDrivers Linux内存管理 #1 前景回顾 #1.1 UMA和NUMA两种模型 共享存储型多处理机有两种模型 均匀存储器存取(Uniform-Memory-Access,简称UMA)模型 非均匀存储器存取(Nonuniform-Memory-Access,简称NUMA)模型 #1.2 (N)UMA模型中linux内存的机构 非一致存储器访问(NUMA)模式下 处理器被划分成多个"节点"(node), 每个节点被分配有的本地存储器空间. 所有节点中的处理器都可以访问全部的系统物理存储器,但是访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少得多 内存被分割成多个区域(BANK,也叫"簇"),依据簇与处理器的"距离"不同, 访问不同簇的代码也会不同. ##1.3 Linux如何描述物理内存 Linux把物理内存划分为三个层次来管理 层次 描述 存储节点(Node) CPU被划分为多个节点(node), 内存则被分簇, 每个CPU对应一个本地物理内存, 即一个CPU-node对应一个内存簇bank,即每个内存簇被认为是一个节点 管理区(Zone)

秋招开始了,读《深入理解JVM虚拟机》总结

回眸只為那壹抹淺笑 提交于 2019-11-30 05:47:38
重读 JVM 秋招开始了,前面由于做别的事耽误了半个月,以前学的东西不用就很容易忘记。所以,这次重新阅读《深入理解 JVM 虚拟机》时,想做一个记录。将碎片的知识整合,方便自己以后阅读,同时也和大家一起分享。内容中会添加我自己的理解,其中如果有错误,欢迎大家指正。 1. Java 内存区域与内存溢出异常 1.1 运行时数据区域 根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。 1.1.1 程序计数器 内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成 如果线程正在执行一个 Java 方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是 Native 方法,这个计数器的值则为 (Undefined)。此内存区域是唯一一个在 Java 虚拟机规范中没有规定任何 OutOfMemoryError 情况的区域。 1.1.2 Java 虚拟机栈 线程私有,生命周期和线程一致。描述的是 Java 方法执行的内存模型:每个方法在执行时都会床创建一个栈帧(Stack Frame)用于存储 局部变量表 、 操作数栈 、 动态链接 、 方法出口 等信息。每一个方法从调用直至执行结束

Linux进程管理

独自空忆成欢 提交于 2019-11-30 02:35:59
进程管理 1、操作系统基础 调用:kernel通过给应用程序提供system call方式来提供硬件资源; 注意:这个应用程序也包括库文件; 库文件是运行在ring 0上的一段程序代码,不对客户直接提供应用; 中断、保护现场 2、进程运行原理(一个进程与多个进程) 一个进程:首先我们需要把硬盘中的程序代码加载到内存(复制),再将这段程序放到CPU上运算,此时,这段程序就会去调用(也会自动生成)很多的进程;由这些进 程来完成程序所指定的任务; 在这个过程当中:我们就需要解决数据输入与输出,还有存储的问题 (不讨论多核、CPU多线程的情况) 多个进程:在电脑中一般都是存在多个进程的,而CPU却只有一个,我们就使用time space的方式来给进程分配固定的时间来运行;某个进程只能在轮到自己运行的时候 才会被放到CPU上执行,时间一到就会自动被踢下来,CPU则会执行下一个进程; 问题: 1、进程谁先谁后的问题? 进程优先级 2、如果进程没有运行完就被踢下来了怎么办?--解决数据存储的问题 3、如果进程造反了怎么办? 3、进程优先级 0-139 0-99 实时进程 越大越优先 100-139 非实时进程 越小越优先 【特性:普通用户可以转让自己的优先级】 nice值:定义普通进程的优先级,-20 - 19 轮了一圈以后怎么办? 在我们内存上,会提供一个空间

指针

心不动则不痛 提交于 2019-11-30 02:33:33
一、地址和指针 1.1内存 内存由一系列连续的存储单元组成,每个存储单元都有计算机分配的 "编号" ——地址 定义一个变量,即是给变量分配从某一地址开始的若干存储单元,且通常以起始地址作为该变量的地址 注:内存空间的访问方式:通过变量名访问,通过地址访问 1.2针和指针变量 指针:一个变量的地址称为该变量的指针 指针变量:专门存放变量地址的变量(即指针)称为指针变量 二、指针变量 2.1始化 存储类型 数据类型 *指针名 = 初始地址 如 int* a_ptr = &a; 注: 用变量地址作为初值时,该变量必须在指针初始化之前声明过,且变量类型应与指针类型一致 可以用一个已有合法值的指针去初始化另一个指针变量 不要用一个内部非静态变量去初始化 static 指针 2.2赋值 1、语法形式 指针名 = 地址 注:"地址"中存放的数据类型与指针类型必须相等 2、赋值为地址常量或变量,不能是普通整数 通过地址运算“&”求得已定义的变量和对象的起始地址 动态内存分配成功时返回的地址 3、指针空值nullptr C++11 使用 nullptr 关键字,是表达更准确,类型安全的空指针 4、允许定义或声明指向 void 类型的指针 该指针可以被赋予任何类型对象的地址,如:void* general ; #include <iostream> using namespace std; int