熊厂实习生招聘面试经验

9月份的时候电面了两次熊厂,最后挂了。

一直想写写经历,拖到现在才有时间静下来思考,算是 给大家分享下面试题顺带帮我解决下问题,以免以后再踩同一个坑。


 先说说大概情况,9月中旬投的简历,应聘的机器学习与数据挖掘攻城狮,国庆前就接到电话约面试了。
电面一共两轮,面试官很nice,整个交流过程的氛围很好,不像某些公司面试官给人飞扬跋扈的感觉。


第一轮,先问了问简历的一些情况,做过的一些项目,研究方向,这部分应该算合格。

接下来是两道智力题。
 

1.1  给64匹马,一共8条赛道,没有计时器,问最少需要比赛多少轮能够找出最快的4匹马?

当时我一听这题就笑了,因为鹅厂的题目是36辆赛车,6赛道,找最快3辆。但我很快笑不出来了。

我给的方案是每次赛8匹马,更新末尾4匹,这样每一轮保证前四一定是最快的,相当于一个冒泡排序。
第一轮赛8匹马,后面每一轮替换4匹也就是一共再赛14轮,总共15轮的解决方案,这个是常规的解决方法。

面试官问我,还有没有更快的解决方案,冥思苦想了一会确实想不到,就老老实实说想不到了,面试官也没为难说下一题。

回来后仔细想想,又和霍讨论,霍提出了一个新的解决方案:

把64匹马分成8组比赛,形成8个排好序的组,再选出8组的第一名比赛一次排序,并标记。从第一名的组选前4,第二名的组选前3,第三名的组选前2,第四名的组选前1,共10匹马,比赛两轮可得出最后结果
总比赛轮数为:8+1+2=11次。比常规方案少4次 ,不知道是不是最优,欢迎大家指正,给出更好的方案。


1.2 两个人玩游戏,在一张矩形桌子上轮流放硬币,硬币不能堆叠,最先放不下的人输,请问有什么必胜策略?

这道题我第一感觉有点像NIM游戏,但是仔细想想好像又不想,然后就被误导了,惯性思维一次可以放任意个。我就纳闷了,那先放的直接放满不就赢了,但是感觉又没那么简单……毫无意外这道题挂了,回来查了下答案才发现,卧槽……少了个条件,每次只能放一个硬币,不然无解,面试官没跟我说,我也没跟面试官提。。。哎


两道智力题完了接着是直接在线写代码,用了collabedit,我在网页上写,面试官在那边可以即时看到我写的什么东西,这样我的思路和代码习惯暴露得彻彻底底,有点压力,不过一面的代码题还算简单,磕磕碰碰写出来了。


2.1 给一个带重复元素的有序数组,如{1,2,3,4,4,4,5,6,6,7,8,9},指定元素N,查找N的开始下标和结束下标。

这道题第一反应是顺序查找,跟面试官说了,面试官说你再想想,我一想有序数组,应该可以用二分,然后就用二分写出来了,但是我写得比较简单,先用二分定位再双向顺序查找,时间复杂度一般,后来经霍补充,定位后可以双向二分查找 ,应该会更快,想想也确实是这样,不知道其他人有没更好的思路。(后来看到其实是剑指原题)


2.2 给定一个英文字符串,例如“I love China.”,写一个程序按单词逆序,变成“China. love I”。

这道题见得烂了。。毫无压力的先局部逆转再全局逆转。

到这里一面差不多完成,又例行的问了下 能实习多长啊,每周实习多少天这样。
过了五天左右接到电话约二面。


二面开场照旧问了简历的一些东西, 但是会问得细了一点,这里我有些减分项,因为简历上有些东西年代比较久远,一时想不起来,花了点时间回忆,给面试官的感觉应该是掌握得不是很熟练。

二面就一个代码大题,给定一堆数据,有大量且带重复的query,统计出所以query的频数并且给出频数top 10的query。

这个题在笔试的时候就见过,我直接给出思路:内存装得下的情况,用一个数组进行计数存储,遍历一遍就可以得出频数统计,再对频数统计结果进行一次10趟的冒泡找出top10即可;在内存装不下的情况,设立cache,将最久未使用的计数器换出。
 
面试官听完思路后不置可否,补充了下可以用链表进行计数存储,我一想也可以就顺着写了,但总感觉不是最优方案。估计是挂在这个地方。

回来后反思了几点:
1. 在海量数据情况下,如果query的种类数量过大,10趟冒泡排序从时间上和空间商都并不是最优的,应该采用堆排序的方法来解决。
2.  也可以采用分治的策略来解决,将数据切割成N个文件,用hash的方法重新分布使每种query只会存在于一个文件中,再分块进行频数统计,将每块的top 10选出,最后用一个归并排序即可筛选出所求。这个方案比较符合当前大数据分布式计算的特点,但依旧面临风险,即:数据存在倾斜的状况时依然需要借助外存来完成统计。

到这里,我个人仍然觉得没有太完美的解决方案,欢迎大家有别的想法提出。




写完代码就是例行的一些题外话问询,顺利结束二面。

然后,就没有然后了…………好心塞orz


个人总结:有一段时间没写代码,稍微有些生疏,并且习惯了C语言,什么C++的库函数都懒得用,连个hash都想自己写,还各种秀优化技巧,位运算用得飞起,结果是代码写了很长时间并且不能保证没错,作大死。智力题还需要积累,还有很多东西需要学习。已经学过的要重新看看了,当初项目里的服务端加客户端外带基于socket的传输协议设计都是自己亲手写过的,这种UNIX网络编程在长沙各种熟,这才三个月没碰!人家问了个TCP几次握手都差点想不起来。哎哎哎。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值