数仓开发那些事_番外(2)
一闪在摸爬滚打了数年后,结合去年获得了个优秀员工,现在负责数据开发一面。
神州员工:一闪,你们还缺人不,不想当外包了。
一闪:我只负责招开发,实施的招聘我参与不了哇。(所以你能不能练练普通话,广普听着总是怪怪的)
老员工:一闪,今天下午一点半面试一个甲方的中级开发,招进来写Flink。
一闪:(又可以摸鱼了)简历发我看看。
-- 5年工作经验,简历中规中矩,应该是个老实人。熟悉的语言是Java,那么就不问Scala了,打工人何苦为难打工人,面试搞得花里胡哨没意思。(不过是甲方面试,还是要谨慎些,不能和面试外包一样捣糨糊了)
一闪早早的就到了会议室,进入了腾讯会议,等着受害人小伙子上线。结果小伙子刚进入腾讯会议,人资小姐姐也进了会议室,坐在了一闪的边上。看来最近行业确实不好,招个中级开发都需要hr监督了。(不要问hr小姐姐好不好看,问就是好看)
(以下省略双方一段客套话和自我介绍)
一闪:今天我们主要就是从三个方面来做这个面试
①我看你简历上是熟悉Java,所以我会和你简单聊一下有关的知识。
②我们这个岗位主要是负责之后我们实时模块的开发,所以考察一下你Flink有关的技术。
③我看你是有5年的工作经验,咱们还可以分享一下在项目中遇到的一些特殊场景,互相学习下。
总之我们气氛是比较轻松的,不用紧张。
小伙:好的好的。
一闪:在你开发的时候,一般是怎么创建线程池的?
小伙:公司里是强制要求使用ThreadPoolExecutor的。这个方式也比较方便。
一闪:具体聊聊呢,比如说其他的方式有什么不足,这个方式好在哪里呢?(这小伙咋话只说一半)
小伙:这个方式的灵活性比较高,可以自定义一些参数,其他的方式做不到。而且阿里的开发手册里面也要求了不能使用Executor提供的工厂类。
-- 卧槽,内心一震,看了看小伙的简历,这小伙也不是阿里出来的啊,看来有点东西。
一闪:接下来问的问题,你可以适当拓展一下,需要详细沟通的地方我会再追问你一下哈。(各位家人,面试一定要学会拓展,一个helloworld也能拓展到reflect)咱们聊聊你在现在的工作中实时数仓的架构吧,包括上下游和用到了哪些技术?
小伙:上游接的是kafka Topic,相当于是ods层。然后通过flink计算输出了cdm层和ads层,然后将结果数据存到了olap数据库clickhouse。在cdm层中我们使用了旁路缓存来关联维表,提高了效率;也使用到了CEP技术来处理复杂的事件。举个例子吧,我们比如说要算一个商品的实时营收,我们先从kafka topic里面把订单数据拿出来,然后通过interval join把订单主子表合并,关联维度,再将数据聚合到我们想要的维度,然后clickhouse中的表设置主键模型,我们把结果数据直接写入,然后给前端展示就ok了。此外,我们还实现了精准一次性。
一闪:(感觉还行啊)那你举例了一个商品营收的指标,那这个商品的营收金额其实就是这个商品的一个state吧,讲讲你对于flink中state的理解呢?
小伙:大类就分成键控和算子两种类型吧,state就是存在状态后端的,故障恢复的时候都会用的到。
AI大模型给出的答案↓可供参考在 Apache Flink 中,State(状态)是指在流处理应用程序中维护和管理的数据。State 允许应用程序存储和访问与特定键相关联的数据,以便跟踪和处理输入流中的信息。State 可以在不同的操作之间共享和传递,使得 Flink 应用能够处理更加复杂的业务逻辑和状态管理。
具体来说,Flink 中的 State 分为两种类型:
Keyed State(键控状态): Keyed State 是与特定键(key)相关联的状态。在 Flink 中,数据流被划分为不同的 key 分区,同一个 key 的所有数据会被分配到同一个任务处理。Keyed State 可以存储每个 key 对应的数据,以便在处理过程中进行访问和更新。常见的 Keyed State 类型包括 ValueState、ListState、MapState 和 ReducingState。
Operator State(算子状态): Operator State 是与整个操作符(operator)相关联的状态。Operator State 可用于在同一操作符的不同子任务之间共享状态信息,或者在操作符重启时恢复状态。常见的 Operator State 类型包括 ListState 和 BroadcastState。
在 Flink 应用程序中,State 起着重要的作用,可以用来实现状态管理、窗口操作、事件处理和容错恢复等功能。通过使用 State,Flink 应用可以跟踪和维护数据流中的状态信息,以实现高效、可靠的流处理逻辑。
需要注意的是,State 在 Flink 中是有状态后端(State Backend)支持的,State 可以被存储在内存、文件系统或外部存储中,以便实现高性能和可靠性的状态管理。通过合理选择和配置状态后端,可以满足不同场景下的状态管理需求。
-- 叼毛,这小伙展开说说能少两斤肉吗,不过讲的倒也没错
一闪:那你提到了故障恢复,你们一般面对flink故障的话是如何处理的呢?
小伙:就直接从最新状态恢复的,因为我们都有配置checkpoint。
一闪:那你了解savepoint吗,它和ck有啥异同?
小伙:这个听说过,具体倒不是很了解。。。。
AI大模型给出的答案↓可供参考
在 Apache Flink 中,Savepoint(保存点)和Checkpoint(检查点)是两种不同的机制,用于实现容错和恢复的功能。它们之间的主要异同点如下:相同点:
1. 容错机制:Savepoint 和 Checkpoint 都是用于实现容错性,即在发生故障时能够恢复应用程序的状态并继续处理数据。
2. 状态快照:Savepoint 和 Checkpoint 都会对应用程序的状态进行快照,保存数据流处理过程中的状态信息。不同点:
1. 触发方式:- Checkpoint: Checkpoint 是由 Flink 自动周期性触发的,用于持久化应用程序的状态。Checkpoint 可以配置间隔时间和条件,例如基于记录数或时间间隔。- Savepoint: Savepoint 是由用户手动触发的,用于主动保存应用程序的状态。用户可以在需要时手动创建 Savepoint,通常用于应用程序更新、迁移或调试等场景。2. 存储位置:- Checkpoint: Checkpoint 的状态信息通常存储在配置的状态后端(State Backend)中,如内存、文件系统或远程存储。- Savepoint: Savepoint 的状态信息会被持久化到可靠的持久化存储介质(如分布式文件系统),以便长期保存状态并支持应用程序的恢复。3. 作用范围:- Checkpoint: Checkpoint 主要用于实现应用程序的容错性,并在故障恢复时使用。Checkpoint 通常是短期保存,不适用于长期保存状态或应用更新。- Savepoint: Savepoint 主要用于保存应用程序的状态,可以被长期保存并用于应用程序更新、迁移、降级、调试等场景。总的来说,Checkpoint 是 Flink 内部使用的容错机制,用于实现应用程序的容错性和故障恢复;而 Savepoint 则是由用户主动触发的保存点机制,可以用于保存应用程序状态以支持应用程序的更新和管理。两者共同为 Flink 提供了强大的容错和状态管理能力。
一闪:那你刚刚还提到了主子表关联,聊聊你在flink中多流关联的实践呢?
(这个问题小伙回答的有点烂,我就直接展示大模型的答案吧↓)
AI大模型给出的答案↓可供参考
Flink 的 Join Hint 用于优化 Join 操作的执行策略。通过提供 Hint,你可以指导 Flink 选择更合适的执行计划,从而提高 Join 的性能。Flink 主要支持以下几种 Join Hint:BROADCAST_HASH_FIRST(table1): 将 table1 广播到所有参与 Join 的节点上,并使用 Hash Join 算法。这种方式适用于 table1 数据量较小的情况,可以避免数据 shuffle,从而提高 Join 效率。BROADCAST_HASH_SECOND(table2): 将 table2 广播到所有参与 Join 的节点上,并使用 Hash Join 算法。这种方式适用于 table2 数据量较小的情况。REPARTITION_HASH_FIRST(table1): 对 table1 进行重新分区,并使用 Hash Join 算法。这种方式适用于 table1 数据量较大,且数据分布不均匀的情况。REPARTITION_HASH_SECOND(table2): 对 table2 进行重新分区,并使用 Hash Join 算法。这种方式适用于 table2 数据量较大,且数据分布不均匀的情况。REPARTITION_SORT_MERGE_JOIN(table1, table2): 对 table1 和 table2 进行重新分区,并使用 Sort-Merge Join 算法。这种方式适用于 table1 和 table2 数据量都较大的情况。使用方法:在 Flink SQL 中,你可以使用 /*+ ... */ 的语法来添加 Join Hint。例如:sql
SELECT *
FROM table1
/*+ BROADCAST_HASH_FIRST(table1) */ -- 将 table1 广播
JOIN table2
ON table1.id = table2.id;SELECT *
FROM tableA
/*+ REPARTITION_SORT_MERGE_JOIN(tableA, tableB) */ -- 使用 Sort-Merge Join
JOIN tableB
ON tableA.key = tableB.key;
注意事项:Join Hint 只是建议,Flink 并不保证一定会按照 Hint 的指示执行。Flink 的优化器会根据实际情况选择最优的执行计划。
使用不当的 Join Hint 可能会降低性能。因此,在使用 Join Hint 之前,最好先进行测试和评估。
并非所有版本的 Flink 都支持所有类型的 Join Hint,请参考 Flink 官方文档了解所使用版本的具体支持情况。
通过合理地使用 Join Hint,可以帮助 Flink 优化 Join 操作,提高应用程序的性能。 建议根据具体的数据量和数据分布情况选择合适的 Join Hint。 实际应用中,可以通过观察执行计划和性能指标来判断 Join Hint 是否有效。
----------
后面还扯了些有的没的,如果是高级开发,那我肯定就否了,但是中级开发,我觉得要求没那么高,我就给通过了.............
----------
后来小伙被人资小姐姐确定为培训班出身,工作经验是假的,毫不犹豫地pass了.......
老程序员(二面面试官):年轻人,抬手不是抱歉,是你还得练。
----------
后话:面试一定要聊深点,最好还能带上点源码,说不定就把我这个年轻人唬住了呢。
相关文章:

