大厂大数据面试题收录(1)

目录

1.java 中 object 类有哪些方法?

2.说一下==和equals的区别?

3.为什么要重写 equals 和 hashcode()方法?

4.机器学习中,监督学习 和 无监督学习的区别是啥??

5.kafka 组件熟悉吗,kafka 如何实现消息的有序的?

6.在大数据组件中,你们一般用的资源管理框架是哪个?

7.那你能谈一下 yarn 的基础架构及调度流程吗?

8.Hive sql 到 MapReduce 转化的流程清楚吗?

9.你说一下 Flink checkpoint、state 的底层逻辑?

10.如果 checkpoint 设置 10s 一次,状态存储到 HDFS 中,会出现什么问题?

11.Flink on k8s 的设计思路能描述一下吗?

12.那 Flink on K8S 通信怎么处理?

13.模型推理过程中要是单个模型过大,如何发送到 kafka?


1.java 中 object 类有哪些方法?

Object 是所有类的父类,任何类都默认继承 Object,主要包含 9 个方法:

1. clone 方法

保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。

2. getClass 方法

final 方法,获得运行时类型。

3. toString 方法

该方法用得比较多,一般子类都有覆盖。

4. finalize 方法

该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。

5. equals 方法

该方法是非常重要的一个方法。一般 equals 和 == 是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。

6. hashCode 方法

该方法用于哈希查找,重写了 equals 方法一般都要重写 hashCode 方法。这个方法在一些具有哈希功能的 Collection 中用到。

7. wait 方法

用于让当前线程失去操作权限,当前线程进入等待序列

8. notify 方法

唤醒在此对象监视器上等待的单个线程。

2.说一下==和equals的区别?

对于基本类型来说是 值比较,对于引用类型来说是比较的是引用;equals 默认情况下是引用比较,只是很多类重写了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等

3.为什么要重写 equals 和 hashcode()方法?

首先:两个对象相同(即用 equals 比较返回 true),那么它们的 hashCode 值一定相同;

String str1 = "通话";
String str2 = "通话";
System.out.println(String.format("str1:%d | str2:%d",  str1.hashCode(),str2.hashCode()));
System.out.println(str1.equals(str2));

............ 结果如下:........

str1:1179395 | str2:1179395

true

但是:两个对象的 hashCode 相同,这两个对象并不一定相同(即用 equals 比较返回 false)

String str1 = "通话";
String str2 = "重地";
System.out.println(String.format("str1:%d | str2:%d",  str1.hashCode(),str2.hashCode()));
System.out.println(str1.equals(str2));

............ 结果如下:........

str1:1179395 | str2:1179395

false

所以,为了避免代码出错,需要重写 equals 和 hashcode 方法。

4.机器学习中,监督学习 和 无监督学习的区别是啥?

机器学习主要分为:监督学习(Supervised Learn)和无监督学习(Unspervised Learn)。

(1)监督学习简单理解就是:我们将教计算机如何去完成任务。

监督学习对未知事物的预测,一般分为两类问题:

回归问题:预测连续值输出,如房屋预测。

分类问题:预测离散值输出,如乳腺癌预测。

监督学习都带有标签。即数据集给出正确答案(有标签,有y值)。

2)无监督学习简单理解就是,我们打算让计算机自己进行学习。

无监督学习的特点是:没有任何的标签

训练样本不含有标记(label)信息,既没有类别信息,也不会给定目标值。(没有属性或标签,不知道正确的答案)。

5.kafka 组件熟悉吗,kafka 如何实现消息的有序的?

生产者:通过分区的 leader 副本负责数据以先进先出的顺序写入,来保证消息顺序性。

图片

消费者:同一个分区内的消息只能被一个 group 里的一个消费者消费,保证分区内消费有序。

图片

kafka 每个 partition 中的消息在写入时都是有序的,消费时, 每个 partition 只能被每一个消费者组中的一个消费者消费,保证了消费时也是有序的。

