软件测试经典面试题三

整理收集一些自己遇到的面试题及部分大家的题,自己来作答,回答不妥或者不全的还请大家指正

网络

(一)简单描述下TCP协议

TCP:传输控制协议,是传输层通信协议。它有面向连接、可靠、字节流传输等特点
TCP建立连接时,需要三次握手协议
TCP三次握手的过程如下:

客户端发送SYN报文给服务端,进入SYN_SEND(SEQ=X)状态
服务端收到SYN报文,回应一个SYN(SEQ=Y) ACK(ACK=X+1)报文,进入SYN_RECV状态
客户端收到服务端的SYN报文,回应一个ACK(ACK=Y+1)报文,开始建立连接

TCP/IP作用是什么?

TCP/IP协议是一套网络通信标准,让全世界的各种不同的设备之间可以进行通信

TCP与UDP的区别?

TCP传输控制协议 。UDP用户数据报协议
TCP对资源要求比较多,UDP对资源要求比较少
TCP可以保证数据的正确性,UDP有可能会丢包
TCP可以保证数据的顺序,UDP不会保证

(二)网络7层模型是那7层?列举一些具体的应用实例

从下到上,物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
物理层:同轴电缆、接收器、发送器等
数据链路层:网卡、交换机、网桥
网络层:路由器、网关
传输层:TCP协议、UDP协议
会话层:SQL、ASP、 PHP等
表示层:ASCII、JPEG、PNG、MP3等
应用层:telnet、ssh、http、smtp等

怎么测试网络是否连通

使用ping命令

什么方式可以是外网连接到家里主机

telnet

如何让外网访问家里的终端?它的原理是什么?

  1. 电脑上开启远程桌面
  2. 使用teamview
    他们的原理是:
  3. 你和对方机器建立一个Socket连接
  4. 在本地虚拟一个对方的系统
  5. 对方系统会在这个Socket连接上实时发送它系统状态的数据
  6. 收到的数据,是本虚拟系统通过这个数据还原对方系统操作
  7. 本地操作这个虚拟操作系统,会发送数据命令到对方机器
  8. 对方继器接收指令,通过Hook(底层钩子)传给操作系统
  9. 然后循环

访问一个网址会经历哪些流程?

以下几个简单的流程

  1. 首先需要通过域名找到IP,如果本地缓存没有需要请求DNS服务器
  2. 得到IP后开始与目的主机进行三次握手来建立TCP连接
  3. 连接建立后进行HTTP访问,传输病获取网页内容
  4. 传输完成后与目的主机四次挥手断开TCP连接

Linux

Linux常用命令有哪些,并简述他们的作用

ls 查看当前目录
df-h 查看磁盘使用情况
kill 杀掉进程
top 查看当前主机状态
mv 移动文件
cp 复制文件
netstat-a 查看端口使用状态
rm 删除
cat 查看文件

vim怎么退出

q 不保存直接退出
wq 保存后退出
q! 强制退出

vim怎么快速查找

按下ESC输入 再输入 空格 +查找内容

如何查找日志关键词上下文

# 查看文件关键词前后10行
grep 关键词 -C 10 文件名 catalina.out
# 查看文件关键词后10行 a=after
grep 关键词 -A 10 文件名 catalina.out
# 查看文件关键词前10行 b=before
grep 关键词 -B 10 文件名 catalina.out

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

怎样一页一页地查看一个大文件的内容呢?

cat filename.txt | more 通过管道命令和more实现

如何查看linux端口号被占用

netstat -a 查看端口状态

如何查看进程状态?

ps -ef | grep 进程名

chown是什么?grep是什么?

chown 改变文件的拥有者和组
gerp 查找文件里符合条件的字符串

如何查看日志?

tail -f 日志文件名

5个客户端通过TCP连接到主机,如何查看这5个连接

netstat -nat|grep ESTABLISHED
  • 1

数据库

哪些方法可以提高数据库查询效率?

  1. 建立索引,利用索引
  2. 只查询必要的字段
  3. 合理的处理NULL字段
  4. 慎用like等通配符

索引设计的时候要注意什么?

  1. 索引字段长度不能太长
  2. 索引的个数不能太多

