试题

Linux

Linux的目录结构有哪些?分别有什么作用?

答:根据FHS标准,Linux包含11个主要目录:
/boot:系统启动目录,也是内核的存放地
/etc:存放配置文件
/tmp:存放临时文件
/home:用户目录
/lib:存放库文件和程序执行过程中会用到的额外函数库
/bin:存放可执行文件和linux命令
/sbin:存放系统管理员的命令和工具
/usr:应用程序和文件的安装地
/mnt:挂载其它文件系统
/root:root账户的目录
/dev:存放linux系统下的设备文件

常用命令有哪些?

  • 基础操作:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    pwd:打印当前位置
    cd:打开/退出目录
    ls:显示目录下的内容
    man:查看和解释某个命令的用法和注意事项
    whatis:查询某个命令的含义
    locate:定位文件和目录
    which:定位命令所在位置并显示完整目录
    clear:清除
    exit:退出
    reboot:重启
    halt:关机
    ps:静态查看进程
    top:动态查看进程
    kill:杀死进程
  • 操作文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    vi:生成、编辑、查看文件
    cat:显示文本内容
    touch:创建文本(不能插入内容)
    grep:在一堆文件中查找某个特定的字符串
    cp:复制/拷贝文件
    mv:移动文件
    rm:删除文件
    bzip2:压缩成.bz2格式文件
    bunzip2:减压.bz2格式文件(压缩文件会被删除)
    gzip:压缩成.gz格式文件
    gunzip:减压.gz格式文件
    tar 将文件或目录减压/压缩
    head:查看文件开头部分内容
    tail查看文件尾部内容
    more:分页查询文件内容

  • 操作目录

    1
    2
    3
    mkdir:创建目录
    rkdir:删除目录
    du:显示文件目录所占空间的打小
  • 权限操作&用户操作

    1
    2
    3
    4
    5
    6
    7
    chmod:改变权限
    charp:变更文件/目录所属群组
    chown:改变文件的拥有者
    useradd:添加用户
    userdel:删除用户
    su:更换用户
    passwd:修改密码
  • 网络操作

    1
    2
    3
    ping:检查网络
    ipconfig:显示网络设备状态
    netstat:显示网络连接、路由表和网络接口信息
  • 时间日期

    1
    2
    3
    date:修改日期
    cal:日历
    uptime:查看系统运行时间

如何查看日志?

答:查看日志有多种方法,通常使用tail命令:

1
2
3
4
5
tail -f app.log  (默认最后10行,相当于增加参数 -n 10)**
tail -200f app.log (最后200行,某一时刻往前推)**
Ctrl+c 是退出tail命令
tail -n 20 app.log  (显示app.log最后20行)
tail -n +5 app.log  (从第5行开始显示文件)

可以使用cat命令:

1
2
3
4
5
cat -n filename |grep "关键字"
cat app.log | grep -C 5 '关键字'   (显示日志里匹配字串那行以及前后5行)
cat app.log | grep -B 5 '关键字'   (显示匹配字串及前5行)
cat app.log | grep -A 5 '关键字'   (显示匹配字串及后5行)
cat xxx.log |sed -n '/2020-10-24 22:16:21/,/2020-10-24 22:16:59/p' abc.log (根据时间查看)

另外还可以使用vi/vim和more命令进入编辑器查找

如何压缩&减压文件和目录

答:压缩&减压文件通常使用tar命令,如:

1
2
3
4
压缩文件:tar -zvf 文件名
减压文件:tar -xvf 文件名
压缩目录:tar -cjvf/czvf 目录名(格式为xx.tbz/xx.tgz)
减压目录:tar -xjvf/xzvf 目录名

如何杀进程

答:首先使用ps命令查找到该进程的id,然后根据进程id使用kill命令杀死进程,格式:kill -9 进程号PID

如何修改权限

答:

  1. 使用ls -l查询当前文件具备哪些权限
  2. 使用用chmod命令来修改权限

如何查找文件

