1.如何提高python的运行效率?
使用生成器;关键代码使用外部功能包,针对循环的优化-尽量避免在循环中访问变量的属性。
2.常见的linux命令?
cd,pwd,touch,ls,mkdir,rm,help,sudo,ssh,date,clear
3.python中yield的用法?
yield简单来说是一个生成器,这样函数记住上次返回时在函数中的位置,对于生成器第二次或n次调用跳转至该函数。
4.python中如何进行内存管理的?
一.垃圾回收
二.引用技术:当某标签引用技术为0的时候,就该对象就会被收回
三.内存池机制
5.描述数组,链表,队列,堆栈的区别?
数组和链表是存储方式的概念,数组在连续的空间中存储数据,链表在非连续的空间中存储数据;
队列和堆栈是描述数据存取方法的概念,队列是先进先出,而堆栈是后进后出,队列和堆栈可以用链表来实现,也可以用数组来实现。
6.如何一行代码实现0-100和?
sum(range(0,101))
7.列出5个python标准库?
os:提供不少于操作系统相关联的函数
sys:通常用于命令行参数
datetime:日期时间
re:正则匹配
math:数学运算
8.字典是如何删除键和合并两个字典?
dict1 = {“name”:“banzhang”,"age":18}
del.dict1["name"]
dict2={"sex":"男"}
dict1.update(dict2)
9.谈一下python中的GIL?
这里的GIL锁主要是针对计算密集型任务。
GIL是python中的全局解释器锁,是不可控的,同一个进程中,假如有多个线程在运行,那么其中一个线程在运行的时候就会霸占GIL锁,就使得其他线程无法运行,等该线程运行结束以后,其他线程才能运行。如果线程中遇到耗时操作(I/O密集型任务),则解释器锁会解开,使得其他线程运行,所以说在多线程中,线程的运行仍是有先后顺序的,并不是同时进行.
什么时候释放GIL锁?
1.时间片耗尽(cpu时间)
2..任务遇到I/O等待时
3.执行任务结束
4.执行到字节码阈值时(,欧仁100条)
如何改善GIL锁对程序的影响?
1.升级python解释器(变化较小)
2.更换python解释器(因为python解释器的库比较全面,如果更换就没有这么强大的库使用,所以也没有什么实际作用)
3.使用进程+协程的方法(因为子进程会复制一份主进程的资源,包括GIL,所以每个进程都会有一个GIL,而利用协程是因为只需要一个线程,一个线程就不会产生资源竞争的问题)
9.谈一下GIL锁和互斥锁的区别?
GIL是全局解释器锁,是解释器层面的,不可控的。
互斥锁是代码层面的锁,是可控的。
不管互斥锁和GIL锁都是解决共享变量的资源竞争的问题。
10.python2和python3的区别?
1.语法区别
1.1 python2输出 print “hello word”,python3输出 print("hello word")
1.2 python2和python3的range(100)的区别,python2返回列表,python3返回一个迭代器节约内存。
2.python2中为正常显示中文,引入coding声明,python3中不需要。
11.什么是装饰器?应用场景?
装饰器的特点是返回值和参数都是函数
装饰器的目的就是已封装函数进行操作,为其加上新的功能或一系列运算。
在flask中获取用户的登录使用的就是装饰器
在django中middkeware中间件 其实就是高级的装饰器用法。
12.生成器、迭代器和可迭代对象区别和应用?
能使用for遍历的就叫可迭代对象,能使用next方法的就是迭代器,生成器是特殊的迭代器。
13.Python中数组有哪些类型?字典可以是有序的吗?
字典其实是个无序的序列,但是我们可以按照字典的键或值进行排序
14.python⾃带的处理字符串的⽅法,内置函数。⽐如怎么处理换⾏符。
Python中自带了换行符,如果想要处理:
比如:
print(“hello word”,end=””)
print(“hello word”)
显示效果:hello wordhello word
15.Python中的可变类型与不可变类型
什么是可变、不可变?元组⾥添加字典,会改变id吗?
可变类型:会在原来的内存地址上修改元素 比如: 列表,字典
不可变类型:不会在原来的内存地址上修改元素,而是指向了新的内存引用 比如:整型,字符串,元组
元组中添加字典,会改变id。
因为元组是不可变类型,如果修改了元组的元素,就相当于重新创建了一个元组。所以元组的id会改变
16.break和continue的区别(分别说说他们的作⽤和使⽤)
break和continue都是用于while嵌套循环中
Continue是结束内层的while循环,continue语句并没有使整个循环终止
Break是结束整个while循环
17.对不定⻓参数的理解?
一般分为两种:
一种是*args 位置参数 在定义函数时,在形参前面加一个*,代表可以接收任意多个实参,用元组类型保存所有数据。一般写成def function(*args)
一种是**kwargs 命名参数 代表可以接收任意多个的命名参数,用字典类型保存。
18.对缺省参数的理解?
如果调用函数的时候,传递了对应位置的实参,那就使用这个传递的值,如果没有传递对应的值,那就使用缺省参数的值。
19.什么是lambda函数?它有什么好处?写⼀个匿名函数求两个数的和。
匿名函数,
Func = Lambda a,b : a + b
Func(10,20)
20.read、readline和readlines的区别
Read 是读取整个文件
Read(5) 读取文件中几个字节
Readline是读取一行
Readlines 按行读取所有内容,返回的是一个列表,每一个元素就是文件中每一行的内容
21.上下⽂管理器了解吗
上下文管理器 with
有两个方法 一个是enter 一个是exit
Enter 主要是负责上下文的准备工作,一般是 打开文件,准备环境
Exit 主要是负责善后工作 比如关闭文件,一些回收机制