面试可能会问到的问题:
**Q:**Python里面垃圾回收是怎样的
A:
python采用的是引用计数机制为主,标记-清除和分代收集两种机制为辅的策略
引用计数–Python中一切即对象,对象有ob_refcnt属性。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,它的ob_refcnt就会减少。当引用计数为0时,该对象生命就结束了。
优点:简单,实时性。缺点:计数消耗资源;循环引用导致内存泄漏。
“标记-清除”–为了解决循环引用的问题。寻找root object集合(该集合中的对象是不能被回收的)。将现在的内存链表一分为二,一条链表中维护root object集合,成为root链表,而另外一条链表中维护剩下的对象,成为unreachable链表。现在的unreachable可能存在被root链表中的对象,直接或间接引用的对象,这些对象是不能被回收的,一旦在标记的过程中,发现这样的对象,就将其从unreachable链表中移到root链表中;当完成标记后,unreachable链表中剩下的所有对象就是名副其实的垃圾对象了,接下来的垃圾回收只需限制在unreachable链表中即可。
分代回收–将系统中的所有内存块根据其存活时间划分为不同的集合,每一个集合就成为一个“代”,垃圾收集的频率随着“代”的存活时间的增大而减小。也就是说,活得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。
**Q:**Python多线程介绍,多线程可以使用多核吗;python多线程与协程联系和区别;
python的yield(yield以及协程是python的热门问题)
A:
不可以。全局解释锁GIL。只能通过多进程使用多核。
含yeild关键字的函数–生成器
**Q:**Python中range与xrange的区别
A:
python2.7中:
range是函数,xrange是一种类型
range返回一个列表
xrange返回一个xrange对象,该对象是可迭代的,可以通过next方法获取下一个元素。
ptyhon3.0中:将xrange改名为range
**Q:**python的unicode字符串与str联系区别;python文件编码与字符串编码
A:
python 在内部使用两个字节来存储一个unicode。
字符串前加 u 定义的是unicode字符串
代码中有中文的时候,需要声明:# -*- coding: utf-8 -*-
读文件-decode()--unicode--encode()-写文件
Q: python反转list
A:
a[::-1]
**Q:**cgi的了解(这个真不知道是啥分类里的)
A:
CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端HTML页面的接口。