内存映射

Linux进程通信之mmap

和自甴很熟 提交于 2019-11-26 10:14:11
mmap() 函数: void *mmap(void* addr,size_t length,int port,int flags,int fd,off_t offset); 返回:成功:返回创建的映射区首地址;失败:MAP_FAILED 宏 参数: addr: 建立映射区的首地址,由linux内核决定。使用时直接传递NULL; length: 欲创建映射区的大小 port: 映射区权限PROT _READ、PROT_WRITE 、PROT _READ|PROTWRITE flags: 标志位参数(常用于设定更新物理区域、设置共享、创建匿名映射区) MAP_SHARED: 会将映射区所做的操作反射到物理设备上 MAP_PRIVATE: 映射区所作的修改不会反映到物理设备。 fd: 用来建立映射区的文件描述符 offset: 映射文件的偏移(4K的整数倍) /*** mmap.c ***/ #include<stdio.h> #include<fcntl.h> #include<unistd.h> #include<string.h> #include<stdlib.h> #include<sys/mman.h> int main() { int len,ret; char *p = NULL; int fd = open("mytest.txt",O_CREAT|O_RDWR

海量数据处理面试题

江枫思渺然 提交于 2019-11-26 07:39:56
何谓海量数据处理? 所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如布隆过滤器/Hash/bit-map/堆/数据库或倒排索引/trie树,针对空间,无非就一个办法:大而化小,分而治之(hash映射),你不是说规模太大嘛,那简单啊,就把规模大化为规模小的,各个击破不就完了嘛。 海量数据处理主要方法: 分而治之-hash映射 + hash统计 + 堆排序/外排序 布隆过滤器 布隆过滤器+分层 哈希函数的性质: 典型的哈希函数都有无限的输入值域。 当给哈希函数传入相同的输入值时,返回值一样,即哈希值一样。 当给哈希函数传入不同的值时,返回值可能一样,也可能不一样。 很多不同的输入之所得到的返回值会均匀的分布在S上,S为输出域–范围固定。这条性质是评判一个哈希函数优劣的关键。 堆排序的注意点: 要找出最大的TopK,要建立最小堆,堆顶元素为最小的,先拿K个数建立最小堆,接下来每拿一个数都和堆顶元素比较,如果比堆顶元素大,则代替堆顶元素,然后对该堆进行凋整,使之成为最小堆。重复操作直到遍历所有数据。 要找出最小的TopK,要建立最大堆,每次与最大堆的堆顶元素比较,小于堆顶元素则代替堆顶元素,然后进行调整

海量数据处理技巧

