python后端基础语法面试题

1.如何提升python的运行效率?python

使用生成器;关键代码使用外部功能包,针对循环的优化-尽可能避免在循环中访问变量的属性。linux

 

2.常见的linux命令?django

cd,pwd,touch,ls,mkdir,rm,help,sudo,ssh,date,clearflask

 

3.python中yield的用法?数组

yield简单来讲是一个生成器,这样函数记住上次返回时在函数中的位置,对于生成器第二次或n次调用跳转至该函数。多线程

 

4.python中如何进行内存管理的?ssh

一.垃圾回收
二.引用技术:当某标签引用技术为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.breakcontinue的区别(分别说说他们的做⽤和使⽤)

 

breakcontinue都是用于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.readreadlinereadlines的区别?大数据文件怎么读取?

 

Read 是读取整个文件

 

Read(5) 读取文件中几个字节

 

Readline是读取一行

 

Readlines 按行读取全部内容,返回的是一个列表,每个元素就是文件中每一行的内容

1.利用生成器generator

2.迭代器进行迭代遍历:for line in file

 

 

 

21.上下⽂管理器了解吗

 

上下文管理器 with

 

有两个方法 一个是enter 一个是exit

 

Enter 主要是负责上下文的准备工做,通常是 打开文件,准备环境

 

Exit 主要是负责善后工做 好比关闭文件,一些回收机制

 

 

22.什么单例模式,其应⽤场景都有哪些?

 

单例模式:不管建立多少个实例对象,始终指向的是第一个实例对象

 

23.Python中有⽇志吗?怎么使⽤?

 

 

24.is 和 “==”的区别

Is== 主要针对于可变类型的判断 由于不可变类型的id都是一致的。因此is==都是True

A=[10]

B=[10]

Print(A == B)  True

Pritn(A is B) Flase

区别:

由于AB的值相等,因此==的结果就是True,可是不判断ABid地址

is 不仅是会判断AB的值 还会判断A Bid是否一致 因此结果就是Flase

相关文章
相关标签/搜索