字节-商业化部-数据研发面经【附答案】

近期,有参加春招的同学和我交流了他的面试历程,我针对这些内容进行了细致的总结与梳理,并在此分享出来,希望能助力大家学习与借鉴。

1. 自我介绍

大家好,我是xxx,就读于xxx学校,今天我主要从专业技能和项目经历两个方面来介绍,在学校期间,学习过Hadoop、Spark、Flink等大数据框架以及Spring、SpringBoot等web框架,同时做过一个数仓的项目,整个项目分为3个模块,xxx;曾经在xx家公司工作/实习过xx时间,做的主要工作包括3个部分,分别是xxx;以上就是我的自我介绍,谢谢面试官

2.八股文

1)RDD是什么

全称(Resilient Distributed Dataset)叫做弹性分布式数据集,是一种数据结构,可以理解成是一个集合。在代码中的话,RDD是一个抽象类。还有一个非常重要的特点:RDD是不保存数据的,仅仅封装了计算逻辑,也就是你直接打印RDD是看不见具体值的。

2)你刚刚提到RDD是弹性分布式数据集,弹性指什么

  • 第一、数据容错性,当某个RDD发生故障导致数据丢失时,RDD可以通过其血缘机制重新计算丢失的数据分区,而不需要进行频繁的数据冗余备份和复杂的检查点操作,从而实现数据的自我恢复和容错
  • 第二、动态调整性,RDD的数据可动态划分为多个分区,用户可通过 repartition 或 coalesce 调整分区数量,优化并行度以适应资源变化

3)Spark SQL的Join有几种方式

主要有三种方式,分别是broadcast hash join、shuffle hash join、sort merge join

  • 先说一下hash join吧,这个算法主要分为三步,首先确定哪张表是build table和哪张表是probe table,这个是由spark决定的,通常情况下,小表会作为build table,大表会作为probe table;然后构建hash table,遍历build table中的数据,对于每一条数据,根据join的字段进行hash,存放到hashtable中;最后遍历probe table中的数据,使用同样的hash函数,在hashtable中寻找join字段相同的数据,如果匹配成功就join到一起。这就是hash join的过程
  • broadcast hash join分为broadcast阶段和hash join阶段,broadcast阶段就是将小表广播到所有的executor上,hash join阶段就是在每个executor上执行hash join,小表构建为hash table,大表作为probe table
  • shuffle hash join分为shuffle阶段和hash join阶段,shuffle阶段就是对两张表分别按照join字段进行重分区,让相同key的数据进入同一个分区中;hash join阶段就是对每个分区中的数据执行hash join
  • sort merge join分为shuffle阶段、sort阶段和merge阶段,shuffle阶段就是对两张表分别按照join字段进行重分区,让相同key的数据进入同一个分区中;sort阶段就是对每个分区内的数据进行排序;merge阶段就是对排好序的分区表进行join,分别遍历两张表,key相同就输出,如果左边小,就继续遍历左边的表,反之遍历右边的表

4)Spark的调优方法有哪些

  • 资源分配优化:
  • 合理设置 Executor 数量 :num-executors 参数用于设置应用运行时 Executor 的数量,通常可以根据集群资源和任务需求进行设置。一般建议 num-executors = spark.cores.max / spark.executor.cores,在资源允许的情况下,适当增加 Executor 的数量可以提高任务的并行度,从而提升性能。
  • 调整每个 Executor 的内存 :executor-memory 参数用于设置每个 Executor 的内存大小,对 Spark 作业运行的性能影响很大,适当增加每个 Executor 的内存量,可以提升性能。
  • 设置 Executor 的 CPU 核心数 :executor-cores 参数用于设置每个 Executor 的 CPU 核心数,在资源允许的情况下,增加每个 Executor 的 CPU 核心数可以提高执行 task 的并行度,从而提升性能。
  • AQE(自适应查询执行):在运行时,每当shuffle map阶段执行完毕,AQE会结合这个阶段的统计信息,基于既定的规则动态的调整,修改尚未执行的逻辑计划和物理计划,来完成对原始查询语句的运行时优化动态合并分区:可以在任务开始时设置较多的shuffle分区个数,然后在运行时通过查看shuffle文件统计信息将相邻的小分区合并成更大的分区动态切换join策略:由Sort Merge Join切换成Broadcast Hash Join动态优化join倾斜:将倾斜的分区数据拆分成多个分区

5)你用过Flink吗

用过,Flink是一个分布式的计算框架,主要用于对有界和无界数据流进行有状态计算,其中有界数据流就是指离线数据,有明确的开始和结束时间,无界数据流就是指实时数据,源源不断没有界限,有状态计算指的是 在进行当前数据计算的时候,我们可以使用之前数据计算的结果。Flink还有一个优点就是提供了很多高级的API,比如DataSet API、DataStream API、Table API和FlinkSQL

6)Flink的双流Join有哪几种