整个 kafka 不保证有序。如果为了保证 kafka 全局有序,那么设置一个生产者,一个分区,一个消费者。

6.在大数据组件中,你们一般用的资源管理框架是哪个?

更多的使用 Yarn 作为资源管理工具,现在一大部分业务也上云了,使用的 K8S。

7.那你能谈一下 yarn 的基础架构及调度流程吗?

yarn 的基础架构主要包含 3 大组件,分别为 ResourceManager、ApplicationMaster、NodeManager.

其中:

ResourceManager 是一个全局的资源管理器,负责整个系统的资源管理和分配,主要包括两个组件,即调度器(Scheduler)和应用程序管理器(Applications Manager)。

ApplicationMaster:ApplicationMaster 是 Resource Manager 根据 接收用户提交的作业,按照作业的上下文信息等 分配出一个 container 资源,然后 通知 NodeManager 为用户作业创建出一个  ApplicationMaster。

NodeManager:NodeManager 管理 YARN 集群中的每个节点,对节点进行资源监控和健康状态管理。

yarn 的调度流程简单总结如下:

  1. 客户端提交应用程序给 ResourceManager

  2. ResouceManager 收到请求后,将分配 Container 资源,并通知对应的 NodeManager 启动一个 ApplicationMaster。

  3. applicationMaster 来运行和管理 container 里面的任务,其中 container 会通过心跳机制向 applicationMaster 来发送运行信息。

  4. 任务完成之后,application 向 ResourceManager 报告,任务完成,container 进行资源释放。

8.Hive sql 到 MapReduce 转化的流程清楚吗?

Hive 将 SQL 转化为 MapReduce 任务,整个编译过程分为以下几个阶段:

1. sql 解析。HIve 通过 Antlr 对 SQL 进行 词法、语法解析,生成抽象语法树 AST Tree。

2. 语法解析。遍历 AST Tree,抽象出查询的基本组成单元 QueryBlock

3. 生成逻辑执行计划。遍历 QueryBlock,翻译为执行操作树 OperatorTree

4. 优化逻辑执行计划。逻辑层优化器进行 OperatorTree 变换,合并不必要的 ReduceSinkOperator,减少 shuffle 数据量。

5. 生成物理执行计划。遍历 OperatorTree,翻译为 MapReduce 任务。

6. 优化物理执行计划。物理层优化器进行 MapReduce 任务的变换,生成最终的执行计划。

9.你说一下 Flink checkpoint、state 的底层逻辑?

先介绍 checkpoint

首先,checkpoint 叫做检查点,是 Flink 实现容错机制的最核心功能,它能根据配置周期性的基于 Stream 中各个 Operator 的状态来生成Snapshot 快照,从而将这些状态数据定期持久化存储下来,当 Flink 程序一旦意外崩溃时,重新运行程序时可以有选择地从这些 Snapshot 进行恢复。

Flink 的 checkpoint 机制原理来自“Chandy-Lamport algorithm”算法

再介绍 state

state 一般指一个具体的 Task/Operator 的状态,主要是用来保存中间的 计算结果 或者 缓存数据

state 按照 Flink 管理还是用户管理分为:RowState(原始状态)和 Managedstate(托管状态)

  1. RowState 由用户自行管理,只支持 字节 数组,所有状态都要转换为二进制字节数组才可以。

  2. ManagedState 由 Flink RunTime 管理,支持多种数据结构,如 Map List 等

State 按照 key 划分,可以分为 KeyedState,OperatorState.

keyedState 只能用在 keyStream 上,并且每一个 key 对应一个 state 对象,keyedState 保存在 StateBackend 中,通过 RuntimeContext 访问,实现 Rich Function 接口,支持多种数据结构,如 ListState、MapState、AggregatingState 等

OperatorState  可以用于所有算子,但整个算子只对应一个 state,实现 CheckpointedFunction 或者 ListCheckpointed 接口,目前只支持 ListState 数据结构。

 

