这个暑假把以前的基础重新搞了一遍,然后做了几个实验性的小项目,打算在秋招来临前投一投简历,其实秋招早早就开始,在7月初就投了一拼多多学霸批的简历,后来由朋友推荐美团的实习,还有滴滴的实习,其中拼多多,滴滴的还在等消息,暂时过了一个美团。现在来记录一下,打算以后面试参考参考。还有好的收获就是加了滴滴hr小姐姐微信哈哈哈
滴滴-大数据实习
滴滴的这个岗位是大数据岗位,这个和hr联系了好久,打了几天的电话才搞完,先是发了一个链接给我,给我做了一个题目,然后给我说数据给了部门那边,如果面试官同意就约面试。每个公司面试的形式都不同,这个公司用了一个叫ZOOM的会议软件,结果那个面试官网太卡,就直接约了电话面试,可惜不能看看面试官的样子呀哈哈哈。
1:介绍自己
2:jvm内存模型
3:堆区域是干嘛的
4:对mysql有了解吗
5:mysql的索引知道吗,讲一下
6:mysql的底层引擎是什么(个人对mysql研究比较少,所以巴拉巴拉会乱说了)
7:java的数据结构你用过哪些
8:讲一讲hashmap
9:红黑树怎么实现的(这个也比较模糊了,也支支吾吾搭了半天)
10:hadoop的内容
11:spark内容
12:flume理解
13:kafka怎么用
14:hive想问回绝了。
15:基本按照简历来的
整个过程挺舒适的,面试官也很可爱,喜欢笑。问的问题都是针对简历来的,而且这个岗位可能比较注重基础。具体的过程我也不是很记得了。这几个问题我还是记得的,还有一些java基础和数据结构也问了,但是不记得了。
美团-大数据实习岗位
这个岗位过程就比较麻烦了,也是和hr联系了好久,要怎么安排题目做,怎么安排面试。最终发了一个链接做了四道题,然后过了一天接了电话面试。问题比较散吧,琢磨不出面试官下一步怎么问。
1:介绍自己
2:看到你用了flume,你对flume有啥理解吗,为什么要用它
3:你是做java开发是吧,那你说一下jvm内存模型
4:栈区域有什么呢,还有堆区域是干嘛的,针对jdk8说一说吧
5:接下来是连环问,你对java线程有什么理解,线程直接怎么通信了,锁机制怎么用6:java里面equals和hashcode方法有什么联系吗
7:java里面容器有哪些,讲一讲hashmap,里面的比例因子有什么,红黑树怎么实现(又是亏在了红黑树了)
8:接口和抽象类的区别,为什么要用抽象类和接口,同步怎么实现,你对GC有什么了解没有
9:hadoop生态圈有哪些呢,你觉的spark可以代替hadoop吗,那spark又是什么呢。
10:看你用到了hbase,说一说你为什么用到hbase,以及你对它的理解吧。
11:hbase和hive有啥区别。12:hdfs的存储过程是怎样的
13:hdfs这样设置的好处是什么
14:再问几个java基础的,泛型擦除是什么,comparable和comparator有什么区别吗,你怎么用的
还有几个问题不是记得很清楚的,个人感觉答得还可以,每个题目答得时间挺合适的。
这次面试个人感觉比较重视基础吧.
然后过几天hr说给我留了一个大数据安全的岗位,如果有意向就发一链接给我填信息,但是我拒绝了,因为我暑假还是另有安排的啦。哈哈哈。
拼多多-大数据开发岗位
拼多多我投的是学霸批的简历,虽然说并不是学霸哈哈哈,在7月底进行了一场笔试,终于在8月初接到了面试通知,不得不佩服,拼多多也是安排通知挺早的,8月初安排的面试,昨天才进行到我,可能最近拼多多投简历的人很多把。
面试约在了8点,面试官突然打个电话给我,我也不知道怎么回事,我直接问他是谁,语气都有点懒散,结果他说他是面试官,他也没有生我的气,说加个微信来个视频面试,我其实挺疑问的还有这种操作哈,接通了视频后,个人感觉,面试官和以前的一样,胡子比较浓,发际线挺高的。
好了,还是进入正题吧。
面试官:做一下自我介绍吧。
我:巴拉巴拉......
面试官:为什么对大数据会感兴趣的
我:巴拉巴拉
面试官:hadoop里面由哪些组件,你用过哪些
我:hadoop是一个分布式的计算平台,包括了存储的文件系统HDFS,资源管理器Yarn,计算引擎:mapreduce(但是计算引擎也可以由spark代替),还有storm,hive(数据仓库),hbase(分布式列存储库),zookeeper(分布式协存储服务),kafka,spark等等。
面试官:我看你项目上用到了flume,那你说一下flume是一个什么东西吧,你有什么自己的理解。以及你为什么要用到flume
我:我巴拉巴拉讲了一下原理,还讲了自己用到flume是只知道flume可以适合这种消费日志数据的模型,虽然kafka也可以,但是对于离线的个人感觉flume还是比kafka更高效,如果是实时的就用kafka可能比较好
面试官:那我们来做一个题目吧(面试官发给了我一个链接,题目是返回字符串的所有组合)
我:好的(这个题目我硬着头皮想了几分钟),还是没有想出一个比较巧妙的办法,我在算法这一块挺弱的,所以干脆直接回溯,面试官好像看出我的企图了,因为我写了一个backTrack函数。
面试官:讲一讲你想怎么做这个题目吧
我:我想用回溯来枚举所有情况,没加一个就添加一个组合,因为每个组合可能由一个字母,或者两个字母,添加过的就直接pass掉,这里我用了一个list保存用过的了,其实用数组应该更高效。但是肯定有比回溯更高效的办法的。
面试官:停下吧,我大概知道你的想法了(我怀疑我用回溯的企图太明显了,他可能也懒得看了吧),你用过spark对吧,你讲一讲spark里面有哪些算子吧
我:我用过的action算子有count,collect,foreach,reduce等等,,transform算子有mapPartitions,map,flatmap,union,reduceby,reducebykey等等,我用的不是很多,项目还只做了一个呀。
后来问了我好几个算子的实现原理和应用
面试官:讲一讲你的项目的想法,主要是用来干什么的
我:巴拉巴拉,一个交通分析项目,是基于hadoop,计算引擎是spark,而日志分析是基于hadoop,计算引擎是基于mapreduce的.....
面试官:你讲一讲mapreduce吧,你对他有什么理解吗
我:mapreduce只是一种计算引擎,他可能随时被spark代替,资本不足的情况下用mapreduce还是不错的。mapreduce主要分为map端和reduce端,map端是针对每个分区的文件,用自己的代码逻辑针对每个分区进行操作,当自己写的map函数逻辑执行完了后,一条一条数据会写到缓存中,缓存中的数据达到80%就会溢出写到磁盘中,在写磁盘的过程中,要进行partition排序,也就是针对每一个分区排序,一边发送到某一个reduce端,所以有几个分区排序,就有几个reduce,这里的分区不是文件的分区个数,而是reduce端的个数决定了map端写入磁盘的分区数,当然为了减少map端对reduce端的数据传输量,可以是用combnaition函数将重复的累加起来,还可以针对hashcode进行一次排序。
reduce端的话就是收到master的消息后,每个reduce都从自己对应的分区磁盘中提取文件,进行总和,排序,执行过程符合自己的代码逻辑,然后每个分区输出到一个文件中。
后来面试官也问了一下项目问题,我也不是很记得了,面了差不多一个多小时,但是在提问阶段,我问了他一个大数据工程师到底要达到一个什么样的水平,他给我上了一课:
总结为两点:
要有自己特色,一个组件的研究也是一种特色,全栈也是自己特色
以基础为重,比如java就是基础,基本课程就是基础
知道最后面他才惊讶我不是20界的应届生,说我才大二进大三啊,我也很抱歉事先没和他说,这个面试官人真的很好,至少性格就是那种大哥型,会教育但是又不失说服了的那种,讲的不是长篇大论而是真枪实弹。