1.經常使用字符串格式化有哪些?說明區別format%s __str__2.寫出 元祖,列表,字典,集合的定義方法,增,刪,改答:列表 l1.append('a') l1.insert(1,'s') l1.extend('sss') l1.remove('s') 字典 d1.update() d1.setdefault('key1','1') 集合 s1.add(3) s1.update('laoshi') s1.remove(2) s1.pop() s1.clear() print(s1 & s2) print(s1 | s2) print(s1 - s2) print(s1 ^ s2) print(s1 > s2)3.利用python打印前一天的本地時間,格式'2018-01-30'(面試) import time t1 = time.time() - 60*60*24 print(time.strftime('%Y-%m-%d %X',time.localtime(t1))) timestamp------------>struct_time------------->format time localtime strftime <------------ <------------- mktime strptime4.python中search和match區別(面試)re.search 匹配到第一個返回,group獲取re.match 只嘗試匹配第一個字符是否符合re.splitre.subre.subn obj = re.compile() ret = obj.search() ret.group()re.finditer()5.什麼是lambda函數,好處?匿名函數,與內置函數配合 簡化代碼lambda x:x 區分調用與定義mapzipmax/min列表推導式6.說明__init__和__new__的做用__init__ 初始化方法__new__ 構造方法__del__ 析構方法 刪除一個對象前執行7.簡述反射用字符串數據類型的變量名或者函數名來調用對應的屬性8.解釋python中的深拷貝和淺拷貝的區別deepcopy 開闢新的空間存儲數據,原數據改變不影響deepcopy內容copy淺拷貝 只開闢空間來copy第一層的數據, 沒有拷貝子對象,原數據改變,子對象會改變,新增長的內容不變直接賦值= 傳遞對象引用,原列表的任何變換都會作出相應改變9.用最簡潔的方式生成列表【4,16,32,64,128】print([2**i for i in range(2,8) if i!=3])print([pow(2,i) for i in range(2,8) if i!=3])10.python中如何實現隨機數並打印,默認的隨機數範圍是多少?import randomprint(random.random()) 0-111.新式類和經典類的區別1.新式類:在繼承中,尋找方法是遵循廣度優先 默認繼承object 內置mro方法 經典類:深度優先12.裝飾器何時被執行加載函數的時候被執行from functools import wrapsdef deco(func): @wraps(func) def inner(*args,**kwargs): print('up') re = func(*args,**kwargs) print('down') return re return inner# @decodef index(a): print('index',a)index = deco(index)index('a')print(index.__name__)13.什麼是併發?什麼是並行?併發:同一時刻,一個cpu執行任務 多線程,gil鎖,同一時刻限制了多個線程只能有一個線程被cpu執行並行:真正意義上,同一時刻,多個cpu在處理任務 多進程,多進程在同一時刻能夠佔用多個cpu14.描述event的執行原理一個狀態控制wait方法是否阻塞多進程的event基於ipc通訊15.什麼是黏包?如何避免?tcp協議:面向連接的流傳輸,數據是無邊界的避免:自定義協議,struct模塊,udp協議:16.什麼進程?運行中的程序最小的資源分配單位爲多個任務之間的數據安全和內存隔離作約束17.什麼是線程cpu 調度的最小單位輕量級的進程是進程的一部分線程間能夠共享數據18.管道,隊列的理解?管道:雙向通訊的數據容器,多進程的IPC中用到,數據不安全隊列:基於管道,鎖實現的,保證數據在進程/線程間安全傳輸的容器19.寫一個裝飾器實現:打印程序的運行時間import timedef time_print(func): def inner(*args,**kwargs): start = time.time() re = func(*args,**kwargs) print('執行時間:',time.time() -start) return re return inner@time_printdef func(a): time.sleep(1) print('func over',a) return 'ok'print(func('alex'))20.默認參數陷阱def f(x,l=[]): for i in range(x): l.append(i*i) print(l)f(2) # [0,1]f(3,[3,2,1]) # [3,2,1,0,1,4]f(3) # [0,1,0,1,4]21.使用python簡單實現打印99乘法表for i in range(1,10): print() for j in range(1,10): if i>= j: print('%s*%s=%s'%(i,j,i*j),end=',')22.GIL 概念,以及對多線程的影響?全局解釋鎖屬於Cpython解釋器在Cpython解釋一段多代碼時,約束線程在同一時刻只能有一個線程訪問CPU影響:多線程並不能真正實現並行23.單例模式class Singleton: def __new__(cls, *args, **kwargs): if not hasattr(cls,'_instance'): cls._instance = object.__new__(cls) return cls._instanceone = Singleton()two = Singleton()two.a = 3print(one.a)24.使list3 = [ {'name':'alex', 'hobby':'抽菸'}, {'name':'alex', 'hobby':'喝酒'}, {'name':'alex', 'hobby':'燙頭'}, {'name':'alex', 'hobby':'Massage'}, {'name':'egon', 'hobby':'喊麥'}, {'name':'egon', 'hobby':'街舞'},]變成list4 = [ {'name':'alex', 'hobby':['抽菸','喝酒','燙頭','Massage']}, {'name':'egon', 'hobby':['喊麥','街舞']},]list4 = []for item in list3: for dic in list4: if item['name'] == dic['name']: dic['hobby'].append(item['hobby']) break else: list4.append({'name':item['name'],'hobby':[item['hobby']]})print(list4)25.class Student: def __init__(self,name,age,score): self.name = name self.age = age self.score = score def get_name(self): return self.name def get_age(self): return int(self.age) def get_course(self): return int(max(self.score))zm = Student('zhangming',20,[69,88,100])print(zm.get_name())print(zm.get_age())print(zm.get_course())26.27.什麼是異步?異步阻塞?異步:同一時間,同時執行兩個任務, 多線程,多進程異步阻塞:在各自的線程中,涉及io操做,28.from threading import Timerdef func(): print('func')for i in range(10): Timer(10,func).start()29.lock 互斥鎖,同一個線程或進程之間,當有兩個acquire時,阻塞(鎖死)Rlock 遞歸鎖,同一個線程或進程之間,不管acquire多少次,都不會阻塞