目录
一 面试篇
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还是spark
hive底层用的什么执行引擎
说一下你们的实时的架构是怎样的
实时架构中,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还是imapla
spark当任务出现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!
如有问题,欢迎关注公众号:跟锋哥一起学大数据