1、描述一下四次握手?
TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过 三次握手 进行初始化的。同时由于TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议,TCP是 全双工模式 ,所以需要 四次挥手 关闭连接。
下面是四次握手的过程:
- 客户端发送一个FIN报文,报文中会指定一个序列号。
- 服务器收到FIN报文后,会发送一个ACK报文,报文中包含了客户端发送过来的序列号+1。
- 服务器发送一个FIN报文,报文中会指定一个序列号。
- 客户端收到FIN报文后,会发送一个ACK报文,报文中包含了服务器发送过来的序列号+1。
四次挥手过程中,双方都需要确认彼此的关闭请求和确认请求,以确保数据的完整传输和连接的正常关闭。
2、在网页输入一个地址,会发生什么?
当在浏览器中输入一个网址并按下回车键时,会发生以下过程:
- 首先,浏览器会解析你输入的网址,判断它是否合法。如果不合法,浏览器会自动进行搜索。
- 浏览器会向 DNS 服务器发送请求,以获取该网址对应的 IP 地址。
- 浏览器会与该 IP 地址建立 TCP 连接,并向服务器发送 HTTP 请求。
- 服务器会响应该请求,并返回相应的 HTML 文件。
- 浏览器会解析 HTML 文件,并根据其中的 CSS 和 JavaScript 代码渲染出网页。
3、进程的调度算法有哪些,进程的状态有哪些?
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。进程有五种状态:创建态,就绪态,运行态,阻塞态,结束态。进程的调度算法有以下几种:
- 先来先服务(FCFS):按照进程到达的先后顺序进行调度。
- 短作业优先(SJF):选择剩余时间最短的进程进行调度。
- 优先权优先(FPF):按照进程的优先级进行调度。
- 时间片轮询法:将CPU时间分成若干个时间片,每个进程占用一个时间片后就重新排队等待下一次调度。
4、简述下数据库索引
数据库索引是一种数据结构,用于加快数据库查询的速度和性能。索引是对数据库表中一个或多个列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。索引分为单列索引和组合索引。单列索引只包含单个列,一个表可以有多个单列索引。组合索引包含多个列。创建索引时,需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。虽然索引能够提高查询性能,但也需要注意以下几点:索引需要占用额外的存储空间;对表进行插入、更新和删除操作时,索引需要维护,可能会影响性能;过多或不合理的索引可能会导致性能下降,因此需要谨慎选择和规划索引。
5、TCP和UDP的区别以及应用场景?
TCP 和 UDP 是传输层协议。TCP 是面向连接的、可靠的流协议,UDP 是面向报文的不可靠数据报协议。TCP 保证数据传输的可靠性,UDP 则不保证可靠性。TCP 适用于对数据传输质量有较高要求的应用,如 HTTP、HTTPS、FTP 等传输文件的协议以及 POP、SMTP 等邮件传输的协议。UDP 适用于对数据传输实时性要求较高,但不对传输质量有要求的应用,如视频传输、实时通信等。
6、出现界面白屏,说下排查思路?
当界面白屏时,可以按照以下步骤进行排查:
- 检查网络连接是否正常,确保 URL 地址正确。
- 打开控制台,查看是否有报错信息。
- 检查接口访问是否有请求。
- 检查路由是否有 path 错误,导致加载了不存在的页面。
- 从 JS 和 CSS 方面检测,排除网络问题后,如果还是白屏,那一般都是 CSS 和 JS 加载造成的。CSS 和 JS 会造成阻塞渲染。
7、描述下性能测试指标?
性能测试指标是衡量系统性能的评价标准,常用的系统性能测试指标包括:响应时间、并发用户/并发、点击率、吞吐量、TPS/QPS、PV/UV;
Linux服务器常用的性能指标包括:CPU使用率、内存占用率、磁盘IO、系统平均负载等。从以上的性能测试指标可以看出,性能包含多个维度。
8、描述下可变类和不可变类区别?
在计算机编程中,可变类和不可变类是两种不同的类别。可变类是指其实例的状态可以在创建后更改,而不可变类是指其实例的状态不能更改。例如,Python 中的列表是可变的,而元组是不可变的。
以下是可变类和不可变类之间的一些区别:
- 可变类的实例可以更改,而不可变类的实例不能更改。
- 可变类的实例通常需要更多的内存,因为它们需要存储状态的历史记录。
- 不可变类的实例通常比可变类的实例更容易缓存和共享,因为它们具有相同的状态。
- 不可变类可以更容易地进行线程安全编程,因为它们没有竞争条件。
9、描述下数组和列表的区别?
在 Python 中,列表和数组都是用于存储多个元素的数据结构。它们都支持索引、切片和迭代等操作。但是,它们之间有以下区别:
- 列表可以包含不同类型的元素,而数组只能包含相同类型的元素。
- 列表可以动态增加或删除元素,而数组的大小是固定的。
- 在 Python 中,列表是内置的数据类型,而数组需要通过导入 array 模块来使用。
10、python文字乱码怎么办?
Python 中出现文字乱码的原因通常是编码格式不一致导致的。以下是一些解决方法:
- 在 Python 文件开头加入 # -*- coding: UTF-8 -*- 或者 #coding=utf-8,确保文件编码格式为 UTF-8。
- 在字符串前面加上 u,使用 Unicode 编码存储中文。
- 使用 decode() 和 encode() 方法将字符串转换为指定编码格式。
- 在控制台中输入中文时,需要将提示字符串强制转换为 GBK 编码。
11、什么是测试用例?什么事测试脚本?两者关系是什么?
测试用例是一个具体的测试场景或测试情况,它描述了被测系统在特定条件下的输入、操作和预期输出。测试用例通常包括测试目的、测试步骤、预期结果和实际结果等信息,用于验证软件系统的功能、性能或其他质量属性。
测试脚本是一段自动化脚本或代码,用于执行测试用例并验证预期结果。测试脚本通常由测试工程师编写,使用特定的测试框架、编程语言和工具来实现自动化测试。测试脚本可以模拟用户的操作,自动执行一系列测试步骤,并根据预期结果进行断言验证。
两者之间的关系是:测试脚本是测试用例的具体实现,它将测试用例转化为可自动化执行的代码。
12、测试如何模拟404、断网、断电、找不到网页的情况?
- 模拟404:在测试环境中,可以修改请求的URL地址,将其修改为不存在的地址,从而模拟404错误。
- 模拟断网:可以使用网络模拟工具,如Network Link Conditioner(Mac)或Clumsy(Windows),来模拟网络连接不稳定或断开的情况。
- 模拟断电:可以使用硬件模拟器,如Chaos Monkey,来模拟服务器宕机或断电的情况。
- 模拟找不到网页:可以在测试环境中删除或移动网页文件,从而模拟找不到网页的情况。