一面
-
数据不一致有没有遇到过,怎么解决的。
回答:遇到过,最常见,同一个指标,多个人多个团队出,口径不一致;或者相同逻辑多个地方维护,复制粘贴,改一个地方另一个地方忘记改追问解决办法:
- 指标体系,复用数据:按照业务线将一个业务线设计到的所有维度和指标统一建模到一张hive表,上层所有应用或者对商分暴露的表都是同源的,且直接取不用再计算
- 规则引擎,复用逻辑:相同的字段加工逻辑抽离到规则引擎中进行配置,保证一处修改,处处运行
-
一道sql的题,一张表,用户id和登录日期,查找连续两天登陆的用户。
回答:按照用户id group by,编写 UDAF补充红: (性能高),拿到一个用户的所有登录日期,判断是否有连续的
面试官补充:不用UDAF,就纯SQL,可以用表自关联,关连建为user_id
select distinct a.uid from tb_log a left join tb_log b on a.uid = b.uid and (a.pdate = date_sub(b.pdate,1) or a.pdate = date_add(b.pdate,1)) -
怎么定位性能问题对应的是哪段sql
回答:
- spark driver log 看 执行慢的stage(99%)
- spark ui 上看 该stage 的task 执行完成比率
- spark ui 上看 该stage 对应的 continer id 和 所属job
- spark ui 上看 sql 的执行计划 和 执行计划图,最终定位到是哪段sql
-
遇到spark性能问题怎么解决的
回答:分三部分:小文件问题,数据倾斜,其他性能问题分别讨论,这个比较多,就不在这里写了,可以参考https://juejin.cn/post/6844903942766198798
-
字节必问的算法问题
股票的前两道题 考查动态规划 leetcode-cn.com/problems/be… leetcode-cn.com/problems/be…
二面
二面主要就是聊项目了
-
项目用了什么存储 回答:分情况说了下hbase,es,kylin,doris 的应用场景
-
规则引擎相关的问题。 规则多了怎么管理,有完全相同的规则怎么解决,多个相似的名字怎么解决
-
写sql。求一个省份下的uv最高的城市 主要考察窗口函数
select province,
city
from (
select province,
city,
row_nnumber()over(partition by province order by uv desc ) rank
from(
select province,city,
count(distinct uid) uv
from tb_log
where pdate = {date}
group by province,city
) a
) a1
where rank = 1
进阶考察: 出现慢结点怎么处理(考察数据倾斜和去重优化),数据倾斜。 一个人多条访问数据
回答: 先去重 group by 省份,城市,userid (预聚合过滤重复数据) 再进行求和,求和的时候对大key分情况处理,加盐
- linux 求一个文件出现某个单词的行数 linux做完用spark写
三面
-
数据不一致遇到过吗,是什么原因
回答同一面
-
讲一下UA(项目)
这个就和自己做的相关有关系了,没啥可说的
-
报表系统有做过吗
实际没做过,拿同事做的来说
-
一搬用spark还是hadoop
spark
-
cache和persisit 的区别
cache可以选缓存级别,persisit 调用 cache,指定缓存级别为内存
-
有优化过Spark执行性能吗,怎么优化的
根据项目举例子:主要用到,shuffle逻辑下沉,选取合适的存储引擎,合理使用cache,参数调优,优化算法时间复杂度从O(n^2)到O(n),(这里和一面差不多,只是和面试官有更多讨论)
-
spark on service 用过吗, spark context有退出的问题遇到过吗? 这个知道没用过,所以没答出来,不过通过这个问题能看出来字节大佬还真挺厉害的,三面面试官对技术都这么了解
-
spark dataframe比rdd性能好,为啥
不知道,没答出来,反问面试官,面试官说是因为数据结构优化
-
堆外内存是干什么用的 netty。结点直接交互数据,spark 最新feature 弃用jvm,直接c++调用内存,都是堆外
-
知道什么是 whole stage codengen吗
面向接口编程太耗时间,主要是方法递归调用,虚函数调用 可以将一个stage的所有task整理成一个方法,并且生成动态字节码 并结合
-
spark 3.0 特性了解吗
不了解,😂
-
未来一年在技术学习上有什么规划 加强数仓和业务的学习 加强底层原理的学习
-
讲了讲字节部门的业务。问有什么问题
HR面
- 为什么跳槽
- 未来几年的技术规划
- 未来几年的个人规划
- 期望薪资
- 对我们部门有了解吗
经验总结
其实这里才是我最想分享的,问的技术问题都是硬知识,其实没啥可说的,换一个人面可能就是不同的问题了,我觉得更重要的是面试技巧
-
面试不是考试,面试是考察你解决问题的能力
面试的时候难免遇到自己的知识盲区,这时候要能够随机应变。
比如我在一面的第二个问题上,其实面试官想要的是纯sql的那种答案,但是我最开始没想出来,我也知道他想要的是纯sql的问题,但不能一直卡着呀,无奈执下,写了个麻烦的UDAF,结果最后面试官给了我标准答案的时候,我还跟他讨论了下性能问题,还是UDAF效率高
如果实在不会的话,你要快点下出自己不会的结论,不会就是不会,直接说,下一个话题,不要磕巴,不要撒谎,不懂装懂,人家一眼就能看出来
再比如二面的第四个问题,很简单的,可是我就是不咋了解linux啊,我就直接说不会,下一个吧,面试官还想给我解释解释,我说别解释了,真不会,结果面试官意外的说了一句,很棒,要的就是这种速度。
-
结论1:不能直接解决,想办法也要解决,哪怕是麻烦一点,也能解决问题
-
结论2:即使真不会,也要让人家知道,你只是这个知识点不会,但是你诚实,果断
-
-
面试要有很好的心态,不要跪舔
无论你面的是什么公司,都要保持好心态,要自信,不要低三下四的,不然气势上就说了,比如我在一面最后面算法的时候,其实第二题我做错了,但是我看面试官好像也不太会,就生讲,硬是把面试官给忽略过去了。
由此可见:第一,大厂面试官也不是啥都会,对方也可能是在照着面试题问。第二,心态好了,你能把不可能变成可能
-
要知道人家爱听什么
三面最后一个问题,问我的规划,因为通过前两面我基本猜到了他们是做数仓方向的,而我是应用方向,不是很匹配,但是我灵机一动,就说了为了以后更好的发展,需要更好的了解业务,想做数仓
而三面快结束的时候,我大概猜到了如果有HR面肯定会问我对部门有什么了解,所以我特意就这个问题像三面面试官进行了深入的套路,最后HR面对答如流
这个技巧我在刚毕业在美团面试的时候也用过,我本来是面的后台岗位,一面面试官觉得我不错,说他们是大数据部门,问我想不想做,一个刚毕业的孩子肯定对大数据很憧憬呀,我就诚实的说了我想做,但是不会。结果二面面试官又问了我的未来规划,我机智的回答:想转大数据。。。就这样,我一毕业,就进了数据部门
面试硬知识固然重要,但是准备了硬知识的同时,面试技巧也要好好琢磨一下,不然就有可能出现茶壶里煮饺子的情况~更何况我们的饺子其实也不是很饱满呢