#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @author: Wu
# @date:18-9-25
def paper():
pass
"""
复习:6,12,13,19,20,23
Python10期考试题
1、常用字符串格式化有哪些?并说明他们的区别(6)
2、请写出【元祖,列表,字典,集合】的定义方法、新增方法、更改方法、删除方法(4)
3、利用 python打印前一天的本地时间,格式为‘2018-01-30’(面试题)(5)
4、python中search和match的区别(面试题)(5)
5、什么是1ambda函数,有什么好处(2)
6、说明__init__和__new__的作用(2)
7、简述反射是怎么回事?(3)
8、解释python中深拷贝和浅拷贝的区别(3)
9、用最简洁的方式生成这样一个列表【4,16,32,64,128】③)
10、python中如何实现随机数并打印,默认的随机数范围是多少?(2)
11、新式类和经典类(旧式类)的区别(一种一分)(2)
12、装饰器什么时候被执行的(3)
13、什么是"并发"?什么是"并行"?(2)
14、以个人理解描述 Event 的执行原理(2)
15、什么是粘包,如何避免?(3)
16、什么是进程?(2)
17、什么是线程?(2)
18、简述你对管道、队列的理解;(3)
19、编程题;写一个装饰器实现功能:打印程序的运行时间(5)
20、读以下代码,写出答案并简述原因(面试题建议不用电脑)(5)
下面代码会输出什么:
def f(x,l=[]):
for i in range(x):
l.append(i * i)
print(l)
f(2)
f(3, [3, 2, 1])
f(3)
21、使用 python简单实现打印九九乘法表(3)
22、简述 python GIL的概念,以及它对 python多线程的影响?(2)
23、写一个单例模式(4)
24、编程题:将以下1ist3的格式转换成1ist4格式(8)
list3 = [
{"name": "alex", "hobby": "smoking"},
{"name": "alex", "hobby": "drinking"},
{"name": "alex", "hobby": "perm"},
{"name": "alex", "hobby": "Massage"},
{"name": "egon", "hobby": "singing"},
{"name": "egon", "hobby": "dancing"},
]
list4=[
{"name":"alex" hobby_list":["smoking","drinking","perm"," Massage"]},
{"name":"egon"," hobby_list":["singing","dancing"]}
]
25、编程题(7)
定义一个学生类。有下面的类属性
1姓名
2年龄
3成绩(语文,数学,英语)[每课成绩的类型为整数]
类方法
1获取学生的姓名: get_name()返回类型:str
2获取学生的年龄: get_age()返回类型:int
3返回3门科目中最高的分数。 get_course()返回类型:int
写好类以后,可以定义2个同学测试下
zm=Student("zhangming",20,[69, 88, 100J)
返回结果
zhangming
20
100
"""
"""
26、写一个 socket客户端和服务端兵进行通讯(4
27、什么是异步,什么是异步阻塞?(2)
28、写一个程序,包含十个线程,子线程必须等待主线程s1eep10秒钟之后才执行,并打印当前时间(5)
29、你所了解的锁都有哪些?(2)
30、 threading.RLock和 threading.Lock的区别
"""
def test1():
print("%s %d #语法糖")
print("format #直接调用函数")
def test3(p=1):
"""
important
:return:
"""
if p == 1:
import time
import datetime
print(datetime.date.fromtimestamp(time.time() - 3600 * 24))
elif p == 2:
import time
print(time.strftime("%Y-%m-%d", time.localtime(time.time() - 3600 * 24)))
def test4():
"""
important
:return:
"""
# answer
"""
match()函数只检测RE是不是在string的开始位置匹配,
search()会扫描整个string查找匹配,
也就是说match()只有在0位置匹配成功的话才有返回,
如果不是开始位置匹配成功的话,match()就返回none
"""
import re
print(re.match('super', 'superstition').span())
print(re.match('super', 'isuperstition'))
print(re.search('super', 'isuperstition').span())
pass
def test5():
print("5、什么是1ambda函数,有什么好处(2)")
print("匿名函数,简洁明了;可以和内置函数合用,有效减少冗余代码")
def test6():
print("6、说明__init__和__new__的作用(2)")
print("__init__#是初始化方法;对象初始化时执行的方法 ")
print("__new__ #是构造方法; 继承自object的新式类才有__new__方法,"
"__new__至少要有一个参数cls,代表要实例化的类"
"__new__() 方法会返回cls(cls指代当前类)的实例,然后该类的__init__()方法作为构造方法会接收这个实例(即self)作为自己的第一个参数")
print("__del__ #是析构方法,删除一个对象之前执行的方法")
def test7():
print("7、简述反射是怎么回事?")
print("用字符串类型的变更名或函数名来调用对应的属性")
def test8():
print("8、解释python中深拷贝和浅拷贝的区别")
print("深拷贝:不管数据类型有多少层,都开僻新的内存空间来存储一份与原来数据一样的数据")
print("浅拷贝:只新开僻一块空间来存第一层数据")
def test9(p=1):
if p == 1:
def f(x):
return 4 if x < 4 else 2 ** x
print("1st answer:", [f(i) for i in range(3, 8)])
elif p == 2:
print("2nd answer:", list(map(lambda x: 4 if x < 4 else 2 ** x, [i for i in range(3, 8)])))
elif p == 3:
print("3rd answer:", [4 if i < 4 else 2 ** i for i in range(3, 8)])
elif p == 4:
print("4th answer:", [4 if i == 3 else 2 ** i for i in range(3, 8)])
elif p == 5:
print("5th answer:", [4 if i == 3 else pow(2, i) for i in range(3, 8)])
def test10():
print("10、python中如何实现随机数并打印, 默认的随机数范围是多少?(2)")
print("import random")
print("random.random() #默范围是在0-1之间的数")
def test11():
print("11、新式类和经典类(旧式类)的区别")
print("新式类:默认继承object,在继承过程中寻找一个方法时默认遵循广度优先,内置mro方法来标识广度优先的顺序")
print("经典类:在继承过程中寻找一个方法时默认遵循深度优先")
def test12():
print("12、装饰器什么时候被执行的")
print("加载函数的时候被执行")
print("for example:")
def time_log(f):
def wrapper(*args, **kwargs):
print("in time log func")
res = f(*args, **kwargs)
return res
return wrapper
@time_log
def func(strings):
print("hello", strings)
func("test")
def test13():
print('13、什么是"并发"?什么是"并行"?')
print("并发:在同一时候,只有一个CPU在处理任务")
print("并行:真正意义上的在同一时刻,有多个CPU在处理任务,即同时在运行")
print("在python中:多线程是并发,多进程是并行")
print("在python中:多进程在同一时刻可以占用多个CPU执行")
print("在python中:多线程看起来是在同时执行,但是GIL的限制,在同一时刻只有一个线程给到CPU执行")
def test14():
print("以个人理解描述 Event 的执行原理")
print("在多进程或多线程中,Event对像有True和False两个状态,分别控制wait方法是否阻塞,如果状态是True,wait()就非阻塞状态,如果是False,则阻塞")
print("在多进程中,Event之所以能通信,是因为基于IPC")
print("在多线程中,Event之所以能通信,是因为主线程与子线程本身就是可以通信的")
def test15():
print("15、什么是粘包,如何避免?")
print("粘包:TCP协议是面向流连接的数据传输协议,传输数据是无边界的")
print("避免粘包:自定义协议;python中可以使用struct模块;UDP没有粘包问题")
def test16():
print("16、什么是进程?")
print("运行中的程序")
print("是最小的资源分配单位")
print("是多个任务之间数据安全和内存隔离的约束")
def test17():
print("17、什么是线程?")
print("CPU调度的最小单位")
print("是进程的一部份,可以共享进程中的数据")
def test18():
print("18、简述你对管道、队列的理解;")
print("管道:python中,双向通信的数据容器,多进程中的IPC中用到,数据不安全")
print("队列:python中,先进先出,基于管理和锁实现的一个可以在进程/线程中传递数据的容器,数据安全")
def test19():
import time
def log_time(fun):
def wrapper(*args, **kwargs):
start_time = time.time()
res = fun(*args, **kwargs)
print(time.time() - start_time)
return res
return wrapper
@log_time
def func():
print("hello")
func()
def test20():
"""
20、读以下代码,写出答案并简述原因(面试题建议不用电脑)(5)
下面代码会输出什么:
def f(x,l=[]):
for i in range(x):
l.append(i * i)
print(l)
f(2)
f(3, [3, 2, 1])
f(3)
:return:
"""
def f(x, l=[]):
for i in range(x):
l.append(i * i)
print(l)
f(2)
f(3, [3, 2, 1])
f(3)
print("因为经过第一次f(2)之后,默认参数l的值已经是[0,1]")
def test21(p=1):
if p == 2:
for i in range(1, 10):
for k in range(1, i):
print(end=" ")
for j in range(i, 10):
print("%d*%d=%2d" % (i, j, i * j), end=" ")
print("")
elif p == 1:
for i in range(1, 10):
for j in range(i, 10):
print("%d*%d=%2d" % (i, j, i * j), end=" ")
print("")
elif p == 3:
for i in range(1, 10):
for j in range(1, i + 1):
print("%d*%d=%2d" % (j, i, i * j), end=" ")
print("")
elif p == 4:
for i in range(1, 10):
for k in range(1, 10 - i):
print(end=" ")
for j in range(1, i + 1):
print("%d*%d=%2d" % (j, i, i * j), end=" ")
print("")
def test22():
print("22、简述 python GIL的概念,以及它对 python多线程的影响?(2)")
print("python GIL即python全局解释器锁")
print("用来在Cpython解释器解释一段多线程代码时,约束线程在同一时刻只能有一个线程访问CPU")
print("对python多线程的影响:在Cpython解释器下启动的多线程并不能真正的实现并行")
def test23():
print("23、写一个单例模式(4)")
print("")
def test24(p=1):
list3 = [
{"name": "alex", "hobby": "smoking"},
{"name": "alex", "hobby": "drinking"},
{"name": "alex", "hobby": "perm"},
{"name": "alex", "hobby": "Massage"},
{"name": "egon", "hobby": "singing"},
{"name": "egon", "hobby": "dancing"},
]
list4 = []
if p == 1: # 方法一:
tmp_dic = {}
for item in list3:
if not tmp_dic.get(item["name"]):
tmp_dic[item["name"]] = []
tmp_dic[item["name"]].append(item["hobby"])
for key in tmp_dic:
list4.append({"name": key, "hobby_list": tmp_dic[key]})
print(list4)
elif p == 2: # 方法二
for item in list3:
for dic in list4:
if dic["name"] == item["name"]:
dic["hobby_list"].append(item["hobby"])
break
else:
list4.append({"name": item["name"], "hobby_list": [item["hobby"]]})
print(list4)
def test25():
class Student(object):
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score
def get_name(self):
pass
def get_age(self):
pass
def get_course(self):
return '{name}\n{age}\n{max_score}\n"""'.format(name=self.name, age=self.age, max_score=max(self.score))
zm = Student("zhangming", 20, [69, 88, 100])
print(zm.get_course())
def test28(p=1):
if p == 1: #使用非阻塞式的timer计时器的解法
from threading import Timer
import datetime
def func():
print(datetime.datetime.now())
for i in range(10):
Timer(10, func).start() #非阻塞式的计时器
print(datetime.datetime.now())
elif p == 2: #不符合题要求的解法,主线程是阻塞的,相当于主线程等待,而非子线程等待
from threading import Thread
import datetime
import time
def func():
print(datetime.datetime.now())
t_list = []
for i in range(10):
t = Thread(target=func)
t_list.append(t)
print(datetime.datetime.now())
time.sleep(10)
for t in t_list:
t.start()
t.join()
def test29():
print("29、你所了解的锁都有哪些?(2)")
print("互斥锁:from multiprocessing/threading import Lock")
print("递归锁:from multiprocessing/threading import RLock")
def test30():
print("30、threading.RLock和 threading.Lock的区别?(2)")
print("互斥锁:在同一个线程或进程之间,当有两个acquire的时候,就会产生死锁")
print("递归锁:在同一个线程或进程之间,无论acquire多少次,也不会产生死锁,但要注意的是acquire多少次,就需要release多少次后,其它线程或进程才能使用锁的数据")