Python爬虫工程师必会面试题汇总

253 阅读3分钟

爬虫是
Python
的重要应用方向之一,也是学习
Python
的学员求职的主要方向。为了帮助学员更快更好的通过企业面试,千锋郑州
Python
培训小编悉心整理了
5
Python
爬虫面试题及答案,希望能够给大家提供帮助!

1

简要介绍下
scrapy
框架及其优势

scrapy

是一个快速
(fast)
、高层次
(high-level)
的基于
Python
Web
爬虫构架,用于抓取
Web
站点并从页面中提取结构化的数据。
scrapy
使用了
Twisted
异步网络库来处理网络通讯。

scrapy

框架的优点:
1
)更容易构建大规模的抓取项目;
2
)异步处理请求速度非常快;
3
)可以使用自动调节机制自动调整爬行速度。

2

、爬虫使用多线程好?还是多进程好?

对于
IO
密集型代码(文件处理,网络爬虫),多线程能够有效提升效率(单线程下有
IO
操作会进行
IO
等待,会造成不必要的时间等待,而开启多线程后,
A
线程等待时,会自动切换到线程
B
,可以不浪费
CPU
的资源,从而提升程序执行效率)。在实际的采集过程中,既考虑网速和相应的问题,也需要考虑自身机器硬件的情况,来设置多进程或者多线程。

3

、什么是栈溢出?怎么解决?

因为栈一般默认为
1-2m
,一旦出现死循环或者是大量的递归调用,在不断的压栈过程中,造成栈容量超过
1m
而导致溢出。

栈溢出的情况有两种:
1
)局部数组过大。当函数内部数组过大时,有可能导致堆栈溢出。
2
)递归调用层次太多。递归函数在运行时会执行压栈操作,当压栈次数太多时,也会导致堆栈溢出。

解决方法:
1
)用栈把递归转换成非递归。
2
)增大栈空间。

4

MySQL
的索引在什么情况下失效?

1

)如果条件中有
or
,即使其中有条件带索引也不会使用
(
这也是为什么尽量少用
or
的原因
)

要想使用
or
,又想让索引生效,只能将
or
条件中的每个列都加上索引。

2

)对于多列索引,不是使用的第一部分,则不会使用索引。

3

like
查询以
%
开头。

4

)如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引。

5

)如果
MySQL
估计使用全表扫描要比使用索引快,则不使用索引。

5

HTTPS
是如何实现安全传输数据的?

客户端(通常是浏览器)先向服务器发出加密通信的请求;

服务器收到请求
,
然后响应;

客户端收到证书之后会首先会进行验证;

服务器收到使用公钥加密的内容,在服务器端使用私钥解密之后获得随机数
pre-master secret
,然后根据
radom1
radom2
pre-master secret
通过一定的算法得出
session Key
MAC
算法秘钥,作为后面交互过程中使用对称秘钥。同时客户端也会使用
radom1
radom2
pre-master secret
,和同样的算法生成
session Key
MAC
算法的秘钥。

然后再后续的交