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字符串和字典
Jul 07 Python
更换Django默认的模板引擎为jinja2的实现方法
May 28 Python
Python将一个Excel拆分为多个Excel
Nov 07 Python
python实现公司年会抽奖程序
Jan 22 Python
Python实现 版本号对比功能的实例代码
Apr 18 Python
python  文件的基本操作 菜中菜功能的实例代码
Jul 17 Python
pandas如何处理缺失值
Jul 31 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
Dec 18 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
Python实现Kerberos用户的增删改查操作
Dec 14 Python
MATLAB 全景图切割及盒图显示的实现步骤
May 14 Python
pytorch训练神经网络爆内存的解决方案
May 22 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
深入file_get_contents与curl函数的详解
2013/06/25 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
Package.js  现代化的JavaScript项目make工具
2012/05/23 Javascript
jquery 循环显示div的示例代码
2013/10/18 Javascript
javascript自定义in_array()函数实现方法
2015/08/03 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
使用Web Uploader实现多文件上传
2016/06/08 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
2017/07/06 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
2018/01/02 Javascript
详解JavaScript 浮点数运算的精度问题
2019/07/23 Javascript
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
Vue跨域请求问题解决方案过程解析
2020/08/07 Javascript
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
python的dict,set,list,tuple应用详解
2014/07/24 Python
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
tensorflow: variable的值与variable.read_value()的值区别详解
2018/07/30 Python
解决Python中回文数和质数的问题
2019/11/24 Python
python 读取数据库并绘图的实例
2019/12/03 Python
解决python gdal投影坐标系转换的问题
2020/01/17 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
django 获取字段最大值,最新的记录操作
2020/08/09 Python
python tkinter实现下载进度条及抖音视频去水印原理
2021/02/07 Python
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
浅谈css3中的渐进增强和优雅降级
2017/12/01 HTML / CSS
英国著名国际平价时尚男装品牌:Topman
2016/08/27 全球购物
英国领先的酒杯和水晶玻璃器皿制造商:Dartington Crystal
2019/06/23 全球购物
离婚协议书范本(2014版)
2014/09/28 职场文书
实习证明格式范文
2015/06/16 职场文书
2016年暑假家长对孩子评语
2015/12/01 职场文书
python 制作一个gui界面的翻译工具
2021/05/14 Python
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL