最近面试【测试开发岗】的题,答案如下
1、输出json文件里某个键的值
// config.json
{"key": "demo",
"value": "demo value"}
import json
with open("config.json", "r") as f:
json_str = f.read()
your_dict = json.loads(json_str)
# get key
print(your_dict["key"])
方法 | 描述 | 用法 |
---|---|---|
json.dumps | 将 Python 对象编码成 JSON 字符串 | data2 = json.dumps(data) |
json.loads | 将已编码的 JSON 字符串解码为 Python 对象 | text = json.loads(jsonData) |
2、将两个数组按照键值对的形式,以json格式输出;
A = ['a',1,'c']
B = ['e',2,3]
D = dict(zip(A,B))
print(json.dumps(D))
3、元组和列表的区别;
元组和列表都属于序列,它们又都可以按照特定顺序存放一组元素,类型不受限制,只要是python支持的类型都可以。列表类似用铅笔在纸上写下的歌词,写错了能擦掉;元组类似用钢笔写的,擦不掉,除非换纸。区别:
区别 | 列表 | 元组 |
---|---|---|
可变 | 列表为可变序列,元素可以随时修改或者删除 | 元组属于不可变序列,不可修改,除非整体替换 |
方法 | 列表可以使用append()\extend()\insert()\remove()\pop()方法 | 元组不可以删除、修改、添加,不可用上述方法 |
切片 | 列表可以使用切片访问和修改列表元素 | 元组支持切片访问元素,不支持修改 |
访问和处理速度 | 列表相对较慢 | 元组比列表访问和处理速度快,所以不修改只访问的情况下,建议用元组提高性能 |
字典 | 列表不能作为字典的键 | 元组可以 |
列表的方法 | 解释 |
---|---|
列表名.append(元素对象) | 添加元素 |
列表名a.extend(列表名b) | 追加b列表到a后面 |
列表名.remove(元素值) | 删除不确定位置的元素值 |
列表名.count(元素) | 统计元素在列表中出现的次数 |
列表名.insert(索引位置,元素对象) | 将指定对象插入列表的指定位置 |
列表名.pop() | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。 |
4、字符串逆序,时间复杂度是0和1的写法 ;
#字符串反转
方法一:字符串切片
str = input()
print(str[::-1])
简写:print(input()[::-1])
方法二:reversed 函数
str = input()
a = reversed(str)
print(''.join(a))
方法三:reverse 函数
while True:
try:
s = input()
b = list(s)
b.reverse()
print(''.join(b))
except:
break
- 时间复杂度待学习……持续更新
5、测试redis的时候需要注意什么;
redis是开源的,高性能的 key-value 数据库,可以用作数据库、缓存、消息中间件。支持多种类型数据结构。对于多数情况,使用redis的主要场景是帮助关系型数据库mysql减轻访问压力并提升查询效率。
redis测试注意点 | 具体描述 |
---|---|
数据过期 | 是否需要设置过期时间?过期时间是否合理?设置了过期时间,数据过期后是否会删除? |
redis存储空间 | 高峰时期redis需要的最大空间是多少?元数据+业务数据去判断;当前设置的内存大小是否能满足? |
性能 | 关注redis的延时、超时。查询是否存在慢日志。查询是否存在异常redis日志。查询拒绝连接数是否为0。 |
缓存命中率 | 查询分析缓存命中率和缓存未命中率是否合理 |
1什么是雪崩,怎么引起的,2解决方法 | 1)缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。和缓存击穿不同的是, 缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库;2)缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。设置热点数据永远不过期。 |
什么是缓存穿透,原理?3种解决方法? | 某个id数据库不存在,黑客一直访问这个id,导致服务崩溃。1)接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截;2)从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力攻击;3)加一个布隆过滤器,快速判断key是否在数据库中,然后过滤数据库请求。 |
缓存击穿,解决方法 | 热点数据过期了,大量请求打在一个过期的热点数据上,导致数据库崩了。1)热点数据永不过期,如果一定时间内访问量到达一定数量,就重置过期时间,这样热点数据就不会过期;2) 互斥锁,只有一个线程取数据 |
数据一致性 | (1)淘汰缓存是⼀种通⽤的缓存处理⽅式(2)先淘汰缓存,再写数据库的时序是毋庸置疑的(3)服务化是向业务⽅屏蔽底层数据库与缓存复杂性的⼀种通用方式 |
秒杀活动思路 | 1) 前端-秒杀开始时,更换javascript文件,灰色按钮变成可点->设置5s可点一次。2) 后端->一个uid 5s请求只能到达一次->后端增加任务队列,由队列来控制业务->使用缓存,把数据放在cache中 |
6、写一个redis的语法;
设置键值对:
redis 127.0.0.1:6379> SET runoobkey redis
OK
取出键值对:
redis 127.0.0.1:6379> GET runoobkey
"redis"
7、快排的思路;
快速排序其实是在冒泡排序的基础上改进的。冒泡排序是每次遍历都是两两比较,取出一个最大的放在后边。
快速排序的基本思想是:通过一趟排序将要排序的数据分割成两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程递归进行,以此达到数据变成有序序列。
根据一趟快排的规则,先定下一个关键数据,通常都是数据的第一位,然后进行比较。
8、分糖果求值;
有N个小朋友站在一排,每个小朋友都有一个评分
你现在要按以下的规则给孩子们分糖果:
每个小朋友至少要分得一颗糖果
分数高的小朋友要他比旁边得分低的小朋友分得的糖果多
你最少要分发多少颗糖果?
class Solution:
def candy(self , ratings ):
res=[1]*len(ratings)
for i in range(1,len(ratings)):
if ratings[i]>ratings[i-1]:
res[i]=res[i-1]+1
for i in range(len(ratings)-1,0,-1):
if ratings[i-1]>ratings[i] and res[i-1]<=res[i]:
res[i-1]=res[i]+1
return sum(res)
9、返回一个字符串里只出现1次的第一个元素和位置;
Python:返回字符串中第一个不重复的字母和位置
如果是下标的话,不需要返回i+1
# -*- coding: utf-8 -*-
def first_char(str):
dict1 = {}
for i in range(len(str)):
#累计字符的出现次数
if str[i] in dict1:
dict1[str[i]] += 1
#只出现一次,key对应的value就记1次
else:
dict1[str[i]] = 1
for i in range(len(str)):
if dict1[str[i]] == 1:
return str[i], i+1
if __name__ == '__main__':
str1 = input('please input string:')
print(first_char(str1))
第二种写法
while True:
try:
a = input()
for i in a:
if a.count(i) == 1:
print(i)
break
else:print(-1)
except:break
10、查找两个字符串a,b中的最长公共子串
while True:
try:
s1=input()
s2=input()
if len(s1)>len(s2):#总体思路:从短的字符串中取子串,看其在长字符串中是否存在
s1,s2=s2,s1
length=0
for i in range(len(s1)):
for j in range(i+1,len(s1)):
sub=s1[i:j+1]
if sub in s2 and j-i>length:
res=sub
length=j-i
print(res)
except:
break
11、统计输出字符串中每个字符的个数
st = input("输入字符串")
dic = {}
for i in st:
if i in dic:
dic[i] +=1
else :
dic[i] = 1
print(dic)
[牢骚]2021年12月底的生活不只眼前的苟且,还有裁员和疫情。谢谢!
写到这里,好想唱首歌
不是英雄 不读三国
若是英雄 怎么能不懂寂寞
独自走下长坂坡 月光太温柔
~~
被裁后,听到的歌词都充满悲情【礼貌而又不失尴尬的微笑】🙂😢