百度实习面试总结——百度大搜,机器学习实习生
百度实习面试总结——百度大搜,机器学习实习生
简历是内推的,找到了川大的一位学姐,然后内推了简历。
过了几天,HR的电话打过来协商面试时间。一开始说的是下午两点,我想了想,好像有一节选修课,于是想调整再晚一点,于是调到了四点,不过这时间不还是在上课吗……
于是果断上课上到一半,然后翘了出来,溜回寝室。在室友玩守望先锋的背景音乐下,进行了一面(微笑脸
一面
其实这时候,我并不知道我面的是什么岗位的……
一面和小米一样,都是在一个代码分享平台上面写,就是面试官看得见你写的代码,你也看得见面试官写的是啥。
先让我自我介绍,然后我blablabla。
然后进入正题:
第一题:给你n个数,要求找到所有的三元集<i,j,k>,满足a[i]+a[j]+a[k]=S,要求复杂度n^2
我做这道题的时候,一开始给了一堆乱七八糟的方法。(FFT什么的其实都想说出来,但是忍住了……
然后面试官提示了一下两个数的情况,发现好像可以直接O(n)的Two pointers就好了。
然后我脑补了一下,于是给了个和two pointers毫无关系的n^2方法(暴力枚举+hash)……
然后在面试官的提示下,做出了n^2的two pointers。
这时候感觉好像要go die了……
第二题:给25匹马,你有五个赛道,问你最少需要比赛多少场,才能得到前三的马。
我一开始没啥想法,于是答了个上限,(25-3)/2=11场,因为每场比赛可以淘汰两只马。
然后面试官提示了一下杨氏矩阵,然后看我好像还是不太懂的样子,就给我讲了正解:
你建一个5*5矩阵,每一行,从左到右,从大到小排序。第一列,从大到小排序。
那么说构成我要求的这个矩阵,就需要6次比赛。
然后就可以淘汰掉第四列和第五列,第四行和第五行。
第一排只会剩下3匹马,第二排只会剩下2匹马,第三排只会剩下1匹马。
由于第一行第一列的马儿必须选,所以剩下五匹马比赛选出前二就完了。
所以最少比赛七次。
这时候,感觉自己已经go die了。
第三题:给你一堆二维点,让你找到一个点,使得其他点到这个点的距离和最小。
这道题我终于会了,于是在面试官说完之前 ,就完成了抢答。
这道题是某年的校赛初赛题,把X轴和Y轴分开之后,分别取中点就完了。
第四题:
问:如何检测两篇新闻是一样的呀?
答:把新闻拿出来字符串匹配就好了嘛。
问:但是其中可能存在个别字符不一样,其他的都一样的情况怎么办呀?
答:那就把新闻拆分成句子,抠下来,然后进行匹配吧。
问:有些句子,实际上是代表着这个网站的特征的句子,如何把这些句子分辩出来呢?
答:翻一下之前这个网站的新闻,机器学习一下,看看那些句子出现的频次高。
问:哦,你会机器学习吗?
答:了解过,我知道K近邻。
问:解释一下。
答:KNN就是把一些作为样本,然后拿现在要检测的和那些样本做距离,取距离最小的那几个,然后里面啥最多,那么检测的这个就是啥。我之前做过那个数字识别,就是用这个搞的。
问:你说的好像不太清楚,我忘了,我回去查一查。
GG。
然后一面就说,你准备一下,赶紧面对二面吧。
这时,我室友正在欢乐的在守望先锋1600分鱼塘挣扎中。
二面
开头还是让我自我介绍,然后我把一面的自我介绍重复了一遍(x
然后进入正题:
第一题:
问:给你一个前缀,再给你一堆字符串,问你有多少个字符串包括这个前缀。
答:hash。
问:假设要求动态的多次询问是否存在这个前缀呢?
答:把所有的字符串拿去建字典树,然后每次有前缀的时候,爬一爬就好了。
问:如果不是前缀呢,是问你是否存在这个子串呢?
答:hash?
问:这个好像不太行呀,你可以有充分的预处理时间哦?
答:那就把所有的字符串抠出来,比如把abc变成abc,bc,c三个字符串,然后做字典树?
问:好像可以?
答:恩,好像可以。
第二题:给你一个矩阵,从左导右是递增的,从上到下是递增的,让你找到里面是否存在一个k。
曾经曾某拿这道题考过我,然后我被他羞辱过,然后我就记住了这道题……
我诚实的答了我曾经做过这道题,然后证明了一下结论的正确性。
正解就是从右上角开始跑,如果k大于当前格子的数,就往下走,否则往左走,证明略。
第三题:
问:给你一个二叉树,求从根开始的最长路径。
答:好像dfs一下就好了?顺便记录一下路径长度。
问:要求输出路径。
答:第二次再dfs一下,如果到叶子节点的时候,是最长的话,就输出?
问:只用一次dfs。
答:好像不遍历完整棵树,是无法确定最长路的?我感觉得两次呀。
问:你能不能开个数组记录一下路径,然后更新呢?
答:好像可以呀。
GG
第四题:
问:给你一个随机数生成器,有p的概率输出0,(1-p)的概率输出1,p未知。要求用这个随机生成器做成50%输出0,50%输出1的生成器。
答:我在纸上画了画,好像让这个随机数生成器一开始正常输出,然后第二个周期1-rand()输出,这样就是一个平均的了。
问:你这个假设周期是1,那么输出了两个数,如果我只取第一个数,那么第一个数是否是50%概率输出的呢?
答:好像从两个数的角度来看,这两个数输出1的期望和输出0的期望个数相同,我觉得好像是一样的。如果只看第一个数的话,他就不是。我感觉这好像是个逻辑问题,我觉得我逻辑好像不太好……
问:我想让你实现一个函数,然后这个函数的功能是50%概率输出0和1,你再想一想。
抠了一下脑袋,然后想了10min……
答:输出四个数做,01和10的概率不一样,01+10不等于11+00。00和11都是p(1-p),01是pp 10是(1-p)(1-p),然后00x11=01x10,根据这一,我们可以乘法找对称关系。一共十六对,都能找到。
问:我懂了你的意思,你这样太麻烦了,假设你可以跳过一些东西呢?没必要全部用。
答:那就11输出1,00输出0?01和10都跳过?
问:对。
然后面试官让我准备三面了。
三面
让我自我介绍一下,于是我又重复了一遍( x
你有什么优点?
blablabla
你有什么缺点?
blablabla
你知道我们干什么的吗?
不知道。
你知道你要干什么吗?
不知道。
那我给你讲一下,我们是干blablabla……
而你会做blablablabla……
我觉得你这种一张白纸的竞赛选手,还是比较适合这里的。
然后三面就结束了。
后续
然后我就以实习生的身份,混进百度之星出题组了。(x
我一定会好好出题的!大家记得去参加百度之星呀!
至于offer这边,就杳无音讯了,我以为我被拒绝了,但是!
过了十几天,三面面试官打电话给我说了下百度现在HC不足的问题,你要来就只能四月之后来。
而我正好有校赛要去打,本来就打算最早也只能四月份之后过去。
于是达成共识。
于是愉快的就决定了四月份再去思考这件事儿去了。
于是我又开始在学校躺尸,过着给小朋友教书的快乐日子。