python面试题
Python 10期考试题 1.常用字符串格式化有那些?并说明他们的区别 # format 直接调用函数 # %s 语法塘 # %r a = 1 print(a) class A : pass a = A() print(a) 2.请写出[元组,列表,字典,集合]的定义方法,新增方法,更改方法,删除方法 3.利用python打印前一天的本地时间,格式'2018-01-03(面试题) # 时间戳时间 - (60*60*24) 转换成格式化时间 # 时间戳时间 - (60*60*24) 转换成格式化时间strftime 4.python中re模块的search()和match()的区别(面试题) #相同点: 接收两个参数,正则表达式,带匹配的字符串 只匹配一个符合条件的项 #区别: search 根据所写的正则匹配符合条件的第一个 match 根据所写的正则 从头开始 匹配, 相当于在正则表达式的开始位置加了一个 # hello # search 只要句中有hello就能匹配上 aaaabbbmbhellomm # march 只有句首有hello才能匹配上 hellosdadasd 5.什么是lambda函数,有什么好处? # 匿名函数 简洁明了 可以和内置函数,可以有效地减少冗余的代码 6.说明__init__和__new__的作用 # __init__ 初始化方法 self默认参数 # __new__ 构造方法 cls 创建对象 # __del__ 析构方法 删除一个对象的之前执行的 7.简书反射是怎么回事? # 用字符串数据类型的变量名或函数名来调用对应的属性 # A.b getattr(A,'b) 8.解释python中深拷贝和浅拷贝的区别 # 深copy 不管一个数据类型有多少层,都另外开辟新的空间来储存一份和原来一模一样的数据 # 浅copy 只是重新开辟一块空间来copy第一层的数据 9.用最简洁的方式生成一个列表[4,16,32,64,128] # 2**2 = 4 # 2**3 = 8 # 2**4 = 16 # 2**5 = 32 # 2**6 = 64 # 2**7 = 128 # 在等于3的时候循环跳过 list = [] for i in range(2,8): if i != 3 list.append(2**i) # list.append(pow(2,3)) 10.python中如何实现随机数并打印,默认的随机数范围是多少? # random.random() 0-1 11.新式类和经典类(旧式类)的区别(一种一分) # 新式类 : 默认继承object 在继承的过程中,寻找一个方法遵循广度优先 内置mro方法来标识广度优先的顺序 # 经典类 : 在继承的过程中,寻找一个方法遵循深度优先 12.装饰器在什么时候被执行的 # 加载函数的时候被执行 13.什么是"并发"?什么是"并行" # 在python中:(把你知道的说出来,侃侃而谈的感觉) # 并发 (多线程 看起来是一起执行的,GIL限制了在同一时刻限制了多个线程只能有一个线程被cpu执行) # 是在同一时间只能有一个CPU在处理任务 # 并行 (多进程 多个进程在同一时刻可以占用多个CPU) # 是真正意义上的在同一时刻有多个CPU在处理任务 14.以个人理解描述Event的执行原理 # 有一个状态控制wait方法是否阻塞 15.什么是粘包,如何避免?(先说答案,再编其他的) # TCP协议 : 面向连接的流传输,数据是无边界的 # 如何避免 : 自定义协议 struct模块 # UDP协议 : 16.什么是进程? # 运行中的程序 # 是最小的资源分配单位 # 为多个任务之间的数据安全和内存隔离做约束 17.什么是线程? # cpu调度的最小单位 # 轻量级的进程 # 是进程的一部分 # 在多个进程之间可以共享进程中的数据 18.简述你对管道,队列的理解; # 管道 双向通信的数据容器 多进程的IPC中用到了 # 数据不安全 # 队列 : 先进先出 基于管道和锁实现的一个数据在线程\进程之间的安全容器 19.编程题: 写一个装饰器实现功能:打印程序的运行时间 import time def time(func): def dinner(*args, **kwargs): start = time.time() ret = func(*args, **kwargs) print(time.time() - start) return ret return inner @time # wahaha = time(wahaha) def wahaha(): pass 20.读一下代码,写出答案并简述原因(面试题建议不使用电脑) 下面代码会输出什么? def f (x,l = []): # 2 3 3 [0,1] for i in range(x): # i=0, i=1 i=0 ,i=1,i=2 i =0,i=1,i=2 l.append(i*i) #[0,1] [3,2,1,0,1,4] [0,1,0,1,4] print l # [0,1] [3,2,1,0,1,4] [0,1,0,1,4] f(2) f(3,[3,2,1]) f(3) 21.使用python简单实现打印九九乘法表 22.简述python GIL的概念, 以及它对python多线程的影响? # GIL全局解释器锁 # 属于CPython解释器 # 用来在CPython解释器届时一段多线程的代码时,约束线程在同一时刻只能有一个线程访问CPU # 它对python多线程的影响 : CPython解释器下启动的多线程并不能真正实现并行 23.写一个单例模式 24.编程题:将以下list3的格式转换成list4格式 list3 = [ {'name':'alex','hobby':'抽烟'}, {'name':'alex','hobby':'喝酒'}, {'name':'alex','hobby':'烫头'}, {'name':'egon','hobby':'message'}, {'name':'alex','hobby':'喊麦'}, {'name':'egon','hobby':'街舞'}, ] # 如何把上面的列表转成成下方的列表? list4 = [ {'name':'alex','hobby_list':['抽烟','喝酒','烫头',喊麦]}, {'name':'egon','hobby_list':['喊麦','街舞']}, ] 代码: 两层for循环 list4 = [] for item in list3: for dic in list4: if item['name'] == dic['name']: dic['hobby_list'].append(item['hobby']) break else: list4.append({'name':item['name'],'hobby_list':[item['hobby']]}) print(list4) 26.写一个socket客户端和服务端通讯 27.什么是异步,什么是异步阻塞 # 在同一时间 可以同时做两件事 ,异步阻塞,在同一时刻各自的线程或进程中存在IO操作而不影响其他进线程 # t.start() 异步 # num = input() # print(123) # t.start() # t.join() #同步 # print(1234) 28.写一个程序,包含十个线程,子线程必须等待主线程sleep10秒钟之后,才执行,并打印当前时间 from threading import Timer #定时器 def func() : pass for i range(10) : Timer(10, func).start() 29. 你所了解的锁都有哪些? 互斥锁 在同一个线程或进程之间,当有两个acquire的时候,就会产生阻塞,死锁 递归锁 在同一个线程或进程之间,无论acquire多少次都不会产生阻塞,但是得release()相同次数 30. threading.RLock和threading.Lock 的区别 互斥锁 在同一个线程或进程之间,当有两个acquire的时候,就会产生阻塞,死锁 递归锁 在同一个线程或进程之间,无论acquire多少次都不会产生阻塞,但是得release()相同次数