一:谈下python的GIL
python的GIL是python的全局解释器锁,同一个进程中如果有多个线程运行,一个线程运行的时候会霸占解释器,上了个锁即GIL,进程内其他线程无法运行。如果遇到耗时操作,GIL会打开,其他线程先运行,所以多线程仍然是有先后顺序的。
二:fun(*args,**kwargs)中的*args,**kwargs什么意思?
用于函数的接收参数。可以接收补丁数量的参数。
*args是用来接收一个非键值对的可变数量的参数列表
**kwargs允许接收不定长度的键值对。
三:列出python中可变数据类型和不可变数据类型,并简述原理
不可变:int,str,tuple不允许变量的值发生变化,如果改变了值,相当于创建一个新的对象,相同值的对象,内存中的地址是一样的。
可变对象:list,dict允许变量的值发生变化,例如append操作后,改变的是原对象的值。如果是两个相同值的对象,内存中的地址也是不一样的。
四:正则表达式匹配中,(.*)和(.*?)匹配区别?
(.*)是贪婪匹配,尽可能多的匹配
(.*?)是尽可能少的匹配结果
五:举例说明异常模块中tryexceptelsefinally的相关意义
else没有捕捉到异常,执行else里面的,finally不管有没有异常都执行finally里面的参见withopen里面不论是否成功打开文件,都会执行close()。
六:提高python运行效率的方法
1、使用生成器,节约内存
2、优化for循环
3、核心模块用CpythonPyPy等,提高效率
4、多进程,多线程、协程
5、判断可能性大的放到前面
七:简述mysql和redis区别
redis:内存级非关系数据库,速度快,作网页缓存;
mysql:关系型数据库检索有一定io操作,访问速度慢;
八:列出常见MYSQL数据存储引擎
InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(