作者:啊猩猩星星
链接:https://www.nowcoder.com/discuss/607015?source_id=discuss_experience_nctrack&channel=-1
来源:牛客网
其实距离上次跳槽已经过去了三个月,我已经入职了新东家。今天终于克服懒癌准备一鼓作气发一下社招大数据的面经。
我是牛客的1v1的辅导老师之一星星。哈哈哈,为了证明一下我除了面试别人,自己去面试也还行,也拿自己的经历出来探讨一下。
【面试准备】
刷题:因为毕业比较久了,首先刷LeetCode热了个身。后来发现可能因为真的离应届生比较久了,没怎么考算法。
简历:我一直相信简历是工作经历的总结也是面试的思路,而非简单的一张纸或者说用来过简历评估。所以我简历改了2个星期,面试中间又做了一些改动。
制定招聘策略:
1.关于机会,首先我其实联系了几家猎头,聊了一些,觉得都不靠谱,最后其实是自己靠人脉解决了一半,剩下一半直接招聘网站找对应HR解决的。
2.因为很久没有被面试了,我定了一个梯度策略,先找了几家绝对不会去的小公司。中间试了几个不想去的中等公司。最后面的意向公司。
最后的结果是一共面了9个公司,有一个流程太长了,还有一个风评过于差劲,最后我主动终止了面试,剩下的拿到了offer。涨幅根据公司不同吧,最低40%多,最高110%。其实各家是比较平均的,大概都在75%左右。最高的和最低的都是特殊情况。前者我和面试官差点吵起来了,后者是著名送命公司,还要背井离乡。我还年轻,没有女朋友,就算了。
【面试经验】
为了保护隐私,我就隐去了公司名字和我最终入职的公司面经,还有几个特别重复的也不讲了。我的经历是做业务大数据平台的。java技术栈
【某上市公司】
一面:部门leader(视频面试)1小时多一点
1.如何确定flink任务的合理并行度?
从业务要求开始,根据workload特性,做压力测试,层层解反压,为Vertex找到合理并行度和chain strategy,然后倒推TM配置。聊了压测数据模型和真实生产的业务关系,如何解反压,如何应对IO密集和计算密集。
2.flink任务如何实现端到端一致?
ckp机制讲一下,端到端一致需要上下游配合,上游回放,下游幂等。接下来被follow up,kafka如何实现端到端幂等,两种实现,upsert mode和事务提交。面试官表示很满意,很前沿。。。我就很无语。
3.state的存储机制,主要是rocksdb
读写放大优化,cache优化。我自己实现了外部state存储,内置和外置的区别是啥,为什么要这么做。你怎么解决毛刺和倾斜的
4.实时作业托管平台设计
两种任务,flink dataStream和flink sql。 讲了一下flink on yarn的提交过程。然后讲了一下后台设计。被问到了如何打metric。这个我还真没想过,讲了一下我的了解
5.日志采集的原理讲一下
面试官以前做日志的,就是log agent那一套。用前东家的日志container服务吹了个比,面试官很感兴趣。
6.Presto怎么做的查询优化
讲了一下执行计划和一些内部特性的结合
剩下的问题是和我项目相关的。没考算法
二面:总监 1小时多
现场面试
先问了我最大的一个项目,讲了一下技术点和难点。
然后聊了一下数据技术的发展,对实时,OLAP和存储的看法。
问了一下Mysql大集群维护问题
然后问研发效能,怎么做开发和项目管理的
然后开始聊数据技术和业务的关系,一路扯到公司文化。聊得很开心。坦白讲,这个总监我是很喜欢的,后面公司也非常舍得给钱。可惜技术氛围不够浓厚。
三面:HR 30多分钟 电话面,在前东家楼下的咖啡厅
为什么要离职?
你作为项目owner如何拉通不同人,尤其是不同部门的人的利益的?
如果和你合作的一个更资深同事,他的技术方案你觉得不对,但是对方不肯退步怎么办?
你在工作中是如何帮助别人成长的?
你找工作看中什么因素?
还面了哪些家,有什么倾向?
你的期望薪资?
最后涨了75%。
【一个热门陌生人社交创业公司】
一面:小方向leader(电话面试)1小时
讲项目先过去30多分钟。对方的部门整体水位被碾压。
然后聊了一些数据仓库建模的理论知识
如何设计数仓分层,如何设计维度表,如何设计缓慢变化维,如何避免数据烟囱等等
离线数据产出时间优化
二面:老板 1小时多
现场面试
先让我手写了一个sql,给出用户登录日志,求次日留存。然后想看我能不能把sql映射到执行计划,现场手推了一遍,with 代码块重用,同一个key的shuffle合并。
剩下的非常八股
sql的优化,讲了mysql hive sql和flink sql。全程基本我在说。
kafka消费幂等问题,还有kafka的水平扩展怎么做
hdfs小文件问题。
jvm性能调优和诊断
听了一下我的一个项目
然后我从他眼镜反光看到他在百度了。有点尴尬- -
三面:HR 30多分钟 接上一面现场
为什么要离职?
你期望的工资涨幅?
你的职业发展规划,想做什么?
你薪资期望为啥这么高?
什么时候能到岗?
四面:加面了这家公司的一位VP,电话面试,30分钟
我本来还挺期待的,因为也基本算是马上创业成功的vp了。想好好交流一下,可惜全程他没说什么自己的东西。都是我在说
你在工作中遇到的最大的困难?
你工作之后最大的收获是什么?
你如何看待数据技术和产品,和业务的关系?你如何推动两者的结合和发展?
你对赛道怎么看?对UGC,商业化,社区的看法?
什么时候能到岗?结束
【一个热门的招聘软件创业公司】
简历沟通:
HR提前沟通了一下,我们的工作地点,工作强度很大,能接受么?问我为啥离职,为啥投这个,然后我说我这次要转方向,立马说那我们可能给不了你太高呦。心里不太高兴,想的是反正我也不去,嘴上说可以可以。最后HR介绍了自己的业务,然后约面。
一面:peer面 1小时
面试官百度来的,讲真,这家公司别的不好归别的不好,我同样面试了百度,我觉得这个百度出身的面试官比百度的技术更好。沟通比较好,但是有点套方案
前面上来一堆java八股文。
IO与NIO
JVM和JMM
HashMap和ConcurrentHashMap
然后这里开始Follow Up。给HashMap加TTL,怎么实现
然后两三个架构场景题
Mysql和MongoDB的深翻页性能怎么解决?
我当时也是一蒙,没啥思路,对着引擎就上了,缓存游标啥的。然后讲了一个前东家的异步dump OSS的方案。最后他和我说他想问我用redis,就很尴尬
第二个 redis缓存查询结果,更新的时候怎么做失效
第三个 跨页消重问题
最后一个算法题,说思路
K路归并排序,K很大的时候怎么优化。跳表,败者树
后来发现这家公司的996居然要打卡实行996,少一分钟都不行。加班强度不小,加上HR还有PUA我的倾向,还后面这家公司HR约二面,就找个理由拒绝了。
【一个食堂著称的老牌互联网公司】
hR首先简历沟通:
为啥看机会?
你在哪里工作?
你为啥要换城市?
【一面】
这个岗位是数据仓库。所以上来先让我介绍我的业务和数仓分层
面试官和我业务背景差距特别大,用了很多时间解释我的业务场景
然后业务过程设计,粒度设计
然后问了一下实时数据仓库的建模啥的。
最后问了我一个大滑动开窗求UV,HLL 或者 roaring bitmap
二面 连续鸽了两次,然后我就不面了
【一个曾经落寞但是U字上升的老牌大厂】
基础平台
一面 peer面 40多分钟:
可能是我年限真的不长,一面是一个无情的八股文机器。
java的容器讲一下,List和Map的实现
讲一下java的两种锁
讲一下JVM的结构
讲一个项目
讲一下Spark的RDD是一种怎么样的数据结构
算法:合并两个有序数组,检查括号字符串合法性
二面 leader面 1小时不到:
算法, 检查平衡二叉树
flink 如何实现 exactly once。又是一轮 ckp机制
sql解析全过程,calcite是怎么做,stage生成
问了几个case怎么处理的,如何实现自动的列剪枝,谓词下推
spark的block管理
Spark 3.0,whole stage codegen,Adaptive execution,external shuffle service
auto skew detection,我讲了一个前东家的批实现和我自己在流上的实现
parquet和向量化计算
flink的repartition和 spark的shuffle的区别
问了一个项目
spring的AOP和IOC。这个是因为我做过后端开发
三面 传说中的女M 1小时多:
说实话,这个女M表现的并不友善。上来先是个人信息问东问西。。
FLink的多流join性能优化。这个是我项目相关的
failover快恢复
节点代码热部署怎么实现
然后我讨论了JM的单点性能问题,她坚持说这个不存在
性能调优
资源节约:这个地方我确实没怎么好好做过
state的实现和外化存储
interval join
业务的领域模型设计和我数据模型设计的对应
如何建设的数据服务,对外怎么保证SLA和准确性
口述一个算法的实现:分层打印二叉树,正反顺序交替打印二叉树。
坦白讲,这家是我面得最差的,给了我最低的涨幅,卡职级。而且三面面试官当时对我非常针锋相对,杠我每个点。一直挑战我说好多能力实现不是我自己做的blabla。
当时我非常不服气,后来想想,自己可能也有的地方不够solid。后来HR和我说一二面评价很高,三面确实低了一些。
【一家算是近一线的大厂】我的目标公司之一
一面 peer 一小时不到:
讲项目
又是任务托管平台
flink sql的生成过程, job graph 的实现,execution graph的实现。在哪里设计并行度,动态列实现,如何保存状态,如何报警重启
OLAP调优和选型
AP和TP的区别
说出OLAP的三个特点
说出流计算引擎选型的三个特点
这俩问题我印象深刻,头一次有人这么问
二面 leader 两小时,技术深度特别有:
上来先说一下你实时计算的架构,架构上从头开始捋
数据从哪里来,日志采集,服务端投递,离线数据,维表在redis,mysql和Hbase里
中间的计算引擎,flink和批引擎
结果的存储,kafka,mysql,hbase,redis,hive,presto等等。然后一个一个开始抠
日志采集的全流程,调优。
kafka和rocketmq的架构,高可用,负载均衡,kafka如何实现生产消费仅一次,ISR
kafka和rocket mq的区别
kafka吞吐为什么高?partition数过多为什么会有性能下降,针对这种场景设计page cache
kafka温数据转存储
kafka异地多活实现,我用的是直接冗余
kafka读写调优,tag存储怎么实现
Flink的端到端 exactly once。简直每面必问
性能调优,节点profile,反压怎么解, 回撤放大怎么解
外存state的实现,cache的evict策略优化,如何减少读写放大,rocksdb的序列化优化
需要修改 state的方案,讲了社区的state process,也说了我们自己的方案
shuffle策略优化,skew动态检查
user defined join和user defined window怎么做,比如 sample join
failover快恢复:slot 备份,container提前加载。还有头条的region failover
JM的单点故障问题,这次这个面试官是能明白这个问题的
mysql的导入优化
Hbase的mvcc,hbase的block cache和索引,region replica和快恢复,full compaction优化,内存碎片怎么优化,mvcc在业务中的实践
hbased的大kv问题
redis怎么做的实时排序和flink的方案有啥区别
我自己实现的简易版数据湖,详细说了一下每个细节的实现
Doris的架构,shard和replica的实现
OLAP的实时导入和索引构建,这块是因为我说了一个索引实现OLAP引擎的思路
大数据量的olap引擎怎么解决的问题
Kylin的实时实现,这个是和我项目相关的,我自己实现了一个类似的
kafa的幂等实现,这个之前问过。
平台建设相关:如何做实时的数据血缘,如何做kafka的column级别安全控制
手写算法,m*n的矩阵,每一行从小到大排列,求前K小个数
三面 一小时 很高屋建瓴:
你的整体架构图画一下,数据流向
每个数据流和workload的特点
你的业务场景讲一下
你如何做性能优化的
如何做SLA的
如何优化资源的。(这个我又被问住了)
你遇到过什么生产环境的复杂问题,怎么解决的
为啥要跳槽
结束
四面HR:
HR是我一个校友,加上我面评还可以,全程没有为难。
老一套,谈薪,为啥离职,怎么选这几个公司
涨幅70%。
【写在最后】
其实面试过程中几个感慨吧。
第一个是高P面试其实面多了就可以发现思维方式是比较固定的。考察的几个方向其实每家都会问。和内部晋升相比也非常相似。如果有晋升需求的小伙伴,不妨面面试找找感觉。
第二个是社招中,讲好自己的故事十分重要,平时对自己的工作多总结思考。
第三个是视野要广,不管是技术上的还是非技术的,有一些问题可能因为精力有限或者业务有局限没有亲自做过,但是不代表你可以不会做。
希望这个经历的分享可以对大家有所帮助。