戏子无情 提交于 2019-11-26 07:37:12
数据时代来临,数据量的爆炸式增长是最为显著的特征。当高性能硬件的普及还跟不上这样的数据大潮时,如何在有限的时空资源内处理海量数据成为了计算机科学以及数理统计等领域最大的挑战。 所谓“数据处理”,在本文中特指通过计算机技术,对海量数据进行存储、统计、查询等操作。我将在下面介绍一些基本的海量数据处理的方法,供大家参考。需要明确的一点是,现实情况复杂多变,所以对于海量数据处理这样大的主题,是不可能用一篇博客就说清楚的。但方法论可以一通百通,我们通过一些已经被无数次实验证明有效的方法,就能大致理解对此类问题的解决思路,之后在面临新的问题时,至少能找到一个大致的方向。 1. 海量数据处理的困难 海量数据处理的困难用一句话概括,就是时空资源不够。具体来说, 时间受限:无法在有限时间内,完成针对海量数据的某项处理工作; 空间受限:无法将海量数据一次性读入内存 对于时间受限的问题,我们一般的解决办法是高效的算法配合恰当的数据结构,比如哈希表,Bloom Filter,堆,倒排索引,tire树);而对于空间受限的问题,一般的解决办法是“大而化小,分而治之”的策略,既然一次性行不通,那就一部分一部分读,每读入一部分可以生成一个小文件,小文件是可以直接读入内存的,我们这样分割大数据之后,再依次处理小文件的数据。 注意,本文我只介绍对于海量数据执行一些简单的数据处理(比如存储,查重,排序,统计数量等

Qt绘图之QGraphicsScene QGraphicsView QGraphicsItem详解

左心房为你撑大大i 提交于 2019-11-26 01:24:28
Qt绘图之QGraphicsScene QGraphicsView QGraphicsItem详解 Graphics View提供了一个界面,它既可以管理大数量的定制2D graphical items,又可与它们交互,有一个view widget可以把这些项绘制出来,并支持旋转与缩放。这个柜架也包含一个事件传播结构,对于在scene中的这些items,它具有双精度的交互能力。Items能处理键盘事件,鼠标的按,移动、释放、双击事件,也可以跟踪鼠标移动。Graphics View使用BSP树来提供对item的快速查找,使用这种技术,它可以实时地绘制大规模场景,甚至以百万items计。Graphics View在Qt 4.2中被引用,它替代了它的前辈QCanvas。 Graphics View的体系结构 Graphics View提供的是一种类似于Qt model-view的编程。多个views可以监视同一个场景,而场景包含多个具有多种几何外形的items。 场景 QGraphicsScene 表示Graphics View中的场景,它有以下职责: 为管理大量的items提供一个快速的接口。 传播事件到每个item。 管理item的状态,例如选择,焦点处理。 提供未经变换的渲染功能,主要用于打印。 场景作为QGraphicsItem对象的容器。通过调用QgraphicsScene:

Hibernate 和 JPA 注解

*爱你&永不变心* 提交于 2019-11-25 19:48:57
转载请注明: Hibernate 和 JPA 注解 | 言曌博客 1 、 @Entity(name="EntityName") 必须, name为可选,对应数据库中一的个表 2 、 @Table(name="",catalog="",schema="") 可选,通常和@Entity配合使用,只能标注在实体的class定义处,表示实体对应的数据库表的信息 name:可选,表示表的名称.默认地,表名和实体名称一致,只有在不一致的情况下才需要指定表名 catalog:可选,表示Catalog名称,默认为Catalog(""). schema:可选,表示Schema名称,默认为Schema(""). 3 、 @id 必须 @id定义了映射到数据库表的主键的属性,一个实体只能有一个属性被映射为主键.置于getXxxx()前. 4 、 @GeneratedValue(strategy=GenerationType,generator="") 可选 (如果不写,主键需要不会自动生成,需要手动赋值) strategy:表示主键生成策略,有AUTO,INDENTITY,SEQUENCE 和 TABLE 4种,分别表示让ORM框架自动选择, 根据数据库的Identity字段生成,根据数据库表的Sequence字段生成,以有根据一个额外的表生成主键,默认为AUTO generator

总结

我的未来我决定 提交于 2019-11-25 19:41:58
第一章 初始MyBatis 1.1.1 为什么学习框架技术使用ppt模板制作文档的优点如下: 1. 不用考虑布局,排版等问题,提高了效率。2. 可以专心于ppt内容,使演讲的质量更有保障。3. 新手也可以制作很专业的幻灯片演讲稿A1. 不用再考虑公共问题,框架已经帮我们做好了2. 可以专心于业务逻辑,保证核心业务逻辑的开发质量3. 结构统一,便于学习和维护4. 框架中集成了前人的经验,可以帮助新人写出稳定,性能优良而且结构优美的高质量程序。 1.1.2 框架概念框架是一个提高了可重用的公共结构的半成品。它为我们构建新的应用程序提供了极大的便利。一方面提供了可以拿来就用的工具,更重要的是提供了可重用的设计。 1.1.3 主流框架的介绍1. Struts 2 框架Struts 2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁 2. Hibernate框架 Hibernate 是一个优秀的持久化框架,负责简化将对象数据保存到数据库中,或从数据库中读取数据并封装到对象的工作。 3. Spring框架 Spring也是一个开源框架。它的目标是使现有的javaee技术更容易使用和促进良好的编程习惯 4. SpringMVC框架 SpringMVC是Spring框架提供的构建web应用程序的全功能MVC模块,属于SpringFramework的后续产品

译 - 第 1 章:EF入门

安稳与你 提交于 2019-11-25 18:43:19
章节信息 Entity Framework 6 Recipes 第二版 第一章: Chapter 1: Getting Started with Entity Framework ------------------------------------------------------------------------- 阅读说明: 1 术语第一次出现时用中文(原文)表示,如EntityType将表示成 实体类型(EntityType) 2 菜单名用粗体表示,如File将表示成 文件 3 右击,即鼠标右键点击 第 1 章:EF入门 使用关系型数据库是根据表及其行列去考虑问题的。表是高度结构化并且擅长基于集合的处理。在面向对象编程思想广泛应用前,我们都是过程式思考问题并且通过编写结构化、自顶向下、一个接一个函数的方式解决这些问题。它们的世界都是排好的:表、行和列在我们的代码中紧密地匹配结构化和过程化模式。在相当长的时间内,这种方式工作的非常好…… 在代码的世界里已经发生了相当大的变革。现在我们从对象和领域模型方面考虑问题。我们对现在世界的事物如客户和订单做架构、设计和编程。我们在白板上描绘我们问题集中的词语。我们在它们之间连线、描述关系和交互。我们根据这些草图制订规范和指派任务给开发团队。总之,我们在一个概念水平上做架构、设计和编码