python爬虫面试宝典(常见问题)


Posted in Python onMarch 02, 2018
  • 是否了解线程的同步和异步?

线程同步:多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率低

线程异步:在访问资源时在空闲等待时同时访问其他资源,实现多线程机制

  • 是否了解网络的同步和异步?

同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事

异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

  • 链表和顺序表储存时各自有什么优点?

1.顺序表存储

原理:顺序表存储是将数据元素放到一块连续的内存存储空间,存取效率高,速度快。但是不可以动态增加长度

优点:存取速度高效,通过下标来直接存储

缺点:1.插入和删除比较慢,2.不可以增长长度

比如:插入或者删除一个元素时,整个表需要遍历移动元素来重新排一次顺序

2.链表存储

原理:链表存储是在程序运行过程中动态的分配空间,只要存储器还有空间,就不会发生存储溢出问题

优点:插入和删除速度快,保留原有的物理顺序,比如:插入或者删除一个元素时,只需要改变指针指向即可

缺点:查找速度慢,因为查找时,需要循环链表访问

  • 使用redis搭建分布式系统时如何处理网络延迟和网络异常?

由于网络异常的存在,分布式系统中请求结果存在“三态”的概念,即三种状态:“成功”、“失败”、“超时(未知)”

当出现“超时”时可以通过发起读取数据的操作以验证 RPC 是否成功(例如银行系统的做法)

另一种简单的做法是,设计分布式协议时将执行步骤设计为可重试的,即具有所谓的“幂等性”

  • 数据仓库是什么?

数据仓库是一个面向主题的、集成的、稳定的、反映历史变化的、随着时间的流逝发生变化的数据集合。它主要支持管理人员的决策分析。

数据仓库收集了企业相关内部和外部各个业务系统数据源、归档文件等一系列历史数据,最后转化成企业需要的战略决策信息。

  • 特点:

面向主题:根据业务的不同而进行的内容划分;
集成特性:因为不同的业务源数据具有不同的数据特点,当业务源数据进入到数据仓库时,需要采用统一的编码格式进行数据加载,从而保证数据仓库中数据的唯一性;
非易失性:数据仓库通过保存数据不同历史的各种状态,并不对数据进行任何更新操作。
历史特性:数据保留时间戳字段,记录每个数据在不同时间内的各种状态。

假设有一个爬虫,从网络上获取数据的频率快,本地写入数据的频率慢,使用什么数据结构好?

  • 在线求解(o°ω°o)

你是否了解谷歌的无头浏览器?

无头浏览器即headless browser,是一种没有界面的浏览器。既然是浏览器那么浏览器该有的东西它都应该有,只是看不到界面而已。

Python中selenium模块中的PhantomJS即为无界面浏览器(无头浏览器):是基于QtWebkit的无头浏览器,

你是否了解MySQL数据库的几种引擎?

  • InnoDB:

InnoDB是一个健壮的事务型存储引擎,这种存储引擎已经被很多互联网公司使用,为用户操作非常大的数据存储提供了一个强大的解决方案。

在以下场合下,使用InnoDB是最理想的选择:

1.更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。

2.事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。

3.自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。

4.外键约束。MySQL支持外键的存储引擎只有InnoDB。

5.支持自动增加列AUTO_INCREMENT属性。

一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB是不错的选择。

  • MEMORY:

使用MySQL Memory存储引擎的出发点是速度。为得到最快的响应时间,采用的逻辑存储介质是系统内存。

虽然在内存中存储表数据确实会提供很高的性能,但当mysqld守护进程崩溃时,所有的Memory数据都会丢失。

获得速度的同时也带来了一些缺陷。

一般在以下几种情况下使用Memory存储引擎:

1.目标数据较小,而且被非常频繁地访问。在内存中存放数据,所以会造成内存的使用,可以通过参数max_heap_table_size控制Memory表的大小,设置此参数,就可以限制Memory表的最大大小。

2.如果数据是临时的,而且要求必须立即可用,那么就可以存放在内存表中。

3.存储在Memory表中的数据如果突然丢失,不会对应用服务产生实质的负面影响。

  • redis数据库有哪几种数据结构?

5种数据结构

string 

使用string时,redis**大多数情况下**并不会理解或者解析其含义,无论使用json、xml还是纯文本在redis看来都是一样的,只是一个字符串,只能进行strlen、append等对字符串通用的操作,无法针对其内容进一步操作。其基本操作命令有set、get、strlen、getrange、append:

SET key value
 GET key
 STRLEN key
 GETRANGE key start end
 APPEND key value

在大多数情况之外,就是string中存储的为纯数字的情况,redis可以将字符串当做数字进行进一步操作,这些操作包括decr、decrby、incr、incrby和incrbyfloat。

hash

使用hash时,在我看来,就是value本身就是一组key-value对,不过redis将这里的key称为field(但是hkeys命令为什么不叫hfields命令呢哈哈),也就是value是一组field-value对。其基本操作命令有hset、hget、hmset、hmget、hgetall、hkeys和hdel:

HSET key field value
 HGET key field
 HMSET key field value [field value ...]
 HMGET key field [field ...]
 HGETALL key
 HKEYS key
 HDEL key field [field ...]

list

使用list时,value就是一个string数组,操作这组string时,可以像对待栈一样使用pop和push操作,但是这个栈两端都能进行操作;也可以像对待数组一样使用一个index参数来操作。list的操作命令略杂,主要分为两类:L开头的和R开头的,L代表LEFT或者LIST,进行一些从列表左端进行的操作,或者一些与端无关的操作;R代表RIGHT,进行一些从列表右端进行的操作。 

set

set用于存储一组不重复的值,也可以进行一些集合的操作,就像数学上的集合,它是无序的。基本操作有sadd和sismember:

SADD key member [member ...]
 SISMEMBER key member

集合操作有:求交sinter、求并sunion和求差sdiff:

SINTER key [key ...]
 SUNION key [key ...]
 SDIFF key [key ...]

sorted set

sorted set类似set,但是sorted set里每个元素都有一个score,这个score可用于排序和排名。基本操作有zadd、zcount、zrank:

ZADD key score member [score member ...]
 ZCOUNT key min max
 ZRANK key member

总结

以上所述是小编给大家介绍的python爬虫面试经典(常见问题),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python函数缺省值与引用学习笔记分享
Feb 10 Python
Python使用scrapy采集时伪装成HTTP/1.1的方法
Apr 08 Python
windows下安装Python的XlsxWriter模块方法
May 03 Python
使用python存储网页上的图片实例
May 22 Python
python简易远程控制单线程版
Jun 20 Python
Python面向对象之类的定义与继承用法示例
Jan 14 Python
Django csrf 两种方法设置form的实例
Feb 03 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
Jul 04 Python
Python通过Pillow实现图片对比
Apr 29 Python
Tensorflow tensor 数学运算和逻辑运算方式
Jun 30 Python
Python 数据分析之逐块读取文本的实现
Dec 14 Python
分享几种python 变量合并方法
Mar 20 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
Mar 02 #Python
谈谈python中GUI的选择
Mar 01 #Python
纯python实现机器学习之kNN算法示例
Mar 01 #Python
用python与文件进行交互的方法
Mar 01 #Python
python爬虫爬取快手视频多线程下载功能
Feb 28 #Python
python爬取m3u8连接的视频
Feb 28 #Python
python实现m3u8格式转换为mp4视频格式
Feb 28 #Python
You might like
mysql建立外键
2006/11/25 PHP
9条PHP编程小知识及易犯的小错误
2015/01/22 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
js中confirm实现执行操作前弹出确认框的方法
2014/11/01 Javascript
AngularJS HTML编译器介绍
2014/12/06 Javascript
js实现纯前端的图片预览
2016/04/27 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
2017/07/24 Javascript
Vue中render方法的使用详解
2018/01/26 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
2018/08/31 Javascript
JavaScript变量提升和严格模式实例分析
2019/01/27 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
python中in在list和dict中查找效率的对比分析
2018/05/04 Python
Pycharm配置远程调试的方法步骤
2018/12/17 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
2019/06/24 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
前端水印的简单实现代码示例
2020/12/02 HTML / CSS
Lancome兰蔻官方旗舰店:来自法国的世界知名美妆品牌
2018/06/14 全球购物
优秀经理获奖感言
2014/03/04 职场文书
园林系毕业生求职信
2014/06/23 职场文书
法人委托书的范本格式
2014/09/11 职场文书
车贷收入证明范本
2014/09/14 职场文书
民事代理词范文
2015/05/25 职场文书
离婚协议书范文2016
2016/03/18 职场文书
2019朋友新婚祝福语精选
2019/10/10 职场文书
尝试使用Python爬取城市租房信息
2022/04/12 Python
python绘制简单直方图(质量分布图)的方法
2022/04/21 Python