前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
在本文总结了大厂常见的Python面试问题附带参考答案,希望能够帮助你在2020年求职面试中脱颖而出,找到一份高薪工作。
1、python中is和==的区别
①Python中对象包含的三个基本要素,分别是:id(身份标识) 、type(数据类型)和value(值)。
②‘==’比较的是value值
③‘is’比较的是id
2、简述read、readline、readlines的区别
①read读取整个文件
②readline读取下一行数据
③readlines读取整个文件到一个迭代器以供我们遍历(读取 到一个list中,以供使用,比较方便)
3、举例说明创建字典的至少两种方法
# 1 dict1 = {key1:v1,key2:v2} # 2 dict2 = {} dict2[key1] = v1 dict2[key2] = v2 # 3 dict3 = dict(key1=v1,key2=v2)
4、*args,**kwargs的作用是什么?如何使用?
*args和**kwargs通常使用在函数定义里,*args允许函数传入不定量个数的非关键字参数,**kwargs允许函数传入不定量个数的关键字参数
5、python中match()和search()的区别?
match()函数只检测RE是不是在string的开始位置匹配,
search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none
6、一个函数接收文件夹的名称作为参数,返回该文件中所有文件的全路径,请补全缺失的代码。
# 方法1 list1 = [1,1,2,3,3,4] set1 = set(list1) list1 = list(set1) # 方法2 list2 = [] for i in list1: if i not in list2: list2.append(i)
7、阅读下面的代码,写出A0,A1至An的最终值
def greetins(word='hi there'): return word.lower() from functools import wraps def start_word_upper(func): @wraps(func) def inner(*args,**kwargs): word = func(*args,**kwargs) return word.capitalize() return inner # 装饰器可以在: # 1.函数调用之前对函数参数进行操作,直接返回被装饰函数的返回值 # 2.对返回值进行‘装饰’并返回(本题案例)
8、请写一段代码实现Python中list去重。
def greetins(word='hi there'): return word.lower() from functools import wraps def start_word_upper(func): @wraps(func) def inner(*args,**kwargs): word = func(*args,**kwargs) return word.capitalize() return inner # 装饰器可以在: # 1.函数调用之前对函数参数进行操作,直接返回被装饰函数的返回值 # 2.对返回值进行‘装饰’并返回(本题案例)
9、创建一个装饰器将下面函数输入的字符串首字母大写。
def greetins(word='hi there'): return word.lower() from functools import wraps def start_word_upper(func): @wraps(func) def inner(*args,**kwargs): word = func(*args,**kwargs) return word.capitalize() return inner # 装饰器可以在: # 1.函数调用之前对函数参数进行操作,直接返回被装饰函数的返回值 # 2.对返回值进行‘装饰’并返回(本题案例)
10、描述yield作用。
保存当前运行状态(断点),然后暂停执行,即将函数挂起
将yeild关键字后面表达式的值作为返回值返回,此时可以理解为起到了return的作用,当使用next()、send()函数让函数从断点处继续执行,即唤醒函数。
11、装饰器。
①装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。
②功能:1.引入日志;2.函数执行时间统计;3.执行函数前预备处理;4.执行函数后清理功能;5.权限校验;6.缓存
12、你对多线程和多进程的理解。
①进程是系统进行资源分配和调度的一个独立单位,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源;
②一个程序至少有一个进程,一个进程至少有一个线程;
③线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高;
④进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了
程序的运行效率 ;
⑤线线程不能够独立执行,必须依存在进程中;
⑥优缺点:线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。
13、线程中start方法和run方法的区别?
①若调用start,则先执行主进程,后执行子进程;
②若调用run,相当于正常的函数调用,将按照程序的顺序执行
14、linux命令 grep awk sed是怎么用的?
grep:Global Regular Expression Print
15、python是怎么进行内存管理的?
①引用计数:python内部使用引用计数,来保持追踪内存中的对象,Python内部记录了对象有多少个引用,即引用计数,当对象被创建时就创建了一个引用计数,当对象不再需要时,这个对象的引用计数为0时,它被垃圾回收。
引用计数加1的情况:
- 对象被创建:x=4
- 另外的别人被创建:y=x
- 被作为参数传递给函数:foo(x)
- 作为容器对象的一个元素:a=[1,x,'33']
引用计数减少情况
- 一个本地引用离开了它的作用域。比如上面的foo(x)函数结束时,x指向的对象引用减1。
- 对象的别名被显式的销毁:del x ;或者del y
- 对象的一个别名被赋值给其他对象:x=789
- 对象从一个窗口对象中移除:myList.remove(x)
- 窗口对象本身被销毁:del myList,或者窗口对象本身离开了作用域
②垃圾回收
- 当内存中有不再使用的部分时,垃圾收集器就会把它们清理掉。它会去检查那些引用计数为0的对象,然后清除其在内存的空间。当然除了引用计数为0的会被清除,还有一种情况也会被垃圾收集器清掉:当两个对象相互引用时,他们本身其他的引用已经为0了。
- 垃圾回收机制还有一个循环垃圾回收器, 确保释放循环引用对象(a引用b, b引用a, 导致其引用计数永远不为0)。
③内存池机制:在Python中,许多时候申请的内存都是小块的内存,这些小块内存在申请后,很快又会被释放,由于这些内存的申请并不是为了创建对象,所以并没有对象一级的内存池机制。这就意味着Python在运行期间会大量地执行malloc和free的操作,频繁地在用户态和核心态之间进行切换,这将严重影响Python的执行效率。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。
Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。
Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的 malloc。另外Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。
16、什么是lambda函数?他有什么好处?
lambda函数是匿名函数;使用lambda函数能够创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤;
例:
f = lambda x,y:x+y # 求两个函数的和。x,y是参数,x+y是函数返回值
17、python中tuple和list的转换
# tuple ---> list tuple1 = (1,2,3) list1 = list(tuple1) # list ---> tuple list2 = [1,2,3] tuple2 = tuple(list2)
18、python中如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别)
答:赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。
浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变){1,完全切片方法;2,工厂函数,如list();3,copy模块的copy()函数}
深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变){copy模块的deep.deepcopy()函数}
19、介绍一下except的用法和作用?
try: pass except Exception as e: print(e) finally: pass
捕获try except中间代码发生的异常,如果发生异常执行except的代码,不管是否发生异常都执行finally中的代码
except可以有0个或多个,如果有多个从上到下依次根据异常类型匹配,匹配某个Exception这执行对应的except中代码
20、用python匹配HTML tag的时候,<.*>和<.*?>有什么区别?
<.*>匹配结果是:HTML tag;
<.*?>匹配到的结果是:""。?表示非贪婪,搜到符合的结果既返回
不管你是零基础还是有基础都可以获取到自己相对应的学习礼包!包括Python软件工具和2020最新入门到实战教程。加群695185429即可免费获取,资料在群文件里放着哟~