一面12月9日
先问了项目、实习经历,基本就是按照简历上面写的来问
- 本科的做了个Kaggle上的猫狗识别的小项目的具体细节,问了我会不会VGG(这个就不太了解)
- 问了一些研一的课题
- 因为本来想找一些数据开发的,但是数开的实习太少了,所以也投了点数分岗,所以就学了一些Hadoop;就问了点相关的
- Hadoop有哪几种存储格式
- Hadoop的存储方式
- 熟不熟悉Spark(这个我不是很熟悉,就回答了Hadoop是擅于存储,而Spark优化了map与reduce等计算方面。
- 问了稳定的排序
- 一道SQL:查找a表中存在但是不在b表的和b表存在不在a表的,提示了用UNION
- 一道算法题:二分查找
二面:12-12
二面一上来让我写一道算法题,然后根据我简历中的Hadoop相关问了道题。面试官真的超级和蔼超级棒
- 输出一个集合之中,所有的子集。并且按照元素个数排序,相同的在按照字典顺序排序。
这道题目我写了超级久,但是没想出来。最开始理解错题目了。就想着先对集合排序再输出,写了个快排,然后发现不对劲。最后想着用递归来进行实现,但是时间花的太久;面试官叫停了,让我说一下思路。用递归思路没问题,然后面试官非常和蔼给了新解法:
这是一个排列组合问题,针对n个元素,使用一个n位的组来确定,该位元素是否加入了当前的子集之中。如果加入就为1,不加入就为0;这样更好排列组合,又维护好了顺序(原集合本来就有序,所以对于一个1101的序列,按左右顺序选取子元素,子集仍有序)
- Hadoop的数据倾斜问题
- a、b两文件,均有50亿条URL,每条URL大小64B,内存4G。如何查找ab之间的相同URL。
这题一上来我不清楚数据倾斜,然后面试官非常和蔼地和我解释,并且循序渐进地问我怎么解决,我回答说先进行分块,然后又追问,怎么分块呢。这时候我就想起散列和哈希的思想。可以把一部分相同的元素给散列到一块之中。并且如果要分100块的话,相当于对99取余数。最后自然地回到这题:
对a、b两个文件分别使用同一个散列函数进行分块;都选取URL的后20位进行对99取余:获得100块小文件。然后再a0余b0相查找、a1余b1想查找;不用两两查找是因为相同的URL一定在相同的散列块之中。