考虑一下要点:面试官在寻找什么?
像这样一个庞然大物的问题并不是要您在实施PageRank型算法或如何进行分布式索引的过程中浪费时间。相反,应将重点放在所要采取的行动的全部情况上。听起来您已经了解所有重要部分(BigTable,PageRank,Map / Reduce)。那么问题是,您实际上如何将它们连接在一起?
这是我的刺。
阶段1:建立索引基础架构(花费5分钟进行解释)
实施Google(或任何搜索引擎)的第一步是建立索引器。这是一款可抓取数据主体并以更有效地进行读取的数据结构生成结果的软件。
要实现这一点,请考虑两个部分:搜寻器和索引器。
网络搜寻器的工作是抓取网页链接并将其转储为一组。这里最重要的步骤是避免陷入无限循环或无限生成的内容中。将每个链接放置在一个大型文本文件中(目前)。
其次,索引器将作为Map / Reduce作业的一部分运行。(将函数映射到输入中的每个项目,然后将结果简化为单个“事物”。)索引器将使用单个Web链接,检索网站,并将其转换为索引文件。(接下来讨论。)减少步骤将简单地将所有这些索引文件聚合到一个单元中。(而不是数百万个散乱的文件。)由于可以并行完成索引步骤,因此您可以在任意大的数据中心中迁移此Map / Reduce作业。
阶段2:建立索引算法的细节(花费10分钟进行解释)
陈述了如何处理网页后,下一部分将说明如何计算有意义的结果。简短的答案是“更多的Map / Reduce”,但请考虑您可以做的事情:
- 对于每个网站,计算传入链接的数量。(链接至页面的链接应更“好”。)
- 对于每个网站,请查看链接的显示方式。(<h1>或<b>中的链接比埋在<h3>中的链接更为重要。)
- 对于每个网站,请查看出站链接的数量。(没有人喜欢垃圾邮件发送者。)
- 对于每个网站,请查看所用单词的类型。例如,“哈希”和“表”可能表示该网站与计算机科学有关。另一方面,“哈希”和“布朗尼”则暗示该网站的情况大不相同。
不幸的是,我对分析和处理数据的各种方式了解甚少,因此非常有用。但是一般的想法是分析数据的可扩展方式。
阶段3:投放结果(花10分钟进行解释)
最后阶段实际上是为结果服务。希望您在如何分析网页数据方面分享了一些有趣的见解,但是问题是您如何实际查询它?每天有10%的Google搜索查询以前从未见过。这意味着您无法缓存以前的结果。
您无法从Web索引中进行单个“查找”,那么您会尝试哪种呢?您如何看待不同的索引?(也许结合结果-也许关键字“ stackoverflow”在多个索引中出现率很高。)
另外,您如何查找它?你可以使用什么样的方法从读取数据的海量快速大量的信息?(可以在此处随意命名您喜欢的NoSQL数据库和/或研究Google BigTable的全部内容。)即使您拥有一个非常准确的索引,您仍需要一种在其中快速查找数据的方法。(例如,在200GB文件中找到“ stackoverflow.com”的等级编号。)
随机问题(剩余时间)
覆盖了搜索引擎的“骨架”之后,请随意对您特别了解的任何单个主题进行讨论。
- 网站前端的性能
- 管理您的Map / Reduce作业的数据中心
- A / B测试搜索引擎改进
- 将先前的搜索量/趋势整合到索引中。(例如,预计前端服务器的负载将激增9-5,并在AM早期消失。)
显然,这里要讨论的材料超过15分钟,但希望足以让您入门。