测试开发面试题记录

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 等工具进行压力测试,模拟高并发场景,发现瓶颈。
  • 慢查询日志:开启慢查询日志,分析查询性能,识别高负载的查询。
  • 容量规划:根据数据增长趋势,定期评估数据库容量。
相关推荐
会code的厨子31 分钟前
Redis缓存高可用集群
redis·缓存
尽兴-1 小时前
Redis模拟延时队列 实现日程提醒
java·redis·java-rocketmq·mq
Karoku0666 小时前
【企业级分布式系统】ELK-企业级日志分析系统
运维·数据库·redis·mysql·elk·缓存
是店小二呀6 小时前
【C++】右值引用与移动语义详解:如何利用万能引用实现完美转发
c++·redis
一直要努力哦18 小时前
Redis的高可用性
数据库·redis·缓存
吃着火锅x唱着歌20 小时前
Redis设计与实现 学习笔记 第十八章 发布与订阅
redis·笔记·学习
冷瞳20 小时前
Redis的特性
数据库·redis·缓存
门牙咬脆骨20 小时前
【Redis】持久化机制RDB与AOF
数据库·redis·缓存
聪明的墨菲特i1 天前
Django项目 | 实现用户注册和登录时的手机号验证
数据库·redis·后端·mysql·django
枪兵自古幸运e1 天前
redis的缓存问题
数据库·redis·缓存