您的位置:首页 > 职场人生

百度第三面失败经历

2015-11-10 15:59 316 查看
2015年10月17日,周六,下午两点半左右,参加了百度校园招聘的面试,软开C++方向。一面问的都是CS专业的基础问题,二面考察的较多基础编程,对C++基础的掌握程度,并要求现场写代码,还有些基本的数据结构操作等,三面问的是考察思维和对知识运用能力的题。在此记录三面的失败经历,以示后训。

设计题:

有一个数据库,存储有上亿的记录,每个记录都是用户搜索的关键词(假设所有关键词都是英文),现在要求给定一个单词(word),从数据库中找出所有相似的单词。此处相似单词的定义为:对单词A和单词B,分别删除它们所组成的字母序列中的重复字母(每个出现过的字母仅保留一个),如果两个单词删除之后的结果中,所包含的字母个数及种类相同,则认为单词A和B相似,否则不相似。

我的失败的思路:

对数据库中的单词进行预处理,生成一个key,用于检索。具体预处理过程如下:对任一单词W,去除其包含的重复的字母,然后对去重之后的结果中的字母按字母表顺序重新排列,生成中间单词W‘,这样所有相似单词W1,W2...它们的中间单词都是W'。然后对中间单词W'进行哈希,生成唯一的,等长度的一个值,即key。

此处考官问我,你怎么去确定这个哈希函数?给个具体的方案。

我试着回答几次,都不能另考官满意,之后便放弃了。

现在想到的较好的解决办法:

还是预处理,第一步还是去重,此时所有单词产生的中间结果最多有26个字母。将中间结果所包含的字母划归为一个集合,因而集合的所有可能为2^26种。我们可以根据这样的一个集合唯一确定一类相似的单词,现在的问题就是如何表示这样的集合。今天偶尔看到位图表示时才恍然大悟,其实在这里我对每一类相似单词的集合只需要4个字节就能唯一地表示它了,具体方法是:对于集合中出现的字母,在4字节变量key的对应位上置1,没有出现的字母则key的对应位置0 。So easy,可惜想出来得太晚了。

此次失败的经历暴露出我基础不够扎实的问题,亟需改正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息