Part A
1 - 这两个参数是什么意思:*args,**kwargs?我们为什么要使?它们?2 - Python装饰器?
3 - 简要描述Python的垃圾回收机制(garbage collection)4 - Python多线程(multi-threading)。这是个好主意吗?5 - 说明os,sys模块不同,并列举常?的模块?法?6 - 什么是lambda表达式?它有什么好处?7 - Python中pass语句的作?是什么?8 - Python是如何进?类型转换的?9 - Python??如何拷??个对象?10 - __new__和__init__的区别
11 - Python中单下划线和双下划线分别是什么?12 - Python ?省/反射?Part B
13 - 什么是Python?使?Python有什么好处?14 - 什么是PEP 8?
15 - 什么是pickling和unpickling?16 - Python是如何被解释的?17 - Python是如何做内存管理的?
18 - 有什么?具可以帮助发现bug或者实?静态分析?19 - 什么是Python的装饰器? 同 220 - 列表和元组有什么不同?
21 - 参数是如何被传递的?通过传值还是传引??22 - 列表推导和字典推导是什么?23 - Python提供了什么内置的数据结构?24 - Python中的命名空间是什么?25 - Python?的lambda是什么? 同 626 - 为什么Python的lambda没有声明?27 - Python中的pass是什么?同 728 - 什么是迭代器?29 - 什么是?成器?
30 - Python中的unittest是什么?31 - Python的切?是什么?
32 - 在Python中如何复制?个对象? 同 933 - Python中负数指数(索引)是什么?34 - 如何把数字变成字符串?
35 - xrange和range有什么区别呢?36 - Python的模块和包是什么?Part C
37 - 到底什么是Python?你可以在回答中与其他技术进?对?(也?励这样做)。38 - 补充缺失的代码
39 - 阅读下?的代码,写出A0,A1?An的最终值。
40 - Python和多线程(multi-threading)。这是个好主意码?列举?些让Python代码以并??式运?的?法
41 - 你如何管理不同版本的代码?
42 - 下?代码会输出什么:43 - “猴?补丁”(monkey patching)指的是什么?这种做法好吗?44 - 这两个参数是什么意思:*args,**kwargs?我们为什么要使?它们?同上45 - 下?这些是什么意思:@classmethod, @staticmethod, @property?46 - 阅读下?的代码,它的输出结果是什么?47 - 阅读下?的代码,它的输出结果是什么?48 - 简要描述Python的垃圾回收机制(garbage collection)同 349 -将下?的函数按照执?效率?低排序。它们都接受由0?1之间的数字构成的列表作为输?。这个列表可以很?。?个输?列表的示例如下:[random.random() for i in range(100000)]。你如何证明??的答案是正确的。update_time: 2020-07-09?点说明:这是??在校招Python岗位时积累的?些?频Python?试题题??部分来??络,我这边做了整理以及解答,经过了实战,所以答案可靠如果嫌贵的话可以??去?上搜集校招?试、?作跳槽 Python相关岗位 必备这是第?部分的?试题,包含1~49题。Part A 1 - 这两个参数是什么意思:*args,**kwargs?我们为什么要 使?它们?简要回答*args:参数数量未知,传?列表或是元组**kwargs:参数数量未知,传?字典或关键词参数完整回答如果我们不确定往?个函数中传?多少参数,或者我们希望以元组(tuple)或者列表(list)的形式传参数的时候,我们可以使?*args(单星号)。如果我们不知道往函数中传递多少个关键词参数或者想传?字典的值作为关键词参数的时候我们可以使?**kwargs(双星号),args、kwargs两个标识符是约定俗成的?法2 - Python装饰器? 切?编程简要回答是什么? ?个函数,返回的也是?个函数什么??实现在不改动其他函数代码的前提下增加额外功能,如插??志等,体现代码复? 装饰器本质上是?个Python函数,它可以让其它函数在不作任何变动的情况下增加额外功能,装饰器的返回值也是?个函数对象。它经常?于有切?需求的场景。?如:插??志、性能测试、事务处理、缓存、权限校验等。有了装饰器我们就可以抽离出?量的与函数功能?关的雷同代码进?重?。3 - 简要描述Python的垃圾回收机制(garbagecollection)Python GC主要使? 引?计数(reference counting)来跟踪和回收垃圾。在引?计数的基础上,通过“标记-清除”(mark and sweep)解决容器对象可能产?的 循环引?问题,通过“分代回收”(generation collection)以空间换时间的?法提?垃圾回收效率。简要回答引?计数:引?计数obj_ref字段为0就清除标记-清除:引?循环,定时回收。第?阶段标记活动对象,第?阶段清除?活动对象分代回收:分为0,1,2共3代,新创建的为0代,在0代总数达到上限时,清除?活动对象,并将剩余对象存放到1代,依次类推完整回答Python中的垃圾回收是以引?计数为主,标记-清除和分代收集为辅。引?计数:Python在内存中存储每个对象的引?计数,如果计数变成0,该对象就会消失,分配给该对象的内存就会释放出来。标记-清除:第?阶段是标记阶段,GC会把所有的『活动对象』打上标记,第?阶段是把那些没有标记的对象『?活动对象』进?回收。?些容器对象,?如list、dict、tuple,instance等可能会出现引?循环,对于这些循环,垃圾回收器会定 时回收这些循环(对象之间通过引?(指针)连在?起,构成?个有向图,对象构成这个有向图的节点,?引?关系构成这个有向图的边)分代收集 典型的空间换取时间模式:分代回收是?种以空间换时间的操作?式,Python将内存根据对象的存活时间划分为不同的集合,每个集合称为?个代,Python将内存分为了3“代”,分别为年轻代(第0代)、中年代(第1代)、?年代(第2代),他们对应的是3个链表,它们的垃圾收集频率与对象的存活时间的增??减?。新创建的对象都会分配在年轻代,年轻代链表的总数达到上限时,Python垃圾收集机制就会被触发,把那些可以被回收的对象回收掉,?那些不会回收的对象就会被移到中年代去,依此类推,?年代中的对象是存活时间最久的对象,甚?是存活于整个系统的?命周期内。4 - Python多线程(multi-threading)。这是个好主意吗?简要回答GIL:全局解释器锁,保证代码中同?时刻只有?个线程在运?,多个线程之间交替运?多线程不适?于计算密集型操作,但是适?于IO密集型操作,还有就是?络爬?完整回答 Python并不?持真正意义上的多线程,Python提供了多线程包。Python中有?个叫GlobalInterpreter Lock(GIL)的东?,它能确保你的代码中永远只有?个线程在执?。经过GIL的处理,会增加执?的开销。这就意味着如果你要提?代码执?效率,使?threading不是?个明智的选择,当然如果你的代码是IO密集型,多线程可以明显提?效率,相反如果你的代码是CPU密集型的这种情况下多线程?部分是鸡肋。5 - 说明os,sys模块不同,并列举常?的模块?法?简要回答os 模板提供了?种?便的使?操作系统函数的?法,如创建?件夹,删除?件,重命名 ?件sys 模板可提供访问 由解释器使?或维护的变量和与解释器交互的函数,如退出程序,标准输?,标准输出等完整回答os模块负责程序与操作系统的交互,提供了访问操作系统底层的接?; sys模块负责程序与python解释器 的交互,提供了?系列的函数和变量,?于操控python的运?时环境。6 - 什么是lambda表达式?它有什么好处?简要回答是什么?匿名函数,简单函数不必起名,?便形式:lambda 变量: 表达式,表达式只有?句?途:常与?阶函数相联合使?,函数式编程思想局限:只?于?较简单的环境中,并且只能写?句表达式完整回答简单来说,lambda表达式通常是当你需要使??个函数,但是?不想费脑袋去命名?个函数的时候使?,也就是通常所说的匿名函数。lambda表达式?般的形式是:关键词lambda后?紧接?个或多个参数,紧接?个冒 号:,紧接?个表达式。lambda表达式是?个表达式不是?个语句7 - Python中pass语句的作?是什么?pass语句不会执?任何操作,?般作为占位符或者创建 占位 程序 8 - Python是如何进?类型转换的?Python提供了将 变量或值 从?种类型转换为另?种类型的内置?法常?有:int(), long(), float(), list(), str()等eval(str)?来计算在字符串中的有效python表达式,并返回?个对象9 - Python??如何拷??个对象?简要回答引?:对象 同?地址,可变对象【修改内部元素】都变,不可变对象直接修改单独变针对修改其中的元素来定,?不是修改整个对象12345b[1][2] = 5# 对象为可变对象a = [1,[2,3,4]]b = a 67891011121314151617c = 'str'd = 'str1'd = d + '1'# 对象为不可变对象c = 'str'd = cb = [1,[2,3,5]]a = [1,[2,3,5]] # 可变对象都变浅复制:对象不同地址,元素相同地址,可变元素都变,不可变元素单独变1,完全切??法;2,??函数,如list();3,copy模块的 copy() 函数深复制:对象不同地址,不可变元素相同地址,可变元素不同地址,可变元素和不可变元素都单独变完整回答引?:A=B,在Python中,对象的赋值都是进?对象引?(内存地址)传递,A和B的改变同时?效浅复制:A=copy.copy(B),A是?个新对象,但是A中的元素是原始元素的地址,修改其中任意?个对象中的元素,对于其中的可变元素,其不会产?新对象,对于不可变元素(如字符串,数字等)就会产?新对象 => ?元素不共享,?元素共享,新增元素不共享深复制:A=copy.deepcopy(B),A是?个新对象,其中的可变元素是?个新的对象,不可变元素使?原始元素的地址,修改其中任意?个对象中的元素,如果是可变元素,则不会影响另外?个,如果是不可变元素,就会有?个新对象产?,同样也不会影响另外?个10 - __new__和__init__的区别简要回答__new__ --> 实例 --> __init__ 创建实例 —> 实例 —> 初始化 —> ?返回完整回答__init__为初始化?法,__new__?法是真正的构造函数。__new__是实例创建之前被调?,它的任务是创建并返回该实例,是静态?法__init__是实例创建之后被调?的,然后设置对象属性的?些初始值,是实例?法。__new__?法在__init__?法之前被调?,并且__new__?法的返回值将传递给__init__?法作为 第?个参数,最后__init__给这个实例设置?些参数。其他__metaclass__:创建类时?定义__new__:创建对象?定义__init__:初始化对象?定义