pythonmylist = [0,1,2,3,4,5,6,7,8]
mylist[-6:-1]
[3, 4, 5, 6, 7]
name不固定
json{
"code": "233",
"data": [{
"name": "1111",
"values": "asdasd"
}, {
"name": "2222",
"values": "dddeee"
}
]
}
jsonpath:$.data[?(@.name == '1111')].values
pythondata=上述json
data2dict=json.loads(data)
for item in data2dict["data"]:
if item['name'] == '1111':
values = item['values']
print(values)
浅拷贝 新开辟一块内存地址复制源对象的容器和指针,这样源对象的指针分别指向两个容器,源对象修改后,拷贝对象也被修改了,源容器新增对象时,新容器里不会新增,因为源容器的新对象指针不会被复制指向新容器 深拷贝 新开辟一块内存地址复制源对象的容器,然后递归的方式将元素复制到新容器,而容器id不同其元素指针指向各自容器,就是说新旧容器不相同里面的元素不是同一个
@Test:标记一个测试方法,用于生成测试报告中的测试用例。 @Step:标记一个测试步骤,用于生成测试报告中的测试步骤。 @Attachment:标记一个附件,用于在测试报告中添加附件信息,比如截图等。 @Description:标记一个测试用例的描述信息,用于生成测试报告中的测试用例描述。 @Epic:标记一个测试用例所属的史诗(Epic),用于生成测试报告中的测试用例分类信息。 @Feature:标记一个测试用例所属的功能(Feature),用于生成测试报告中的测试用例分类信息。 @Story:标记一个测试用例所属的用户故事(Story),用于生成测试报告中的测试用例分类信息。 @Severity:标记一个测试用例的严重程度,用于生成测试报告中的测试用例分类信息。 @Link:标记一个测试用例相关的链接,用于在测试报告中添加相关链接信息。 @Issue:标记一个测试用例相关的问题,用于在测试报告中添加相关问题信息。 @Owner:标记一个测试用例的所有者,用于在测试报告中添加测试用例所有者信息。 @Label:标记一个测试用例的标签,用于在测试报告中添加测试用例标签信息。
threading.local是Python标准库threading模块中提供的一个类,用于创建线程本地数据。线程本地数据是指每个线程都可以独立访问的数据,不同线程之间互不干扰。threading.local可以让我们在多线程编程中方便地实现线程本地数据。
使用threading.local可以通过以下步骤来创建线程本地数据:
创建一个threading.local对象:使用threading.local()函数创建一个threading.local对象。
为threading.local对象添加属性:使用setattr()函数或直接赋值的方式为threading.local对象添加属性。
在多个线程中访问线程本地数据:在每个线程中可以通过threading.local对象的属性来访问线程本地数据,不同线程之间互不干扰。
以下是一个使用threading.local创建线程本地数据的示例代码:
pythonimport threading
# 创建一个threading.local对象
local_data = threading.local()
# 在主线程中为local_data对象添加属性
local_data.name = "main thread"
def worker():
# 在子线程中为local_data对象添加属性
local_data.name = "worker thread"
print(f"Thread {threading.current_thread().name}: {local_data.name}")
# 创建两个子线程
t1 = threading.Thread(target=worker, name="Thread 1")
t2 = threading.Thread(target=worker, name="Thread 2")
t1.start()
t2.start()
t1.join()
t2.join()
# 在主线程中访问local_data对象的属性
print(f"Thread {threading.current_thread().name}: {local_data.name}")
该代码创建了一个threading.local对象local_data,并在主线程中为其添加了一个属性name,值为"main thread"。然后创建了两个子线程,在子线程中为local_data对象添加了一个属性name,值分别为"worker thread"。在子线程中打印了local_data对象的name属性,可以看到不同线程中local_data对象的name属性值不同。最后在主线程中访问local_data对象的name属性,可以看到其值仍为"main thread",证明不同线程之间互不干扰。
FROM
WORKDIR
ADD/COPY
RUN
EXPOSE
CMD
char类型:char是一种固定长度的数据类型,它需要预先指定存储的长度。例如,char(10)表示存储10个字符的字符串。如果实际存储的字符串长度小于指定长度,那么空格字符会被自动填充到指定长度。
varchar类型:varchar是一种可变长度的数据类型,它不需要预先指定存储的长度。例如,varchar(10)可以存储0-10个字符的字符串。它只会占用实际存储的字符长度的空间,不会浪费存储空间。
char类型的使用场景: 适用于存储长度固定的字符串,例如国家代码、邮政编码等。 如果存储的字符串长度相对稳定,而且需要频繁进行查询操作,使用char类型可以提高查询效率。 varchar类型的使用场景: 适用于存储长度可变的字符串,例如用户输入的文本、评论、文章等。 如果存储的字符串长度不稳定,使用varchar类型可以节省存储空间。 当需要频繁进行更新操作时,使用varchar类型可以减少数据的移动和重新排序,提高更新效率。
mysqlselect * from students group by name having age like '%1';
mysqlSELECT * FROM students WHERE age LIKE '%1';
FROM子句:从指定的表中获取数据。 JOIN子句:连接其他表中的数据。 WHERE子句:筛选符合条件的数据。 GROUP BY子句:按照指定的列分组。 HAVING子句:筛选分组后符合条件的数据。 SELECT子句:选择需要返回的列。 DISTINCT关键字:去除重复的数据。 ORDER BY子句:按照指定的列排序。 LIMIT关键字:限制返回的数据行数。 引擎执行顺序 语法解析:MySQL首先对SQL语句进行语法解析,检查SQL语句是否符合语法规范。 权限检查:MySQL接着会进行权限检查,检查当前登录用户是否有执行该SQL语句的权限。 查询优化器:MySQL会将SQL语句发送给查询优化器,查询优化器会对SQL语句进行优化,包括选择最优的索引、优化连接顺序等。 存储引擎:MySQL接着会将优化后的SQL语句发送给存储引擎,存储引擎会根据SQL语句执行相应的操作,包括读取数据、写入数据、更新数据、删除数据等。 缓存:如果查询结果已经被缓存,则MySQL会直接从缓存中返回查询结果,不需要访问存储引擎。
Redis 单线程指的是「接收客户端请求->解析请求 ->进行数据读写等操作->发送数据给客户端」这个过程是由一个线程(主线程)来完成的
Redis 的大部分操作都在**内存中完成**,并且采用了高效的数据结构,因此 Redis 瓶颈可能是机器的内存或者网络带宽,而并非 CPU,既然 CPU 不是瓶颈,那么自然就采用单线程的解决方案了; Redis 采用单线程模型可以**避免了多线程之间的竞争**,省去了多线程切换带来的时间和性能上的开销,而且也不会导致死锁问题。 Redis 采用了** I/O 多路复用机制**处理大量的客户端 Socket 请求,IO 多路复用机制是指一个线程处理多个 IO 流,就是我们经常听到的 select/epoll 机制。简单来说,在 Redis 只运行单线程的情况下,该机制允许内核中,同时存在多个监听 Socket 和已连接 Socket。内核会一直监听这些 Socket 上的连接请求或数据请求。一旦有请求到达,就会交给 Redis 线程处理,这就实现了一个 Redis 线程处理多个 IO 流的效果。
String(字符串):最基本的数据类型,可以存储字符串、整数或者浮点数。 Hash(哈希):类似于关联数组,可以存储多个键值对。 List(列表):包含多个字符串元素,可以进行插入、删除、查找等操作。 Set(集合):包含多个字符串元素,元素之间没有顺序,可以进行添加、删除、查找等操作,同时还支持集合间的交集、并集、差集等操作。 Sorted Set(有序集合):类似于集合,但每个元素都有一个分数,可以按照分数进行排序,同时还支持按照索引范围和分数范围进行查询。
remote dictionary server远程字典服务,解耦硬件,业务系统不同模块可能分布在不同机器上
AOF 日志:每执行一条写操作命令,就把该命令以追加的方式写入到一个文件里; RDB 快照:将某一时刻的内存数据,以二进制的方式写入磁盘; 混合持久化方式:Redis 4.0 新增的方式,集成了 AOF 和 RBD 的优点
selenium如何定位前端组件化的元素,该元素无任何固定属性路径不固定
页面对象:每个页面都对应着一个页面对象,页面对象中包含了页面中的所有元素和操作方法。 操作方法:操作方法用于模拟用户在页面上的操作,例如点击按钮、输入文本等。
一个线程组中有5个api请求,其中有2个api用到用户自定义变量手机号码mobile,这个线程组给了10个并发,循环5次,问这个手机号mobile不同的个数是多少
由于循环了5次,因此在整个线程组中,mobile变量不同的个数为:2 * 5 = 10。
TPS QPS 响应时间 并发数 错误数 cpu 内存 硬盘 网络延迟
Mysql性能监控用过那些?怎么分析一个接口响应时间比较慢,高并发下连接数打满挂掉了,cpu飙升100%,如何分析?怎么看出那些表锁或者事务锁?怎么去解决这些问题?
使用 MySQL Performance Schema 或者其他性能监控工具, 查看哪些 SQL 语句执行时间和执行次数较多,找到性能瓶颈所在。 分析 SQL 语句执行计划, 检查是否存在全表扫描或者索引不合理等问题,对 SQL 语句进行调优。 检查 MySQL 的连接数、线程数等配置是否合理, 是否存在连接池满或者线程池满的情况,对连接数和线程数进行调整。 检查 MySQL 的缓存配置是否合理, 是否存在缓存击穿或者缓存雪崩等问题,对缓存进行调整。 检查是否存在死锁、表锁或者事务锁等问题, 使用 MySQL Performance Schema 或者其他工具查看锁等待情况,对锁进行优化。 检查服务器硬件配置是否足够, 例如 CPU、内存、磁盘等,是否需要升级硬件。 对于高并发和大数据量的情况,可 以考虑使用 MySQL 分库分表技术,将数据分散到多个数据库和表中,降低单个数据库和表的负载。
SHOW PROCESSLIST;
开启慢查询日志 SET GLOBAL slow_query_log = 1; SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log'; SET GLOBAL long_query_time = 1; 关闭慢查询日志: SET GLOBAL slow_query_log = 0; slow_query_log_file#查看慢日志文件路径
二进制日志:二进制日志是MySQL用来记录所有数据修改操作的日志,包括插入、更新、删除等操作。 错误日志:错误日志是MySQL用来记录所有错误信息的日志,包括启动错误、运行错误、SQL语法错误等。 慢查询日志
二进制日志可以用来进行数据恢复、主从复制、数据同步等操作。
用SHOW OPEN TABLES
SHOW OPEN TABLES WHERE Table
LIKE 'table_name' AND Database
LIKE 'database_name';
SHOW PROCESSLIST;
SHOW STATUS LIKE 'Threads_connected';