python面试题

1.您能列举常见的三方模块吗?【考核知识点:常见模块】(10分)

Pillow:操作图像,比如对图片进行压缩、转换、裁剪
Requests:一个python第三方库,处理URL资源特别方便,常用在接口请求及爬虫方面
Psutil:可以获取操作系统资源信息,比如内存、磁盘等的使用量信息
Virtualenv:构建虚拟环境,进行开发过程中使用模块不同版本的隔离环境
Numpy:是一个高级的数学库,支持维度数组与矩阵运算
Pandas:强大的分析结构化数据的工具集

2.您知道面向对象三要素及其意义吗?【考核知识点:面向对象】(10分)

面向对象三要素是:封装、继承、多态
封装:将有共同的属性和方法封装到同一个类下面,像是你生活中的衣物归纳整理
继承:子类继承父类,可以具备父类已有属性,解决代码重用,并可以实现多态
多态:python天生是支持多态的,指的是基类的同一个方法在不同的派生类中有着不同的功能

3.关于yield的理解?【考核知识点:yield】(10分)

Yield本身就是一种在多线程下可以保存任务运行状态的方法
Yield可以保存状态,yield的状态保存与操作系统的保存线程状态很像,但是yield是代码级别控制。
Yield可以暂停函数的执行,也可以重新执行函数的特殊性,所以能模拟实现协程

4.进程线程的特点您来说说?【考核知识点:进程与线程】(10分)

进程特点:进程是CPU分配资源的最小单位
独立性:进程是独立存在的实体,拥有自己独立的资源。
动态性:程序是一个静态的指令集合,而进程是一个正在系统中活动的指令集合
并发性:多个进程可以在单个处理器上并发执行,不会互相影响
线程的特点:线程是cpu调度的最小单位
线程是进程的组成部分,一个线程必须有一个父进程,一个进程可以拥有多个线程
多个线程共享父进程的全部资源,相互之间协作共同完成进程所需要完成的任务

5.InnoDB和MyISAM有什么区别?【考核知识点:数据库引擎】(10分)

事务安全:MyISAM不支持事务,InnoDB支持事务
外键:MyISAM不支持外键,InnoDB支持外键
锁机制:MyISAM是表锁,InnoDB是行锁
查询和添加速度:MyISAM批量插入比InnoDB速度快
  1. 事务的隔离级别有哪些?【考核知识点:事务】(10分)
脏读:读到了事务为成功提交的数据,这就是脏读
幻读:在事务中,第一次检查这个数据不在第二次检查由于别的事务提交了插入,
	  导致这条数据居然存在,两次读到了不一样的结果
可重复读:在整个事务操作过程中,你拿到的数据绝对不会变,随便重复读

7.Django Flask Tornado框架的对比?【考核知识点:Web框架比较】(10分)

Django:走的是大而全的方向,使用MTV框架,自带ORM、admin等组件,开发效率高,
		但是 对NoSQL支持不方便,ORM性能也不好。
Flask:是轻量级的框架,灵活可扩展性强,核心基于Werkzeug WSGi和Jinja2模板引擎。
		轻量,但做复杂业务时需要第三方模块,导致维护笔记困难。
Tornado:性能优越,采用异步非阻塞的设计方式,对WebSocket支持好,本身就可以做一个服务器,性能很高
		不过在使用其他第三方模块时,可供选择的很多,不利于封装一个功能模块。

8.Django请求的生命周期是什么?【考核知识点:request声明周期】(10分)

1. wsgi,请求封装后交给web框架
2. 请求中间件,对请求进行校验或在请求对象中添加其他相关数据,例如:csrf、request.session -
3. 路由匹配,根据浏览器发送的不同url去匹配不同的视图函数
4. 视图函数,在视图函数中进行业务逻辑的处理,
可能涉及到:orm、templates => 渲染 
5. 响应中间件,对响应的数据进行处理。
6. wsgi,将响应的内容发送给浏览器

9.你知道什么是JWT吗?【考核知识点:JWT】(10分)

