上课练习题-小面

Day4 - 上课练习题

一、监控日志分析

1.需求分析:找出每分钟超过100次访问的ip地址,将其加入黑名单
在这里插入图片描述
2.代码:

import time
point = 0
FILE_NAME = 'access.log'
while True:
    ips = {}
    f = open(FILE_NAME,encoding='utf-8')
    f.seek(point)
    if point == 0: # 判断是否为第一次读取
        f.read() # 将指针移动到文件最后
    else
        for line in f:
            line = line.strip()
            if line:
                ip = line.split()[0]
                if ip in ips:
                    ips[ip] +=1
                else:
                    ips[ip] = 1
    point = f.tell()
    f.close()
    for ip,count in ips.items():
        if count>=50:
            print("加入黑名单的ip是 %s " % ip)
    time.sleep(60)

二、变更文件内容的函数及调用

def op_file(filename,content=None):
    with open(filename,'a+',encoding="utf-8") as f:
        f.seek(0)
        if content:
            f.write(content)
        else:
            result = f.read()
            return result

word = op_file("student2.json")
print(word)

[result~]:

{
    "code": 0,
    "msg": "操作成功",
    "token": "xxxxx",
    "addr": "10.101.1.1",
    "phone": "182026"
}

三、判断是否为小数

使用的字符串方法:
s.count(’.’) 判断字符串中’.‘的个数
s.split(’.’) 将字符串s以’.‘进行分割
s.isdigit() 判断s是否是一个数字
s.startwith(’-’) 判断字符串s是否以‘-’开头
s.strip() 去除s字符串的左右空格符

def is_float(s):
    s = str(s)
    if s.count('.') == 1:
        left,right = s.split('.')
        if left.isdigit() and right.isdigit():
            return True
        elif left.startswith('-') and left.count('-')==1 and left[1:].isdigit() and right.isdigit():
            return True
        else:
            return False
    else:
        print(s.count('.'))
        return False
price = input("请输入价格:".strip())
#result = is_float(price)
if is_float(price):
    print("这是个小数")
else:
    print("这不是个小数")

四、创建一个replace功能的函数

使用split()和join()方法
list.split(‘字符串’)
‘字符串’.join(stu_list)

a="123acdd123bdbsadcd123bcdvfasd123"
def replace(src,old,new):
    if old in src:
        return new.join(src.split(old))
    return src
print(replace(a,'123',"你好"))

[result~]:

你好acdd你好bdbsadcd你好bcdvfasd你好

五、Redis迁移练习

import redis

r = redis.Redis(host="localhost", password="123456", port=6379, db=4,decode_responses=True)
r2 = redis.Redis(host="localhost", password="123456", port=6379, db=11,decode_responses=True)

for k in r.keys():
    k_type = r.type(k)
    if k_type == "string":
        value = r.get(k)
        r2.set(k,value)
    elif k_type == "hash":
        dic = r.hgetall(k)
        r2.hmset(k,dic)
    elif k_type == "list":
        length = r.llen(k)
        result = r.lrange(k,0,length-1)
        r2.rpush(k,*result)

六、测试环境搭建

1.第一次搭建
安装依赖软件:java、mysql、redis、mq、kafka 版本信息
2.获取代码 get 分支
3.导入基础数据(建表、导入数据)
4.修改配置文件
5.编译、打包(java需要编译,go、python、php不需要编译)
6.重启
日常部署:
1.根据提测单下载代码、更新表

七、面试题

在这里插入图片描述

from collections import defaultdict # defaultdict也是一个字典,如果指定类型为int,则没指定值得key默认值为0

# 上课代码
# def find_str(string):
#     # for s in string:
#     #     if string.count(s) > 1:
#     #         string.find(s)
#     #string = 'abcsdgsf1s23f'
#     str_index_map = defaultdict(list) # {s:[3,6],f:[9,12,13]}
#     # for index,s in enumerate(string):
#     #     if string.count(s)>1:
#     #         print("index:%s,string:%s" % (index,s))
#     #         str_index_map[s].append(index)
#     [str_index_map[s].append(index) for index,s in enumerate(string) if string.count(s) > 1]
#     for index_list in str_index_map.values():
#         start_index,end_index = index_list
#         print(string[start_index:end_index+1])

# 复习代码
def find_str(string):

    # 第一种方法:生成key为字符,value为相同字符的下标所组成的列表
    # str_index = {}
    # for index,s in enumerate(string):
    #     if string.count(s) > 1:
    #         # print("index:%s,string:%s" % (index,s))
    #         if s in str_index:
    #             str_index[s].append(index)
    #         else:
    #             str_index[s] = [index]
    # print(str_index)
    # defaultdict也是一个字典,需要指定value类型,如果类型为int,则没指定值得key默认值为0
    # 第二种方法:使用defaultdict方法,生成key为字符,value为相同字符的下标所组成的列表
    # str_index = defaultdict(list)
    # for index,s in enumerate(string):
    #     if string.count(s) >1:
    #         str_index[s].append(index)

    # 第三种方法:使用defaultdict方法,生成key为字符,value为相同字符的下标所组成的列表(列表采用列表生成式方法生成)
    str_index_map = defaultdict(list)
    [str_index_map[s].append(index) for index,s in enumerate(string) if string.count(s) > 1]
    # print(str_index_map)

    # 如果字符串中相同的字符只出现两次时,可以用如下方式进行输出
    # for index1,index_list in enumerate(str_index_map.values(),1):
    #     start_index,end_index = index_list #如果list中只有两个元素,可以直接用解包的方式输出开始值和结尾值
    #     target_str = string[start_index:end_index+1]
    #     target_str_len = len(target_str) - 2
    #     print("%s. %s %s" % (index1,target_str,target_str_len))

    # 如果字符串中相同的字符出现超过两次,需要变更输出代码
    count = 1
    for index_list in str_index_map.values():
        for index in range(len(index_list) - 1):
            start_index = index_list[index]
            end_index = index_list[index+1]
            target_str = string[start_index:end_index+1]
            target_str_len = len(target_str) -2
            print("%s.    %s    %s" % (count,target_str,target_str_len))
            count += 1

if __name__ == '__main__':
    s = 'abcsdgsf12s3df'
    find_str(s)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值