30岁测试大妈被大厂裁掉后(持续更新)面试准备2

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)

python教程

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()方法元组不可以删除、修改、添加,不可用上述方法
切片列表可以使用切片访问和修改列表元素元组支持切片访问元素,不支持修改
访问和处理速度列表相对较慢元组比列表访问和处理速度快,所以不修改只访问的情况下,建议用元组提高性能
字典列表不能作为字典的键元组可以

python教程

列表的方法解释
列表名.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中

redis测试点
雪崩,击穿,穿透
架构-秒杀系统优化思路参考
缓存架构设计

6、写一个redis的语法;

设置键值对:
redis 127.0.0.1:6379> SET runoobkey redis
OK
取出键值对:
redis 127.0.0.1:6379> GET runoobkey
"redis"

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月底的生活不只眼前的苟且,还有裁员和疫情。谢谢!

写到这里,好想唱首歌
不是英雄 不读三国
若是英雄 怎么能不懂寂寞
独自走下长坂坡 月光太温柔
~~
被裁后,听到的歌词都充满悲情【礼貌而又不失尴尬的微笑】🙂😢

编码题来啊+加油燥起来
二八定律了解一下,注意重心

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值