類的內存對齊位段位圖布隆過濾器哈希切割一致性哈希

文章目錄

    • 一、類的內存對齊
      • 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 ?le, 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 ?le, log中存著IP地址, 設計算法找到出現次數最多的IP地址?

在這里插入圖片描述

5.2給兩個文件,分別有100億個query,我們只有1G內存,如何找到兩個文件交集?

在這里插入圖片描述

六、一致性哈希

下面這篇別人講的文章非常詳細,可參考
一致性哈希的文章
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/16003.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/16003.shtml
英文地址,請注明出處:http://en.pswp.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′|┛ 嗷~~ 目錄 一、引言:列表反轉的挑戰 二、切片索引的基本概念 三、切片索引實現列表反轉 …

程序員副業賺錢的底層邏輯

賺錢就像玩拼圖游戲,要懂得把面包屑組裝成為一面包 分享一點心得:你會發現賺錢的商機其實就像個拼圖游戲,有很多面包屑、很多碎片,真的、假的、有價值的、誤導的,都散落在各處。 你需要一一拾取,一一甄別…

gerrit自啟動方案—windows服務

在windows系統中,想將gerrit做成開機自啟動一般使用兩個方法 1.用.bat腳本方法 編寫.bat腳本,并將腳本文件生成快捷方式,放置在電腦的啟動目錄下,電腦開機或重啟后,腳本會自動啟動 (winR 輸入 shell:start…

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.…

Git命令之江湖百曉生

Git 命令大全 第一章:Git 簡介 Git 是一個開源的分布式版本控制系統,由 Linus Torvalds 于 2005 年創建,用于有效、高速地處理從小到大的項目。它是一個命令行工具,用于跟蹤和管理源代碼歷史記錄。 第二章:Git 的 1…

【軟件設計師】面向對象技術

1.面向對象基礎 1.1 基本概念 方法重載是函數名字相同,參數列表不同 組成 即組合,指整體與部分的關系,整體與部分生命周期相同 聚合 關聯關系的一個特例,是體現整體與部分,即使has-a的關系,此時整體與部分…

C++語言學習(六)—— 類與對象(二)

目錄 一、對象數組 二、對象指針 三、this 指針 四、類類型作為參數類型的三種形式 4.1 對象本身作為參數 4.2 對象指針作為參數 4.3 對象引用作為參數 五、靜態成員 5.1 靜態數據成員 5.2 靜態成員函數 六、友元機制 6.1 友元函數 6.2 友元類 七、類的組合 八、…

【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…