答:linux中查找文件有多种方法,如:

  1. 使用find命令在指定目录下查找,可以使用*模糊匹配:find path -name file
  2. 使用which命令从环境变量文件(/etc/profile)中的path目录中查找,且which找的都是可执行文件,不能使用*模糊匹配: which filename
  3. 使用locate以一个数据库文件为基础查找,linux系统每天至少自动扫描一次文件,将结果保存到数据库,locate查的是数据库记录。locate查询比find要快,但最新文件如果在数据库中没有记录,会查询不到,次是需要手动更新(updatedb):locate filename
  4. 使用whereis查询可执行文件,比which查询更多,会查找出相关的man文件:whereis filename

网络

什么是路由寻址?

答:指从一个接口收到数据包,根据数据包的目的地址定向并转发到另一个接口的过程

OSI七层模型是哪七层,分别有哪些作用?

答:七层模型分别为:应用层、表示层、会话层、传输层、网络层、数据链路层和物理层;作用:

物理层:向数据链路层传输二进制比特流;

数据链路层:负责将二进制比特流封装成帧;

网络层:负责路由寻址和广播;

传输层:负责建立一个可靠的端到端的连接;

会话层:负责维护、拆除会话;

表示层:表示数据形式,完成对传输数据的转化;

应用层:确定进程之间通信的性质。

TCP/IP有哪四层?都有哪些作用?

答:四层为:应用层、传输层、网络互联层、网络接口层;作用:

网络接口层:在物理连接上实现逻辑链路的连接;

网络互联层:在不同网络之间进行路由寻址和传递数据报;

传输层:建立应用的端到端的连接;

应用层:负责用户和程序之间的通信。

Http与Https的异同点?

异同点:

  1. Http是超文本传输协议为明文传输,而Https为超文本传输完全协议,利用SLL/TLS加密数据包,提供了对网站服务器的身份验证,保护了减缓资料的隐私性和完整性。可视为http的升级版,更安全;
  2. 端口不同:http默认端口为80,而https是443;
  3. 连接方式不同:http是无连接、无状态的,而https是如SSL+HTTP构建的可进行加密传输、身份认证的网络协议,因而http相对更简单快速,https对技术门槛要求较高,会加重服务端负担;
  4. 证书申请方式不同:http:免费申请;https需要到ca申请证书,需缴费。

Http的结构及其请求方法有哪些?

http请求/响应结构分别为:请求/响应行、请求/响应头、空行、请求/响应体;有八种请求方法:

  1. GET
  2. HEAD
  3. POST
  4. PUT
  5. DELETE
  6. CONNECT
  7. OPTIONS
  8. TRACE

get&post方法的区别?

答:

  1. get在浏览器回退时是无效的,而post会再次提交请求;
  2. get产生的url可以被BookMark,post不可以;
  3. get请求会被浏览器主动cache,pot不会,除非手动设置;
  4. get请求只能进行url编码,post支持多种编码方式;
  5. get请求参数会完整保留在浏览器历史记录里,post不会被保留;
  6. get请求在url中传送的参数有大小限制,post没有;
  7. get对参数的数据类型有限制,只接受ASCII字符,post没有;
  8. get比post更不安全,参数直接暴露在url上,不能用来传递敏感信息;
  9. get参数通过url传递,post放在Request body中;

说出Http的响应状态码及其作用

答:http响应状态码:

  • 1xx:信息,服务器收到请求,需要请求者继续执行操作;

  • 2xx:成功,操作被成功接收并处理;

  • 3xx:重定向,需要进一步操作以完成请求;

  • 4xx:客户端错误,请求包含语法错误或无法完成请求;

  • 5xx:服务器错误,服务器在处理请求的过程中发生了错误。

    常见状态码:

    • 100:cotinue 继续,客户端继续请求;
    • 200:ok 成功,一般用于get和post请求
    • 404:not found 未找到资源
    • 500:internal server error 服务器内部错误

Session、Cookie和Token的区别

答:

  1. 三者都是由服务器产生的;
  2. cookie保存在客户端通常指浏览器、session保存在服务器端、token相当于一个令牌
  3. cookie数据存放在客户端浏览器上,session数据存放在服务器上、token在客户端一般存放在localStorage,cookie或sessionStorage中,在服务器端一般存放在数据库中;
  4. session通过set-cookie字段将sessionId返回给客户端,下次请求时只要带上sessionId就能保持连接;
  5. cookie没有session安全,可以通过分析本地存放的cookie并进行cookie欺骗;
  6. 大小不一致:单个cookie保存的数据不能超过4K,很多浏览器限制一个站点最多保存20哥cookie。而且编码也有限制;session则没有这些限制;
  7. 由于session保存在服务器上,当访问增多时,会比较占用服务器性能;
  8. token完全由应用程序进行管理,所以它能避开同源策略,可以避免CSRF(跨站请求访问)攻击;可以是无状态的,可以在多个服务器之间共享;可以减轻服务器压力,减少频繁的查询数据库。

