九章算法面试题44 设计一个Web Crawler
2015-05-13 01:31
274 查看
九章算法官网-原文网址
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. 该网页被指向的次数 等等。进一步考虑,对于热门的网站,不能无限制的抓取,所以需要进行二级调度。首先调度抓取哪个网站,然后选中了要抓取的网站之后,调度在该网站中抓取哪些网页。这样做的好处是,非常礼貌的对单个网站的抓取有一定的限制,也给其他网站的网页抓取一些机会。
相关文章推荐
- 笔试题&面试题:设计一个复杂度为n的算法找到单向链表倒数第m个元素
- [面试题]设计一个算法找到数组中两个元素相加等于指定数的所有组合
- 笔试题&面试题:设计一个复杂度为n的算法找到单向链表倒数第m个元素
- [面试题]设计一个算法找到数组中两个元素相加等于指定数的所有组合
- 九章算法-面试题总结(算法、强化算法、系统设计高清视频观看)
- 陈利人 面试题 对于一个n位正整数a,去掉其中任意k(k<=n)个数字后,剩下的数字按原次序排列可以组成一个新的正整数。设计一个删数算法,使得剩下的数字组成的正整数最小。
- 一个面试题,我写的算法
- 用递归设计一个数组排序(前俩天遇到的一个面试题)
- 如何设计一个异步Web服务——任务调度
- Become.com的 Web Crawler: 一个超大规模的Java应用程序(想开发自己的搜索引擎增值服务的必读)
- 算法设计时是否要设计一个针对文件的版本?
- 如何设计一个web容器
- 九章算法面试题20 寻找重复的URL
- 九章算法面试题37 主元素
- 设计一个算法,判断一个二叉树是否为完全二叉树
- 一个简单嵌入式WEB业务应用设计
- 九章算法面试题50 队列上实现Min函数
- 九章算法面试题65 拓扑排序
- 设计一个算法将两个字符串合并按字母排序
- dr-helper项目设计介绍(一个包括移动端和Web端的点餐管理系统)