作者:啊猩猩星星
    链接: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面试其实面多了就可以发现思维方式是比较固定的。考察的几个方向其实每家都会问。和内部晋升相比也非常相似。如果有晋升需求的小伙伴,不妨面面试找找感觉。
    第二个是社招中,讲好自己的故事十分重要,平时对自己的工作多总结思考。
    第三个是视野要广,不管是技术上的还是非技术的,有一些问题可能因为精力有限或者业务有局限没有亲自做过,但是不代表你可以不会做。

    希望这个经历的分享可以对大家有所帮助。