数据库更新语句?GROUP BY 如何使用?

UPDATE TABLENAME SET 字段名称 = 新值 WHERE 列名称 = 旧值
  • 1

GROUP BY 一般常用于对查询结果进行分组

# 如果想要对结果进行分组统计,加上SUM函数即可
SELECT SUM(列名1) 列命2 FROM TABLENAME
WHERE 列名1 列名2 
GROUP BY 列命1
  • 1
  • 2
  • 3
  • 4

如果一个数据表有成千上万条记录,访问时很慢,有哪些方法可以优化?
Redis的优势是什么

  1. 读写快,Redis是将数据放在内存里,而内存的读取速度比硬盘要快,所以Redis性能优势比其他数据库要好
  2. 并发性能好

编程

HTTP协议中GET和POST的区别

在http协议中
get方法一般用来从服务器获取数据
post方法一般用来向服务器上传数据

HTTP状态码的含义

状态码描述
1XX 服务器收到请求,需要请求者继续执行操作
2XX 成功,操作被成功接收并处理
3XX 重定向,需要进一步的操作以完成请求
4XX 客户端错误,请求包含语法错误或无法完成请求
5XX 服务器错误,服务器在处理请求的过程中发生了错误

常用的如下

状态码返回描述
200 OK 请求成功。一般用于GET与POST请求
400 Bad Request 客户端请求的语法错误,服务器无法理解
401 Unauthorized 未注册或需要用户的身份认证
403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
404 Not Found 服务器无法根据客户端的请求找到资源
500 Internal Server Error 服务器内部错误,无法完成请求
502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求
505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理

HTTP请求Header里包含哪些内容

浏览器F12随意截取了一段,可以看看

# 主机名
Host: cn.bing.com
# 你当前访问的方式,一般为浏览器版本,或者APP
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
# 语言信息
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
# 编码信息
Accept-Encoding: gzip, deflate, br
# HTTP请求应答模式,KeepAlive模式,也有非KeepAlive模式
Connection: keep-alive
# 本地缓存
Cookie: SNRHOP=I=&TS=; _EDGE_S=mkt=zh-cn&F=1&SID=0227DE6146F26D360001D09247DC6CAA; _EDGE_V=1; MUID=0791871266626F2726E289E1674C6E73; _SS=PC=MOZI&SID=0227DE6146F26D360001D09247DC6CAA; SRCHS=PC=MOZI; SRCHD=AF=MOZLBR; SRCHUID=V=2&GUID=552BA37B5F5640E0BFCB0985B1F1AF85&dmnchg=1; SRCHUSR=DOB=20200624&T=1592977196000; MUIDB=0791871266626F2726E289E1674C6E73; SRCHHPGUSR=HV=1592977466&WTS=63728573996&CW=1920&CH=432&DPR=1&UTC=480&DM=0; ipv6=hit=1592980798172&t=6
# 是对应服务器的响应头部信息,Content-Security-Policy: upgrade-insecure-requests
Content-Security-Policy: upgrade-insecure-requests
# 1,表示只是客户端支持
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

白盒测试方法有哪些

语句覆盖
使程序中的每个可执行语句都能执行一次的测试用例

判定覆盖
对于判断语句,在设计用例的时候,要设计判断语句结果为True和False的两种情况

条件覆盖
设计足够多的测试用例,使得程序中每个判定包含的每个条件的可能取值(真/假)都至少满足一次

判定条件覆盖
设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次

条件组合覆盖
设计足够的测试用例,使得程序中每个判断的所有可能的条件取值组合都至少出现一次

路径覆盖
设计所有的测试用例,来覆盖程序中的所有可能的执行路径

白盒测试覆盖率如何保证

使用条件组合覆盖达到100%
让程序中每个判断的所有可能条件取值组合都至少出现一次
这就就可以保证语句覆盖率、判定覆盖率、条件覆盖率和判定-条件覆盖率必为100%
关系如下:
参考知乎作者-吃完饭后不刷牙(https://zhuanlan.zhihu.com/p/43007988)
在这里插入图片描述

posted @ 2021-01-11 15:30  小小阿星  阅读(144)  评论(0编辑  收藏  举报