写点什么

软件测试 / 测试开发丨面试题之计算机网络和数据库篇

作者:测试人
  • 2023-04-27
    北京
  • 本文字数:3090 字

    阅读完需:约 10 分钟

获取更多相关知识

本系列文章总结归纳了一些软件测试工程师常见的面试题,主要来源于个人面试遇到的、网络搜集(完善)、工作日常讨论等,分为以下十个部分,供大家参考。如有错误的地方,欢迎指正。有更多的面试题或面试中遇到的坑,也欢迎补充分享。希望大家都能找到满意的工作,共勉之!

计算机网络篇(基础知识)

1. 擅长哪些开发语言?

  • 学习过 Java,C 等

  • 半精通 Python

2. 输入 URL 到网页显示出来的全过程

  1. 输入网址

  2. DNS 解析

  3. 建立 tcp 连接

  4. 客户端发送 HTTP 请求

  5. 服务器处理请求

  6. 服务器响应请求

  7. 浏览器展示 HTML

  8. 浏览器发送请求获取其他在 HTML 中的资源。

3. HTTP 和 HTTPS 的区别

  • HTTPS 里面是要有证书的,HTTP 并没有证书。证书的作用是证明你是这个网站的拥有者。谁去证明?最顶级的 CA 去帮你证明,这些顶级的 CA 都是浏览器、操作系统本身就自动帮你集成,而且自动添加到设置信任里面去; HTTPS 要兼顾安全+性能的方面,由于对称式加密虽然速度很快,但是安全性特别的低,因为双方要规定对称式加密的秘钥,别人都无法知道,但你怎么能确保别人不知道你的秘钥呢,因此需要有非对称式加密去保证安全,但非对称式加密速度又很慢,如果客户端和服务器端都用非对称式加密,网络得卡死了。所以当双方建立好了非对称加密后,再约定一个随机数,等大家都非对称解密了之后呢,就拿到只有对方知道的唯一随机数(秘钥),就可以用秘钥来进行对称式加密和解密了;

4. HTTP 的报文结构

  • HTTP 请求报文:一个 HTTP 请求报文由请求行、请求头部、空行和请求数据 4 个部分组成

  • HTTP 响应报文:HTTP 响应也由三个部分组成,分别是:状态行、消息报头、响应正文

5. HTTP 常见的响应状态码

  • 200 请求已成功,请求所希望的响应头或数据体将随此响应返回。

  • 201 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立,且其 URI 已经随 Location 头信息返回

  • 202 服务器已接受请求,但尚未处理

  • 301 (永久移动) 请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。

  • 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

  • 303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。

  • 304 (未修改) 自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。

  • 305 (使用代理) 请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。

  • 307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

  • 401 当前请求需要用户验证。如果当前请求已经包含了 Authorization 证书,那么 401 响应代表着服务器验证已经拒绝了那些证书

  • 403 服务器已经理解请求,但是拒绝执行它。与 401 响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交

  • 404 请求失败,请求所希望得到的资源未被在服务器上发现

  • 500 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。

  • 501 服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。

  • 502 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。

  • 503 由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。

6. cookie 和 session 机制的区别

  • cookies 数据保存在客户端,session 数据保存在服务器端;

  • cookies 可以减轻服务器压力,但是不安全,容易进行 cookies 欺骗;

  • session 较安全,但占用服务器资源

7. TCP 和 UDP 的区别

  • TCP:面向连接,可靠的,速度慢,效率低

  • UDP:无连接、不可靠、速度快、效率高

8. TCP 为什么是三次握手和四次挥手

  • 三次握手能保证数据可靠传输又能提高传输效率。若握手是两次:如果只是两次握手, 至多只有连接发起方的起始序列号能被确认,另一方选择的序列号则得不到确认;

  • 要保证双方都关闭了连接。因为 TCP 是全双工的,就是要等到两边都发送 fin 包确认双方都没有数据传输后才关闭;

