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是如何实现安全传输数据的。
HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用的对称加密算法,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。这样通过这些机制协商出一个对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。
1、客户端发起HTTPS请求
2、服务端的配置(数字证书,公钥和私钥,)
3、传送证书( 颁发机构,过期时间等)
4、客户端解析证书
5、传送加密信息
6、服务段解密信息
7、传输加密后的信息
8、客户端解密信息
参考:https://blog.csdn.net/kobejayandy/article/details/52433660
对称加密: 将信息和私钥(随机值)通过某种算法混合在一起
非对称加密的加密算法,特点是私钥加密后的密文,只要是公钥,都可以解密,但是公钥加密后的密文,只有私钥可以解密。私钥只有一个人有,而公钥可以发给所有的人。
4. HTTPS安全证书是怎么来的,如何申请,国内和国外有哪些第三方机构提供安全证书认证。
有自签和第三方公司. 上海市数字证书认证中心, 北京数字认证股份有限公司
5. get和post请求有什么区别,分别应该在什么场合下。
get请求的参数一般放在url中,但是浏览器和服务器程序对url长度还是有限制的。
post请求的参数一般放在body,你硬要放到url中也可以。
在RESTful风格中,get用于从服务器获获取数据,而post用于创建数据
6. TCP三次握手、四次挥手,请说出每次发送的状态码。
syn:同步请求,建立连接 ack: 回复,确认
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:
未连接队列
在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于SYN_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
关闭TCP连接:改进的三次握手
(使用一个带有FIN附加标记的报文段)TCP关闭连接的步骤如下:
第一步,当客户端的应用程序通知TCP数据已经发送完毕时,TCP向服务器发送一个带有FIN附加标记的报文段(FIN表示英文finish)。
第二步,服务器收到这个FIN报文段之后,并不立即用FIN报文段回复客户端,而是先向客户端发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是为了防止在这段时间内,对方重传FIN报文段)。
第三步,服务器的应用程序告诉TCP:我要彻底的关闭连接,TCP向客户端送一个FIN报文段。
第四步,客户端收到这个FIN报文段后,向服务器发送一个ACK表示连接彻底释放。
7. HTTP请求会有哪些信息发送到后台服务器。
三、数据库
0. MySQL的常用引擎有哪些?有什么区别?
(1)MyISAM存储引擎 不支持事务、也不支持外键,优势是访问速度快
(2)InnoDB存储引擎 提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM引擎,写的处理效率会差一些,并且会占用更多的磁盘空间以保留数据和索引。
InnoDB存储引擎的特点:支持自动增长列,支持外键约束
(3)MEMORY存储引擎 使用存在于内存中的内容来创建表, 访问非常的快, 默认使用HASH索引, 一旦服务关闭,表中的数据就会丢失掉.
(4)MERGE存储引擎 它是MyISAM表的组合,这些MyISAM表必须结构完全相同,merge表本身并没有数据,对merge类型的表可以进行查询,更新,删除操作,这些操作实际上是对内部的MyISAM表进行的。
1. redis是什么类型数据库,可以存哪些数据结构的数据。
redis是内存型的key-value型的非关系型数据库,支持数据持久化.
Redis是一个字典结构的存储服务器, 可以储存String, Hash, List, Set, zset数据.
2. redis有多少个库?
每个数据库对外都是一个从0开始的递增数字命名,Redis默认支持16个数据库(可以通过配置文件支持更多,无上限)
3. redis、MongoDB有什么区别,分别应用在什么情况下。
redis:是一个key-value存储系统(布式内缓存,高性能的key-value数据库)
MongoDB: 是一个介于关系数据库和非关系数据库之间的产品(基于分布式文件存储的数据库),是非关系数据库当中功能最丰富,最像关系数据库的。
内存管理机制:Redis数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的LRU算法删除数据。
MongoDB数据存在内存,由linux系统mmap实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。
支持的数据结构: Redis支持的数据结构丰富,包括hash、set、list等。
MongoDB数据结构比较单一,但是支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。
性能: 二者性能都比较高,应该说都不会是瓶颈。
可靠性: 二者均支持持久化。
集群: MongoDB集群技术比较成熟,Redis从3.0开始支持集群。
适用场景: reids 适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。
MongoDB 主要解决海量数据的访问效率问题。
4. MongoDB是以什么数据结构存入的。
文件存储格式为Bson,使用易于掌握和理解的Json风格语法。相对Json来说,Bson拥有更好的性能,主要表现为更快的遍历速度、操作更简易、增加了额外的数据类型
5. 如何优化MySql数据库
1.优化索引、SQL语句、分析慢查询;
2.设计表的时候严格按照数据库的设计范式来设计数据库;
3.我们还可以将我们的业务架构进行缓存,静态化和分布式;
4.如果效率还是不够好,可以采用主从方式将数据读写分离;
5.硬件优化:使用更好的一些硬盘(固态硬盘),使用一些磁盘阵列技术.
四、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)。
python常见面试集合的更多相关文章
- python 常见面试问题
https://blog.csdn.net/weixin_43789195/article/details/87469096 https://blog.csdn.net/qq_42642945/art ...
- Python常见面试(习题)——水仙花数
今天,给大家分享一个习题. 用python输出100到1000以内的水仙花数. 相信很多小伙伴都听到过,或者遇到过这个题目. 那么今天就来带大家做一做这道题. 首先,我们要知道什么是水仙花数, (@_ ...
- Python常见十六个错误集合,你知道那些?
使用python会出现各种各样的错误,以下是Python常见的错误以及解决方法. 1.ValueError: 'Conv2d_1a_3×3' is not a valid scope name 这个是 ...
- Redis的那些最常见面试问题(转)
Redis的那些最常见面试问题 1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型 ...
- Redis的最常见面试问题
Redis的那些最常见面试问题[转] 1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据 ...
- Java && Python 算法面试常用类以及方法总结
数据结构 逻辑结构上: 包括集合,线性结构,非线性结构. 存储结构: 顺序存储,链式存储,索引存储,散列存储. Java 常见数据结构 大专栏 Java && Python 算法面试 ...
- 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...
- [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...
- java异常常见面试问题
java异常常见面试问题 一.java异常的理解 异常主要是处理编译期不能捕获的错误.出现问题时能继续顺利执行下去,而不导致程序终止,确保程序的健壮性. 处理过程:产生异常状态时,如果当前的conte ...
随机推荐
- Eclipse安装scala插件
1.下载插件 http://scala-ide.org/download/current.html 2.将下载的压缩包解压,拷贝到eclipse\dropins目录下 3.启动eclipse,安装 ...
- redis在本地进行启动的方式
第一种 使用cmd命令行进行过操作 在本地配置好redis之后,启动的话是比较简单的 1-首先打开cmd运行界面 2-定位到本地redis目录 3-运行命令redis-server.exe redis ...
- 源码安装缺少configure文件
源代码中没有configure的软件安装方法 今天下载了一个旧版的GeoIP软件包,解压以后发现代码包中没有configure文件,现在这这里记录一下安装遇到的问题 网上大部分GeoIP下载地址已经失 ...
- 用CSS 实现 浮动元素的 水平居中
问题描述: 基本的html结构: <div> <!-- <span>1</span> <span>2</span> <span& ...
- uoj#67 新年的毒瘤【Tarjan】
题目:http://uoj.ac/problem/67 题意:n个节点m条边的图,删除某个节点及他相连的所有边之后,剩下的图就成了一棵树.找出所有这样的节点. 思路:上次去清华面试的B题,当时就是在瞎 ...
- django 渲染模板与 vue 的 {{ }} 冲突解决方法
如果不可避免的在同一个页面里既有 django 渲染又有 vue 渲染的部分,可有 2 种方式解决 方法一: 采用 vue 的 delimiters 分隔符. new Vue({ delimiter ...
- GreenPlum 数据备份与恢复
GreenPlum数据备份与恢复gp_dump是GP并行备份的备份工具,在运行gp_dump的时候master与所有的segment节点都开始备份(standby节点和segment节点中的mirro ...
- 使用 ServerSocket 建立聊天服务器-1
1.代码目录 2.ChatSocket.java --------------------------------------------------------------------------- ...
- Bzoj 1280: Emmy卖猪pigs
1280: Emmy卖猪pigs Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 279 Solved: 182[Submit][Status][Dis ...
- 爬虫(二):Urllib库详解
什么是Urllib: python内置的HTTP请求库 urllib.request : 请求模块 urllib.error : 异常处理模块 urllib.parse: url解析模块 urllib ...