Python 进阶(共 47 题)
1、Python 中类方法、类实例方法、静态方法有何区别?
2、Python 的内存管理机制及调优手段?
内存管理机制有:引用计数、垃圾回收、内存池。
调优的话只能自己手动垃圾回收,或者调高垃圾回收的阈值3、内存泄露是什么?如何避免?
内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存。
内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控 制,从而造成了内存的浪费。
有函数的对象间的循环引用是导致内存泄露的主凶。
不使用一个对象时使用: del object 来 删除一个对象的引用计数就可以有效防止内存泄露问题。
通过Python扩展模块gc 来查看不能回收的对象的详细信息。
可以通过sys.getrefcount(obj) 来获取对象的引用计数,并根据返回值是否为0来判断是否内存泄露
4、Python 函数调用的时候参数的传递方式是值传递还是引用传递?
5、对缺省参数的理解? 缺省参数 定义函数时,可以给某个参数指定一个默认值,具有默认值的参数就叫做缺省参数
调用函数时,如果没有传入缺省参数的值,则在函数内部使用定义函数时指定的默认参数值。
函数的缺省参数,将常见的值设置为参数的缺省值,从而简化函数的调用6、为什么函数名字可以当做参数用?
Python中一切皆对象,函数名是函数在内存中的空间,也是一个对象
对象的一般特征:
运行时创建
将变量或者元素赋值在一个数据结构中
可以作为一个参数传递给一个函数
可以作为函数的结果返回7、Python 中 pass 语句的作用是什么?
在编写代码时只写框架思路,具体实现还未编写就可以用 pass 进行占位,使程序不报错,不会进行任何操作。8、面向对象中super的作用?
super() 函数是用于调用父类(超类)的一个方法。
super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。9、是否使用过functools中的函数?其作用是什么?
https://www.optbbs.com/forum.php?mod=viewthread&tid=1305300710、json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?
在序列化时,中文汉字总是被转换为unicode码,在dumps函数中添加参数ensure_ascii=False即可解决。11、什么是断言?应用场景?
12、有用过with statement吗?它的好处是什么?
13、简述 Python 在异常处理中,else 和 finally 的作用分别是什么? else 如果一个Try -
exception中,没有发生异常,即exception没有执行,那么将会执行else语句的内 反之,如果触发了Try -
exception(异常在exception中被定义),那么将会执行exception中的内容,而不执行else中的内容 finally
如果try中的异常没有在exception中被指出,那么系统将会抛出Traceback(默认错误代码),并且终止程序,接下来的所有代码都不会被执行,但如果有Finally关键字,则会在程序抛出Traceback之前(程序最后一口气的时候),执行finally中的语句。这个方法在某些必须要结束的操作中颇为有用,如释放文件句柄,或释放内存空间等。14、map 函数和 reduce 函数?
15、递归函数停止的条件? 递归函数停止的条件一般定义在递归函数内部,在递归调用前要做一个条件判断,根据判断的结果选择是继续调用自身,还是
return 返回,停止递归。递归函数停止的条件: 判断递归的次数是否达到某一限定值 判断运算的结果是否达到某个范围等,根据设计的目的来选择
16、回调函数,如何通信的?
17、 setattr_,_getattr,__delattr函数使用详解?
18、请描述抽象类和接口类的区别和联系?
19、请描述方法重载与方法重写?
20、什么是 lambda 函数? 有什么好处?
21、单例模式的应用场景有哪些?
22、什么是闭包?
https://zhuanlan.zhihu.com/p/5996866523、什么是装饰器?
24、函数装饰器有什么作用?
25、生成器、迭代器的区别?
26、多线程交互,访问数据,如果访问到了就不访问了,怎么避免重读?
创建一个已访问数据列表,用于存储已经访问过的数据,并加上互斥锁,在多线程访问数据的时候
先查看数据是否已经在已访问的列表中,若已存在就直接跳过。27、Python 中 yield 的用法?
28、谈下 python 的 GIL? GIL
是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大
https://zhuanlan.zhihu.com/p/19499082129、Python 中的可变对象和不可变对象?
30、一句话解释什么样的语言能够用装饰器?
函数可以作为参数传递的语言,可以使用装饰器31、Python 中 is 和==的区别?
32、谈谈你对面向对象的理解?
33、Python 里 match 与 search 的区别?
match()和search()两者都是测试正则表达式与字符串是否匹配。不同的是,match()
如果在字符串的开头有0个或更多个字符,符合正则表达式模式,返回相关匹配的实例对象,如果字符串不符合正则表达式模式则返回None;
而search()则不同,扫描整个字符串,如果产生了一个匹配正则模式就寻找到这个位置,返回相关匹配的对象。如果没有位置能够匹配这个模式则返回None。34、用 Python 匹配 HTML g tag 的时候,<.> 和 <.?> 有什么区别?
(.)是贪婪匹配,会把满足正则的尽可能多的往后匹配
(.?)是非贪婪匹配,会把满足正则的尽可能少匹配35、Python 中的进程与线程的使用场景?
多进程适合在CPU密集操作(cpu操作指令比较多,如位多的的浮点运算)。
多线程适合在IO密性型操作(读写数据操作比多的的,比如爬虫)36、解释一下并行(parallel)和并发(concurrency)的区别?
37、如果一个程序需要进行大量的 IO 操作,应当使用并行还是并发?
并行38、如果程序需要进行大量的逻辑运算操作,应当使用并行还是并发?
并发
39、在 Python 中可以实现并发的库有哪些?
40、Python 如何处理上传文件?
41、请列举你使用过的 Python 代码检测工具? Pylint
42、python 程序中文输出问题怎么解决? 用encode和decode
43、Python 如何 copy 一个文件?
shutil copy() 方法
os.open(“cmd”)
44、如何用Python删除一个文件?
45、如何用 Python 来发送邮件?
46、当退出 Python 时,是否释放全部内存?
进程退出后操作系统会回收进程所占用的全部内存。这和GC没有关系。Python都退出了,GC当然一起退出了,退出以后由于循环引用、malloc申请的内存导致GC没清理干净的,会由操作系统统一回收,
确保资源不会泄漏47、什么是猴子补丁?