Http常用请求和返回数据类型都有哪些?

答:

  • text/html : HTML格式
  • text/plain :纯文本格式
  • text/xml : XML格式
  • image/gif :gif图片格式
  • image/png:png图片格式
  • image/jpeg :jpg图片格式
  • application/octet-stream : 二进制流数据(如常见的文件下载)
  • application/msword : Word文档格式
  • application/pdf:pdf格式
  • application/atom+xml :Atom XML聚合格式
  • application/json: JSON数据格式
  • application/xml: XML数据格式
  • application/xhtml+xml :XHTML格式
  • application/x-www-form-urlencoded :
    中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
  • multipart/form-data : 媒体格式,需要在表单中进行文件上传时,就需要使用该格式

TCP三次握手四次挥手的全过程

答:

三次握手:

  1. 客户端浏览器想服务器发送SYN位码,请求服务器建立连接;
  2. 服务器接收到SYN位码后,向客户端发送一个SYN+ACK位码,让客户端表示连接并确认;
  3. 客户端收到SYN+ACK位码后,在给服务器端发送一个ACK位码,确认建立连接。

四次挥手:

  1. 客户端浏览器向服务器发送FIN+ACK位码,告诉服务器数据传输完毕,请求断开连接,并等待服务器确认;
  2. 服务器接收到位码后,发送一个ACK位码给客户端表示已受到确认;
  3. 服务器继续发送FIN位码给客户端,表示我的数据也传输完了,你可以断开连接了;
  4. 客户端浏览器收到服务器发送的FIN位码后,向服务器发送一个ACK位码,确认断开连接。

输入一串网址,接下来会发生什么事情?

答:一般可分为四种情况

一、Http请求

  1. 域名解析:浏览器拿到url后 对url解析,将域名与实际的文件路径分离开,通过DNS解析得到该域名的ip地址 ,这个过程中并不是每次都会发起DNS请求的,首先会从几个缓存里面进行找,找不到了才会发起DNS请求,三级缓存如下:询浏览器缓存(浏览器会缓存之前拿到的DNS 2-30分钟时间),如果没有找到,检查系统缓存,检查hosts文件,这个文件保存了一些以前访问过的网站的域名和IP的数据。它就像是一个本地的数据库。如果找到就可以直接获取目标主机的IP地址了。没有找到的,就需要发起DNS请求,检查路由器缓存,路由器有自己的DNS缓存,可能就包括了这在查询的内容;
    DNS请求步骤:

    • 向本地DNS服务器发送请求,询问该域名的ip是啥?本地域名服务器收到客户端的请求后,如果缓存里的表格能找到,找到则直接返回该域名ip,反之则会去询问根域名服务器;
    • 根 DNS 收到来自本地 DNS 的请求后,发现后置是 .com,说这个域名归 .com区域管理”,我给你 .com 顶级域名服务器地址给你,你去问问它吧。”
    • 本地 DNS 收到顶级域名服务器的地址后,向.com 顶级域名服务器发起请求询问ip地址,顶级域名服务器返回该域名区域的权威DNS服务器地址;
    • 本地 DNS 于是转向问权威 DNS 服务器,权威 DNS 服务器查询后将对应的 IP 地址 告诉本地 DNS;
    • 本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。
  2. tcp三次握手:dns解析后拿到ip,浏览器会与IP对应的服务器进行tcp三次握手建立连接,构建出一个http请求:

    • 第一次握手:客户端想服务器发送一个请求(SKY=1),等待服务器确认;
    • 第二次握手:服务器收到清求并确认,回复一个指令(SKY=1,ACK=1);
    • 第三次握手:客户端收到服务器的回复指令并返回确认(ACK=1)。
  3. 发送http请求:以 GET 为例,当需要发送 HTTP 请求的时候,同样也不是直接就发送了,需要先查询浏览器缓存。浏览器中的缓存分为强缓存和协商缓存,浏览器发起 HTTP 请求时首先会根据 http 头信息来判断是存有强缓存,以及其是否过期,如果有强缓存且未过期则命中,不会发送请求到服务器了。如果强缓存没命中,则会向服务器发起请求,这个请求的 Header 头中会带有浏览器最后一次请求该资源的时间和一个资源校验码(使用资源修改时间、资源大小等信息生成),服务器收到这个请求后会判断协商缓存是否过期,如果过期则返回新的资源信息,如果没过期则返回 304 状态码,表示资源未更新,可以使用缓存中的资源。

  4. TCP-网络层连接:HTTP 请求发出后会将数据包交给下层协议栈处理,在传输层和网络层该数据包会被分别加上 TCP 头和 IP 头,并且被发送出去,沿路的网关会收到这个数据包并进行识别和转发,直到该数据包被服务器收到,通过相同的流程返回回复数据包。

  5. 页面渲染:客户端拿到服务器端传输来的文件,找到HTML和MIME文件,通过MIME文件,浏览器知道要用页面渲染引擎来处理HTML文件。