主要有四种方式,分别是:滚动窗口Join、滑动窗口Join、会话窗口Join、时间区间Join

  • Tumbling Window Join:滚动窗口 Join,窗口无重叠,固定大小,以固定的时间间隔滑动。例如,每 5 秒为一个窗口,每隔 5 秒滑动一次。这种 Join 适用于对时间窗口内数据进行固定周期的聚合或关联操作。
  • Sliding Window Join:滑动窗口 Join,窗口有重叠,以固定的时间间隔滑动,窗口大小和滑动间隔可配置。比如窗口大小为 10 秒,滑动间隔为 5 秒,这样窗口之间会有 5 秒的重叠部分。它可以在不同的时间窗口上进行数据关联,获取更灵活的分析结果。
  • Session Window Join:会话窗口 Join,基于会话的窗口 Join,窗口的开始和结束由数据的活动间隔决定。当数据在一定时间内没有新的事件发生时,会话窗口就会关闭。这种 Join 适合对用户会话等具有自然边界的数据进行关联分析。
  • Interval Join :时间区间Join,允许在一个流的时间范围内与另一个流进行 Join。例如,可以根据某个事件的时间范围,将两个流中在这个时间范围内的数据进行关联。这种 Join 类型适用于处理具有时间相关性的数据,如根据某个时间段内的订单数据和库存数据进行关联分析

7)数仓分层的优势是什么

  • 第一、复杂需求简单化;我们通过将复杂的问题分解为多个步骤来完成,每一层只处理单一的步骤,比较容易和理解
  • 第二、提高数据的复用性;比如在已经得到最终结果之后,又需要中间层的一些数据,我可以直接查询中间层的数据,不必重新进行计算

8)数仓建模的方法有哪些

  • ER模型是Inmon提出的,这个模型是符合3NF的,他的出发点就是整合数据,将各个系统中的数据以整个企业角度按主题进行分类,但是不能直接用于分析决策
  • 维度模型是Kimball提出的,这个人和Inmon算是数仓的两个流派,他的出发点就是分析决策,为分析需求服务,而现在多数的数仓的搭建都是基于维度模型进行搭建的。
  • 区别:ER模型冗余更少,但是在大规模数据跨表分析中,会造成多表关联,这会大大降低执行效率

9)OLAP数据库用过哪些

主要用过Kylin、Druid、ClickHouse等

10)ClickHouse为什么查询快

  • 第一、ClickHouse 采用列存储方式,将数据按列存储在磁盘上,分析查询可以大大减少读取数据量,提高查询效率
  • 第二、ClickHouse支持分布式部署,数据可以在多个节点之间进行分片存储和并行处理,充分利用集群资源来提高查询性能
  • 第三、ClickHouse为每个表构建了稀疏索引,查询时可通过索引快速定位到需要读取的数据块,减少磁盘IO操作
  • 第四、ClickHouse在查询处理过程中采用了向量化技术,将数据以向量的形式进行处理,而不是逐行处理,提高数据处理速度

3.项目

1)你做过最复杂的项目是什么,详细介绍一下

2)在项目中遇到过的最大的难点是什么

4.刷题

SQL题

题目:计算部门平均工资(要求去除部门最高和最低工资)

参考答案:

SELECT 
  dept_name, 
  AVG(salary) avg_salary 
FROM 
  (
    SELECT 
      emp_id, 
      dept_name, 
      salary, 
      ROW_NUMBER() OVER(
        PARTITION BY dept_name 
        ORDER BY 
          salary
      ) AS rk1, 
      ROW_NUMBER() OVER(
        PARTITION BY dept_name 
        ORDER BY 
          salary desc
      ) AS rk2 
    FROM 
      dwd_emp_info_dd
  ) a 
WHERE 
  rk1 != 1 AND rk2 != 1 
GROUP BY 
  dept_name;

算法题:

题目:最长回文子串(LeetCode第5题)

参考答案:

class Solution {
    public String longestPalindrome(String s) {
        int n = s.length();
        boolean[][] dp = new boolean[n][n];
        int start = 0, maxLen = Integer.MIN_VALUE;
        for (int i = n - 1; i >= 0; i--) {
            for (int j = i; j < n; j++) {
                if (s.charAt(i) == s.charAt(j)) {
                    if (j - i <= 2 || dp[i + 1][j - 1])
                        dp[i][j] = true;
                }
                if (dp[i][j] == true && j - i + 1 > maxLen) {
                    start = i;
                    maxLen = j - i + 1;
                }
            }
        }
        return s.substring(start, start + maxLen);
    }
}
#大数据开发##大家都开始春招面试了吗##数据人的面试交流地##牛客创作赏金赛#
全部评论
这也太强了吧
点赞 回复 分享
发布于 02-27 22:07 北京
点赞 回复 分享
发布于 02-20 14:18 陕西
👍
点赞 回复 分享
发布于 02-20 11:41 山东

相关推荐

不愿透露姓名的神秘牛友
昨天 17:24
点赞 评论 收藏
分享
避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:不要做没有专业门槛的工作
点赞 评论 收藏
分享
半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
评论
5
31
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务