测试开发面试题记录

1. TCP与UDP的区别及应用场景

  • TCP (传输控制协议)

    • 特点:面向连接,可靠性高,数据顺序保证,流量控制和拥塞控制。
    • 应用场景:文件传输(FTP),电子邮件(SMTP),网页加载(HTTP/HTTPS)。
  • UDP (用户数据报协议)

    • 特点:无连接,不可靠,数据顺序不保证,开销小。
    • 应用场景:视频流,语音通话(VoIP),在线游戏,实时应用。

2. 浏览器键入URL后的流程

  1. DNS解析:将域名解析为IP地址。
  2. 建立TCP连接:与服务器建立TCP连接(三次握手)。
  3. 发送HTTP请求:浏览器向服务器发送请求。
  4. 服务器处理请求:服务器处理请求并返回响应。
  5. 浏览器渲染页面:接收响应并渲染网页。

3. HTTPS数字证书的认证过程

  1. 生成密钥对:网站生成公钥和私钥。
  2. 申请证书:向CA(证书颁发机构)申请证书,提供公钥。
  3. CA验证:CA验证申请者身份,颁发数字证书。
  4. 使用证书:网站使用证书进行HTTPS加密通信。

4. 堆和栈的区别及数据结构

    • 特点:动态分配内存,大小可变,管理复杂。
    • 数据结构:通常是链表或树结构。
    • 特点:后进先出(LIFO),内存分配速度快,大小固定。
    • 数据结构:数组或链表实现。

5. 如何避免内存泄漏

  • 及时释放资源:使用完毕后立即释放动态分配的内存。
  • 智能指针 :使用智能指针(如C++中的std::unique_ptr)自动管理内存。
  • 代码审查:定期审查代码,查找未释放的内存。

6. Redis与MySQL的数据一致性保证

  • Redis

    • 持久化:使用RDB快照和AOF日志实现数据持久化。
    • 主从复制:主节点变更数据时,从节点同步更新。
  • MySQL

    • 事务:通过ACID属性保证数据一致性。
    • 锁机制:使用行锁和表锁防止并发冲突。

7. Redis的数据类型

  • 字符串:最基本的数据类型。
  • 哈希:键值对集合,适合存储对象。
  • 列表:有序字符串列表,支持推入和弹出操作。
  • 集合:无序字符串集合,支持集合运算。
  • 有序集合:带权重的字符串集合,支持范围查询。

8. 什么是数据库事务

  • 定义:一组操作的集合,要么全部执行成功,要么全部失败。
  • 特性:遵循ACID原则(原子性、一致性、隔离性、持久性)。

9. MySQL的分页查询

使用LIMITOFFSET实现分页:

sql

复制

复制代码
SELECT * FROM table_name LIMIT page_size OFFSET (page_number - 1) * page_size;

10. 常用的排序算法及其特点

  • 冒泡排序:简单,稳定,时间复杂度O(n²)。
  • 选择排序:简单,不稳定,时间复杂度O(n²)。
  • 插入排序:简单,稳定,适合小规模数据,时间复杂度O(n²)。
  • 快速排序:高效,不稳定,时间复杂度O(n log n)。
  • 归并排序:稳定,时间复杂度O(n log n),适合大规模数据。

11. 服务端只注册一个实例吗

  • 一般情况下:在负载均衡环境中,多个实例可以同时运行,以提升可用性和扩展性。
  • 单实例:对于小型应用或开发环境,可能只注册一个实例。

12. 项目中JMeter压测关注的变量

  • 响应时间:请求到达和响应的时间。
  • 吞吐量:单位时间内处理的请求数量。
  • 错误率:请求失败的比例。
  • 并发用户数:同时发起请求的用户数量。

13. Linux查看服务器负载情况的命令

  • top:实时查看系统资源使用情况。
  • htop:增强版的top,提供更友好的界面。
  • uptime:查看系统运行时间和负载平均值。