二、Https请求

在发起请求是需要进行身份验证

三、无域名,直接写ip地址

不需要解析域名,可直接发起Http/https请求

四、有无请求参数

常用的协议有哪些,端口号是?

答:

  • TCP协议:
    1. FTP——文件传输协议——21号端口
    2. Telnet——远程登陆协议——23号端口
    3. SMTP——简单邮件传送协议——25号端口
    4. POP3——接收邮件——110号端口
  • UDP协议:
    1. HTTP——超文本传输协议——80号端口
    2. HTTPS——服务器,默认端口号为443
    3. DNS——域名解析服务——53号端口
    4. SNMP——简单网络管理协议——161号端口
    5. TFTP——简单文件传输的协议——69号端口
  • SSH(安全登录)、SCP(文件传输)、端口重定向,默认的端口号为22
  • tomcat,默认的端口号为8080
  • Oracle 数据库,默认的端口号为1521
  • mysql 数据库,默认的端口号为3306

测试基础

你工作中常用的测试方法有哪些?

答:

  • 测功能:

    1. 等价类划分
    2. 边界值分析
    3. 错误推测
    4. 因果图
    5. 综合策略
    6. 正交实验设计法
    7. 逻辑覆盖法
  • 测性能(负载测试和压力测试):通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试
  • 界面测试:通过眼睛、客户端工具等,如浏览器F12插件等

说一说你的测试流程

答:

  1. 分析测试需求:明确测试对象及测试工作的范围和测试重点;
  2. 制定测试计划:①确定测试范围;②制定测试策略;③安排测试资源;④安排测试进度;
  3. 设计测试用例
  4. 执行测试
  5. 编写测试报告

你发现bug,但开发认为不是bug你该怎么办?

答:

  1. 将问题提交到缺陷管理库里面进行备案;
  2. 反复确认bug,保证发现的确实是一个bug;
  3. 是否是自己对bug描述不正确;
  4. 如果前面都没问题,那么既然开发人员认为不是bug,又确实存在问题,我会找出需求文档,并且对着文档和开发当面进行沟通,说出我认为是BUG的原因;如果开发接受我的说法,那就需要开发进行BUG修改;如果开发仍然觉得不是一个BUG,这个时候需要产品经理介入。针对此问题,进行讨论。如果产品觉得是BUG,一般情况是需要修复的。如果产品经理觉得问题不大,那这个BUG就可以不解决。

测试用例包括哪些东西?

答:

  1. 项目名称
  2. 项目版本
  3. 用例编号
  4. 功能模块
  5. 用例标题
  6. 前置条件
  7. 操作步骤
  8. 预期结果
  9. 实际结果
  10. 优先级
  11. 创建人
  12. 执行人
  13. 执行时间

现场编写测试用例

给你一个需求怎么展开测试工作

答:

  1. 进行需求分析讨论
  2. 编写测试用例
  3. 进行用例评审
  4. 执行测试
  5. 回归测试
  6. 进行生产环境测试

测试用例的八大要素是?

答:

  1. 测试用例编号
  2. 测试项目
  3. 测试用例标题
  4. 重要级别
  5. 预置条件
  6. 测试输入
  7. 操作步骤
  8. 预期结果