最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java高頻面試題之海量數(shù)據(jù)處理分析

 更新時間:2022年10月14日 08:42:12   作者:碼農(nóng)研究僧  
海量信息處理日益成為當前程序員筆試面試中一個新的亮點。硬件擴容是難滿足海量數(shù)據(jù)處理需要的,如何利用現(xiàn)有條件進行海量信息處理?本文就來為大家解答一下

前言

硬件擴容是難滿足海量數(shù)據(jù)處理需要的,如何利用現(xiàn)有條件進行海量信息處理

海量信息處理日益成為當前程序員筆試面試中一個新的亮點

基本方法

通過查詢網(wǎng)上的方方面面知識點,以及閱讀一些相關書籍

常見的方法有Hash法、Bit - map法、Bloom filter法、數(shù)據(jù)庫優(yōu)化法、倒排索引法、外排序法、Trie樹、堆、雙層桶法以及 MapRe-duce法等

1.1 哈希算法

也被叫做散列(映射關系)。數(shù)據(jù)元素中的關鍵字為key,按散列函數(shù)計算出hash ( key),也就是計算出它的存儲地址,從而對數(shù)據(jù)進行一些操作

沖突指的就是兩個關鍵字對應同一個函數(shù)值,也就是映射相同的地址

為了減少沖突,散列函數(shù)也很有講究。盡量簡單,函數(shù)值域要在其范圍內(nèi),也要減少其沖突

在數(shù)據(jù)結構這本書中也有提及

  • 常用的構造散列函數(shù)的方法主要有:直接尋址法(按照關鍵字的線性關系)、取模法、數(shù)字分析法、平方取中法等
  • 常見的解決沖突的方法主要有:開放地址法(遇到?jīng)_突的時候按照某種方法進行探測)、鏈地址法等等

1.2 位圖法

B使用位數(shù)組來表示某些元素是否存在(可用于查重,也可用于判斷某個數(shù)據(jù)是否存在)適用于海量數(shù)據(jù)的快速查找、判重、刪除等。

具體的操作是生成N位字符,如果有數(shù)字標為1,沒數(shù)字標為0。(用空間來換取時間,其排序的時間復雜度為 O(n))

1.3 Bloom Filter

檢測一個元素是否屬于一個集合。犧牲正確率換取空間效率與時間效率的提高。

基本原理是位數(shù)組與Hash函數(shù)的結合,包含m位數(shù)組(初始化為0),定義k個不同的hash函數(shù)(每個函數(shù)映射到位數(shù)組的k個位置)聯(lián)合使用。向集合插入元素時,根據(jù)k個Hash函數(shù)可以得到位數(shù)組中的k個位(設置為1),查詢查詢某個元素是否屬于集合,k個為1(存在),k個位不為1(不存在)。在插人其他元素時,可能會將其他位置為1,產(chǎn)生了錯誤。

1.4 數(shù)據(jù)庫優(yōu)化

可以通過數(shù)據(jù)庫的工具、數(shù)據(jù)分區(qū)、索引、緩存機制、優(yōu)化查詢、排序等

1.5 倒排索引法

根據(jù)關鍵字的某些值進行排序從而建立索引

存儲在全文搜索下某個單詞在一個文檔或者一組文檔中的存儲位置的映射,它是文檔檢索系統(tǒng)中最常用的數(shù)據(jù)結構
有兩種不同的反向索引形式:

  • 第一種形式是一條記錄的水平反向索引(或者反向檔案索引)包含每個引用單詞的文檔的列表;
  • 第二種形式是一個單詞的水平反向索引(或者完全反向索引)又包含每個單詞在一個文檔中的位置。
  • 第二種形式提供了更多的兼容性(例如短語搜索),但是需要更多的時間和空間來創(chuàng)建。

一般情況下可以采用矩陣的方式存儲來存儲,但會浪費大量的空間

1.6 外排序法

定義:在內(nèi)存中不能一次處理過多的對象,須以文件形式外放。排序需一步步調(diào)入內(nèi)存處理(相對大文件,無法一次裝入內(nèi)存中,需多次交換數(shù)據(jù))

可采用歸并排序或者二路歸并排序的手法

適用于大數(shù)據(jù)的排序和查重,但是效率比較低,因為要用到io的操作

1.7 字典樹

利用字符串的公共前綴來減少時空開銷(空間換時間)。用于快速字符串檢索的多叉樹結構

統(tǒng)計和排序大量的字符串(但不僅限于字符串),所以經(jīng)常被搜索引擎系統(tǒng)用于文本詞頻統(tǒng)計。

優(yōu)點是:最大限度地減少無謂的字符串比較,查詢效率比散列表高。

Trie樹一般具有3個基本特性:

  • 根結點不包含字符,除根結點外每一個結點都只包含一個字符。
  • 從根結點到某一結點,路徑上經(jīng)過的字符連接起來,為該結點對應的字符串。
  • 每個結點的所有子結點包含的字符都不相同。

