软件测试经典面试题三
整理收集一些自己遇到的面试题及部分大家的题,自己来作答,回答不妥或者不全的还请大家指正
网络
(一)简单描述下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
如何让外网访问家里的终端?它的原理是什么?
- 电脑上开启远程桌面
- 使用teamview
他们的原理是: - 你和对方机器建立一个Socket连接
- 在本地虚拟一个对方的系统
- 对方系统会在这个Socket连接上实时发送它系统状态的数据
- 收到的数据,是本虚拟系统通过这个数据还原对方系统操作
- 本地操作这个虚拟操作系统,会发送数据命令到对方机器
- 对方继器接收指令,通过Hook(底层钩子)传给操作系统
- 然后循环
访问一个网址会经历哪些流程?
以下几个简单的流程
- 首先需要通过域名找到IP,如果本地缓存没有需要请求DNS服务器
- 得到IP后开始与目的主机进行三次握手来建立TCP连接
- 连接建立后进行HTTP访问,传输病获取网页内容
- 传输完成后与目的主机四次挥手断开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
数据库
哪些方法可以提高数据库查询效率?
- 建立索引,利用索引
- 只查询必要的字段
- 合理的处理NULL字段
- 慎用like等通配符
索引设计的时候要注意什么?
- 索引字段长度不能太长
- 索引的个数不能太多
数据库更新语句?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的优势是什么
- 读写快,Redis是将数据放在内存里,而内存的读取速度比硬盘要快,所以Redis性能优势比其他数据库要好
- 并发性能好
编程
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)