字节-蚂蚁-百度等大厂大数据开发面试及各大公司真题

目录

 一 面试篇

1. 面试准备阶段

2. 关于面试的一些想法

二 真题篇


图片

 一 面试篇

1. 面试准备阶段

开始正式的面试前建议进行一到两个月的准备时间,准备的内容主要包括刷题、更新简历、看面经等。

  • 关于刷题

刷一下leetcode上的题目(我刷的热门前200道),刷题的目的不是为了记住原题,而是了解各个分类模块的解题思路和方法,比如0-1背包,完全背包,动态规划等。建议按照各个分类去刷题,这样即使面试官不出原题也可以正确解答。而且刷题也是有技巧的,不要硬着头皮硬做,做不出来的及时看解题思路。对于刷过的题,建议每隔一两天就要复习一下,不然很容易忘记。

在做笔试的时候,不要先着急写代码,先跟面试官说思路。有时候即使代码没有调试成功,思路正确面试官也会酌情优待,多给一次机会的。

买了三个月的leetcode会员,开始从默认主页第一题往后刷。做了两天题发现这种方式不对,因为整个题库将近1500到题,不能漫无目的。接着在题目讨论区或csdn论坛开始翻刷题经验,后来无意中看到了代码随想录的一个大神按照数组、动态规划等模块拆分细讲,每个模块可以用套公式的方式,感觉挺实用的,就按照大神整理的pdf按照模块开始刷题(有想要的可以私聊或直接找那个大神)。按照模块刷完后,又按照最热榜前200开始刷下漏掉的题。刷题的整个周期我大约用了一个半月,有时候半题做不出来一道题,有时候自己又完整做出来,可以说这种感觉是痛并快乐着。还有一点,没有刷那些难题,只刷了简单和中等级别的题目,面试一般不会问困难级别的题吗,除非面试官故意刁难你。

  • 关于简历

简历更新时要注意几点,不要写的太过繁琐,写的清晰明了最重要。简历中最重要的部分就是项目模块,要准备一个自己能够完全hold住的项目,包括项目内容、自己负责的事项、有哪些难点和挑战、最有成就感的地方等,这个很重要。因为面试官会严格根据你的项目简历来进行提问,所以一定要自己懂。同时可以自己线下模拟一遍思路,顺便把项目中涉及到的知识点都要考虑到。

  • 关于面经

除了刷题和简历之外,还要多关注下跟该岗位或对应的公司,可以在网上搜一下面试经验。主要看下面试过该公司的前辈的面试经历和流程,供自己参考。同时跟自己所在领域所关联的知识点也要兼顾到,把零散的时间用来复习之前看过的题目,可以事半功倍。

刷题虽然重要,但面试的时候笔试算法题可能仅仅只有一两个题目,毕竟大部分时间还是聊具体项目和一些技术口头叙述的题目。因此也是在2021年9月初开始找大数据相关的面试题目,网上虽然可能搜到一大堆,但质量参差不齐。我觉得这部分主要看那些不同公司具体的面试题目,多搜集一些你会发现同一个岗位不同公司的题目基本大同小异。把那些不同公司的题目下载下来自己慢慢整理就好。有些同学一味的追求很多技术,技术面很广,问什么都能说出来一些东西,但深度不够,继续深挖,又发现什么都不会。所以在面试题目准备阶段,一定吃透在一个领域或一个具体的模块。比如你不能说flink和spark我都很精通,你可以说两者我都知道些,但flink我更有优势;再进一步可以说我对flink通信机制比较熟悉;但熟悉到什么程度呢?一定要了解这个地方的源码是什么样的。一定要在你熟悉的这个模块完全拿住面试官!!!我自己也整理了一些面试被问到的热门题目

2. 关于面试的一些想法

一般公司的正常面试大约会有三四轮,第一轮资深同事面、第二轮直属leader面、第三轮技术负责人面、第四轮hr面。不同的公司面试轮数可能多一轮可能少一轮。

第一轮面试(资深同事面)会有笔试部分,考察实际coding能力和候选人的基础知识模块。这一轮重点就是刚说的笔试、简历、面试问题三个部分。简历中的具体项目是必问的。自己在介绍的时候让面试官跟着你的思路走,引导面试官问你了解的知识。在这部分面试时,一般都是介绍项目顺便问些基础的知识(可以网上搜一搜相关面试题,网上很多),会聊个大约40分钟。至于笔试部分,在正式开始coding之前,先理清解题思路,跟面试官说下大致的解题方案,这是必须要说的。即使代码写不出来,思路对了也是一个加分点。

