一、背景
在 3 月 10 日左右投了作业帮的简历,一直没有回复,以为是简历被刷了,没想到 3 月 24 日 hr 打电话说 3 月 25 日下午面试,我心想投了大数据,肯定 hadoop、hive、spark 这些必定少不了,于是满满复习了一天大数据相关的课程,下面就开始了今天的面试:
二、面试过程
面试官小哥人很好,上来没有让我自我介绍,直接告诉我说今天分为三大块的内容:数据结构基础、数据结构算法及一些题目的想法、以及自己所做的项目。
3.1 基础
1、散列表
q:你了解 HashMap 吗,你了解散列表吗?
a: 我都说了会一点(其实就是知道 HashMap 和散列表是什么)
q: 结果面试官就问我基于我的认识,让我设计一个工业级别的散列表,我会怎么设计?
a: 我直接懵了,说了个 key,hashcode,数组。
q: 数组?比如说存储 1000 万条数据,数组合适吗?
a: 我又说用用链表吧,因为可能没有这么大的连续内存。
q: 链表,然后呢?
a: 不会了
2、快排
q:你知道快排吗?
a:应该知道吧。
q:快排时间复杂度是多少,怎么推导
a:n * log n,推导:。。。。
q:最坏的时间复杂度,怎么导致的,为什么?
a:忘了随便说了个 n^2,后面感觉就瞎说了
q:换一种问法吧,快排的核心思想是什么?
a:我提到了划分
q:根据我提到的划分,出一个相关的题,对 1000 万个数据排序
a:我只说了按批次排序,然后再归并
q:如果每个批次有重复怎么办
a:我说不会了,请您提示一下吧
q:使用 hash 值把数据分区,根据散列平均分,最后就不用去重了(我还是不太懂)
面试官看我什么都不会,放弃问了
3.2 代码
q:看你会 spark,你知道的 spark 的 RDD 有哪些?
a:(我被问懵了,RDD 怎么还有中呢)嗯。。。嗯。。。嗯。。。了半大天一个字没说出来,后来问了下什么是哪些?
q:rdd 的算子有哪些?
a:(懵了半大天脑子锈了,一听这个我会,就激动了,开始啰嗦)rdd 的算子首先分为 transform 算子和 action 算子,transform 算子有 map、mappartition…(然后就想不起来了,居然连最简单的 flatMap 也没想起来),action 算子有 reduce、reduceByKey(然后就想不起来了)
q:那不让你写 spark 代码了,写个基本代码吧
1、递归求二叉树深度
2、小青蛙跳台阶问题,100 阶(让我用递归,但我用递归超时了,说 100 太多了,会超时,换个数字吧,30、40? 面试官说行,然后就用 30 跑通了)
3、广度优先输出二叉树
4、找到字符串中包含的子串
如: axdcfadcfcfa
cfa
我当时懵了,没写出来,后来想到双指针直接解决问题
3.3 项目
让我介绍一下我用 spark 的项目吧,我简单说了一下,因为那就是个大数据作业,面试官说你这项目大公司根本看不上,还是得注重基础
三、反问环节
q:我们作为学大数据的学生,是大数据的框架更重要呢,还是基础更重要呢?
a:看你想进什么公司吧,大公司最看重基础了,像数据结构、网络、操作系统、数据库这些都要求很高,大数据框架的了解是加分项。
q:我想问一下叫我今天表现怎么样呢?这时第一次面试(笑)?
a:coding 还行,但是理论不行,加油吧!
四、总结
1、整个面试过程体验非常好,其实面试没有自己之前想的那么吓人;
2、在面试的时候说话不要啰里啰唆,问什么答什么;
3、基础很重要!!!!!!!!!一定要好好复习基础知识,大数据框架没那么重要。