iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java高频面试题之海量数据处理分析
  • 139
分享到

Java高频面试题之海量数据处理分析

Java 海量数据处理Java 数据处理 2022-11-13 18:11:35 139人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言1.1 哈希算法1.2 位图法1.3 Bloom Filter1.4 数据库优化1.5 倒排索引法1.6 外排序法1.7 字典树2. 经典问题分析2.1 top k问题2.2

前言

硬件扩容是难满足海量数据处理需要的,如何利用现有条件进行海量信息处理

海量信息处理日益成为当前程序员笔试面试中一个新的亮点

基本方法

通过查询网上的方方面面知识点,以及阅读一些相关书籍

常见的方法有Hash法、Bit - map法、Bloom filter法、数据库优化法、倒排索引法、外排序法、Trie树、堆、双层桶法以及 MapRe-duce法等

1.1 哈希算法

也被叫做散列(映射关系)。数据元素中的关键字为key,按散列函数计算出hash ( key),也就是计算出它的存储地址,从而对数据进行一些操作

冲突指的就是两个关键字对应同一个函数值,也就是映射相同的地址

为了减少冲突,散列函数也很有讲究。尽量简单,函数值域要在其范围内,也要减少其冲突

数据结构这本书中也有提及

  • 常用的构造散列函数的方法主要有:直接寻址法(按照关键字的线性关系)、取模法、数字分析法、平方取中法等
  • 常见的解决冲突的方法主要有:开放地址法(遇到冲突的时候按照某种方法进行探测)、链地址法等等

1.2 位图法

B使用位数组来表示某些元素是否存在(可用于查重,也可用于判断某个数据是否存在)适用于海量数据的快速查找、判重、删除等。

具体的操作是生成N位字符,如果有数字标为1,没数字标为0。(用空间来换取时间,其排序的时间复杂度为 O(n))

1.3 Bloom Filter

检测一个元素是否属于一个集合。牺牲正确率换取空间效率与时间效率的提高。

基本原理是位数组与Hash函数的结合,包含m位数组(初始化为0),定义k个不同的hash函数(每个函数映射到位数组的k个位置)联合使用。向集合插入元素时,根据k个Hash函数可以得到位数组中的k个位(设置为1),查询查询某个元素是否属于集合,k个为1(存在),k个位不为1(不存在)。在插人其他元素时,可能会将其他位置为1,产生了错误。

1.4 数据库优化

可以通过数据库的工具、数据分区、索引、缓存机制、优化查询、排序等

1.5 倒排索引法

根据关键字的某些值进行排序从而建立索引

存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射,它是文档检索系统中最常用的数据结构
有两种不同的反向索引形式:

  • 第一种形式是一条记录的水平反向索引(或者反向档案索引)包含每个引用单词的文档的列表;
  • 第二种形式是一个单词的水平反向索引(或者完全反向索引)又包含每个单词在一个文档中的位置。
  • 第二种形式提供了更多的兼容性(例如短语搜索),但是需要更多的时间和空间来创建。

一般情况下可以采用矩阵的方式存储来存储,但会浪费大量的空间

1.6 外排序法

定义:在内存中不能一次处理过多的对象,须以文件形式外放。排序需一步步调入内存处理(相对大文件,无法一次装入内存中,需多次交换数据)

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

适用于大数据的排序和查重,但是效率比较低,因为要用到io的操作

1.7 字典树

利用字符串的公共前缀来减少时空开销(空间换时间)。用于快速字符串检索的多叉树结构

统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。

优点是:最大限度地减少无谓的字符串比较,查询效率比散列表高。

Trie树一般具有3个基本特性:

  • 根结点不包含字符,除根结点外每一个结点都只包含一个字符。
  • 从根结点到某一结点,路径上经过的字符连接起来,为该结点对应的字符串。
  • 每个结点的所有子结点包含的字符都不相同。

2. 经典问题分析

2.1 top k问题

频率最高的k个数或者找出最大的k个数等,目前比较好的方法是分治+Trie树/hash +小顶堆。

  • hash方法分解成多个小数据集(如果有重复的数字的话,通过去重减少很多的数据集)
  • Trie树或者hash统计每个小数据集中的query词频
  • 小顶堆求出每个数据集中出频率最高的前K个数
  • 最后在所有top K中求出最终的top K

在实际应用中,可能有足够大的内存,那么直接将数据扔到内存中一次性处理即可,也可能机器有多个核,这样可以采用多线程处理整个数据集。

2.2 重复问题

该问题可通过位图法进行,此方法最优

具体的执行代码可看书籍中的展示,此为该书籍的展示代码

 

2.3 排序问题

数据库排序(要求数据库的规格比较好)

分治法(虽然缩小内存,但是编码复杂,速度变慢)

位图法

到此这篇关于Java高频面试题之海量数据处理分析的文章就介绍到这了,更多相关Java海量数据处理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java高频面试题之海量数据处理分析