10.如果 checkpoint 设置 10s 一次,状态存储到 HDFS 中,会出现什么问题?

如果每隔 10s 就进行 checkpoint,假如 checkpoint 时,状态过小,而 HDFS 的块大小是以 128 M 进行划分,往 HDFS 中写状态时,不可能每次都把 128M 写满,所以就会出现大量的小文件。

这样会反过来影响 HDFS 读文件的效率,导致读取速度非常慢,加大 yarn 集群的负担,从而拖垮整个集群的效率。

11.Flink on k8s 的设计思路能描述一下吗?

目前将组件进行容器化已经成为当前的一个趋势,将 Flink 集群部署到 K8S 上 可以实现资源的合理利用,同时 k8s 是一个开源的容器集群管理系统,可以实现容器集群的 自动化部署、自动扩缩容、维护 等功能。

而 在 K8s 上部署 Flink 集群,主要包含以下几个步骤:

1 启动集群

  1. Flink 客户端使用 Kubectl 或者 K8s 的 Dashboard 提交 Flink 集群的资源描述文件,包含 4-5个 yaml 文件。

  2. K8s Master 根据这些资源文件将请求分发给 Slave 节点,创建 Flink Master Deployment、TaskManager Deployment、ConfigMap、SVC 四个角色。同时初始化 Dispatcher 和 KubernetesResourceManager。并通过 K8S 服务对外暴露 Flink Master 端口。

  3. Client 用户使用 Flink run 命令,通过指定 Flink Master 的地址,将相应任务提交上来,用户的 Jar 和 JobGrapth 会在 Flink Client 生成,通过 SVC 传给 Dispatcher。

  4. Dispatcher 收到 JobGraph 后,会为每个作业启动一个 JobMaster,将 JobGraph 交给 JobMaster 进行调度。

  5. JobMaster 会向 KubernetesResourceManager 申请资源,请求 Slot。

  6. KubernetesResourceManager 从 K8S 集群分配 TaskManager。每个 TaskManager 都是具有唯一标识的 Pod。KubernetesResourceManager 会为 TaskManager 生成一份新的配置文件,里面有 Flink Master 的 service name 作为地址,保障在 Flink Master failover 后,TaskManager 仍然可以重新连接上。

  7. K8S 集群分配一个新的 Pod 后,在上面启动 TaskManager。

  8. TaskManager 启动后注册到 SlotManager。

  9. SlotManager 向 TaskManager 请求 Slot。

  10. TaskManager 提供 Slot 给 JobManager,然后任务被分配到 Slot 上运行。

12.那 Flink on K8S 通信怎么处理?

Flink on K8S 通信 包含 四种通信方式:

1. POD 内部通信。直接通过 localhost 相互访问就可以。

2. 同节点的 POD 之间通信。  通过默认的 docker 网桥互连容器直接通信就可。

3. 不同节点的 POD 之间通信;通过安装 Flannel 组件,pod 的 ip 分配由 flannel 统一分配,通讯过程也是走 flannel 的网桥。

4. 外部网络与 POD 之间通信。使用 Service 服务,通过 lable 关联到后端的 Pod 容器。

Service 分配的 ip 叫 cluster ip,这是一个固定的虚拟 ip,这个 ip 只能在 k8s 集群内部使用,如果 service 需要对外提供,只能使用 Nodeport 方式映射到主机上,使用主机的 ip 和端口对外提供服务。(另外还可以使用 LoadBalance 方式,但这种方式是在 gce 这样的云环境里面使用的 )。

13.模型推理过程中要是单个模型过大,如何发送到 kafka?

在 kafka 中,默认单条消息最大为 1 M,当单条消息长度超过 1 M 时,就会出现发送到 broker 失败,从而导致消息在 producer 的队列中一直累积,直到撑爆生产者的内存。

所以在实际生产环境中,由于我们的单个模型是 5 M 多,所以刚开始出现上述的 发送到 broker 失败问题。

