04 2022 档案
摘要:def func1(n, base): convertion = '0123456789ABCDE' if n < base: return convertion[n] else: return func1(n // base, base) + convertion[n % base]def fun
阅读全文
摘要:# 判断是否是回文def func1(s: str): s1 = list(s) while len(s1) > 1: if s1.pop() != s1.pop(0): return False return True# 求子串中最长回文def func2(s: str): s1 = list(s
阅读全文
摘要:# 打印机设置class Printer: def __init__(self, ppm): self.pagerate = ppm self.currentTask = None self.timeRemaining = 0 def tick(self): if self.currentTask
阅读全文
摘要:# 热土豆/约瑟夫问题def func1(s: list, n: int): temp = [] while len(s) > 0: if len(s) > 1: for i in range(n): s.append(s.pop(0)) temp.append(s.pop()) return te
阅读全文
摘要:# 中缀表达式转为后缀表达式def func1(s: str): s1temp = [] s2temp = [] for i in s.split(): if i.isdigit(): s1temp.append(i) elif i in '*/+-': s2temp.append(i) elif
阅读全文
摘要:# 十进制转化为N进制def func1(s: str, s_base:int, n_base: int): baselist = '0123456789ABCDEF' res = str(s) # 原数不是十进制时,先转为十进制:累加 if s_base != 10: ssum = 0 s = s
阅读全文
摘要:# 匹配()def func1(s: str): temp = [] for i in s: if i in '(': temp.append(i) else: if i in ')': if temp: temp.pop() else: return False if temp: return F
阅读全文
摘要:# 逐一比对法def func1(s1: str, s2: str): if len(s1) != len(s2): return False for i in range(len(s1)): if s1[i] in s2: s2 = s2.replace(s1[i], '') if s2 == '
阅读全文
摘要:import geventfrom gevent import monkeyimport time# monkey.patch_all() # 补丁包,协程有IO等待时,触发协程切换def work1(): for i in range(10): print(f' work1 {i}') # tim
阅读全文
摘要:from greenlet import greenletdef work1(): for i in range(10): print(f' work1 {i}') g2.switch()def work2(): for i in range(10): print(f' work2 {i}') g1
阅读全文
摘要:from queue import Queueq = Queue()def func1(): while not q.empty(): i = q.get() print(f' func1 {i}') yield idef func2(): while not q.empty(): i = q.ge
阅读全文
摘要:进程与进程之间不共享全局变量 from multiprocessing import Process, Queueimport time,osdef func1(q:Queue): while not q.empty(): print(' func1 {0} {1}'.format(q.get(),
阅读全文
摘要:from multiprocessing import Pool, Managerimport time,osdef func1(q): print(' func1 {0} {1}'.format(q.get(), os.getpid())) time.sleep(1)if __name__ ==
阅读全文
摘要:import queuefrom threading import Threadimport timeq = queue.Queue()class Productor(Thread): def run(self) -> None: count = 0 while True: if q.qsize()
阅读全文
摘要:队列: import queue# 1. 先进先出q1 = queue.Queue(5)q1.put(11)q1.put(22, block=False) # 插入不等待q1.put_nowait(33) # 插入不等待print(q1.qsize()) # 队列长度q1.get()q1.get(b
阅读全文
摘要:线程效率: 1、CPU计算密集型:单线程 比多线程 快 2、网络IO密集型:多线程 比 单线程 快 import requestsimport threadingimport timenum = 0def func1(): for i in range(100): # global num # nu
阅读全文
摘要:多个线程互相等待锁,会导致死锁 import threadingimport timemetalocA = threading.Lock()metalocB = threading.Lock()num = 0def func1(): for i in range(1000000): global n
阅读全文
摘要:加锁的作用: 1、多个线程同时修改同一个全局变量时,确保不被CPU切片阻断 2、加锁会加长执行时间 import threadingimport timemetalocA = threading.Lock()# metalocB = threading.Locknum = 0def func1():
阅读全文
摘要:import threadingimport timeimport requestsclass MyThreading(threading.Thread): def __init__(self, url): self.url = url # 给run方法传参,只能通过 self的属性 super()
阅读全文
摘要:import threadingimport timefrom time import sleepdef func1(): for i in range(4): sleep(1) print(' func1 ', threading.current_thread())def func2(): for
阅读全文
摘要:(1)使用type直接创建类 Test = type('Test01', (object,), {'name': 'haha', 'age': 18})t1 = Test()print(type(t1))print(Test.__dict__) (2)继承type,用继承类创建类 class MyT
阅读全文
摘要:(1)描述器类 class Field: # 设置描述器类对象属性时调用 def __set__(self, instance, value): print(' __set__ ') self.value = value # 获取描述器对象属性时调用 def __get__(self, instan
阅读全文
摘要:class MyClass(object): # 设置对象属性时调用 def __setattr__(self, key, value): print(' __setattr__ ') super().__setattr__(key, value) # 访问属性不存在,__getattribute_
阅读全文
摘要:(1)私有属性 class MyClass: attr1 = 'attr1' # 共有属性 _attr2 = '_attr2' # 私有属性,可直接访问 __attr3 = '__attr3' # 私有属性,改变了属性名:_MyClass__attr3m1 = MyClass()print(m1.a
阅读全文
摘要:class Animal: def run(self): print(' animal run ')class Cat(Animal): def run(self): print(' cat run ')class Dog(Animal): def run(self): print(' dog ru
阅读全文
摘要:class MyOperator: def __init__(self, data): self.data = data def __add__(self, other): return self.data + other.data def __sub__(self, other): return
阅读全文
摘要:(1)文件读取--上下文管理器 with open(filename,'w') as f : class MyOpen: def __init__(self, filename, mode, encoding='utf-8'): self.filename = filename self.mode
阅读全文
摘要:class Decorator: def __init__(self, func): self.func = func def __call__(self, *args, **kwargs): print(' call ') return self.func(*args, **kwargs)@Dec
阅读全文
摘要:(1)不用装饰器实现 class MyClass2(object): __instance = None def __new__(cls, *args, **kwargs): if not cls.__instance: cls.__instance = object.__new__(cls) re
阅读全文
摘要:类方法和静态方法的区别: (1)类方法可以操作类属性,静态方法不能操作类属性 (2)类方法】静态方法可以用 类.类方法调用;实例方法只能通过实例对象调用 class MyClass: def __init__(self, name): self.name = name # 设置类方法 @classm
阅读全文
摘要:(1)装饰器函数--装饰无参函数 def login(func): print("login11111") def fun(): print("login2222") func() return fun@logindef func(): print('func ')# func() (2)装饰器函数
阅读全文
摘要:闭包 代码: def fun(num): def run(): print('num:', num) return runfun(10)() 条件: 1. 函数中嵌套函数2. 外层函数返回内层嵌套函数名3. 内层函数调用外层函数的非全局变量 作用: 实现数据锁定,提高稳定性
阅读全文
摘要:(1)filter:过滤函数,根据函数过滤列表 方法一:输出:[1, 3, 5, 3, 7] def fun(n): return n < 10li = [21, 34, 1, 3, 34, 5, 3, 7, 10]res = filter(fun, li)print(list(res)) 方法二:
阅读全文
摘要:# 递归求阶乘def fun(n): if n <= 1: return n else: return n * fun(n - 1)print([fun(i) for i in range(10)])# 非递归求阶乘def fun1(n): res = 1 i = 1 if n == 0: retu
阅读全文
摘要:# 生成器def gen_func(): for i in range(10): j = yield i print("j=", j)g = gen_func()print(next(g))print(next(g))print(g.send(10))g.close()# g.throw(Value
阅读全文
摘要:httpRunner脚本执行命令:hrun testcase/xxx.py --html=reports/test.html post请求: class TestCaseKtpLogin(HttpRunner): # 全局配置 config = ( Config("登录") .verify(Fals
阅读全文
摘要:h5、web端网页的测试的区别:(1)h5需要更多的适配场景: 机型适配 -- 让不同手机有相同展示 应用适配 -- 微信浏览器、手机浏览器、APP内置 H5秒开 -- app内置h5,秒开就是让打开速度媲美原生 h5与APP协作 -- H5有跟端上协作的场景,jsBridge调用端上能力 (2)事
阅读全文
摘要:1、yaml文件 headers: nulljson: name: $name parentid: $parentidmethod: postparams: access_token: $access_tokenurl: https://$host/cgi-bin/department/create
阅读全文
摘要:(1)遇到python操作数据库报错 mysql.connector.errors.NotSupportedError: Authentication plugin 'caching_sha2_password' is not supported (2)解决方法: 1. 修改数据账号密码方式 sel
阅读全文
摘要:https://blog.csdn.net/u010698107/article/details/111431111
阅读全文
摘要:(1)monkey多机并行 (2)手机端monkey执行原理: 1. 将monke.jar设置为系统环境变量 2. 使用exec app_process命令执行tv.panda.test.monkey.Monkey:monkey入口类 (3)appcrawler遍历过程
阅读全文
摘要:问题:如果等待元素可点击后,实际点击元素仍然不可点 解决方案:循环点击,直到下一步中可用于判断的元素出现位置
阅读全文
摘要:1. cookie文件: {"name":"keyname", "value":"keyvalue"} 2. 遇到提示cookie domain不对的问题 解决方法:在添加cookie前,先访问一次网站 import shelvefrom selenium import webdriverfrom
阅读全文
摘要:redis并发竞争问题 解决方案: redis生产环境部署:
阅读全文
摘要:(1)redis和mysql双写 1. 读:先读缓存,再读数据库 2. 写:先删缓存,再写数据库 (2) 修改数据库和修改缓存不一致问题 (3)不一致问题解决方案 (4)读写并发,双写不一致 (5) 解决方案 数据库与缓存读写操作串行化
阅读全文
摘要:(1)缓存雪崩现象 缓存机器宕机,请求直接打到数据库,数据库打挂掉,重启无效 (2)缓存雪崩解决方案 事前:保证redis集群高可用 事中:做应用服务器本地缓存ehcache、hystis限流组件降级 事后:redis持久化 (3)缓存穿透 请求的数据,库和缓存里都没有,会直接打到数据库又没法放到缓
阅读全文
摘要:redis持久化+备份方案 企业级redis集群架构:海量数据、高并发、高可用 持久化主要是灾难恢复,数据恢复,也可以归类未高可用
阅读全文
摘要:redis读写分离,主从支持10w高并发 主从架构 (1)slave第一次连接 (2)主从复制断点续传 (3)无磁盘化复制
阅读全文
摘要:客户端和redis通信流程 单线程模型为什么效率也高? -- 非阻塞io多路复用队列,接收请求 -- 事件处理器,纯内存操作
阅读全文
摘要:1. 背景: 异常日志是写到es里了 线上事务,es集群出现问题,没法写,最后出现线上几十台机器,全部因为这一行代码,全体CPU 100%,卡死了。 2. 定位排查 (1)定位耗费CPU的进程 top -c (按CPU排序) (2)定位线程 top -Hp 43987 (3)定位代码
阅读全文
摘要:socket属于传输层编程规范,基于tcp协议。 使用socket协议,打包成tcp包,然后再各种封包,网关转发
阅读全文
摘要:1. 事务的特性 (1)原子性 一起成功,一起失败 (2)一致性 数据执行前后都是对的 (3)隔离性 2个事务之间不影响 (4)持久性 数据修改后,永久有效 2. 事务的隔离级别: (1)(读未提交): (2)(读已提交,不可重复读) (3) (数据已提交,可重复度) (5)(串行化)解决(幻读)问
阅读全文
摘要:(1)很多年前的报表系统: (2)B-树 左边小,右边大,介于中间进入下一层 (3)B+树 非叶子节点,不存储data,只存储索引key (4)b+树优化 叶子检点之间加顺序指针,方便范围查找 (5)myisam存储引擎的索引 数据文件和索引文件是分开的 (6)innodb存储引擎的索引 必须有主键
阅读全文
摘要:tcp三次握手: 为什么是三次握手: 如果只有2次握手,会出现服务端资源浪费 第一次握手卡住后,服务端最后接收到后,发第二次握手,就开始开辟资源等客户端发送数据。 如果是三次握手,客户端可在第三次发送复位连接,让服务端释放资源 四次挥手:
阅读全文
摘要:浏览器发送请求后: 1. dns服务器进行域名解析,返回ip地址 2. 四层协议封装数据包 --> 以太网包 3. 通过网关转发 --> 目标主机 4. 目标主机接收到数据包后: 层层解包 --> 应用处理请求数据 --> 得到返回数据的请求增温 --> 层层封装成 以太网包 --> 网关转发到浏览
阅读全文
摘要:1. tcp/ip四层模型 (1)数据链路层(以太网协议) 以太网怎么判断是发送给哪台主机的? 在局域网内发广播,其他主机接收到后,进行mac地址匹配,匹配就接收 (2)网络层(ip协议 ipv4、ipv6) 哪些电脑属于一个局域网呢? ip、子网掩码,划分子网 子网内部通信:交换器发送广播 子网之
阅读全文
摘要:kafaka消息顺序错乱 (1)场景:消费者内部进程同时进程处理时,数据入库错乱 (2)处理方案:搞多个内存队列
阅读全文
摘要:1. rabbitmq消息顺序错乱 (1)场景:顺序消息 分发给不同消费者后,处理速度不一样,写入数据库书序乱掉 (2)解决方案: 给每个消费者开一个queue,需要保证数据的3个数据,放在同一个queue中
阅读全文
摘要:1. kafka自己丢消息的场景 kafka接受到消息时,leader宕机,切换的follower没有拿到消息 解决方案:设置leader和follower同步完成才算本次写成功,否则会无限次自动重发、消息写入成功判定标准、retries的值 ==> 这样能确保消息肯定不会丢 2. 消费者弄丢消息
阅读全文
摘要:1. 丢失消息场景 (1)生产者写消息网络丢失 (2)rabbitmq收到消息,mq故障 (3)消费者收到消息后,消费者故障 2. 对应处理方案 (1)生产者弄丢了数据 <1> 基于事务,rabbitmq报错,则回滚重发 问题:事务机制,是同步的,会卡主等待消息发送成功,会导致生产者发送消息的吞吐量
阅读全文
摘要:kafka mq重复消费问题 1. 实现逻辑:offset --消息顺序的序号,消费完,消费端会提交回去 2. 消息重发场景: 消费者不是说消费完一条数据就立马提交offset,二十定时定期提交一次offset 问题:准备提交但未提交时,消费者进程被重启, 会出现已消费未提交的offset丢失 ka
阅读全文
摘要:1. rabbitMQ普通集群模式 非高可用 缺点1:可能会在rabbitmq集群内部产生大量数据传输 缺点2:可用性几乎没法保障,如果queue所在节点宕机,消息请求就丢失了 2. rabbitmq的镜像集群模式 高可用:任何一个节点宕机,其他节点上海包含着完整的元数据,别的消费者还可以再其他节点
阅读全文
摘要:1. MQ - 解耦 (1)不用MQ处理解耦 其他系统的接入,导致额外修改 其他系统的稳定性影响 是否要重试 (2)使用MQ 2. MQ-异步 (1)不用MQ的同步高延时场景 (2)使用MQ进行异步化之后的接口性能优化 3. MQ-削峰 (1)不使用MQ高峰期系统被打死的场景 (2)使用MQ进行削峰
阅读全文
摘要:https://learngitbranching.js.org
阅读全文
摘要:yaml描点: yaml文件内容: defaults: &defaults adapter: postgres host: localhostdevelopment: database: myapp_development <<: *defaultstest: database: myapp_tes
阅读全文
摘要:存储过程一: DROP PROCEDURE if EXISTS test;delimiter ;;CREATE PROCEDURE test()BEGIN DECLARE i INT; DECLARE s2 VARCHAR(100); set i =300; set s2='lala'; while
阅读全文
摘要:print(" ")list2 = [1, 2, 3, 4, 5, 6, 55, 33, 66, 87]for index, item in enumerate(list2[:]): print(index,' ',item) list2.remove(item)print(list2)print(
阅读全文
摘要:1、练习 case。。。 when 。。 then 。。 else 。。。 end as 。。。 SELECTCASE WHEN degree BETWEEN 0 AND 59 THEN '及格' WHEN degree BETWEEN 60 and 80 THEN '良好' ELSE '优秀'EN
阅读全文
摘要:# time,计算2天前的时间 now_timestamp = time.time()two_day_before = now_timestamp - 60*60*24*2two_days_local = time.localtime(two_day_before) time.strftime('%
阅读全文
摘要:1. local用于函数内部局部变量生命 2. 函数定义框架: rand() { } 3. 执行命令语句用 ``括起来 4. [[]] 用于判断条件 5. (()) 用于计算表达式 6. ${line// /..} 将空格替换成2个.. : aaa bb cc -->aaa....bb......c
阅读全文
摘要:云真机:http://testerhome.com/ZhouYixun databus:https://www.bilibili.com/video/BV1gE411M7cs?p=13 http协议、mysql:https://www.bilibili.com/video/BV1WE411p7yH?
阅读全文
摘要:(1)按文件类型查找 # find ./ -type d 目录 # find ./ type f 文件 说明: ./ 是查找范围 (2)按文件名查找 # find ./ -name fullname 完整名称 # find ./ -name .*partname.* 把文件都当目录进行匹配,文件按.
阅读全文
摘要:参考:https://blog.csdn.net/boonya/article/details/83012263 (1)压缩 # tar -zcvf testsh/* testsh.tar.gz 将testsh目录下的所有文件压缩到 testsh.tar.gz 中 -z, --gzip格式打包 -c
阅读全文
摘要:# top (1) # uptime 当前时间 开机了多长时间 活跃用户数 平均负载:1分钟 5分钟 15分钟 平均负载统计:runnable(运行状态的进程) uninterruptable(不可间断状态的进程) cpu core=1,load average=1 ,利用率1 期望不大于3 cpu
阅读全文
摘要:# awk -F : '{print $1}' /etc/passwd | sed ':1;N;s/\n/|/g;t1' ;打印第一列的数据并用|分割替代以前的\n分割 :1 代表打一个标记1 t1 跳转到标记1 N 将读取到的数据追加到模式空间(包含换行符) # sed 's#:x:[0-9]:*
阅读全文
摘要:脚本1: # vi test.sh # !/bin/bash echo $1,$2,$3 echo "文件名" $0 echo "参数变量 "$# echo "all "$* echo "return "$? # bash test.sh 1 2 3
阅读全文
摘要:数组: # a = (a b c d e) # echo ${a[0]} # echo ${a[*]} # echo ${a[@]} b[0] = 1 if 语句: a = 20 b =10 if [ $a -eq $b ]; then echo "=";fi for语句: for loop in
阅读全文
摘要:文件操作: r 4 w2 x1 # ls -l # chmod 777 test.txt # ls -ld test.txt 网络命令: # netstat # netstat -lnpt 性能: # top # ps -aux grep命令: # grep -nv word file.txt ;
阅读全文
摘要:配置文件: # 字典platformVersion : 7.1platformName : AndroiddeviceName : name : 11 sex : hehe age : 13demo: - hello - yaml - yeahtest : ttttt 文件获取: import ya
阅读全文
摘要:import timefrom appium import webdriverfrom appium.webdriver.common.mobileby import MobileByfrom appium.webdriver.common.touch_action import TouchActi
阅读全文
摘要:import timefrom appium import webdriverfrom appium.webdriver.common.mobileby import MobileByfrom appium.webdriver.common.touch_action import TouchActi
阅读全文
摘要:loc = driver.find_element(MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("搜索")')print(loc.size)'''# 等待loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new
阅读全文
摘要:from appium import webdriver# 平台类型# 手机操作系统# 手机系统版本# 设备名称# 是否重置desired_caps={}desired_caps["platformName"]="Andriod"desired_caps["platformVersion"]="7.
阅读全文
摘要:1、安装Jenkins-allure插件 allure-jenkins-plugin,要下载.hpi格式的文件 2、Jenkins安装插件 3、在Jenkins上配置全局配置 4. 全局配置--配置jdk1.8 可配置多个jdk版本 5. Jenkins上配置 -- 执行机工具 6. Jenkins
阅读全文
摘要:master/slave Jenkins部署到Linux服务器,运行在Windows本地 1、slave向master报道 Jenkins配置 -- 节点管理 -- 配置节点 -- 通过launch,安装jar包连接主机 2. 正常配置Jenkins任务 区别点:在General中设置 Restri
阅读全文
摘要:1. 如图的元素通过selenium3 By.XPATH定位不到 解决方法: 用selenium2的定位方法在body里面找 self.driver.find_element(By.TAG_NAME, "body").find_elements_by_link_text("创建成功!")
阅读全文
摘要:1. 定位工具 2. 层级关系 3. 上传代码 直接定位Windows元素,然后进行操作 备注:不同浏览器,一级窗口的标题可能不同,需要修改
阅读全文
摘要:import timefrom selenium import webdriverfrom selenium.webdriver import ActionChains, Keysfrom selenium.webdriver.common.by import Byfrom selenium.web
阅读全文
摘要:import timefrom selenium import webdriverfrom selenium.webdriver import ActionChains, Keysfrom selenium.webdriver.common.by import Byfrom selenium.web
阅读全文
摘要:import timefrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.wait import WebDriverWaitfrom sele
阅读全文
摘要:from selenium import webdriverfrom selenium.webdriver.common.by import Byoption = webdriver.ChromeOptions()option.add_experimental_option('detach', Tr
阅读全文
摘要:一、创建构建项目 二、配置项目 1. General 项目名称 (最好不要写中文) 描述 设置执行记录保存条数 2. 源码管理 None: 本地 Git: git目录 Subversion: sub目录 # 走SVN托管平台,拉取代码 到工作空间 其他的话,需要安装插件 3. 构建触发器 达到什么条
阅读全文
摘要:import res = 'www.ddd.www.com' # 目标字符串res = re.match('(w)(ww)',s) #全匹配 头部匹配print(res.group(1)) # group() 拿到匹配的全字符 分组 根据正则里面的()分组s = 'helloworldhaha' #
阅读全文
摘要:import osimport smtplibfrom email.mime.image import MIMEImagefrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom em
阅读全文