类的内存对齐位段位图布隆过滤器哈希切割一致性哈希

文章目录

    • 一、类的内存对齐
      • 1.1规则
      • 1.2原因
    • 二、位段
      • 2.1介绍
      • 2.2内存分配问题
      • 2.3跨平台问题
      • 2.4使用的注意事项
    • 三、位图的应用
      • 3.1 给40亿个不重复的无符号整数,找给定的一个数。(int的范围可以到达42亿多)
      • 3.2 给定100亿个整数,设计算法找到只出现一次的整数
      • 3.3给两个文件,分别有100亿个整数,我们只有1G的内存,如何找到两个文件的交集
      • 3.4位图应用变形:1个文件有100亿个int,1G内存,设计算法找到出现次数不超过两次的所有整数
    • 四、布隆过滤器
      • 4.1作用和介绍
      • 4.2误判的概率与什么有关?
      • 4.3布隆过滤器的实现
    • 五、哈希切割
      • 5.1给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?
      • 5.2给两个文件,分别有100亿个query,我们只有1G内存,如何找到两个文件交集?
    • 六、一致性哈希

在这里插入图片描述

一、类的内存对齐

1.1规则

1.类的第一个成员对齐到和类的起始位置偏移量为0的地址处
2.其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处
对齐数 = 编译器默认的一个对齐数与该成员变量的大小的较小值

——VS中默认对齐数为8
——Linux中gcc没有默认对齐数,对齐数就是成员自身的大小
3.类的总大小为最大对齐数(类中每个成员变量都有一个对齐数,所有对齐数中最大的)的整数倍。
4.如果出现类的嵌套,嵌套的类的成员对齐到自己的成员中最大对齐数的整数倍处

offsetof(type,成员)计算偏移量
在这里插入图片描述
在这里插入图片描述

1.2原因

1.不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常
2.数据结构(尤其是栈)应该尽可能的在边界对齐。因为为了访问未对齐的内存,编译器需要进行两次访问,对齐了的内存,编译器只需要进行一次访问。

在这里插入图片描述

二、位段

2.1介绍

在这里插入图片描述

2.2内存分配问题

在这里插入图片描述

2.3跨平台问题

在这里插入图片描述

2.4使用的注意事项

在这里插入图片描述

三、位图的应用

3.1 给40亿个不重复的无符号整数,找给定的一个数。(int的范围可以到达42亿多)

方法1(不可取):用二分的方法,80亿个字节大概需要7.4个G,没有那么大的存储空间,虽然二分的查找效率很高,但是需要数据处于有序的状态
在这里插入图片描述

方法2:位图
我们利用哈希桶的原理,用每一个数映射一个比特位,大概42亿个比特位,加起来应该是0.5个G左右,这样消耗的内存低,并且每一个数映射一个比特位,又保证了查找效率O(1)

在这里插入图片描述
在这里插入图片描述

3.2 给定100亿个整数,设计算法找到只出现一次的整数

用两个位图来表示这个整数出现的次数
在这里插入图片描述

3.3给两个文件,分别有100亿个整数,我们只有1G的内存,如何找到两个文件的交集

同上

3.4位图应用变形:1个文件有100亿个int,1G内存,设计算法找到出现次数不超过两次的所有整数

同上

四、布隆过滤器

4.1作用和介绍

作用:可以提高测试数据在该数据库中是否存在,如果有上千百亿的数据都从数据库中寻找的话,那么效率就会非常非常低,用了布隆过滤器之后,可以排除掉一部分不在数据库里面的数据。
介绍:布隆过滤器就是一个字符串映射多个位,这个可以大大减少误判的可能性,一个字符串映射多个位可以降低误判的可能性,但是此时的空间效率就降低了,布隆过滤器的实质目的就是为了提高空间效率,这样得不偿失,我们只能根据适用情况判断到底映射几个位

4.2误判的概率与什么有关?

1.与映射的哈希函数的个数有关
2.与映射的位有关
3.与哈希函数的特性有关

4.3布隆过滤器的实现

用三种不同的哈希函数进行实现,一共映射3个比特位
在这里插入图片描述
在这里插入图片描述

五、哈希切割

5.1给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?

在这里插入图片描述

5.2给两个文件,分别有100亿个query,我们只有1G内存,如何找到两个文件交集?

在这里插入图片描述

六、一致性哈希

下面这篇别人讲的文章非常详细,可参考
一致性哈希的文章
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/16003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang实现文件复制

方法:三种 package zdpgo_fileimport ("errors""io""os" )// CopyFile 使用io.Copy进行文件的复制,同时也会复制文件的所有权限 // param src 复制文件 // param des 目标文件 // return error 错误信息 func CopyFile(s…

2024年弘连网络FIC大会竞赛题线下决赛题

总结: FIC决赛的时候,很多小问题没发现,在pve平台做题确实很方便。 这套题目复盘完,服务器这块的知识确实收获了很多,对pve集群平台和网络拓扑也有了一定的认识,感谢各位大佬悉心指导。 接下来&#xff0…

【FPGA】Verilog:奇校验位生成器的实现(Odd Parity bit generator)

解释奇数奇偶校验位生成器和检查器的仿真结果及过程。 真值表和卡洛图: Odd Parity Bit Generator A B C

怎么在pyqt中显示matplotlib的绘图?

想要在pyqt中显示matplotlib的绘图,在绘图时,其实不必使用以下语句: matplotlib.use("Qt5Agg") # 声明使用QT5最关键的语句是: from matplotlib.backends.backend_qt5agg import FigureCanvasQTAggFigureCanvasQTAgg…

