常见面试题2022
一.基础题
1、测试用例你一般是怎么设计的,怎么可以提高覆盖率?
答:根据需求提取测试点,通过等价类划分法、边界值分析法、错误推测法、业务场景法等设计测试用例,提高测试用例覆盖率。
2、假如让你独立负责一个大项目,你是如何开展测试的?
答:可以理解为如何保障产品质量,从需求分析理解、用例设计和评审、测试 bug 提交和跟踪、上线验证、项目复盘等等方面回答。
3、你们整个测试流程是怎样的?
答:大致分为以下几种 测试需求分析阶段、测试计划阶段、测试设计阶段、测试执行阶段、测试bug验证与回归阶段、项目上线与验证、测试版本总结与复盘。
4、假如测试任务重,时间紧,但是人手不够你怎么处理?
答:向上反馈真实情况、加派人手、争取更多时间或削减不必要需求,测试中要充分理解需求,设计用例加强评审,需求排优先级等等。
5、假如开发不认可你提出 bug,怎么办?
答:自己重新复现一下提出的 bug,如果确实是 bug,可以和开发当面沟通清楚,沟通无效则向上反馈。
6、进程和线程的区别?
答:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。一个进程中可以有多个线程,多个线程共享进程的堆和方法区 (JDK1.8 之后的元空间)资源,但是每个线程有自己的程序计数器、虚拟机栈 和 本地方法栈。
二.网络相关
1、http 和 https ,tcp 和 udp 协议区别
答:http 和 https 是应用层协议,tcp 和 udp是传输层协议。数据包在网络传输过程中,HTTP被封装在TCP包内!!
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。HTTPS和HTTP的区别主要如下:1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
tcp 和 udp 协议区别:TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来。UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!UDP 适用于一次只传送少量数据、对可靠性要求不高的应用环境。如ping命令就是直接传udp包。
2、网络七层模型,TCP/IP五层模型的协议
OSI七层模型----功能----TCP/IP协议族
应用层----文件传输,电子邮件,文件服务,虚拟终端----TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
表示层----数据格式化,代码转换,数据加密----没有协议
会话层----解除或建立与别的接点的联系----没有协议
传输层----提供端对端的接口----TCP,UDP
网络层----为数据包选择路由----IP,ICMP,RIP,OSPF,BGP,IGMP
数据链路层----传输有地址的帧以及错误检测功能----SLIP,CSLIP,PPP,ARP,RARP,MTU
物理层----以二进制数据形式在物理媒体上传输数据----ISO2110,IEEE802,IEEE802.2
TCP/IP五层模型的协议
3、tcp 为啥三次握手,为啥四次挥手,
答:因为当 Server 端收到 Client 端的 SYN 连接请求报文后,可以直接发送 SYN+ACK 报文。其中 ACK 报文是用来应答的,SYN 报文是用来同步的。但是关闭连接时,当 Server 端收到 FIN 报文时,很可能并不会立即关闭 SOCKET,所以只能先回复一个 ACK 报文,告诉 Client 端,"你发的 FIN 报文我收到了"。只有等到我 Server 端所有的报文都发送完了,我才能发送 FIN 报文,因此不能一起发送。故需要四步握手。
三、数据库
四、linux系统
五、缓存中间件相关
1、为什么使用 redis,redis 五种数据类型,如何测试 redis 的,项目中如何应用的?
答:基于内存查询效率高,高并发情况下保护数据库,string、hash、list、set、zset 五中数据类型,项目中主要用于请求 token 保存和失效,防重分布式锁,冷数据(改动量小)保存,大请求量数据预热。
2、都发现过哪些缓存方面的 bug,怎么定位的?
答:缓存和数据库数据不一致,缓存穿透,击穿,雪崩等
3、redis 穿透,击穿,雪崩机制
六、性能相关
1.你们公司性能测试怎么做的,说一下流程?
答:基本流程就是产研测三方开会、一起定下 tps 基准值,测试设计性能测试计划和测试用例、用例评审、进行压测、观测数据找出性能瓶颈,调优持续压测等等
2.TPS 上不去什么原因,怎么排查?响应时间太长怎么分析?
答:通过各种监控技术如 top 、jconsole、arthas 等排查,基本上分为一下几个方面排除负载机、cpu、内存、垃圾回收机制、数据库慢查询等方面去分析。
3.线程阻塞和死锁问题怎么去定位分析,有什么现象?
答:在发生死锁之后,程序卡住没有任何反应,但程序仍在运行,因此需要借助一些命令来排查,用 JDK 自带的命令 jstack -pid 去查看线程信息,jstack 很快就帮我们找到了死锁的位置(在实际运行中,往往 dump 一次信息,还不足以确认问题,建议多 dump 几次,如果每次 dump 都指向同一个问题,那么就可以确定是这个问题导致的线程死锁)
4.内存泄露和内存溢出有什么区别?分别会有什么现象?怎么定位分析?
答:内存溢出(Out Of Memory):就是申请内存时,JVM 没有足够的内存空间。通俗说法就是去蹲坑发现坑位满了。
内存泄露(Memory Leak):就是申请了内存,但是没有释放,导致内存空间浪费,通俗点就是占着那啥不那啥。
5.数据库是怎么监控的,sql 慢查询怎么监控分析?
答:慢sql日志配置,explain分析
6.如何进行全链路监控分析,定位性能瓶颈?
答:自行百度
7.压测线上环境都会遇到什么问题,数据隔离怎么做的?如何减小对生产影响?
答:脏数据影响真实的业务响应和数据,可以考虑落入影子库,mock 对象、或者数据带有明显标识等手段。
8.测试过程中都发现了哪些性能问题,怎么定位分析的?优化方案是什么?
答:每个人准备的问题不一致,我的就是遇到了 jvm fullgc 频繁导致接口响应时间慢,通过 java 一些命令定位分析发现 jvm 配置不合理。
七、简单算法
1.常见 排序算法,冒泡,快排等
2.数组,字符串的相关算法操作比如找一个字符串中重复最长的字符串、两数之和等
3.简单的数据结构栈,队列,链表的基本的操作等