本文链接: https://www.lsjlt.com/news/169366.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java高频面试题之海量数据处理分析
    目录前言1.1 哈希算法1.2 位图法1.3 Bloom Filter1.4 数据库优化1.5 倒排索引法1.6 外排序法1.7 字典树2. 经典问题分析2.1 top k问题2.2...
    99+
    2022-11-13
    Java 海量数据处理 Java 数据处理
  • Java面试高频问题之RabbitMQ系列全面解析
    1.RabbitMQ是什么? RabbitMQ是一款开源的,Erlang编写的,基于AMQP(高级消息队列协议)协议的消息中间件。 2.为什么要使用消息队列? 从本质上来说是因为互联...
    99+
    2024-04-02
  • 分析总结20道Vue高频面试题
    目录引言vue生命周期vue父子组件生命周期v-if和v-showv-for和v-if优先级说一下computed和watchvue-routervue2和vue3区别vue插件使用...
    99+
    2022-11-13
    Vue高频面试题 Vue面试
  • 高频web前端面试题实例分析
    本篇内容主要讲解“高频web前端面试题实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“高频web前端面试题实例分析”吧!面试官:请你简述 var、let、const 三者之间的区别?我:呃...
    99+
    2023-07-05
  • Python海量数据处理之_Hadoop
    1. 说明  前两篇分别介绍了Hadoop的配置方法和基本原理,本篇将介绍如何让程序借助Hadoop调用服务器集群中的算力。Hadoop是Java语言实现的,它不仅支持Java,还支持C++,Python等程序的分布计算。下面以Pyth...
    99+
    2023-01-31
    数据处理 海量 Python
  • web前端高频面试题实例代码分析
    本篇内容介绍了“web前端高频面试题实例代码分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!面试官:请你谈谈JS的this指向问题我:呃~...
    99+
    2023-07-05
  • Java面试题之JVM的示例分析
    这篇文章给大家分享的是有关Java面试题之JVM的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。面试题1:你遇到过哪些OOM情况,什么原因造成的?怎么解决的?该问题主要针对你遇到的实际问题出发,可以根据你...
    99+
    2023-06-20
  • 《面试专题-----经典高频面试题收集一》解锁 Java 面试的关键:深度解析常见高频经典面试题(第一篇)
    大家好,我是码农阿豪,一位热爱 Java 编程的程序员。今天我想和大家分享一些常见的 Java 面试题,通过收集解析这些问题,希望能够帮助大家更好地准备面试,突破技术瓶颈,把面试官按在地上摩擦 。 ...
    99+
    2024-01-21
    面试 java
  • JavaScript JSON 与大数据:处理和分析海量数据集
    JSON 的优势 轻量级和灵活性:JSON 是一种基于文本的格式,体积小、易于解析,可以轻松地通过网络传输和存储。 数据结构化:JSON 采用键值对结构,可以方便地组织和表示复杂的数据结构,包括数组、对象和嵌套对象。 易于处理:Java...
    99+
    2024-04-02
  • 【整理分享】48个前端高频面试题(附答案解析)
    48.vue中keep-alive 的作用< keep-alive >是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。< keep-alive > 包裹动态组件时,会缓存不活动的组件实例...
    99+
    2023-05-14
    javascript Vue 前端面试题
  • Java面试题之分布式的示例分析
    这篇文章主要为大家展示了“Java面试题之分布式的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java面试题之分布式的示例分析”这篇文章吧。面试题1:说说什么分布式事务?解释一下什么是...
    99+
    2023-06-20
  • 高价值Java多线程面试题分析
    问题一 A线程正在执行一个对象中的同步方法,B线程是否可以同时执行同一个对象中的非同步方法? 可以,两个线程运行所需资源不同,不需要抢占。 案例一、 package duoxian...
    99+
    2024-04-02
  • Python Pandas数据处理高频操作实例分析
    这篇文章主要介绍“Python Pandas数据处理高频操作实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python Pandas数据处理高频操作实例分析”文章能帮助大...
    99+
    2023-07-02
  • Java面试题之算法的示例分析
    小编给大家分享一下Java面试题之算法的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!面试题1:你说一下常用的排序算法都有哪些?追问1:谈一谈你对快排的理...
    99+
    2023-06-20
  • Java常量池面试题的示例分析
    这篇文章主要介绍Java常量池面试题的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!今天My partner问我一个让他头疼的Java question,求输出结果: public cla...
    99+
    2023-06-17
  • 分布式架构下Java如何处理海量数据?
    随着互联网技术的发展,数据量的爆炸式增长已成为一种常态,而处理海量数据已成为企业面临的一项重要问题。在分布式架构中,Java作为一种高效、可靠的编程语言,可以非常好地处理海量数据。本文将讨论分布式架构下Java如何处理海量数据的方法和技术...
    99+
    2023-11-02
    大数据 leetcode 分布式
  • PHP与大数据:如何更好地处理和分析海量数据?
    随着数字化时代的来临,数据量的增长速度越来越快。对于大型企业和机构来说,如何更好地处理和分析海量数据是一个非常重要的问题。在这个问题中,PHP作为一种流行的编程语言,可以为大数据处理和分析提供非常有用的帮助。 本文将介绍PHP如何用于大数...
    99+
    2023-11-02
    大数据 shell 关键字
  • JAVA面试题之static关键字的示例分析
    这篇文章给大家分享的是有关JAVA面试题之static关键字的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。问题面试官Q1:请说说static关键字,你在项目中是怎么使用...
    99+
    2024-04-02
  • Java面试题之并发编程的示例分析
    小编给大家分享一下Java面试题之并发编程的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!面试题1:说一下你对ReentrantLock的理解?ReentrantLock是JDK1.5引入的,它拥有与synchro...
    99+
    2023-06-20
  • Java面试题之手撸算法的示例分析
    这篇文章将为大家详细讲解有关Java面试题之手撸算法的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。手撸算法1:查找数组中重复元素和重复元素的个数当听让我写这个算法时,纸笔还没给到我手上,作为一个...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作