数仓开发那些事_番外(2)
一闪在摸爬滚打了数年后,结合去年获得了个优秀员工,现在负责数据开发一面。 神州员工:一闪,你们还缺人不,不想当外包了。 一闪:我只负责招开发,实施的招聘我参与不了哇。(所以你能…...

Linux常用指令-----下
Linux常用指令------上 Linux常用指令------中 Linux系列 文章目录 Linux系列前言一、more指令二、less指令三、head指令和tail指令四、grep指令五、zip指令和unzip指令六、tar指令1、打包压缩2. 预览3. 解压解包 前言 在上一篇博客中,我給大家介绍了cat指令&#…...

MySQL通过binlog日志进行数据恢复
记录一次阿里云MySQL通过binlog日志进行数据回滚 问题描述由于阿里云远程mysql没有做安全策略 所以服务器被别人远程攻击把数据库给删除,通过查看binlog日志可以看到进行了drop操作,下面将演示通过binlog日志进行数据回滚操作。 1、查询是否开始binlog …...

【AIGC】与模型对话:理解与预防ChatGPT中的常见误解
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯模型的工作原理和用户期望差异人工智能模型的基本工作原理认知上的局限与误解用户期望与模型实际能力的差距精确理解用户意图的重要性实际应用中的建议 &…...

字符2
strncpy n表示最多拷贝n个字符到目标字符串,当源字符串的字符个数不够时,就拷贝\0直至拷贝n个(源字符串不一定有\0),相对strcpy更加安全 char* strncpy (char* destination, const char* source, size_t n); strncat 当源字符串…...

25年宁德时代社招在职晋升Verify测评SHL题库:语言理解+数字推理考什么?
宁德时代的社招测评采用Verify系统,主要分为两大核心部分:语言理解和数字推理。 1. **语言理解部分**:包括阅读理解、逻辑填空和语句排序等题型。要求应聘者在17分钟内完成30题,旨在考察应聘者的阅读速度、理解准确性和逻辑性。 …...

数据转换:连接数据孤岛,释放信息价值
引言 在当今这个数据驱动的时代,数据转换已成为企业获取竞争优势的关键。随着数据量的爆炸性增长,不同来源、不同格式的数据需要被整合和转换,以便于分析和决策。本文将探讨数据转换的重要性、常见方法、工具以及最佳实践。 数据转换的重要…...

提升PHP技能:18个实用高级特性
掌握PHP基础知识只是第一步。 深入了解这18个强大的PHP特性,将显著提升您的开发效率和代码质量。 1、超越 __construct() 的魔法方法 虽然 __construct() 为大多数开发者所熟知,PHP 却提供了更多强大的魔术方法,例如: class Da…...

MySQL基础操作(2)
目录 1. CONCAT() 2. 3. ! 或 <> 4. IS NULL 5. IS NOT NULL 6. BETWEEN ... AND ... 7. LIKE 8. ORDER BY 9. LIMIT 10. LENGTH() 11. SUBSTR() 12. UPPER() 13. LOWER() 14. CONCAT_WS() 15. REPLACE() 16. INSTR() 17. TRIM() 18. IFNULL() 19. SY…...

Windows环境 (Ubuntu 24.04.1 LTS ) 国内镜像,用apt-get命令安装RabbitMQ
一、环境 Windows11 WSL(Ubuntu 24.04.1) 二、思路 1 用Windows中的Ubuntu安装RabbitMQ,贴近Linux的线上环境; 2 RabbitMQ用erlang语言编写的,先安装erlang的运行环境; 2 用Linux的apt-get命令安装,解决软件依赖…...

web网页前后端交互方式
参考该文, 一、前端通过表单<form>向后端发送数据 前端是通过html中的<form>表单,设置method属性定义发送表单数据的方式是get还是post。 如使用get方式,则提交的数据会在url中显示;如使用post方式,提交…...

LN61C 高精度 低功耗 小封装 电压检测芯片
1、产品概述 LN61C 系列芯片是使用 CMOS 技术开发的高精度、低功耗、 小封装电压检测芯片。检测电压在小温度漂移的情况下保持 极高的精度。客户可选择 CMOS 输出或 Open Drain 输出。 2、产品特点 高精度: 2% 低功耗:2.0A ( VIN1.5V …...

自动驾驶控制与规划——Project 2: 车辆横向控制
目录 零、任务介绍一、环境配置二、算法三、代码实现四、效果展示 零、任务介绍 补全src/ros-bridge/carla_shenlan_projects/carla_shenlan_stanley_pid_controller/src/stanley_controller.cpp中的TODO部分。 一、环境配置 上一次作业中没有配置docker使用gpu,…...

Bootstrap-HTML(五)图像基础样式
Bootstrap-HTML(五)图像基础样式 前言一、圆角图片二、圆形图片三、缩略图四、对齐图像五、图片居中六、响应式图片 前言 在之前的博客中,我们已经详细了解了 Bootstrap5 中诸多实用的组件和样式类,比如徽章与表格等,…...

bain.js(十二):RNN神经网络实战教程 - 音乐乐谱生成 -人人都是作曲家~
系列文章: (一):可以在浏览器运行的、默认GPU加速的神经网络库概要介绍(二):项目集成方式详解(三):手把手教你配置和训练神经网络(四)…...

Endnote | 查看文献所在分组
软件版本:Endnote X8 第一种方式: 在文献上右键——记录摘要,即可在弹出页面上看到自定义和智能组的分组情况。 第二种方式: 在菜单栏点击文献——记录摘要,也可以查看分组情况。 注: 新版本的endnote软件…...

DateRangePickerDialog组件的用法
文章目录 概念介绍使用方法示例代码我们在上一章回中介绍了DatePickerDialog Widget相关的内容,本章回中将介绍DateRangePickerDialog Widget.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里说的DateRangePickerDialog是一种弹出窗口,只不过窗口的内容固定显示为…...

数据库合并操作:深入理解 MERGE INTO 语句
在数据管理和操作中,我们常常面临着将源数据合并到目标表中的需求。无论是对现有记录进行更新,还是对缺失的记录进行插入,甚至有时候需要删除不再符合条件的记录,这些操作通常都需要多条 SQL 语句来完成。然而,SQL 中有…...

联发科MTK8788_MT8788安卓核心板安兔兔跑分_安卓主板方案商
MT8788安卓核心板具有集成的蓝牙、fm、WLAN和gps模块,是一个高度集成的基带平台,包括调制解调器和应用处理子系统,启用LTE/LTE-A和C2K智能设备应用程序。该芯片集成了工作在2.0GHz的ARM Cortex-A73、最高可达2.0GHz的ARM Cortex-A53和功能强大…...

计算机网络技术基础:6.数据传输方式
数据传输是指利用信号把数据从发送端传送到接收端的过程,通常可以从多个不同的角度对数据传输方式进行描述。 一、并行传输和串行传输 数据在信道上传输时,按照使用信道的多少可以分为串行传输和并行传输两种方式。 1.串行传输 在计算机中,…...

免费开源了一个图床工具 github-spring-boot-starter
文章目录 第一步,新建一个SpringBoot项目第二步,在pom文件里面引入jar包第三步,配置你的github信息github.authorization1、进入github官网,登录账号,点击头像,选择setting2、选择[Developer Settings](htt…...

Mysql之YUM安装时GPG 密钥报错问题处理
一、背景说明 使用YUM安装mysql5.7的时候报错,报错信息提示未安装公钥。博主查看/etc/yum.repos.d/mysql-community.repo配置文件中关于公钥的配置,确实启用了公钥验证,博主再排查过程中还是走了一些弯路,最终顺利解决了ÿ…...

Hw亮度省电
1. 亮度控制策略 /decompile-hw/decompile/app/HwPowerGenieEngine3/src/main/res/xml/backlight_policy.xml <?xml version"1.0" encoding"utf-8"?> 2 <backlight_policy xmlns:android"http://schemas.android.com/apk/res/android&qu…...

【信息系统项目管理师-论文真题】2015下半年论文详解
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论题一:大项目或多项目的成本管理解题思路写作要点论题二:项目的采购管理解题思路写作要点论题一:大项目或多项目的成本管理 随着移动互联网、物联网、云计算、大数据等新一代信息技术的广泛应用,我国目前…...

django的model中定义【记录修改次数】的这个字段该用什么类型
django中定义对于某个文章应用的数据库中使用到记录修改次数的这个字段 如models.py中的配置 from django.db import models from django.utils import timezone from django.contrib.postgres.fields import ArrayFieldclass Article(models.Model):# Titlestitle_cn model…...

windows openssl编译x64版libssl.lib,编译x64版本libcurl.lib,支持https,vs2015编译器
不要纠结,直接选择用perl编译! 告诫想要用弄成vs编译版的,暂时先别给自己增加麻烦 告诫,以下执行的每一步,都不要纠结 先安装环境 nasm 64位版本 https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/win64/nasm-…...

搭建 Elasticsearch 集群:完整教程
本文将详细介绍如何在 Linux 环境下搭建一个 Elasticsearch 集群,涵盖环境准备、配置优化、服务启动等多个环节。 一、环境准备 创建安装目录 mkdir /es cd /es解压 Elasticsearch 安装包 tar -xzf elasticsearch-7.10.1-linux-x86_64.tar.gz -C /es配置环境变量 编…...

如何实现序列化和反序列化?如何处理对象的生命周期管理?
序列化和反序列化 实现思路: 序列化:将对象的状态信息转换为可以存储或传输的格式,通常是字节流。 确定要序列化的对象的数据成员。将这些数据成员按照一定的规则(如二进制、文本、JSON、XML 等)编码为字节序列。将生…...

WPF+MVVM案例实战与特效(三十八)- 封装一个自定义的数字滚动显示控件
文章目录 1、运行效果2、案例实现1、功能设计2、页面布局3、控件使用4、运行效果3、拓展:多数字自定义控件1、控件应用4、总结1、运行效果 在Windows Presentation Foundation (WPF)应用程序中,自定义控件允许开发者创建具有特定功能和外观的独特UI元素。本博客将介绍一个名…...

docker安装Redis、docker使用Redis、docker离线安装redis、Redis离线安装
服务器到期了,换了一个新的环境要重搭,就记录一下好了: -----docker在线安装Redis 拉取 Redis 镜像 docker pull redis:6.2 运行 Redis 容器 docker run --name redis -d redis docker run --name redis -d redis:6.2 映射端口 docker run -…...