系统设计班 | 半价优惠倒计时3天,6月1日起恢复原价!

2019 年 5 月 27 日 九章算法

作者 | 东邪老师

编辑 | Jenny
专栏 | 九章算法


限时福利


《系统设计班》史上最大折扣力度

限时半价优惠


现在报名只需US$97.56

活动截止后恢复原价US$199!


活动截止时间:北京时间6月1日0点


Q
问题描述


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


A
解题思路


这个问题是面试中常见的设计类问题。没有标准答案。需要尽可能的回答出多一点的考虑因素。


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


本题运用九章算法《系统设计班》答题技巧则进行拆解,在课程中会有更详细的讲解。


1
如何抽象整个互联网

Junior


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


Senior


同上。


2
抓取算法

Junior


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


Senior


采用优先队列调度,区别于单纯的BFS,对于每个网页设定一定的抓取权重,优先抓取权重较高的网页。对于权重的设定,考虑的因素有:1. 是否属于一个比较热门的网站 2. 链接长度 3. link到该网页的网页的权重 4. 该网页被指向的次数 等等。


进一步考虑,对于热门的网站,不能无限制的抓取,所以需要进行二级调度。首先调度抓取哪个网站,然后选中了要抓取的网站之后,调度在该网站中抓取哪些网页。这样做的好处是,非常礼貌的对单个网站的抓取有一定的限制,也给其他网站的网页抓取一些机会。


3
网络模型

Junior


多线程抓取。


Senior


分别考虑单机抓取和分布式抓取的情况。对于Windows的单机,可以使用IOCP完成端口进行异步抓取,该种网络访问的方式可以最大程度的利用闲散资源。因为网络访问是需要等待的,如果简单的同时开多个线程,计算机用于线程间切换的耗费会非常大,这种用于处理抓取结果的时间就会非常少。IOCP可以做到使用几个线程就完成几十个线程同步抓取的效果。对于多机的抓取,需要考虑机器的分布,如抓取亚洲的站点,则用在亚洲范围内的计算机等等。


4
实时性

Junior


无需回答


Senior


新闻网页的抓取一般来说是利用单独的爬虫来完成。新闻网页抓取的爬虫的权重设置与普通爬虫会有所区别。首先需要进行新闻源的筛选,这里有两种方式,一种是人工设置新闻源,如新浪首页,第二种方式是通过机器学习的方法。新闻源可以定义链接数非常多,链接内容经常变化的网页。从新闻源网页出发往下抓取给定层级限制的网页所得到,再根据网页中的时间戳信息判断,就可以加入新闻网页。


5
网页更新

Junior


无需回答。


Senior


网页如果被抓下来以后,有的网页会持续变化,有的不会。这里就需要对网页的抓取设置一些生命力信息。当一个新的网页链接被发现以后,他的生命力时间戳信息应该是被发现的时间,表示马上需要被抓取,当一个网页被抓取之后,他的生命力时间戳信息可以被设置为x分钟以后,那么,等到x分钟以后,这个网页就可以根据这个时间戳来判断出,他需要被马上再抓取一次了。一个网页被第二次抓取以后,需要和之前的内容进行对比,如果内容一致,则延长下一次抓取的时间,如设为2x分钟后再抓取,直到达到一个限制长度如半年或者三个月(这个数值取决于你爬虫的能力)。如果被更新了,则需要缩短时间,如,x/2分钟之后再抓取。


6
总结

一般来说,上述5点是你可以去回答如何设计一个爬虫的5个角度。



7
课程推荐


《系统设计互动课》


限时半价,3日后恢复原价$199



讲什么


通过实战面试真题,讲解实际面试中会遇到的系统设计知识和面试技巧,包括:数据系统设计、爬虫系统与搜索建议系统、Google 三驾马车(Big Table / Google File System / MapReduce)、分布式系统设计、实时位置信息系统等。


谁来讲


东邪

顶尖IT企业工程师,曾就就职于亿级活跃用户的社交网络公司,拥有多年的网站开发经验,擅长基础架构,网站架构,数据库



老顽童

全国信息学竞赛金奖,国内TOP3名校毕业,北美哈佛大学留学交换。斩获谷歌,Facebook, 微软,高盛等对冲基金offer。


关于系统设计


系统设计面试是常见的一种面试类型,特别是针对后端工程师,全栈工程师是必须的面试环节。

已经有工作经验的工程师通常是必修的,刚毕业的同学也有一定概率会被问到系统设计中的相关简单的问题。

系统设计和面向对象设计是不同的,前者主要涉猎的知识点为数据库,Web等知识,后者主要涉猎的是 Class Object 等知识。


课程特色


多课时精品互动课程

课程以生动有趣的对话框形式展现,不懂的地方可反复观看,同时享受聊天般的互动乐趣。


课堂实时答疑解惑

课堂有问题?助教老师来帮你。搞定所有拦路虎,学到更多的知识。


课程报名方式:

扫描下方二维码

或点击“阅读原文”

登录查看更多
0

相关内容

系统设计是新系统的物理设计阶段。根据系统分析阶段所确定的新系统的逻辑模型、功能要求,在用户提供的环境条件下,设计出一个能在计算机网络环境上实施的方案,即建立新系统的物理模型。
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
 第八届中国科技大学《计算机图形学》暑期课程课件
专知会员服务
54+阅读 · 2020年3月4日
谷歌机器学习速成课程中文版pdf
专知会员服务
143+阅读 · 2019年12月4日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
94+阅读 · 2019年12月4日
【机器学习课程】Google机器学习速成课程
专知会员服务
162+阅读 · 2019年12月2日
Keras作者François Chollet推荐的开源图像搜索引擎项目Sis
专知会员服务
29+阅读 · 2019年10月17日
Python数据分析案例实战
炼数成金订阅号
5+阅读 · 2019年5月9日
系统设计班 | 限时半价,随时报名随时观看
九章算法
9+阅读 · 2019年5月4日
OOD&系统设计大礼包 | 价值 $199 福利免费领取!
九章算法
12+阅读 · 2019年4月28日
抖音爬虫
专知
3+阅读 · 2019年2月11日
从零开始深度学习:dropout与正则化
数萃大数据
7+阅读 · 2018年7月22日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
Heterogeneous Graph Transformer
Arxiv
27+阅读 · 2020年3月3日
Arxiv
34+阅读 · 2019年11月7日
Two Stream 3D Semantic Scene Completion
Arxiv
4+阅读 · 2018年7月16日
Arxiv
6+阅读 · 2018年5月18日
Arxiv
5+阅读 · 2017年12月14日
VIP会员
相关资讯
Python数据分析案例实战
炼数成金订阅号
5+阅读 · 2019年5月9日
系统设计班 | 限时半价,随时报名随时观看
九章算法
9+阅读 · 2019年5月4日
OOD&系统设计大礼包 | 价值 $199 福利免费领取!
九章算法
12+阅读 · 2019年4月28日
抖音爬虫
专知
3+阅读 · 2019年2月11日
从零开始深度学习:dropout与正则化
数萃大数据
7+阅读 · 2018年7月22日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
Top
微信扫码咨询专知VIP会员