9. TCP 为什么最后挥手后会有 time_wait

  • 为了保证可靠的断开 TCP 的双向连接,确保足够的时间让对方收到 ACK 包。若客户端回复的 ACK 丢失,server 会在超时时间到来时,重传最后一个 fin 包,处于 TIME_WAIT 状态的 client 可以继续回复 Fin 包,发送 ACK。

  • 保证让迟来的 TCP 报文段有足够的时间被识别和丢弃,避免新旧连接混淆。有些路由器会缓存没有收到的数据包,如果新的连接开启,这些数据包可能就会和新的连接中的数据包混在一起。连接结束了,网络中的延迟报文也应该被丢弃掉,以免影响立刻建立的新连接。

10. 简要说明 HTTP 请求中的 Post 和 Get 有哪些区别的地方

  • 请求头多了 content-length 和 content-type 字段

  • Post 可以附加 body,可以支持 form、json、xml、binary 等各种数据格式

  • 行业通用规范

  • 无状态变化的建议使用 Get

  • 数据的写入与状态的修改建议使用 Post

  • 基于 HTTP 协议:都是请求返回数据,Get 将请求体放在头上,只发一次请求,Post 将请求体放在内部,需要发送两次请求

  • GET 在浏览器回退时是无害的,而 POST 会再次提交请求。

  • GET 请求会被浏览器主动 cache,而 POST 不会,除非手动设置。

  • GET 请求只能进行 URL 编码,而 POST 支持多种编码方式。

  • GET 请求在 URL 中传送的参数是有长度限制的,而 POST 么有。

  • 对参数的数据类型,GET 只接受 ASCII 字符,而 POST 没有限制。

  • GET 比 POST 更不安全,因为参数直接暴露在 URL 上,所以不能用来传递敏感信息。

11. 如果一个请求,返回的状态码是 200,但是没有内容,可能发生了什么?

  • 请求头缺失或错误

  • 参数 length 不符

  • 以上为个人理解,有误请指正。


数据库篇

  1. 工作中常使用的 SQL 语法有哪些?

  • create table、create view、 select from where、insert into、update set values、delete、alter、order by、having

  • 数据库存储过程

  • 一组数据库操作命令,当作是自己写的一个方法,一系列步骤自己去封装(个人理解)

  • SQL 常见查询语句编写(此处仅举例常见的查询语句,如有更多坑,希望补充)

a. 查询所有学生的数学成绩,显示学生姓名 name, 分数, 由高到低。

SELECT a.name, b.score FROM student a, grade b WHERE a.id = b.id AND kemu = '数学' ORDER BY score DESC;  
复制代码

b. 统计每个学生的总成绩(由于学生可能有重复名字),显示字段:学生 id,姓名,总成绩。

SELECT a.id, a.name, c.sum_score from student a, (SELECT b.id, sum(b.score) as sum_score FROM grade b GROUP BY id) c WHERE a.id = c.id ORDER BY sum_score DESC;  
复制代码

c. 列出各门课程成绩最好的学生, 要求显示字段: 学号,姓名,科目,成绩

SELECT c.id , a.name, c.kemu, c.score FROM grade c, student a,(SELECT b.kemu, MAX(b.score) as max_score FROM grade b GROUP BY kemu) t WHERE c.kemu = t.kemu AND c.score = t.max_score AND a.id = c.id
复制代码
  1. 慢查询是什么意思?

  • 开启慢查询日志,可以让 MySQL 记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。

  1. 导致数据库性能差的可能原因有哪些?

  • 硬件环境问题,如磁盘 IO

  • 查询语句问题,如 join、子查询、没建索引

  • 索引失效,建了索引,查询的时候没用上

  • 查询关联了太多的 join

  • 服务器关联缓存,线程数等

  • 表中存在冗余字段,在生成笛卡尔积时耗费多余的时间

  1. Redis 缓存应用场景

  • 需要将数据缓存在内存中,提升查询效率

  • 这里希望大家补充

  1. 怎么定位 Redis 缓存失效问题(缓存坏了)

  • Redis 的知识,了解的不是很多

  • 抛砖引玉,请大家指正和补充。

发布于: 刚刚阅读数: 6
用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
软件测试/测试开发丨面试题之计算机网络和数据库篇_软件测试_测试人_InfoQ写作社区