python面试题一些知识点

1.数据库大致可以分为几类?你使用过的数据库有哪些?分别是什么类型的数据库?

答:数据库大致可分为:关系型数据库和非关系型数据库两种,使用过的数据库包括Mysql,sqlite3,redis,mongodb,PostgreSQL,oracle。其中mysql和sqlite3,oracle,PostgreSQL它们是关系型数据库,mongodb,redis是非关型数据库。
2.请列举你使用过的网络请求库有哪些?

答:python自带的urllib,第三方的requests,grequests
3.请列举你使用过的网页解析方式及解析用到的包?

答:使用过的解析包:lxml,BeautifulSoup4,pyquery;
使用过的数据解析方式:xpath语法,css选择器,re

4.get请求和post请求的区别在哪里?

答:1>get请求将参数设置在url中,以?和&的形式拼接;post请求将参数设置在请求体中
2>get请求没有post请求安全,重要的数据容易暴露
3>get请求传输数据的大小受到限制,post请求传输数据的大小理论上不受到限制
4>get请求一般用于获取服务器资源,post请求用于在服务器上创建资源。

5.cookie和session的区别是什么?请详细描述浏览器和服务器之间的cookie交互过程。

答:区别:
1>cookie是在浏览器端进行数据存储,session是在服务器端进行数据存储
2>cookie一般用来存储数据,session一般用来跟踪会话
3>session比cookie安全性高
交互过程:
1>首次访问网站的时候,服务器会通过Set-Cookie字段向客户端返回一些cookie信息;
2>客户端在接收到服务器响应之后,会解析响应头中得Set-Cookie字段,将数据缓存在本地;
3>客户端再次访问服务器得时候,会在请求头中携带这些cookie信息,用于表明客户端和服务器之间得连接状态;

6.请列举你遇到过的反爬虫措施,以及你的应对措施。

答:遇到过的反爬虫措施:
1>网站检测请求头和ip,发现异常则封禁请求头和ip
2>网站设置登录,必须登录才能获取页面信息。
3>网站禁用cookie,禁止使用cookie进行登录。
4>网站设置验证码
5>网站设置成js动态加载的页面。
应对措施:
1>设置ip代理池和随机请求头
2>注册多个账户搭建cookie池
3>破解登录参数,进行模拟登录
4>使用打码平台或者其他方式破解验证码
5>使用selenium进行爬取。

7.请列举你使用过的css选择器(至少五种)。

答:类选择器,id选择器,交集选择器,父子选择器,后代选择器,属性选择器,伪类选择器

8.简述极验验证码的破解流程。

答:1>通过分析网站找出能够获取极验参数的url;
2>请求这个url获取极验参数gt和challenge,将获得的极验参数上传到验证码识别接口;
3>将识别成功后的返回值challenge和validate,及其它表单数据一块上传至网站主服务器请求网站数据即可

9.请列举常见的响应状态码,并解释其含义(至少五个)。

答:1>200 get请求成功
2>201 post请求成功
3>301 url重定向
4>403 请求被拒绝
5>400 无效的请求
6>500 内部服务器错误
7>404 服务器无法找到被请求的页面

10.Charles的作用是什么?如何配置Charles抓取浏览器发起的http/https网络请求?

答:Charles是一个抓包代理工具,用于拦截客户端发起的http/https请求,然后Charles再将请求转发至对方服务器,从而达到拦截请求和数据的目的。
配置:
1>先配置charles,它默认能过拦截http请求,让其能够监听https请求需要添加443端口;
2>从charles中获取一份证书保存下来,然后找到浏览器对应安装证书的设置将证书安装至浏览器即可。

11.mysql的端口号是?http的端口号是?https的端口号是?

答:3306,80,443

12.一个网页的基本组成是什么?

答:html,css,js

13.http的请求报文和响应报文的组成分别是什么?

答:1>请求报文:请求行+请求头+空行+请求数据
2>响应报文:状态行+响应头+空行+响应数据

14.json模块中的dumps和loads的作用分别是什么?

答:1>loads:将一个json字符串反序列化为一个python对象
2>dumps:将一个python对象序列化为一个json字符串

15.请列举你使用过的python内置的装饰器,并说明它们的作用。

答:1>@classmethod:将一个实例方法,转换成一个类方法
2>@stacticmethod:将实例方法转换成了一个静态方法
3>@property是将name函数声明为一个getter函数

16.请说出一个爬虫程序的最基本组成部分有哪些?

答:请求模块,解析模块,清理模块,存储模块。

17.面向对象的三大特征是什么?类的继承有什么优势?

答:三大特征:封装,继承,多态
优势:继承可以实现代码得重用,可以在父类已有功能得基础上,扩展新得功能

18.yield和return的区别是什么?

答:yield和return区别:
yield每次只返回一个值,而return会把最终的结果一次性返回。每当代码执行到yield的时候就会直接将yield后面的值返回出去,下一次迭代的时候,会从上一次遇到yield之后的代码开始执行。

19.python如何安装第三方模块(包),如何安装指导版本的第三方包(模块),如何查看python的安装位置,请写出相关命令。

答:pip install 第三方包的名字
pip install 第三方包的名字==版本号
where python

20.Mitmproxy是什么,它的作用是什么?
答:Mitmproxy是一个支持HTTP和HTTPS的抓包程序,类似Fiddler,Charles的功能,只不过它通过控制台的形式操作。mitmproxy还有两个关联组件,一个是mitmdump,它是mitmproxy的命令行接口,利用它可以对接python脚本,实现监听后的处理;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章