码迷,mamicode.com
首页 > 编程语言 > 详细

九章算法面试题44 设计一个Web Crawler

时间:2015-05-13 10:31:16      阅读:1261      评论:0      收藏:0      [点我收藏+]

标签:系统设计   leetcode   lintcode   面试题   九章算法   

九章算法官网-原文网址


http://www.jiuzhang.com/problem/44/


题目

如果让你来设计一个最基本的Web Crawler,该如何设计?需要考虑的因素有哪些?



解答

没有标准答案。需要尽可能的回答出多一点的考虑因素。


面试官角度

这个问题是面试中常见的设计类问题。实际上如果你没有做过相关的设计,想要回答出一个让面试官满意的结果其实并不是很容易。该问题并不局限于你在去面试搜索引擎公司时可能会问到。这里,我们从Junior Level和Senior Level两个角度来解答这个问题。


1. 如何抽象整个互联网

Junior: 抽象为一个无向图,网页为节点,网页中的链接为有向边。

Senior: 同上。


2. 抓取算法

Junior: 采用BFS的方法,维护一个队列,抓取到一个网页以后,分析网页的链接,扔到队列里。

Senior: 采用优先队列调度,区别于单纯的BFS,对于每个网页设定一定的抓取权重,优先抓取权重较高的网页。对于权重的设定,考虑的因素有:1. 是否属于一个比较热门的网站 2. 链接长度 3. link到该网页的网页的权重 4. 该网页被指向的次数 等等。进一步考虑,对于热门的网站,不能无限制的抓取,所以需要进行二级调度。首先调度抓取哪个网站,然后选中了要抓取的网站之后,调度在该网站中抓取哪些网页。这样做的好处是,非常礼貌的对单个网站的抓取有一定的限制,也给其他网站的网页抓取一些机会。


九章算法面试题44 设计一个Web Crawler

标签:系统设计   leetcode   lintcode   面试题   九章算法   

原文地址:http://blog.csdn.net/jiuzhang_ninechapter/article/details/45680167

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!