JWT全称JSON WEB Token,是一种可以在HTTP协议中 对用户进行状态保持、身份验证的一种机制。
JWT类似Cookie,存储在客户端,避免了Session存储在服务端从而造成可能会出现的Session共享的问题,
还可以避免Cookie的跨域问题
JWT使用头部、载荷结合不可逆算法创建签证。
  1. 说说JWT的优点?【考核知识点:JWT】(10分)
由于JWT存储在前端,不需要后端数据库的支持,比Session可以更轻松的实现单点登录。
JWT的载荷部分可以存储常用的数据库信息,一定程度上可以减轻数据库的查询压力。

11.什么是深浅拷贝呢,您知道如何实现吗? 5页

浅拷贝: copy.copy()
只拷贝第一层,并没有拷贝深层次,修改第一层不改变,修改深层次的就互相影响了
深拷贝: copy.deepcopy()
即递归性质的浅拷贝,它会在内存中生成一套完全一样的内容
修改其中一个变量,不会影响另一个变量,也就是说,深拷贝就是将所有数据重新创建

12.您能列举出几个Python内置的高阶方法吗? 21页

Map将参数依次作用在参数可迭代对象中的每一个元素上
返回包含函数返回值的新的迭代器
reduce每相邻的两个元素依次执行 返回的结果是值
sorted排序
key为排序的条件方法
reverse对结果进行逆置
Zip将传入参数相同索引位置的值组合在一起

13.您会写线程安全的单例模式吗 77页

线程安全是在多线程的环境下,能够保证多个线程同时执行时程序依旧运行正确,
而且要保证对于共享的数据可以由多个线程存取,但是同一时刻只能有一个线程进行存取
多线程环境下解决资源竞争问题的办法是加锁来保证存取操作的唯一性

14.索引有哪些? 92页

从数据结构角度
B+树索引、Hash索引
从物理存储角度
聚集索引
非聚集索引
从逻辑角度
主键索引:主键索引是一种特殊的唯一索引,一般使用自增的ID作为主键
普通索引/单列索引:最基本的索引
多列索引/复合索引/组合索引:指多个字段上创建的组合索引,使用这样的索引时必须遵循最左原则
唯一索引:与普通索引类似,但允许有空值
联合唯一索引:将多个列合并组合为索引,这多个列的整体数据在数据库中的出现是唯一的
全文索引:支持在InnoDB和MyISAM存储引擎常用在字符串内的全文检索,建立倒排索引的机制进行全文检索

15.MYSQL 优化相关 常用的优化5条 105页

 	1.1.配置文件的优化
设置缓存表大小,设置cpu数量,调整读缓冲区大小,设置单个查询能使用的缓存大小,设置查询缓存大小
   	1.2.SQL语句的优化
避免全表扫描
一张表的索引数最好不要超过6个
尽量使用数字型字段
避免向客户端返回大量数据
   	1.3.表结构的优化
给字段选取最合适的数据类型
数据类型的宽度尽可能地小
字段要尽可能的设置为not null,特别是使用了索引的字段
	1.4.索引的优化
基本原则是全值匹配,联合索引一般都围绕最左前缀优化,从最左边字段开始使用,
不能跳过中间字段,索引列上尽量不要进行计算,is null,is not null,!=,<>,or会导致索引无效

16.简述Redis 的优点 149页

1), 读写性能优异:Redis读的速度是110000/s,写的速度是81000/s
2), 支持数据持久化:支持AOF和RDB两种持久化方式,有效保证数据不丢失
3), 支持事务,Redis的所有操作都是原子性,同时Redis还支持对几个操作合并后的原子性
4), 数据类型丰富:五大数据类型任你选择,string,list,set,zset,hash
5), 丰富特性: Redis 还支持发布者订阅者模式,键空间事件,过期键消息通知等功能

17.Redis常用数据结构 151页

字符串,列表,集合,有序集合,哈希

18.缓存雪崩是啥?咋办? 153页