解决办法,只往 kafka 中发送消息体的 ID、 Location、Name,这样 消费者消费数据时,直接根据对应ID、Location 可以消费到模型。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

css 表示具有特定类或者其他属性的某种标签类型的元素

需求 通过 css 选择器获取某种标签&#xff08;如&#xff1a;div、input 等&#xff09;具有某个属性&#xff08;如&#xff1a;class、id 等&#xff09;的元素&#xff0c;从而修改其样式。 代码 通过 [标签].[属性] 的方式来获取 <div class"test">&l…

C++相关闲碎记录(8)

1、预定义的Function adapter 和 binder #include <iostream> #include <functional>int main() {auto plus10 std::bind(std::plus<int>(), std::placeholders::_1, 10);std::cout << "10: " << plus10(6) << std::endl…

基于FPGA的视频接口之高速IO(PCIE)

简介 相对于其他高速IO接口应用&#xff0c;PCIE协议有专门的的IP来进行操作&#xff0c;通过8对输入高速IO&#xff0c;以及输出高速IO&#xff0c;来实现PCIEX8功能。 原理框图 原理图 软件调用

Nginx首页修改及使用Nginx实现端口转发

按照我之前博客给的方法搭建好这样一个CTF靶场 但是呢它默认是在8000端口 如何直接访问IP地址或者域名就可以实现直接访问到靶场呢 我们需要将80端口的内容转发到8000&#xff0c;使用nginx实现端口转发功能 首先我们安装nginx&#xff1a; 安装工具和库 yum -y install gc…

《地理信息系统原理》笔记/期末复习资料(9. 网络地理信息系统)

目录 9. 网络地理信息系统 9.1. 概述 9.1.1. 网络GIS概念 9.1.2. 网络GIS体系结构 9.1.3. 网络GIS内容体系 9.2. 分布式网络GIS 9.2.1. 分布式网络GIS概念 9.2.2. 分布式主要技术 9.3. WebGIS 9.3.1. WebGIS概念 9.3.2. WebGIS分类与特点 9.3.3. WebGIS技术框架 9…

IDEA中的Postman!这款插件:免费,好用!

Postman是大家最常用的API调试工具&#xff0c;那么有没有一种方法可以不用手动写入接口到Postman&#xff0c;即可进行接口调试操作&#xff1f;今天给大家推荐一款IDEA插件&#xff1a;Apipost Helper&#xff0c;写完代码就可以调试接口并一键生成接口文档&#xff01;而且还…

电商早报 | 12月12日| 淘宝公布2023年度商品初选名单入围

淘宝公布2023年度商品初选名单&#xff1a;军大衣、酱香拿铁、熊猫周边入围 又一年临近收官&#xff0c;淘宝如期启动了“2023年度十大商品”评选。 12月11日&#xff0c;淘宝官方发布了初选入围名单&#xff0c;30件最具代表性的商品脱颖而出。据淘宝路边社介绍&#xff0c;…

系统架构设计师教程(三)信息系统基础知识

信息系统基础知识 3.1 信息系统概述3.1.1 信息系统的定义3.1.2 信息系统的发展3.1.3 信息系统的分类3.1.4 信息系统的生命周期3.1.5 信息系统建设原则3.1.6 信息系统开发方法 3.2 业务处理系统 (TPS)3.2.1 业务处理系统的概念3.2.2 业务处理系统的功能3.2.3 业务处理系统的特点…

互联网加竞赛 opencv 图像识别 指纹识别 - python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于机器视觉的指纹识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&#xff0c;适…

Pearson、Spearman 相关性分析使用

介绍 Pearson 积差相关系数衡量了两个定量变量之间的线性相关程度。 用来衡量两个数据集的线性相关程度&#xff0c;仅当一个变量的变化与另一个变量的比例变化相关时&#xff0c;关系才是线性的。 Spearman等级相关系数则衡量分级定序变量之间的相关程度。斯皮尔曼相关系数不…