2. 經(jīng)典問題分析

2.1 top k問題

頻率最高的k個數(shù)或者找出最大的k個數(shù)等,目前比較好的方法是分治+Trie樹/hash +小頂堆。

  • hash方法分解成多個小數(shù)據(jù)集(如果有重復的數(shù)字的話,通過去重減少很多的數(shù)據(jù)集)
  • Trie樹或者hash統(tǒng)計每個小數(shù)據(jù)集中的query詞頻
  • 小頂堆求出每個數(shù)據(jù)集中出頻率最高的前K個數(shù)
  • 最后在所有top K中求出最終的top K

在實際應用中,可能有足夠大的內(nèi)存,那么直接將數(shù)據(jù)扔到內(nèi)存中一次性處理即可,也可能機器有多個核,這樣可以采用多線程處理整個數(shù)據(jù)集。

2.2 重復問題

該問題可通過位圖法進行,此方法最優(yōu)

具體的執(zhí)行代碼可看書籍中的展示,此為該書籍的展示代碼

 

2.3 排序問題

數(shù)據(jù)庫排序(要求數(shù)據(jù)庫的規(guī)格比較好)

分治法(雖然縮小內(nèi)存,但是編碼復雜,速度變慢)

位圖法

到此這篇關于Java高頻面試題之海量數(shù)據(jù)處理分析的文章就介紹到這了,更多相關Java海量數(shù)據(jù)處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • slf4j與jul、log4j1、log4j2、logback的集成原理

    slf4j與jul、log4j1、log4j2、logback的集成原理

    這篇文章主要介紹了slf4j與jul、log4j1、log4j2、logback的集成原理,以及通用日志框架與具體日志實現(xiàn)系統(tǒng)的機制機制介紹,包括依賴的jar包,jar沖突處理等
    2022-03-03
  • 關于Mybatis-plus設置字段為空的正確寫法

    關于Mybatis-plus設置字段為空的正確寫法

    這篇文章主要介紹了關于Mybatis-plus設置字段為空的正確寫法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java設計模式學習之策略模式

    java設計模式學習之策略模式

    這篇文章主要為大家詳細介紹了java設計模式學習之策略模式的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • java并發(fā)編程之深入理解Synchronized的使用

    java并發(fā)編程之深入理解Synchronized的使用

    文詳細講述了線程、進程的關系及在操作系統(tǒng)中的表現(xiàn),這是多線程學習必須了解的基礎。本文將接著講一下Java線程同步中的一個重要的概念synchronized,希望能夠給你有所幫助
    2021-06-06
  • cmd中javac和java使用及注意事項詳解

    cmd中javac和java使用及注意事項詳解

    這篇文章主要介紹了cmd中javac和java使用及注意事項詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Java多線程定時器Timer原理及實現(xiàn)

    Java多線程定時器Timer原理及實現(xiàn)

    這篇文章主要介紹了Java多線程定時器Timer原理及實現(xiàn),涉及Timer的schedule的使用,定時器Timer的schedule等相關內(nèi)容以及代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 解決springboot錯誤:找不到或無法加載主類(配置編碼或者Maven)

    解決springboot錯誤:找不到或無法加載主類(配置編碼或者Maven)

    這篇文章主要介紹了解決springboot錯誤:找不到或無法加載主類(配置編碼或者Maven)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Collections工具類_動力節(jié)點Java學院整理

    Collections工具類_動力節(jié)點Java學院整理

    Collections工具類提供了大量針對Collection/Map的操作。這篇文章主要介紹了Collections工具類_動力節(jié)點Java學院整理,需要的朋友可以參考下
    2017-04-04
  • 線程池ThreadPoolExecutor并行處理實現(xiàn)代碼

    線程池ThreadPoolExecutor并行處理實現(xiàn)代碼

    這篇文章主要介紹了線程池ThreadPoolExecutor并行處理實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • SpringBoot中各種分頁查詢方式的示例代碼

    SpringBoot中各種分頁查詢方式的示例代碼

    在?Spring?Boot?中,實現(xiàn)分頁查詢有多種方式,下面小編將介紹幾種常見的分頁實現(xiàn)方法,包括?Spring?Data?JPA?分頁、MyBatis?分頁、手動分頁等
    2025-06-06

最新評論

松溪县| 黄平县| 永城市| 怀宁县| 柏乡县| 嘉荫县| 灵宝市| 上饶市| 富顺县| 涿鹿县| 濉溪县| 上虞市| 郁南县| 吉首市| 喜德县| 美姑县| 梁山县| 新沂市| 阳高县| 奎屯市| 曲麻莱县| 新平| 霸州市| 信丰县| 柏乡县| 定安县| 方正县| 天全县| 齐齐哈尔市| 东阿县| 东乌| 渝中区| 滨海县| 彰化市| 会同县| 青海省| 昌邑市| 石屏县| 土默特右旗| 尼玛县| 凤山市|