python 25-30面试题

25、边沿触发和水平触发


边缘触发是指每当状态变化时发生一个 io 事件,条件触发是只要满足条件就发生一个 io 事件


26、标记-清除机制 


基本思路是先按需分配,等到没有空闲内存的时候从寄存器和程序栈上的引用出发,遍历以对象为节点、以引用为边构成的图,把所有可以访问到的对象打上标记,然后清扫一遍内存空间,把所有没标记的对象释放。 
 
27、分代技术


分代回收的整体思想是:将系统中的所有内存块根据其存活时间划分为不同的集合,每个集合就成为一个“代”,垃圾收集频率随着“代”的存活时间的增大而减小,存活时间通常利用经过几次垃圾回收来度量。 
Python默认定义了三代对象集合,索引数越大,对象存活时间越长。 
举例:当某些内存块M经过了3次垃圾收集的清洗之后还存活时,我们就将内存块M 划到一个集合A中去,而新分配的内存都划分到集合B中去。当垃圾收集开始工作时,大多数情况都只对集合B进行垃圾回收,而对集合A进行垃圾回收要隔相当长一段时间后才进行,这就使得垃圾收集机制需要处理的内存少了,效率自然就提高了。在这个过程中,集合B中的某些内存块由于存活时间长而会被转移到集合A中,当然,集合A中实际上也存在一些垃圾,这些垃圾的回收会因为这种分代的机制而被延迟。 
 
28、找零问题 


def coinChange(values, money, coinsUsed): 
   #values    T[1:n]数组 
   #valuesCounts   钱币对应的种类数 
   #money  找出来的总钱数 
   #coinsUsed   对应于目前钱币总数i所使用的硬币数目    for cents in range(1, money+1): 
       minCoins = cents #从第一个开始到money的所有情况初始        for value in values: 
           if value <= cents: 
               temp = coinsUsed[cents-value] + 1                if temp < minCoins: 
                   minCoins = temp        coinsUsed[cents] = minCoins 
       print('面值为:{0} 的最小硬币数目为:
{1} '.format(cents, coinsUsed[cents]) ) if __name__ == '__main__': 
    values = [ 25, 21, 10, 5, 1]     money = 63 
    coinsUsed = {i:0 for i in range(money+1)}     coinChange(values, money, coinsUsed) 


29、Python 函数式编程 


python中函数式编程支持: 
filter 函数的功能相当于过滤器。调用一个布尔函数bool_func来迭代遍历每个seq中的元素;返回一个使bool_seq返回值为true的元素的序列。 
>>>a = [1,2,3,4,5,6,7] 
>>>b = filter(lambda x: x > 5, a) 
>>>print b 
>>>[6,7] 
map函数是对一个序列的每个项依次执行函数,下面是对一个序列每个项都乘以
2: 
>>> a = map(lambda x:x*2,[1,2,3]) 
>>> list(a) 
[2, 4, 6] 
reduce函数是对一个序列的每个项迭代调用函数,下面是求3的阶乘: 
>>> reduce(lambda x,y:x*y,range(1,4)) 

 
30、Python 里的拷贝 


引用和copy(),deepcopy()的区别 
import copy 
a = [1, 2, 3, 4, ['a', 'b']]  #原始对象 b = a  #赋值,传对象的引用 c = copy.copy(a)  #对象拷贝,浅拷贝 d = copy.deepcopy(a)  #对象拷贝,深拷贝 a.append(5)  #修改对象a 
a[4].append('c')  #修改对象a中的['a', 'b']数组对象 
print 'a = ', a print 'b = ', b print 'c = ', c print 'd = ', d 
输出结果: 
a =  [1, 2, 3, 4, ['a', 'b', 'c'], 5] b =  [1, 2, 3, 4, ['a', 'b', 'c'], 5] c =  [1, 2, 3, 4, ['a', 'b', 'c']] d =  [1, 2, 3, 4, ['a', 'b']]  

猜你喜欢

转载自blog.csdn.net/g_xiaojiayu/article/details/80085985