学习数据结构第一步(必看)——初识集合框架

一&#xff0c;学习数据结构前置知识 目录 一&#xff0c;学习数据结构前置知识 二&#xff0c;什么是数据结构&#xff1f; 1.什么是数据结构&#xff1f; 2.容器背后对应的数据结构 3.相关Java知识 4.什么是算法&#xff1f; 三&#xff0c;什么是集合&#xff1f; …

【详细解答】项目经VS产品经理,有什么区别?哪个更值得选择?

最近很多人咨询“项目经理跟产品经理该怎么选&#xff0c;我更适合哪个&#xff1f;”“项目经理跟产品经理哪个更有钱途 ”“项目经理转产品经理好转吗”等等&#xff0c;今天就一次性说清楚项目经理跟产品经理有什么区别&#xff0c;应该怎么选择。 不想看长篇大论的&#x…

区块链的可拓展性研究【03】扩容整理

为什么扩容&#xff1a;在layer1上&#xff0c;交易速度慢&#xff0c;燃料价格高 扩容的目的&#xff1a;在保证去中心化和安全性的前提下&#xff0c;提升交易速度&#xff0c;更快确定交易&#xff0c;提升交易吞吐量&#xff08;提升每秒交易量&#xff09; 目前方案有&…

Halcon参考手册语义分割和边缘提取知识总结

1.1 语义分割和边缘提取介绍 通过语义分割&#xff0c;我们使用深度学习(DL)网络将输入图像的每个像素分配给一个类。 图(1)语义分割示例 在图(1)中&#xff0c;输入图像的每个像素都被分配给一个类&#xff0c;但是苹果的三个不同实例和橘子的两个不同实例都不是可区分的对象…

C++STL的vector模拟实现

文章目录 前言成员变量成员函数构造函数push_backpop_backinserterase析构函数拷贝构造 前言 成员变量 namespace but {template<class T>class vector{public:typedef T* iterator;private:iterator _start;iterator _finish;iterator _end_of_storage;}; }我们之前实…

c/c++ malloc、calloc、realloc and free

malloc 需要头文件 #include<stdlib.h> void *malloc( size_t size ); malloc returns a void pointer to the allocated space, or NULL if there is insufficient memory available. To return a pointer to a type other than void, use a type cast on the return …

【算法题】单词接龙(js)

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7fcc5df3354742bd88dad28219f82bf8.png 用例&#xff1a; 输入&#xff1a; 0 6 word dd da dc dword d 输出&#xff1a; worddwordda 说明&#xff1a; 先确定起始单词word&#xff0c;再接以d开有的且长度最长…

Canal实时同步MySQL数据到ES

一、canal简介 canal主要用途是对MySQL数据库增量日志进行解析&#xff0c;提供增量数据的订阅和消费&#xff0c;简单说就是可以对MySQL的增量数据进行实时同步&#xff0c;支持同步到MySQL、Elasticsearch、HBase等数据存储中去。 早期阿里巴巴因为杭州和美国双机房部署&…

MATLAB运动学之蒙特卡罗法求积分与机器人工作域分析

蒙特卡罗法又叫做统计模拟法、随机抽样技术&#xff0c;是一种随机模拟方法以概率和统计理论方法为基础的一种计算方法&#xff0c;通俗来说是可以使用随机数来解决很多计算问题的一种方法&#xff0c;很直观简单&#xff0c;尤其对于一些求解积分无解的情况&#xff0c;非常好…

《Easy3d+Qt+VTK》学习

《Easy3dQtVTK》学习-1、编译与配置 一、编译二、配置注 一、编译 1、 资源下载&#xff1a;easy3d giuhub 2、解压缩 3、用qt打开CMakeLists.txt即可 4、点击项目&#xff0c;选择debug或者release&#xff0c;图中3处可自行选择&#xff0c;因为我的qt版本是6&#xff0c…