第二轮面试一般是直属leader面,这一面可能也会有笔试部分,也可能会没有。这一轮主要考察的是你的知识深度和具体解决问题的能力。所以一般会结合你做过的具体问题让你分析,说思路给方案。

第三轮面试会和第二轮差不多,按照第二轮的思路准备就好,不出意外第三轮不会出现问题。

图片

二 真题篇

樊登读书公司

介绍自己工作中离线与实时的比例是多少数仓建模规范是怎样的数据质量是如何处理和保证的埋点数据有没有,平时怎么使用有没有会话session这个概念,  > 比如:一个用户最近60min算一次会话,超过60min算另一个会话  > 有几个字段 userid和event_time  > 求session_id缓慢变化维是怎么处理的指标数据是怎么管理的说一下hive的优化  > 我从数据倾斜、map和reduce个数调整、大表与小表,大表与大表等关联、先从UI看整体再去表里看数据你们用hive还是sparkhive底层用的什么执行引擎说一下你们的实时的架构是怎样的实时架构中,dws层指标数据下游有什么应用场景。dws层指标数据,计算的时候用的什么窗口集群自己搭建的,还是用公共的

米哈游公司

介绍自己说下上家公司以及这家公司的架构以及数仓分层说下上家公司以及这家公司的主题域划分上家公司项目介绍,离线优化,hive关联,以及数据倾斜说一下缓慢变化维的处理方法,能说出几种处理方案map和reduce的个数如何调整,出现问题怎么优化说下flink的如何保证exactly once的说下flink端到端如何保证exactly once的上文说到的异步关联,具体介绍一下,AsyncIO介绍下实时项目,画一下项目的dag图,输入输出多流关联怎么处理的,union+timer优势是什么,能说出几种多流关联方案leetcode 实现最小栈说下上一个公司的具体工作上一公司离线数仓架构、主题域划分上一公司流量域划分,在ods层就开始划分了?上一公司实时数仓架构(kappa)、实时维表来源(离线同步、实时ods解析)上一公司项目介绍新公司离线数仓架构、主题域划分、自己负责哪些主题域新公司离线数据质量怎么管理的新公司离线这块用到hive还是spark,平时会有优化吗新公司实时流与离线维表是怎么关联处理的,还有什么办法吗新公司的多流join场景有吗,具体是怎么处理的,还有其他什么方案?上一问题 union + timer + state的模式具体介绍下关于state介绍下,state ttl说一下,设置的时候要注意什么个人的职业发展规划有什么想问的说下在上一家公司的工作说下上一家公司数仓分层dwd层和dwm层为什么要这样设计,当初考虑的点是什么一个维度表经常会下沉到事实表中,什么样的维度字段适合加到事实表中怎么处理数据倾斜,从浅到深分析下了解mr原理吗,mr的过程中一共有几次排序,哪几次为什么会想换工作有什么想问的

小红书公司

介绍自己说一下最有价值和成就感的项目项目里渠道有几种来源怎么做的渠道归因,什么粒度?会不会出现,该用户先a渠道进来,b渠道后进来,最终b渠道下单,这样就误判了具体怎么做的实时渠道的归因。下游具体拿渠道归因干了什么,具体的活动?带来了什么收益吗?发push或email实时去重的时候是怎么做的,ttl是多少两个流关联的时候是怎么做的?timeService的processelement具体怎么处理的二次匹配的时候放redis,去redis查询的时候,每一个流都要进行这个操作吗?要是一个流数据很大,另一个迟迟不到,会出现什么情况,数据会发生什么,怎么保留到这部分的数据(redis)flink内部是怎么高可用,容错的?flink的内存是自己定制的,内存机制简单介绍下有这么一个场景:求0点到当前时间的dau,求最近一小时的dau,  1) 怎么设计flink  2) global聚合会不会出现数据量过大,state也失效的情况,是不是要设计keyby,怎么设计?  3) 用state计算0点到当前时间的dau的时候,需要窗口吗,触发时机是什么  4) 用MapState存储userid,ttl怎么设计,ValueState存储0点到当前的数据量。是每个消息都会执行吗比如有消息乱序到达,flink怎么保证有序,watermark触发时机是什么flink消息通信机制,比如map和reduce两个算子之间通信需要几个步骤,具体是啥    序列化阶段->结果分区生产阶段->通信阶段(network)->消费者消费阶段->反序列化阶段上述通信阶段是怎么通信的?netty?akka?说一下离线数仓的相关事项,具体做了啥、架构分层等有这么个场景:一个文件的数据量特别大,mapreduce也处理不了,该怎么排序?      刚说的分桶的方案中,桶的规则怎么设计      刚说的归并排序方案中,时间复杂度是多少?如果每个文件是有序的,那文件间的排序时间复杂度是多少?      O(nlogn) O(n)