缓存雪崩是指,缓存层出现了错误,不能正常工作,或者是大面积的Key过期,于是大量的请求都会达到存储层,
造成MySQL的访问量暴增,使得存储层也挂掉.
**解决方案:**
1)Redis高可用
这个思想的含义是,既然Redis有可能挂掉,那我可以多增设几台Redis,构建集群,
这样一台挂掉之后其他的还可以继续工作.
2)限流降级
这个解决方案的思想是,在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数,
比如对某个Key只允许一个线程查询数据和写缓存,其他线程等待,降低读写频率
3)数据预热
数据加热的含义就是在正式部署之前,先把可能的数据先预先访问一遍,
这样部分可能大量访问的数据就会加载到缓存中,
在即将发生大并发访问前手动触发加载缓存不同的Key,设置不同的过期时间,让缓存失效的时间点尽量均匀

19.什么是Redis 持久化 155页

Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,
Redis提供了两种持久化的方案,将内存中的数据持久化保存到磁盘中,避免数据丢失
RDB快照
它可以手动执行,也可以在redis.conf中配置,定期执行.
RDB持久化产生的RDB文件是一个经过压缩的二进制文件,这个文件被保存在硬盘中,
Redis可以通过这个文件还原数据库当时的状态
RDB基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于RDB持久化功能
AOF追加
AOF主要是记录服务器执行的所有变更操作命令,并在服务器启动时,重新执行这些命令来进行还原数据集的操作
AOF文件中命令全部以Reids协议的格式保存,新命令追加到文件末尾
AOF以追加的方式记录Redis操作日志的文件,可以最大程度的保证Redis数据安全

20.Redis 事务的概念是啥? 159页

Redis 事务就是一次性,顺序性,排他性的执行一个队列中的一系列命令
  1. Redis的RDB持久化机制你懂吗?
是指用数据集快照的方式实现半持久化模式,快照将记录Redis数据库的所有键值对,
并会在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,
达到数据恢复
优点:
	方便持久化:只有一个文件dump.rdb
	容灾性好:一个文件可以保存到安全的磁盘,只要磁盘不受损,数据就还在
	保证性能:快照使用单独子进程来进行持久化,主进程不会进行任何IO操作
	启动更快:大数据集时,比AOF的启动效率更高
缺点:
	数据可靠性差一些,因为RDB是间隔一段时间进行持久化,如果正好在持久化期间发生故障,
	会导致数据丢失,所以这种方式更适合数据更新频率不是那么多的情况
  1. Redis的AOF持久化机制您懂吗?
AOF持久化是指将所有Redis命令完全持久化存储为AOF文件的一种方式
AOF持久化功能的实现可以主要分为四步:
	命令追加:首先将所有的写命令追加到AOF所提供的缓存区中
	文件写入:将缓存区内的命令记录按照配置的策略进行文件写入
	重写压缩:当由于命令执行越来越多,文件累计越来越大时,对AOF文件进行重写压缩
	重启加载:当Redis重启时,加载AOF文件进行数据恢复
优点:
	AOF通过append模式写文件,即使中途服务器宕机,可以通过redis-check-aof工具解决数据一致性问题
缺点:
	AOF文件比RDB文件大,启动后的恢复速度慢
	AOF策略设置为always或者everysec时,后台处理进程会执行大量的I/O操作,影响性能
  1. Redis事务的三个阶段是啥?
开始事务MULTI、命令入队、执行事务EXEC
  1. Redis事务相关命令是啥?
Redis使用MULTI开启事务,开启后添入的任务不会执行,使用EXEC提交事务后任务执行
还可以使用DISCARD取消事务,放弃执行事务块内的所有命令
  1. Redis布隆过滤器是啥?
一定记住布隆过滤器可以判断一定不在Redis中的数据
布隆过滤器说某个值不存在时,那肯定就是不存在
在爬虫系统中,我们需要对url去重,已经爬取的页面不在爬取,当url高达几千万时
如果一个集合去装下这些url地址非常浪费空间,使用布隆过滤器可以大幅度降低去重存储消耗,是非常牛的
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熏悟坑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值