学 Python 具体能干什么?

Python 是一种功能强大、用途广泛的编程语言,因其简洁易读的语法和丰富的库生态系统而备受欢迎。学习 Python后,你可以从事以下几方面的工作: 1. Web 开发 Python 有很多流行的 Web 框架,如: Django:一个…

Android studio的Gradle出问题

Gradle sync failed: Plugin [id: com.android.application, version: 7.1.1, apply: false] was not found in any of the following sources: 在src里面的build.gradle中 plugins { id ‘com.android.application’ } 的上面加上 buildscript {repositories {jcenter()}depen…

从 0 开始实现一个网页聊天室 (小型项目)

实现功能 用户注册和登录好友列表展示会话列表展示: 显示当前正在进行哪些会话 (单聊 / 群聊) , 选中好友列表中的某个好友, 会生成对应的会话实时通信, A给B发送消息, B的聊天界面 / 会话界面能立刻显示新的消息 TODO: 添加好友功能用户头像显示传输图片 / 表情包历史消息搜…

禅道密码正确但是登录异常处理

禅道密码正确,但是登录提示密码错误的异常处理 排查内容 # 1、服务器异常,存储空间、数据库异常 # 2、服务异常,文件丢失等异常问题定位 # 1、df -h 排查服务器存储空间 # 2、根据my.php排查数据库连接是否正常 # 3、修改my.pho,debugtrue…

探索切片索引:列表反转的艺术

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:列表反转的挑战 二、切片索引的基本概念 三、切片索引实现列表反转 …

vs2013使用qt Linguist以及tr不生效问题

一、qt Linguist(语言家)步骤流程 1、创建翻译文件,在qt选项中 2.选择对应所需的语言,得到.ts后缀的翻译文件 3.创建.pro文件,并将.ts配置在.pro文件中 3.使用qt Linguist 打开创建好的以.ts为后缀的翻译文件,按图所示…

细粒度图像分类论文(AAM模型方法)阅读笔记

细粒度图像分类论文阅读笔记 摘要Abstract1. 用于细粒度图像分类的聚合注意力模块1.1 文献摘要1.2 研究背景1.3 本文创新点1.4 计算机视觉中的注意力机制1.5 模型方法1.5.1 聚合注意力模块1.5.2 通道注意力模块通道注意力代码实现 1.5.3 空间注意力模块空间注意力代码实现 1.5.…

【软件设计师】面向对象技术

1.面向对象基础 1.1 基本概念 方法重载是函数名字相同,参数列表不同 组成 即组合,指整体与部分的关系,整体与部分生命周期相同 聚合 关联关系的一个特例,是体现整体与部分,即使has-a的关系,此时整体与部分…

【LakeHouse】Apache Iceberg + Amoro 助力网易构建云原生湖仓

Apache Iceberg Amoro 助力网易构建云原生湖仓 1.云原生湖仓背景与挑战2.Apache Iceberg 、Amoro 与云原生2.1 Apache Iceberg2.2 Amoro 简介 3.Apache Iceberg Amoro 云原生实践3.1 云上湖仓案例一3.2 云上湖仓案例二3.3 云上湖仓案例三 4.Amoro 未来发展规划 出品社区&…

【代码随想录——回溯算法二周目】

1. 组合总和 var (path []intres [][]int )func combinationSum(candidates []int, target int) [][]int {path make([]int, 0)res make([][]int, 0)dfs(candidates,target,0,0)return res }func dfs(candidates []int, target int,tempTarget int,start int) {if tempTarg…

Django-auth组件

Django-auth组件 1 表结构 我们从python manage.py migrate为我们创建的auth组件内置的表开始看 auth_user:用户表存储用户信息(登录admin后台) 里面的字段分两类:用户基本信息(用户名,邮箱,密…

华为OD机试【找出通过车辆最多颜色】(java)(100分)

1、题目描述 在一个狭小的路口,每秒只能通过一辆车,假设车辆的颜色只有 3 种,找出 N 秒内经过的最多颜色的车辆数量。 三种颜色编号为0 ,1 ,2。 2、输入描述 第一行输入的是通过的车辆颜色信息[0,1,1,2] &#xff0…

Three.js——二维平面、二维圆、自定义二维图形、立方体、球体、圆柱体、圆环、扭结、多面体、文字

个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 &#x1…

RabbitMQ-默认读、写方式介绍

1、RabbitMQ简介 rabbitmq是一个开源的消息中间件,主要有以下用途,分别是: 应用解耦:通过使用RabbitMQ,不同的应用程序之间可以通过消息进行通信,从而降低应用程序之间的直接依赖性,提高系统的…

功率电感的设计步骤

文章目录 1:高导磁气隙(铁氧体)1.1设计原理1.2 设计步骤 2 铁粉芯2.1:设计原理2.2:设计步骤 TI电感设计 学习视频原链接 截图 1 截图1 截图1 截图 2 截图2 截图2 1:高导磁气隙(铁氧体&#…

基于机器学习判断面部微表情发现哪些人更容易诊有帕金森病

1. 概述 帕金森病(Parkinson’s disease,PD)是一种慢性、进展性的神经退行性疾病,主要影响运动系统。该病症以大脑中黑质致密部多巴胺能神经元的逐渐丧失为特征,导致多巴胺(一种重要的神经递质&#xff09…