如何用python编程100例做出这道题 请附上代码 十分感谢!

1、合并字典: a1.update(a2)2、列表去重:a = [11,22,33,44,11,22] print(list(set(a)))3、python2和python3的range(100) 区别python 2返回列表,python 3返回迭代器,节约内存4、列表[1,2,3,4,5],请用map()函数输出(1,4,9,16,25),并使用列表推导式提取出大于10的属,最终输出[16,25]a = [1,2,3,4,5] b=map(lambda x:x*x,a) res=[i for i in b if i >10] print(res) 5、 python随机生成整数,随机小数,0-1之间小数import random import numpy import string res1=random.randint(1,100)#随机整数 print(res1) res2=numpy.random.randn(8)#8个随机小数 print(res2) res3=random.random()#0-1之间小数 print(res3) res4= random.sample(range(1,100),9) #随机生成9个 1-100之间的不重复整数 print(res4) res5=numpy.random.choice(range(1000),9,replace=False) #随机生成9个 1-1000之间的不重复整数,当需要生成的数很多时,效率比random.sample高很多 print(res5) for i in range(10): #随机生成10个,长度为8的不重复字符串 str_list=random.sample(string.digits + string.ascii_letters,8) random_str="".join(str_list) print(random_str) 6、< div class=‘nam’>国家< /div> 用正则匹配出标签里面的内容(“国家”),其中class的类型是不确定的import re res=re.findall(r'
(.*?)
',str) print(res)#返回的是列表 ['国家'] re.match('',str) #只匹配字符串开头,.span()打印匹配到的索引,group(1)打印匹配到的值 re.search('',str) #匹配整个字符串,其它同match 7、数据表student有id,name,score,city字段,其中name中的名字可有重复,需要消除重复行,sql语句;select distinct name from student8、s = “ajldjlajfdljfddd”, 去重并从小到大排序输出"adfjls = "ajldjlajfdljfddd" s=list(set(s)) s.sort() #sort只对列表排序 print("".join(s)) #列表合并成为字符串 s = "-+abacsdadjhfjab=" print(s.strip()) #删除字符串左右两边的空字符 print(s.strip('-=+')) #删除字符串左右两边的-+=号 new_s=s[:2]+s[3:] #删除单个固定位置字符:切片+拼接 print(new_s) res1=s.replace('ab',"") #删除任意位置字符,ab,可以用于删除字符串的字串 print(res1) #acsdadjhfj res=s.translate(str.maketrans('','','ab')) #同时删除多种不同的字符a和b print(res) #第三个参数为把参数直接替换为None #第一个参数为要替换的字符组成的字符串,第二个参数为映射,即把字符串中的a换成1,b换成2. str.maketrans('aeiou','12345') 9、用lambda函数实现两个数相乘multipy=lambda x,y:x*y print(multipy(5,4)) 10、字典按照键 从小到大排序import collections dict = {"name":"西瓜","age":18,"city":"shenzhen","tel":12345} s=sorted(dict.items(),key=lambda x: x[0])#dicts.items()返回列表嵌套的 字典的键值对元组 x[0]是按照键排序,x[1]是按照值排序 new_dic=collections.OrderedDict() #创建有序字典,保持排序后的顺序 for i in s: new_dic[i[0]]=i[1] print(new_dic) #方法二 用zip+字典推导式 dict = {"name":"zs","sex":"man", "city":"bj"} foo=zip(dict.keys(),dict.values()) #字典转列表嵌套元组 或dict.items() b=sorted(foo,key=lambda x:x[0]) print(b)#[('city', 'bj'), ('name', 'zs'), ('sex', 'man')] new_dict={i[0]:i[1] for i in b} #字典推导式构造新字典 print(new_dict) #{'city': 'bj', 'name': 'zs', 'sex': 'man'} 11、利用collections库的Counter方法统计字符串每个单词出现的次数from collections import Counter a = "kjalfj;ldsjsfl;hdsllfdhg;lahfbl;hl;ahlf;h" res=Counter(a) #以键值对方式 从大到小返回print(res) 12、字符串a = “not 404 found 张三 99 深圳”,每个词中间都是空格,用正则过滤掉英文和数字,最终输出"张三 深圳"import re a = "not 404 found 张三 99 深圳" list_a=a.split(" ") #split对字符串切片,若后面有num参数,则分割num+1个子字符串 a.split(" ",3) s=re.findall(r"\d+|[a-zA-Z]+",a) #\d匹配数字[0-9],+匹配前面一个表达式1次或多次,|连接多个匹配方式#s返回的是 匹配到的 英文和数字的列表 res=[i for i in list_a if i not in s] #过滤出汉字列表 print(" ".join(res)) 13、filter方法求出列表所有奇数并构造新列表,a = [1,2,3,4,5,6,7,8,9,10]# filter()函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。 # 接收两个参数,第一个为函数,第二个为序列 a = [1,2,3,4,5,6,7,8,9,10] def f(a): return a%2==1 #筛选出奇数 new_list=filter(f,a) #返回的是装饰器 print([i for i in new_list]) #方法二 列表生成式 new_list1=[i for i in a if i%2==1] print(new_list1) 14、列表添加元素a = [1,2,3,4,5,6,7,8,9,10] a.append(11) #末尾添加 a.insert(3,11)#z指定位置索引为3处添加11 a.extend([12,13]) #末尾追加列表 b=[14,15] c=a+b #末尾追加 注意不是相加,等价于extend 15、用python删除文件和linux命令删除文件方法import os import shutil root_dir=os.path.dirname(os.path.abspath(__file__)) os.remove(root_dir+'/rrrt.py') #删除目录下的文件os.rmdir(path)#删除空目录文件 shutil.rmtree(path) #删除空目录,也可以删除含有文件或子目录的目录 print('目录删除后:%s'%os.listdir(root_dir)) rm -rf /var/log/ #删除/var/log/下所有的文件、文件夹 rm -rf /var/log/access.log #删除access.log文件 16、log日志中,我们需要用时间戳记录error,warning等的发生时间,请用datetime模块打印当前时间戳"2018-04-01 11:38:54"import datetime print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + ' 星期:'+str(datetime.datetime.now().isoweekday())) 17、统计列表中各个元素出现了多少次,并且取出重复次数最多的元素,或者按照元素重复次数进行元素排序from collections import Counter lst1=['hello','hello','world','test','test','test'] counter_obj=Counter(lst1) print(counter_obj) # Counter({'test': 3, 'hello': 2, 'world': 1}) most= counter_obj.most_common() #不传参,则返回所有元素# [('test', 3), ('hello', 2)] print(counter_obj.most_common(2)) #在lst1中出现次数最多的前2个元素,并且降序排列# [('test', 3), ('hello', 2), ('world', 1)] #根据元素大小升序排列 most.sort(key=lambda x:x[0]) #按key排序 print(most) most.sort(key=lambda x:x[1],reverse=True) #按照出现次数降序排列 print(most) 18、[1, 2],[3, 4],[5, 6]一行代码展开该列表,得出[1,2,3,4,5,6]#列表生成式 a=[1,2],[3,4],[5,6] x=[j for i in a for j in i] print(x) #[1,2,3,4,5,6] #还可以将列表转成numpy矩阵,通过numpy的flatten()方法,将矩阵折叠成一维的数组 import numpy as np a=[1,2],[3,4],[5,6] b=np.array(a).flatten().tolist() print(b) 19、正则表达式匹配中,(. *)和(. *?)匹配区别?(.*)是贪婪匹配,会把满足正则的尽可能多的往后匹配 (.*?)是非贪婪匹配,会把满足正则的尽可能少匹配 s = '哈哈呵呵' import re res1=re.findall('(.*)',s) #贪婪匹配 print(res1) # ['哈哈呵呵'] res2=re.findall('(.*?)',s) #非贪婪匹配 print(res2) #['哈哈', '呵呵'] 20、x=“abc”,y=“def”,z=[“de”,“de”,“f”]分别求出x.join(y)和x.join(z)返回结果x='abc' y='def' z=["de","de","f"] # join()括号里面的是可迭代对象,x插入可迭代对象中间,形成字符串 print(x.join(y)) #dabceabcf print(x.join(z)) #deabcdeabcf 21、举例说明异常模块中try except else finally的相关意义try...else 没有捕获到异常,执行else语句 try...finally 不管是否捕获到异常,都执行finally语句 try: content=input('请输入1-100内的整数') if not isinstance(int(content),int) or int(content)>100: raise Exception("输入的不是整数或数值大于100") #自定义抛出异常 except Exception as e: print("输入错误:%s" %e) else: print("输入正确") finally: print("完毕") 22、python中交换两个数的值:a=3 b=2 a=a+b b=a-b a=a-b #方法二 a,b=b,a 23、举例说明zip()函数用法# zip()函数在运算时,会以一个或多个序列(可迭代对象)作为参数,返回一个元祖的列表。同时将这些序列中并排的元素配对 # zip()参数可以接受任何类型的序列,同时也可以有两个以上的参数;当传入的参数的长度不同时,zip能自动以最短序列长度为准进行截取,获得元祖 a=[1,2] b=[3,4] res1=[i for i in zip(a,b)] print(res1) #[(1, 3), (2, 4)] a=(1,2) b=(3,4) res2=[i for i in zip(a,b)] print(res2) #[(1, 3), (2, 4)] a='ab' b='xyzer' res3=[i for i in zip(a,b)] print(res3) #[('a', 'x'), ('b', 'y')] #创建字典: a=zip(('a','b','c','d','e'),(1,2,3,4,5)) print(dict(a)) #{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} dic={k:random.randint(4,9) for k in ["a",'b','c','d']} #字典推导式 print(dict) ##{'a': 4, 'b': 8, 'c': 6, 'd': 5} #求列表元素的最长公共前缀 lst=["flower","flowe","float","flat"] result="" sub_str=[i for i in zip(*lst)] #*lst为解包,返回flower flowe float flat for x in sub_str: if len(set(x))==1: result+=x[0] print(result) 24、a = “张明 98分”,将98替换为100a = "张明 98分" #字符串的replace函数 res1=a.replace('98','100') print(res1)#张明 100分 import re #使用正则表达式 res2=re.sub(r"\d+","100",a) print(res2)#张明 100分 25、写5条常用sql语句show databases; show tables; select * from 表名; delete from 表名 where id=5; update student set gender=0,homework="OK" where id=6; 26、简述mysql和redis区别# redis:内存型非关系数据库,数据保存在内存中,速度快 # mysql:关系型数据库,数据保存在磁盘中,检索的话,会有一定的IO操作,访问速度相对慢 27、遇到bug如何处理# 1、细节上的错误,通过print()打印,能执行到print(),说明一般上面的代码没有问题,分段检测程序是否有问题;如果是js的话,可以aler或console.log # 2、如果涉及一些第三方框架,会去查官方文档或者一些技术博客 # 3. 对于bug的管理与归类总结,一般测试将测试出的bug用teambin等bug管理工具进行记录(vsts,testlink用例),然后回一条条进行修改,修改的过程# 也是理解业务逻辑和提高自己逻辑缜密性的方法,我都会收藏做一些笔记记录# 4. 导包问题、城市定位多音字造成的显示错误问题 28、 正则匹配,匹配日期2018-03-20#url = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1?dataRange=2018-03-20%7c2018-03-20%date&123464646464' import re res=re.findall(r"dataRange=(.*?)%7c(.*?)%",url) print(res) 29、list = [2,3,5,4,9,6],从小到大排序,不许用sort,输出[2,3,4,5,6,9](sorted和快速排序法)list = [2,3,5,4,9,6] b=sorted(list) print(b) #[2, 3, 4, 5, 6, 9] def quickSort(list): if len(list)<2: return list else: basevalue=list[0] greater=[i for i in list[1:] if i >basevalue] equal=[i for i in list if i == basevalue] less=[i for i in list[1:] if i < basevalue] return quickSort(less)+equal+quickSort(greater)print(quickSort(list)) print(quickSort(list)) #[2, 3, 4, 5, 6, 9] 30、利用min()方法求出最小值,原列表删除最小值,新列表加入最小值,递归调用获取最小值的函数,反复操作list = [2,3,5,4,9,6] new_list=[] def get_min(list): a=min(list) list.remove(a) new_list.append(a) if len(list)>0: get_min(list) return new_list new_list1=get_min(list) print(new_list1) #[2, 3, 4, 5, 6, 9] print(list) #[] 31、保留两位小数a='%0.2f'%1.335 print(a,type(a)) # 1.33 b=round(float(a),1) #返回浮点数的四舍五入值,保留1位小数 print(b,type(b))#1.3 备注:浮点数运算是不精确的,只能估算,精算时先乘以1W,相加后再除以1W 32、求三个方法打印结果def fn(k,v,dict={}): dict[k]=v print(dict) fn('one',1) #{'one': 1} 直接i将键值对传给字典 fn('two',2) #{'one': 1, 'two': 2}因为字典在内存中是可变数据类型,所以指向同一个地址,传了新的参数后,会相当于给字典增加键值对 fn('three',3,{}) #{'three': 3}因为传了一个新字典,所有不再是原先默认参数的字典 33、列出常见的HTTP状态码和意义200: OK 204:No Content 请求成功处理,没有实体返回 301: 永久移动,资源已永久分配新的uri 302: 临时移动 304:not modified 400:请求报文语法错误或参数错误 401: Unauthorized 当前请求需要用户验证或认证失败 403: Forbidden 服务器已经理解请求,但是拒绝执行,注意与401的区别:身份验证不能提供任何帮助,且请求不一样被重复提交 404:请求失败,not found 500:服务器故障或web应用故障 503:服务器超负载或停机维护 34、分别从前端、后端、数据库阐述web项目的性能优化前端优化: 1、减少http请求、例如制作精灵图 2、html和CSS放在页面上部,javascript放在页面下面,因为js加载比HTML和Css加载慢,所以要优先加载html和css,以防页面显示不全,性能差,也影响用户体验 后端优化: 1、缓存存储读写次数高,变化少的数据,比如网站首页的信息、商品的信息等。应用程序读取数据时,一般是先从缓存中读取,如果读取不到或数据已失效,再访问磁盘数据库,并将数据再次写入缓存。redis 2、异步方式,如果有耗时操作,可以采用异步,比如MQ 3、代码优化,避免循环和判断次数太多,如果多个if else判断,优先判断最有可能先发生的情况 数据库优化:1、如有条件,数据可以存放于redis,读取速度快 2、建立索引、外键等 35、使用pop和del删除字典中的"name"字段,dic={“name”:“zs”,“age”:18}dict = {"name": "zs", "age": 18} dict.pop("name") del dict['name'] 36、dict()创建字典新方法s=dict([['name','zs'],['age',18]])#列表嵌套列表 print(s) # {'name': 'zs', 'age': 18} s1=dict([('name','zs'),('age',18)]) #列表嵌套元组 print(s1)#{'name': 'zs', 'age': 18} A=zip(('a','b','c','d','e'),(1,2,3,4,5)) #zip创建字典 A0=dict(A) # {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} A1=range(10) A2=[i for i in A1 if i in A0] #[] A0的键abcde不在range(10)内 A3=[A0[s] for s in A0] #返回字典的值[1,2,3,4,5] 37、简述同源策略需同时满足: 1、协议相同(http和https是不同的) 2、域名完全相同 3、端口相同 38、简述cookie和session的区别1、session在服务器端,cookie在客户端 2、session的运行依赖session id,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效,存储Session时,键与Cookie中的sessionid相同,值是开发人员设置的键值对信息,进行了编码,过期时间由开发人员设置 3、cookie安全性比session差 39、简述多线程、多进程进程: 1、操作系统进行资源分配和调度的基本单位,多个进程之间相互独立 2、稳定性好,如果一个进程崩溃,不影响其他进程,但是进程消耗资源大,开启的进程数量有限制 线程: 1、CPU进行资源分配和调度的基本单位,线程是进程的一部分,是比进程更小的能独立运行的基本单位,一个进程下的多个线程可以共享该进程的所有资源 2、如果IO操作密集,则可以多线程运行效率高,缺点是如果一个线程崩溃,都会造成进程的崩溃 应用: IO密集的用多线程,在用户输入,sleep 时候,可以切换到其他线程执行,减少等待的时间 CPU密集的用多进程,因为假如IO操作少,用多线程的话,因为线程共享一个全局解释器锁,当前运行的线程会霸占GIL,其他线程没有GIL,就不能充分利用多核CPU的优势 40、python 中什么元素为假, 列表的复制0、空字符串、空列表、空字典、空元组、None、Falsea=['xx','yy','zz'] b=[] #使用append方法依次添加 for i in a: b.append(i) print(b) c=a.copy() #使用内置的copy方法 print(c) d=a[:] #切片 print(d) e=a #不能直接复制,a和b是一样的(id一样),做增删改会相互影响 print(e) 41、python中copy和deepcopy的区别# 不可变数据类型:数值、字符串、元组的深拷贝和浅拷贝 和赋值运算= 是一样的,id也是一样;不会改变拷贝前和拷贝后的值,相当于重新定义了一个变量; # 可变数据类型:列表、字典、集合,copy会改变拷贝前和拷贝后的值,deepcopy不会改变拷贝后的值 import copy a = [11, 12] b = [21, 22] num = 555 c = [a, b,num] #[[11, 12], [21, 22], 555] c1=copy.copy(c) #[[11, 12], [21, 22], 555] a[0]=16 #可变元素修改,会修改c和c1的值 c[2]=666 #不可变元素修改,只会修改原来的值,复制后的值不会修改 num=777 #不会改变c1和c2的值,相当于重新定义了一个变量num print(c) #[[16, 12], [21, 22], 666] print(c1) #[[16, 12], [21, 22], 555] #c1=copy.deepcopy(c) #print(c1) #[[11, 12], [21, 22], 555] 42、对foo排序,输出结果为=[0,2,4,8,8,9,-2,-4,-4,-5,-20],正数从小到大,负数从大到小foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4] a=sorted(foo,key=lambda x:(x<0,abs(x))) print(a) #[0,2,4,8,8,9,-2,-4,-4,-5,-20] 43、列表排序# 列表嵌套字典的排序,分别根据年龄和姓名排序 foo = [{"name":"zs","age":19},{"name":"II","age":54},{"name":"wa","age":17},{"name":"df","age":23}] a=sorted(foo,key=lambda x:x['name']) b=sorted(foo,key=lambda x:x['age']) print(a)#[{'name': 'II', 'age': 54}, {'name': 'df', 'age': 23}, {'name': 'wa', 'age': 17}, {'name': 'zs', 'age': 19}] print(b)#[{'name': 'wa', 'age': 17}, {'name': 'zs', 'age': 19}, {'name': 'df', 'age': 23}, {'name': 'II', 'age': 54}] #列表嵌套元祖,分别根据字母和数字排序 foo = [("age",19), ("ll",54), ("wa",17), ("df",23)] a=sorted(foo,key=lambda x:x[0])#字母 b=sorted(foo,key=lambda x:x[1])#数字 print(a)#[('age', 19), ('df', 23), ('ll', 54), ('wa', 17)] print(b)#[('wa', 17), ('age', 19), ('df', 23), ('ll', 54)] #列表嵌套列表,年龄数字相同怎么办? foo = [["age",19], ["ll",54], ["wa",17], ["df",23],["xf",23]] a = sorted(foo, key=lambda x:(x[1],x[0])) # 添加参数,按字母排序 print(a)#[['wa', 17], ['age', 19], ['df', 23], ['xf', 23], ['ll', 54]] 44、根据字符串长度排序s=['ab','abc','a','djhfdh'] b=sorted(s,key=lambda x:len(x)) print(b) #方法二 s.sort(key=len) print(s) #['a', 'ab', 'abc', 'djhfdh'] 45、举例说明SQL注入和解决方法当以字符串格式化书写方式的时候,如果用户输入的有;+SQL语句,后面的SQL语句会执行,比如例子中的SQL注入会删除数据库demo input_name = 'zs' sql = 'select * from demo where name="%s"' %(imput_name) print('正常的SQL语言', sql) # input_name = 'zs;drop database demo' sql = 'select * from demo where name="%s"' %(imput_name) print('SQL注入语句', sql) # 解决方法:通过传参数方式解决SQL注入 find_name = input("请输入物品名称:") # 创建Connection连接 conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jing_dong',charset='utf8') # 获得Cursor对象 cs1 = conn.cursor() # 安全的方式 # 构造参数列表 params = [find_name] # 执行select语句,并返回受影响的行数:查询所有数据 count = cs1.execute('select * from demo where name="%s"' ,params) # 注意: # 如果要是有多个参数,需要进行参数化 # 那么params = [数值1, 数值2....],此时sql语句中有多个%s即可 # 打印受影响的行数 print(count) 46、s =‘info:xiaoZhang 33 shandong’,用正则切分字符串输出[‘info’,‘xiaoZhang’,‘33’,‘shandong’]s ='info:xiaoZhang 33 shandong' import re res=re.split(r': ',s) print(res) 47、正则匹配以163.com结尾的邮箱email_list = ['xiaoWang@163.com','xiaoWang@16.comheihei','.com.xiaowang@qq.com'] import re for email in email_list: res=re.match(r'[\w]{4,20}@163\.com$',email) if res: print('{}是符合规则的邮箱地址,匹配的结果是:{}'.format(email,res.group())) else: print('{} 不符合要求'.format(email)) 48、递归求和 完成1+2+3+…+10的和def get_sum(num): if num >=1: res=num + get_sum(num-1) else: res=0 return res res=get_sum(10) print(res) #55 49、python字典和json字符串相互转化方法import json dic = {"name":"zs"} res=json.dumps(dic) print(res,type(res)) #字典转字符串 {"name": "zs"} ret=json.loads(res) print(ret,type(ret))#字符串转字典 {'name': 'zs'} 50、正则匹配不是以4和7结尾的手机号tels = ['13100001234','18912344321','10086','18800007777'] import re for tel in tels: ret = re.match('1\d{9}[0-3,5-6,8-9]',tel) # \d 匹配一个数字字符 {9} 匹配确定的N次 [0-3,5-6,8-9] 匹配除4 7以外的数字# if ret: print('想要的结果',ret.group()) else: print('{} 不是想要的手机号'.format(ret)) 51、简述python引用计数机制# python垃圾回收主要以引用计数为主,标记-清除和分代清除为辅的机制,其中标记-清除和分代回收主要是为了处理循环引用的难题 # 引用计数算法 # 当有1个变量保存了对象的引用时,此对象的引用计数就会加1 # 当使用del删除变量指向的对象时,如果对象的引用计数不为1,比如3,那么此时只会让这个引用计数减1,即变为2,当再次调用del时,变为1, # 如果再调用1次del,此时会真的把对象进行删除 52、求两个列表的交集、差集、并集a = [1, 2, 3, 4] b = [4, 3, 5, 6] jj1 = [i for i in a if i in b] # 在a中的i,并且也在b中,就是交集print('交集', jj1) # [3, 4] jj2 = list(set(a).intersection(set(b))) print('交集', jj2) # [3, 4] bj1 = list(set(a).union(set(b))) # 并集用union方法print('并集', bj1) # [1, 2, 3, 4, 5, 6] cj1 = list(set(a).difference(set(b))) # a中有而b中没有的 cj2 = list(set(b).difference(set(a))) # b中有而a中没有的 print('差集', cj1) # [1, 2] print('差集', cj2) # [5, 6] 53、正则表达式匹配第一个URLs = 'wow eu gold,' \ ' Lowest Price. Anywhere you see lower Price, Any Items, Message me for Discount - All Servers delivery!' import re res=re.findall(r'https://.*?\.jpg',s)[0]# 提取的是一个列表 print(res) res2=re.search(r'https://.*?\.jpg',s) print(res2.group()) #search需要加group()提取 54、Linux重定向> 和>># Linux命令重定向 >和 >> # Linux允许将命令执行结果 重定向到一个文件 # 将本应显示在终端的内容,输出/追加 到指定文件中 # > 表示输出,会覆盖文件原有的内容 # >> 表示追加,会将内容追加到已有文件的末尾 # 将 echo 输出的信息保存到 1.txt 里 echo Hello Python > 1.txt # 将 echo 输出的信息追加到 1.txt 文件的末尾 echo Hello Python >> 1.txt 55、r、r+、rb、rb+文件打开模式区别56、HTTP中请求get个post区别Get产生一个TCP包,浏览器把http header和data一起发送,服务器响应200 POST产生2个TCP包,浏览器先把 http header 发送,浏览器返回100 continue, 浏览器再次发送 data,服务器响应200 ok 57、 python读取excel方法import pandas as pd df = pd.read_excel('33.xlsx') print(df) 58、给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。二分查找def halfSearch(nums, target): low=0 #起始索引 high=len(nums)#末索引 while low item: high=mid-1 else: low=mid+1 return None nums=[2, 7, 11, 15] target=11 print(halfSearch(nums,target)) #2 59、在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并且打印出相对路径import os def search_file(dir, sname=None): if sname==None: return os.listdir(dir) if sname in os.path.split(dir)[1]:#检验文件名里是否包含sname print(os.path.relpath(dir))#打印相对路径,相对指相对于当前路径 if os.path.isfile(dir): # 如果传入的dir直接是一个文件目录 他就没有子目录,就不用再遍历它的子目录了 return None for dire in os.listdir(dir): #遍历子目录 这里的dire为当前文件名 search_file(os.path.join(dir,dire),sname) ##jion一下就变成了当前文件的绝对路径 dir=os.getcwd() #获取当前路径 print(search_file(dir,'.lnk')) 60、简述乐观锁和悲观锁悲观锁   总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。 传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。 悲观锁使用场景   比较适合写入操作比较频繁的场景,如果出现大量的读取操作,每次读取的时候都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。 乐观锁   总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。 乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁。   乐观锁使用场景   比较适合读取操作比较频繁的场景,如果出现大量的写入操作,数据发生冲突的可能性就会增大,为了保证数据的一致性,应用层需要不断的重新获取数据,这样会增加大量的查询操作,降低了系统的吞吐量。

我要回帖

更多关于 python编程100例 的文章

 

随机推荐