并发时退出一个线程
解决数据库延迟
元组修改挖坑
简述staticmethod 和 classmethod 的区别:
staticmethod:静态方法,类似于函数,可由类对象和实例对象来调用。
classmethod : 绑定给类对象的方法,供类对象去调用
filter、map、reduce 的作用:
filter主要作用是过滤掉序列中不符合函数条件的元素,当序列中要删、减元素时,可以使用filter函数,fliter(function,sequence)如果function是None,则返回sequence中为true的元素,如list(filter(None, [0,0,1,2,3,0,0])) =》[1,2,3] 。 filter(lambda x:x%3,allNum)
map主要作用是求一个序列或者多个序列进行函数映射之后的值,map(function,iterable1,iterable2),map(lambda x,y:(x*y)+2,x,y)
reduce是对一个序列进行压缩运算,得到一个值,reduce(function,iterable),function中必须传入两个参数,iterable可以是列表或者元组 reduce(lambda x,y:(x+y),x)
Python中函数参数有哪些类型:
位置参数:从左到右定义的顺序定义的参数
关键字参数:按照key=value定义的参数
默认参数:形参在定义时就为其赋值
可变长参数:*args和*kwargs
命名关键字参数:*后定义的参数,必须被传值,且要按照关键字实参的形式传递
With:
必须要实现两个特殊方法__enter__()和__exit__()
Ascii、Unicode、utf-8、gbk区别:
字典与json的区别:
json:是一种数据格式,json的key只能是字符串,key可以是有序、重复,字符串强制用双引号
dict是一种数据类型,dict的key可以是任何可hash的对象,例如:字符串、数字、元组等。key不可重复;dict的字符串可以用单引号、双引号
python中__new__和__init__区别:
__new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例对象,是个静态方法。
__init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值,通常用在初始化一个类实例的时候。是一个实例方法。
Python中的私有含义:
一般Python约定加了下划线 _ 的属性和方法为私有方法或属性,以提示该属性和方法不应在外部调用,"--"是为了不让子类重写该属性方法.通过类的实例化时自动转换,
1、_xxx 不能用于'from module import *' 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。
2、__xxx 双下划线的表示的是私有类型的变量。只能是允许这个类本身进行访问了。连子类也不可以
3、__xxx___ 定义的是特列方法。像__init__之类的
可变类型和不可变类型:
可变类型:list,dist,set,
不可变类型:tuple,str,number
表达式3<5>2的值:
true,3<5>2 相当于3<5 and 5>2
表达式3|5的值:
7。
解释:“|”是按位或运算符:只要对应的二个二进制位有一个为1时,结果位就为1。 3与5的二进制分别为0011,0101。所以3|5的二进制值为0111,转换为十进制就是7.(“&”按位与)
表达式3<<2的值:
12。"<<"左移,移动一位乘2,移动两位乘4,">>"右移,移动一位除2,移动两位除4
is和==的区别:
is比较的是id,==比较的是值
Python2 和 Python3区别:
编码格式:Python2 默认ASCII,Python3默认utf-8
print:在Python2 是关键字,Python3中是一个函数
返回值类型:Python2 是返回list集合,效率低,Python3返回迭代器
除法:python2向下取整,python3返回浮点数
字符串序列,Python2 Unicode,Python3 是str,
字节序列,Python2是 str,Python3 是byte,
数值:python2中int是整型,long是长整型,python3中只有int
Python2 中没有协程的概念
Py2 项目如何迁移成 py3:
手动修改不兼容的部分,只要包括print和异常处理
python的垃圾回收机制:
一、引用计数:
引用计数加一的情况:
对象被创建 a=14
对象被引用 b=a
对象被作为参数,传到函数中 func(a)
对象作为一个元素,存储在容器中 List={a,”a”,”b”,2}
引用计数减一的情况:
a.当该对象的别名被显式销毁时 del a
b.当该对象的引别名被赋予新的对象, a=26
c.一个对象离开它的作用域,例如 func函数执行完毕时,函数里面的局部变量的引用计数器就会减一(但是全局变量不会)
d.将该元素从容器中删除时,或者容器被销毁时。
优点:效率高,易实现
缺点:消耗资源,无法解决循环引用的问题
二、标记-清除:
利用有向图,第一阶段,将可达节点标记为活动对象,第二阶段,清除未被标记的对象
三、分代回收:
将内存分为了3“代”,分别为年轻代(第0代)、中年代(第1代)、老年代(第2代),他们对应的是3个链表,年轻代链表的总数达到上限时,Python垃圾收集机制就会被触发
.pyc文件
字节码文件,由python编译生成,经过python解释器最终会生成机器码运行,可以提高代码运行速度和避免暴露源码。
获取Python解释器版本的方法:
import sys
print(sys.version)
请至少列举 5 个 PEP8 规范(越多越好):
- 使用space(空格)来表示缩进,而不要用tab(制表符)
- 和语法相关的每一层缩进都要用4个空格来表示
- 每行的字符数不应超过79
- 对于占据多行的长表达式来说,除了首行之外的其余各行都应该在通常的缩进级别之上再加上4个空格
- 文件中函数与类之间应该用两个空行隔开
- 在同一个类中,各方法之间应该用一个空行隔开
- 函数、变量及属性应该用小写字母来拼写,各单词之间以下划线相连,例如:`lowercase_underscore`
- 类中的实例方法(instance method),应该把首个参数命名为self,以表示该对象自身
- 类方法(class method)的首个参数,应该命名为cls,以表示该类自身
- 不要通过检测长度的方法(如if len(somelist) == 0)来判断somelist是否为[]或“”等空值,而是应该采用if not somelist,它会假定:空值会自动评估为False
and和or:
优先级:()> not > and > or
and:从左到右计算表达式,若所有的都为真,则返回最后一个值,若存在假,返回第一个假值
or:从左到右计算表达式,遇到真值就返回那个真值,没有遇到真值,就返回最后一个假值.
三元运算:
条件成立 if 条件 else 条件不成立, a if a > b else b
字典取key,value:
遍历key值:for key in a.keys():
遍历value值:for value in a.values():
遍历字典项: for kv in a.items():
遍历字典健值: for key,value in a.items():
os模块:
os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口,多用于文件处理
sys模块:
sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。
json模块:
序列化:把数据从内存读入硬盘(以json格式),json.dump()
反序列化:把数据从硬盘读入内存(以json格式),json.load()
跨平台性质,它可以序列化dict/list/str/int/float/bool/None数据类型
pickle模块:
序列化:把数据从内存读入硬盘(以pickle格式,二进制形式,即'wb'模式),pickle.dump()
反序列化:把数据从硬盘读入内存(以pickle格式,以二进制形式,即'wb'模式),pickle.load()
无法跨平台(它只能用于Python),但是可以序列化Python的任意数据类型,包括对象
hashlib模块:
提供加密算法,主要提供 SHA1、SHA224、SHA256、SHA384、SHA512、MD5 算法
hmac 模块:
为了防止密码被撞库,只接受二进制数据的加密,h1 = hmac.new(b'hash')
numpy数组:
合并两个numpy数组的行,numpy数组应该有相同的行,使用hstack()方法合并
合并两个numpy数组的列,numpy数组应该有相同的列,使用vstack()方法合并
pandas模块:
pandas基于Numpy,可以看成是处理文本或者表格数据,两个主要的数据结构Series和DataFrame。
matplotlib模块:
绘图库,它可以创建常用的统计图,包括条形图、箱型图、折线图、散点图、饼图和直方图
collections模块:
namedtuple:是一个函数,它用来创建一个自定义的tuple对象,Circle = namedtuple('Circle', ['x','y','r'])
deque:除了实现list的append()和pop()外,还支持appendleft()和popleft()
defaultdict:如果希望key不存在时,返回一个默认值,就可以用defaultdict
OrderedDict:OrderedDict的Key会按照插入的顺序排列,不是Key本身排序
Counter:统计字符出现的个数
并发和并行:
并发是指两个或多个事件在同一时间间隔内发生
并行是指两个或者多个事件在同一时刻发生;
进程、线程、和协程的理解:
进程:资源调度和分配的基本单位,一段可以独立执行的程序,一个进程可包含多个线程
线程:是进程的实体,cpu可调度的基本单位,依赖于进程
协程:单核交替切换执行多个任务, sleep的时候,使用await让出控制权
在Python中有多种方式可以实现协程,例如:
greenlet,是一个第三方模块,用于实现协程代码(Gevent协程就是基于greenlet实现)
yield,生成器,借助生成器的特点也可以实现协程代码。
asyncio,在Python3.4中引入的模块用于编写协程代码。
async & await,在Python3.5中引入的两个关键字,结合asyncio模块可以更方便的编写协程代码。
目前主流使用是Python官方推荐的0模块和async&await关键字的方式
GIL锁:
全局解释器锁,目的是为了一个进程同一时刻只执行一个线程,防止死锁出现
Lock和Rlock区别:
Rlock允许多次加锁,内部包含lock和counter计数器,同一个线程中要等所有的acquire都release后,其他线程才能操作共享资源,解决了递归锁带来的问题。
I/O密集型程序和计算型密集型程序:
I/O密集型程序:文件读取、磁盘读取、网络通信,适合用多线程
计算(CPU)型密集型程序:逻辑运算,适合多进程
多核下,想做并行提升效率,比较通用的方法是使用多进程,能够有效提高执行效率
Explain:
Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句
装饰器:
在不改变源代码和调用方式的基础之上给函数增加新的功能
普通函数添加装饰器后,函数名称会变成装饰器的名称,要解决这一问题,需要给装饰器添加functools.wraps,这样即使被装饰器装饰过的函数也可以保留自己的函数名和docstring
迭代器:
可直接作用于for循环的数据类型:一类是集合数据类型,list,tuple,dict,set,str等;
一类是generator,包括生成器和带yield的generator function
迭代对象 iterable:
可以用for循环的对象
迭代器对象:
obj有.__iter__和.__next__方法,可以用next()函数调用并不断返回下一个值的对象
生成器:
只要函数里有yield关键字,那么函数名()得到的结果就是生成器。
切片和数组:
切片操作符是序列名后跟一个方括号,方括号中有3个可选的数字,并用冒号分割,数是可选的,而冒号是必须的。切片操作符中的第一个数表示切片开始的位置,第二个数表示切片到哪里结束,第三个数表示切片步长。前闭后开 [::-1]倒序
go通道
http请求流程
数据库查询慢优化
es的使用原理
es分词
celery的原理
git操作
单例模式
装饰器应用场景
SQL优化
djangoORM操作。
ORM和SQL的比较
资产存入数据库
常用模块
dockerfile中的命令
链表的数据结构
二叉树
单例模式
工厂模式
普通索引和主键索引的区别
udp和tcp的区别
除了paramiko,还有那些可以连接服务器。
redis的常用命令
redid和RabitMql比较
通道的作用
如何加整站缓存
es如何做全文搜索
es搜索的两种方式
SQL考察
迭代器生成器,应用场景
python通道作用
redis集群考察
redis雪崩应用场景
数据库SQL优化
查询数据泄露
异步任务,查询出现数据延迟。
ES分词操作
SQL考察
redis的缓存的更新策略
session和token的作用
tcp和udp的区别
udp数据丢失怎么办
https的传输流程
字典强制转换成json问题
如何生成一个迭代器
迭代器与生成器的区别
字符串拼接时,+和join的区别
resful规范
resful中的方法
深浅拷贝
浅拷贝时,删除一个列表元素
查看进程id的linux命令
docker部署的文件格式
celery延迟任务的考察
Python中如何实现多线程
统计列表字符频次
sum+隐函数考察
<n的质数个数
列表嵌套字典的格式化对齐输出
对于查询慢的数据库优化
事务的隔离机制
数据库索引的种类及区别
数据库的锁机制
排他锁,共享群
数据库分库分表
前后端的一个交互过程
char 和 varchar的区别
docker镜像操作,copy和add
数据库存储引擎及区别
索引种类
数据库开启一个事务
优化应用场景
数据库中查看数据异常process list
回滚操作,数据超出容量。
装饰器中内部函数中的func fool查看被扩展函数的方法。
迭代器,生成器的实现。
>和>>的区别
集合中能放列表?
左链接
Mysql中默认的事务的隔离机制
Linux 文件拷贝
多线程的使用
二叉树的深度
namedtuple
条件成立 if 条件 else 条件不成立
一、引用计数
obj有.__iter__和.__next__方法的叫做迭代器对象