字节最后一天投的提前批,然后面试过一次,面试的基础架构部,被吊打了一顿
前几天HR约我又面一次,换了个部门吧估计,我也不知道什么操作,我简单记录下面试记录吧,给大家一个参考。
面试时间比较长,两面都是一个多小时,问的东西也很多,所以有的可能记不起来了,想到什么写点什么吧。
1h20min
一面:
1.自我介绍
2.Java熟悉吧?讲一下JVM内存区域划分,讲一下GC
3.TCP和UDP讲一下吧
4.Java三大特性,详细详细详细,是详细讲一下
5.B树讲一下
6.Mysql有哪些引擎,讲一下区别
7.聚簇索引是什么,讲一下
8.Spark和Flink仅一次语义如何实现?
9.SparkStreaming消费kafka这么保证数据不丢,不重复消费?
10.数据倾斜怎么优化?
11.Spark中BroadCast join,讲一下原理
12.大表join大表怎么优化?
13.Java启动多线程的几种方式
14.做一道题吧,一个SQL题(ps: 有两个表,两条语句,问执行结果是什么?考的left join 和 inner join,比较简单,大家肯定都会)
15.讲讲你熟悉的项目吧?
- 这里主要讲了两个项目,一个是实时数仓的项目,用flink做的,一个是spark做的一个全链路监控的项目
- 介绍了下项目背景,以及使用多线程的优势,然后讨论了蛮久,头条的面试官很友爱的提了几种其它的解决方案,还是收益匪浅的。
- 写了个double check的单例模式,算很基础的了吧,面试官也没怎么问volatile啊,CAS啊,synchronized这些
19.HashMap原理?详细说一下,put,get?
20.Hive的执行原理说一下
21.Hive的元数据存储方式说一下
22.MapReuduce的执行过程
23.你说的那个环形缓存区中的数据是有序还是无序
- 这块确实不了解,只能实话说不了解,我说flush到磁盘上后进行了归并排序,那么缓存区应该没有进行排序,否则就是有序的了,面试官提示有多个map任务都是往环形缓存区中写的,我说应该是有序的,然后再进行一次归并
24.快排和归并排,讲一下怎么实现的?快排最坏和最优的时间复杂度?归并排的空间复杂度?归并和快排的排序稳定性?
- 基础算法问题,大家要多熟悉,这几个问题说不上来,说你搞计算机的过不去吧?
25.写一道算法题吧:一个无序数组中找最大的三角形周长,要求NlogN的时间复杂度
- 看到log无非就是排序或者二分,既然求三角形最大周长,无非就是满足三角形定义的条件下的最大周长
- 直接暴力的话肯定超过了NlogN,一般数组题没啥思路就先排序,然后考虑二分或者双指针,或者前向遍历或者后序遍历
- 可以联想到排序之后 a,b,c 三角形的性质就是 a + b < c即可,所以反向遍历找这个最大值即可,还是比较简单的
26.我这里可以了,你稍等一下准备二面。
二面
1.自我介绍一下吧
2.讲一下你最有两点的项目,我说刚才介绍过了,可以换一个讲吧,面试官说那他挑一个吧,让我讲一下实时大屏项目
- 这个问的就很仔细了,从数据源source到sink,每一步都扣的很细
- 主要问了一下Kafka的问题,讲一下Kafak的ISR?
- 讲一下kafka的副本同步机制,我说不了解,我能按我理解讲吗?面试官说可以,你想一下世面上的开源框架的容错怎么实现的,我说应该和Hadoop的副本容错差不多吧,讲了一下,感觉不太对。因为我kafka其实用的很少,基本没用过,都是用的公司内部中间件。
- 将一下uv怎么计算?天uv,月uv? 我说数据量不大的话就使用spark内部状态保存的Set数据结构去重,数据量大的话需要保存到Redis等中间件中,同样可以使用set。同时也可以内部实现一个布隆过滤器,得到近似的一个uv值,同时可以使用Redis中的HypeLogLog,实现一个去重。面试官问Redis还能实现去重统计?。。可以的,用HypeLogLog可以,他说原理是什么,我说具体算法比较复杂,总的来说是基于概率的一个统计值,有一定误差,面试官问数据存储是按什么存储,我说应该是按位图。
- 又问到了大表join大表怎么优化?
- BroadCast join实现原理,具体底层怎么实现的?
- 还有一些项目流量啊这些问题,qps多少啊,基本都是一些业务问题了,就不说了
3.Hive中TOP N怎么实现,是实现原理,不是HQL实现,翻译成MapReduce是什么样子
无非就是大数据常用的分而治之的思想,按自己的理解说一下就可以,我说每个map任务维护一个堆,堆大小为N,然后reduce的时候进行排序,取N个
4.Hive中order by和sort by的区别
这块实际使用我只用过order by,我说大数据无非就是两种排序,一个全局排序,一个分区有序,我说这两个语句应该对应这两种排序方式,一般我们用的是order by,是一个全局排序,所以说sort by应该是按key分区有序吧(估摸着是这样,一会我也查一下)
5.Flink水位线实现原理?
6.做到一道题吧
- uid class_name score
- a 语文 90
- a 数学 91
- a 英语 80
- c 英语 91
- 转换为
- uid 语文 数学 英语
- a 90 91 80
- c null null 91
- 第一次想着用left join,写了两步被面试官叫停了,说有别的方式吗?我说应group_set然后split,面试官说换个
- 想了一下用case when可以实现,这里就不写了,比较简单
7.说一下你工作中遇到难以解决的问题怎么处理的?
交流了一下
8.做个简单的题吧,二叉树最近公共祖先?
- 这个比较简单,一分钟写完了
- 面试官问你做过这道题吗?我说应该刷到过,有大概的思路。
- 二叉树的题都差不多,无非就是三种遍历方式加上traverse和divide&conquer两种思想进行dfs或者bfs,有这个思想二叉树题目都比较简单的。
9.有什么问我的吗?
给我点建议吧,他说广度不错,深度要加深一下,有的问题要专研。
10.5分钟后hr说二面通过了,约个3面时间
总结
1.问题基本都很基础吧,如果你项目多一点,可能就会追着项目问的多一些
2.基本不会的话也要按自己理解说一下。
3.算法题的话都很普通,公共祖先应该是LeetCode原题吧,做这道题的时候一下子写出来了,容易给面试官造成一种你做过,没看出你的思维过程,我面试经验也不多,也不知道这种情况怎么处理,装一下不会吗?
4.头条面试效率还是很高的,当即就能知道结果。
全部评论
(0) 回帖