14. 手撕两数之和

python

复制

复制代码
def two_sum(nums, target):
    num_map = {}
    for index, num in enumerate(nums):
        complement = target - num
        if complement in num_map:
            return [num_map[complement], index]
        num_map[num] = index

15. SQL题直接口述怎么写

16. 项目中的高并发是如何做到的

17. Redis 集群如何保证数据一致性

18. JMeter 测试项目的时候是怎么做方案的

19. 项目中存在容量风险的模块有哪些

20 关于 MySQL 的容量上限是怎么发现的

  • 查询所有用户SELECT * FROM users;
  • 按年龄排序SELECT * FROM users ORDER BY age;
  • 插入新用户INSERT INTO users (name, age) VALUES ('Alice', 30);
  • 更新用户信息UPDATE users SET age = 31 WHERE name = 'Alice';
  • 删除用户DELETE FROM users WHERE name = 'Alice';
  • 负载均衡:使用负载均衡器将请求分发到多个服务器实例上。
  • 异步处理:使用消息队列(如 RabbitMQ、Kafka)进行异步处理,减轻实时请求压力。
  • 缓存策略:利用 Redis 等缓存技术,减少数据库访问频率。
  • 数据库优化:进行数据库分库分表,优化索引,提高查询效率。
  • 代码优化:使用高效的算法和数据结构,减少资源消耗。
  • 主从复制:数据在主节点写入后,会同步到从节点,从而保证数据一致性。
  • 分片机制:数据在多个节点之间分片存储,确保负载均衡。
  • 故障转移:主节点故障时,可以自动切换到从节点,保证系统的高可用性。
  • 一致性哈希:通过一致性哈希算法减少数据迁移的次数,维护数据分布的一致性。
  • 需求分析:明确测试目标,如响应时间、并发用户数等。
  • 设计测试计划:创建测试场景,包括线程组、请求类型、参数化、断言等。
  • 配置监控:使用监听器监控性能指标(如响应时间、错误率等)。
  • 执行测试:运行测试计划,模拟真实用户访问场景。
  • 结果分析:收集测试结果,分析性能瓶颈,生成报告。
  • 数据库:随着数据量的增加,可能导致性能下降。
  • 缓存层:如 Redis 的内存限制,可能导致缓存失效。
  • 消息队列:高并发时,可能出现消息堆积风险。
  • 文件存储:大文件上传和下载可能影响系统性能。
  • API网关:请求量过大可能导致网关成为瓶颈。
  • 性能监控:通过监控工具(如 Prometheus、Grafana)观察数据库性能指标。
  • 压力测试:使用 JMeter 等工具进行压力测试,模拟高并发场景,发现瓶颈。
  • 慢查询日志:开启慢查询日志,分析查询性能,识别高负载的查询。
  • 容量规划:根据数据增长趋势,定期评估数据库容量。
相关推荐
Kagol5 小时前
macOS 和 Windows 操作系统下如何安装和启动 MySQL / Redis 数据库
redis·后端·mysql
hzulwy6 小时前
Redis常用的数据结构及其使用场景
数据库·redis
ashane13147 小时前
Redis 哨兵集群(Sentinel)与 Cluster 集群对比
redis
Y第五个季节8 小时前
Redis - HyperLogLog
数据库·redis·缓存
Justice link9 小时前
企业级NoSql数据库Redis集群
数据库·redis·缓存
爱的叹息12 小时前
Spring Boot 集成Redis 的Lua脚本详解
spring boot·redis·lua
morris13119 小时前
【redis】redis实现分布式锁
数据库·redis·缓存·分布式锁
爱的叹息21 小时前
spring boot集成reids的 RedisTemplate 序列化器详细对比(官方及非官方)
redis
weitinting1 天前
Ali linux 通过yum安装redis
linux·redis
纪元A梦1 天前
Redis最佳实践——首页推荐与商品列表缓存详解
数据库·redis·缓存