python常见面试集合

Python面试题目
一、Python
1. python的多进程与多线程的运行机制是什么?有什么区别?分别在什么情况下用?
2. Python的装饰器的原理是什么,在什么情况会用到装饰器。请手写Python装饰器代码
3. 如何提高Python的运行效率,请说出不少于2种提高运行效率的方法。
4. 介绍下“消费者”和“生产者”模型。
https://blog.csdn.net/sanyuesan0000/article/details/52996586
https://www.cnblogs.com/alex09/p/6675664.html

二、HTTP/HTTPS,TCP/IP协议
1. 关于HTTP/HTTPS的区别,分别应该在什么场合下。

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。SSL(Secure Sockets Layer)

HTTPS和HTTP的区别主要如下:

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

2.HTTPS有什么优点和缺点

HTTPS的优点:

1、SEO方面

比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。

2、安全性

(1)、使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;

(2)、HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。

(3)、HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。

1、SEO方面. 使用HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电,此外,HTTPS协议还会影响缓存,增加数据开销和功耗,甚至已有安全措施也会受到影响也会因此而受到影响。

2、经济方面. 费用较高.


3. HTTPS是如何实现安全传输数据的。

4. HTTPS安全证书是怎么来的,如何申请,国内和国外有哪些第三方机构提供安全证书认证。
5. get和post请求有什么区别,分别应该在什么场合下。
6. TCP三次握手、四次挥手,请说出每次发送的状态码。
7. HTTP请求会有哪些信息发送到后台服务器。


三、数据库
0. MySQL的常用引擎有哪些?有什么区别?
1. redis是什么类型数据库,可以存哪些数据结构的数据。
2. redis有多少个库?
3. redis、MongoDB有什么区别,分别应用在什么情况下。
4. MongoDB是以什么数据结构存入的。
5. 如何优化MySql数据库


四、scrapy和scrapy-redis
1. 描述下scrapy框架运行的机制?
答:从start_urls里获取第一批url并发送请求,请求由引擎交给调度器入请求队列,获取完毕后,调度器将请求队列里的请求交给下载器去获取请求对应的响应资源,并将响应交给自己编写的解析方法做提取处理:1. 如果提取出需要的数据,则交给管道文件处理;2. 如果提取出url,则继续执行之前的步骤(发送url请求,并由引擎将请求交给调度器入队列...),直到请求队列里没有请求,程序结束。


2. scrapy和scrapy-redis有什么区别?为什么选择redis数据库?
答:
1) scrapy是一个Python爬虫框架,爬取效率极高,具有高度定制性,但是不支持分布式。而scrapy-redis一套基于redis数据库、运行在scrapy框架之上的组件,可以让scrapy支持分布式策略,Slaver端共享Master端redis数据库里的item队列、请求队列和请求指纹集合。
2) 为什么选择redis数据库,因为redis支持主从同步,而且数据都是缓存在内存中的,所以基于redis的分布式爬虫,对请求和数据的高频读取效率非常高。


3. 反爬虫的机制有哪些?
答:
1) User—Agent
2) 代理ip
3) 访问频率限制
4) 验证码处理
5) Cookie
6) 动态HTML数据加载


4. 实现模拟登录的方式有哪些?
答:
1) 使用一个具有登录状态的cookie,结合请求报头一起发送,可以直接发送get请求,访问登录后才能访问的页面。
2) 先发送登录界面的get请求,在登录页面HTML里获取登录需要的数据(如果需要的话),然后结合账户密码,再发送post请求,即可登录成功。然后根据获取的cookie信息,继续访问之后的页面。


5. get和post请求有什么区别?分别应该在什么场合下。
答:
1) get请求用于直接获取指定url的响应数据,和服务器没有交互信息。
2) post请求在获取响应数据前,会先发送form表单,服务器会根据form表单来返回响应数据。


6. Selenium、PhantomJS是什么?可以为爬虫做哪些事情?
答:
1) Selenium是一种自动测试化工具,可以导入使用指定的浏览器,在发送请求获取响应后,响应数据则会在指定的浏览器里执行完毕。而PhantomJS是一种无界面浏览器,相比传统的Chrome或Firefox浏览器等,资源消耗会更少。
2) 在Python爬虫代码里使用Selenium和PhantomJS组合,相当于真实浏览器的执行状态,可以直接获取动态HTML数据(如JavaScript、Ajax加载的数据等),并且支持模拟键盘事件、鼠标点击事件、执行JavaScript语句等。在一些反爬虫极端情况下,Selenium+PhantomJS可以作为终极解决方案。


7、简单介绍下scrapy的异步处理。
答:scrapy框架的异步机制是基于twisted异步网络框架处理的,在settings.py文件里可以设置具体的并发量数值(默认是并发量16)。

猜你喜欢

转载自www.cnblogs.com/snailon/p/8999589.html