拼多多公司

两个题目  (1). 一个m*n的矩阵,从左上角移动到右下角,每次只能向下或向右移动一格,      求一共几种路径。且求出一条路径和与输入的target最接近的?  (2). 忘记了...kafka同步备份机制,从客户端到集群机器,交换步骤kafka的写数据机制和读数据机制,是先往leader节点写,所有partition节点都写,做几次备份kafka怎么保证数据一致性,可靠性。kafka的leader选举机制,rsa是怎么协调工作的,遇到长时间访问不到的节点应该rsa怎么处理hive的shuffle和spark shuffle的区别。spark做了哪些优化,具体有哪些shuffle算子,用哪些高效算子,哪些不适合用hbase原理,hbase的内存机制。hbase和redis的区别,说下哨兵机制说下常用的jvm机制,各种优缺点,cms和G1的异同点是什么,新生代和老生代应该怎么配置,平时出了问题怎么排查。有用过jmap命令吗,功能是什么,有哪些常见的参数,你用过吗说下flink join算子的底层实现,以及join底层数据清理机制flink的checkpoint和savepoint的区别,savepoint可以适用于哪些场景。如果要savepoint必须要满足哪些条件如果要修改并行度,savepoint是否可用,需要满足什么条件,那要是dag结构发生了改变,怎么用savepoint呢说一下operator chain,需要满足哪些条件,哪些算子比较适合算子链,分区下发策略是什么,一共有几种分区策略 

米哈游公司

介绍自己说下数仓分层说下你知道的hive情况,有多少说多少,深入一些看过hive源码吗,anltr解析的时候具体是怎么做的表之间的join说一下,小表与小表,小表与大表,大表与大表怎么处理分桶的时候,按什么分桶,按时间变化的话,该怎么处理,满足分桶的条件实时这一块说下checkpoint原理,怎么协同调度的说下实时算子间的通信过程说下你们对接需求的流程按照什么建模的数据湖说一下hive的优化方式,该怎么优化说下hive的严格模式介绍下hive行转列、列转行,对于列转行出了函数之外,还有别的办法吗说下spark的宽窄依赖,多对一是什么依赖说下广播变量reducebykey和groupbykey的区别rdd、dataset、dataframe区别scala的val、var、def区别case class是什么,作用是什么scala的trait关键子、yield关键字实时这块介绍下你们的架构实时的输出端是什么,clickhouse了解吗,说下原理flink实时关联项目说下,状态机制说下怎么实现的介绍下动态分区

字节公司

介绍自己说一个复杂点的项目,包括业务背景,用到了什么技术,亮点难点瓶颈在哪里redis缓存机制的分类,你们用的哪种实时去重你们怎么做的,说下布隆过滤器timeservice机制说一下怎么保证实时数据的准确性,有什么的办法度量说下你们项目的容错机制离线部分,你们的架构是怎么设计的,说下事实表的分类,建模理论缓慢变化维有哪几种,各自优缺点hive shuffle和spark shuffle的区别,从原理和算子角度分析hive的mr过程中一共有几次查询,每次在什么场景怎么处理数据倾斜,如果一大片倾斜了怎么处理map和reduce的个数如何调节sql题:连续7天登陆问题、会话打标问题说下每个层的作用,你们那边是怎么做的dwd层表的作用是什么,优缺点,你们订单是怎么做的dwd大宽表的优缺点,具体该怎么解决说下mr的shuffle过程,spark shuffle的过程,spark的宽窄依赖说下spark算子distinct 和group by的区别?  distinct会被hive翻译成一个全局唯一reduce任务来做去重操作,因而并行度为1  group by则会被hive翻译成分组聚合运算,会有多个reduce任务并行处理,每个reduce对收到的一部分数据组,进行每组聚合(去重)mr过程中一共几次排序,每次的作用是什么?hive几次排序的区别是什么order by sort by distribute by,分别说下你们的应用场景数据倾斜详细讲一下实时join有哪几种方案实时流与离线维表关联有几种方案,数据量特别大时该怎么处理讲下checkpoint的具体原理,结合二次提交说下leetcode题,全排列问题谈发展电商的可行性和未来分析介绍实时流的多流关联项目里的难点是什么,怎么解决的离线这块有哪些是让你觉得有价值,有难度的,为什么,怎么做的携程这边的工作,项目介绍,技术难点是什么离线和实时怎么保证一致性和稳定性维表和事实表是怎么做的实时元数据管理这块说一下,该怎么设计,用什么接口count(distinct a)该怎么优化,有什么替代的函数,distinct和group by的区别,看过源码吗,两个具体在mapreduce是怎么流转的求dau该怎么求,你们是怎么做的介绍下checkpoint的容错机制吧,越详细越好,几种存储介质的优缺点说下checkpointcoorinate组件的作用和运行机制知道SlotSharingGroup吗,介绍一下机制,条件是什么

虾皮公司

项目,实时订单渠道介绍实时订单关联部分,为什么用union + timer的方式,不用传统的interval join关联如果用connect算子可以实现你的这种场景吗,在这个场景里和union的区别是什么如果第一次提交代码,怎么保证历史的消息能够消费到   // 不能用kafka的latest模式,因为不能保存那么久的数据   // 可考虑离线同步到当前offset的方式介绍一下state process api有哪些,各有什么用途实时流和离线维表关联,有几种方式,尽可能说出4种以上当第一次匹配不到需要进行二次匹配的时候,为什么考虑放入redis中,不存储在state里进行计算比如一个map算子上游有多个source,watermark机制在这里是怎么实现的比如一个source:[2 3 1],另一个source:[2 1],可以实现下游一个source_total保证实现上游所有source数据都按全局排序吗,watermark机制怎么处理retractstream、appendstream、updatestream的区别,retractstream和appendstream可以实现相互转化吗,为什么clickhouse怎么实现去重机制为什么使用presto查询,有什么优势说下离线吧,你们的架构分层说下,是kappa还是imaplaspark当任务出现oom,该怎么处理,除了增加资源,还有什么办法park缓存分哪几种spark怎么处理多个小文件问题,mr又是怎么处理的呢sql题    // 用户userid,访问时间event_time    // 求平均每个session的访问时长。session定义:30分钟算一个session快速排序实现,用递归和非递归两种方法分割等和子集(0-1背包问题)合作方是哪些,平时怎么考虑建模以交易域为例,谈谈怎么建数仓谈谈你们公司运作模式,产品都在干什么事遇到过数据倾斜问题吗,实时和离线都怎么处理说下实时数仓的搭建,watermark机制工作划分,具体怎么负责的

百度公司

自我介绍说下公司项目,详细聊下实时订单的那个项目为什么没有考虑用flink的join算子,interval join有什么问题,用timer+state+union定时器方案的优势是什么输出sink到哪里?当订单出现状态变更时,怎么处理每一条消息?在clickhouse是怎么操作的?redis用过吗,它的优势是什么,用它来做什么场景的由于网络通信断掉,怎么处理丢失掉的消息,保证完全消费到说下watermark吧,用来解决什么问题的离线这块讲一下重点项目,负责的工作是什么,产品运营那边是怎么使用的架构分层讲一下,为什么订单表这么设计如果让你搭建一个数仓,你会考虑哪些点,该怎么做讲一下最有成就感的项目项目的难点和瓶颈在哪里,怎么发现又是怎么处理的怎么快速发现数据中的问题,除了看板还有什么高效办法行转列和列转行该怎么做,有没有其他办法spark的原理介绍下,spark shuffle的shuffle reder和shuffle write过程介绍下。讲一下hive shuffle和spark shuffle的区别题目:用代码实现求平方根题目:从中序与后序遍历序列构造二叉树题目:给定一个数组,求中位数,分别写出O2,logn,n时间复杂度讲一下在上家公司和这家公司做的事情,可以详细一些数据域划分的标准是什么以前写过php吗,spring boot之类的每天会抽时间写代码吗,现场实现一个java吧,runnable和thread的区别,实现个读写demo。。。。谈谈对你们公司电商的发展以及核心竞争力给你一个需求,具体怎么做,详细步骤说一下,从接到需求到需求交付

三 总结

总的来说,要想开始换下一份工作,尽量要给自己留2-3个月的时间,开始准备简历以及项目和刷题的时间。工欲善其事,必先利其器,只有准备工作充足,再从一次次的面试中总结题目,优化简历和项目,才是重要的。

加油啊同学,祝大家都拿到心仪的offer!

如有问题,欢迎关注公众号:跟锋哥一起学大数据

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

土豆丝炒咸菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值