随意的记录2021-09-02
今天主要总结一些测试基础面试题
1、redis基础数据结构有哪些?(5种)
参考博客:https://www.cnblogs.com/haoprogrammer/p/11065461.html
- string:使用:get 、 set 、 del
- hash:使用:所有hash的命令都是 h 开头的 hget 、hset 、 hdel 等
- LinkedList
- set
- zset,使用场景:排行榜
2、mq的作用
message queue,对消息异步处理,发邮件,发警告之类的,可以从mq直接获取,常见的kafka,mqtt
3、自动化日常如何执行,一次多长时间,如何缩短时间
缩短时间可以多线程,还有是服务切割,设置多个测试套件
4、jmeter压测中tps始终在一个数值
在负载逐渐升高的情况,tps不变,这并不是说明性能稳定,而是说单位时间内的单线程tps逐渐降低;再分析响应时间,响应时间也是逐渐升高,则从侧面反映出现线程的tps是下降的
5、压测内存过高如何解决
- 通过top命令,可以确认哪个进程导致cpu变高的;
- top -Hp pid 对改进程下的线程观察
- jstack 查找这个线程的信息
- jstack [进程]|grep -A [线程的16进制]
常见线程描述:
wait on monitor entry: 被阻塞的,这种情况是有问题的
runnable : 注意 IO 线程
in Object.wait(): 注意非线程池等待
???6、spring中怎么用数据库;spring ioc的理解;spring bean的理解和使用
- 引入mybatis?
- 控制反转?
7、支付回调延迟的处理
第一类,要求不高,可以第二天凌晨统一泡任务调用接口处理
第二类,要求高,针对单个查询,主动调用支付端的查询支付结果,并反馈到页面上
8、索引数据结构
数据库索引是数据库管理系统中一个排序的数据结构,主要有B数索引,hash索引两种、
哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似 B+ 树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快。
哈希索引缺点 Hash 索引只支持等值比较, Hash 索引无法被用来避免数据的排序操作,Hash 索引不支持多列联合索引的最左匹配规则,Hash 索引在任何时候都不能避免表扫描
mysql 中用的最多是 B+ 树,
B+ 树的特征:
1.有 k 个子树的中间节点包含有 k 个元素(B 树中是 k-1 个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。
B+ 树的优势:
1.单一节点存储更多的元素,使得查询的 IO 次数更少。
2.所有查询都要查找到叶子节点,查询性能稳定。
3.所有叶子节点形成有序链表,便于范围查询。
9、为什么选择redis做缓存
由于redis访问速度快,支持数据类型丰富,所以redis适合用来存储数据,再结合expire,我们可以设置过期时间然后再进行缓存的更新操作
10、数据库和缓存的数据一致性怎么保证
- 查询缓存数据是否存在
- 不存在再查询数据库
- 讲数据添加到缓存的同事返回结果
- 下次访问发现缓存直接返回缓存数据
缓存淘汰机制
10、MQ 是怎么防止消息丢失的
消息丢失分为三种情况 生产者丢失 mq 自己丢失 消费则丢失
消息确认机制