测试开发面试题记录

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 - numif 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 等工具进行压力测试,模拟高并发场景,发现瓶颈。
  • 慢查询日志:开启慢查询日志,分析查询性能,识别高负载的查询。
  • 容量规划:根据数据增长趋势,定期评估数据库容量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/59789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[JAVAEE] 面试题(四) - 多线程下使用ArrayList涉及到的线程安全问题及解决

目录 一. 多线程下使用ArrayList 1.1. 自行判断加锁 1.2 使用Collections.synchronizedList()套壳加锁 1.3 CopyOnWriteArrayList类 二. 总结 一. 多线程下使用ArrayList 多线程下使用ArrayList会涉及到线程安全问题, 例如: public static void main(String[] args) thro…

canal1.1.7使用canal-adapter进行mysql同步数据

重要的事情说前面,canal1.1.8需要jdk11以上,大家自行选择,我这由于项目原因只能使用1.1.7兼容版的 文章参考地址: canal 使用详解_canal使用-CSDN博客 使用canal.deployer-1.1.7和canal.adapter-1.1.7实现mysql数据同步_mysql更…

DevExpress中文教程 - 如何使用AI模型检查HTML编辑中的语法?

DevExpress .NET MAUI多平台应用UI组件库提供了用于Android和iOS移动开发的高性能UI组件,该组件库包括数据网格、图表、调度程序、数据编辑器、CollectionView和选项卡组件等。 目前许多开发人员正在寻找多种方法将AI添加到解决方案中(这通常比想象的要…

【推荐】iptables学习宝典

链接: IPtables-朱双印博客 学习iptables的抗鼎之作,推荐。

sudo docker ps才能查看,docker ps不能查看问题

出现 permission denied while trying to connect to the Docker daemon socket 的错误,通常是因为当前用户没有权限访问 Docker 的 Unix 套接字 /var/run/docker.sock。在 Linux 系统中,这个套接字默认只能由 root 用户或 docker 组的成员访问。 要解决…

二维数组和数组指针数组的关系

在深入理解指针end中&#xff0c;我在最后写了一长段代码 #include<stdio.h> void test1(int arr[][5], int x, int y) //void test1(int(*p)[5], int x, int y) {for (int i 0; i < x; i){for (int j 0; j < y; j){//printf("%d ", *(*(p i) j));p…

vue+websocket实现即时聊天平台

目录 1 什么是websocket 2 实现步骤 2.1 导入依赖 2.2 编写代码 1 什么是websocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它主要用于在客户端和服务器之间建立持久的连接&#xff0c;允许实时数据交换。WebSocket 的设计目的是为了提高 Web 应用程序的…

# RabbitMQ学习

RabbitMQ 1、RabbitMQ是什么&#xff1f; RabbitMQ 是一个开源的消息中间件系统&#xff0c;主要用于在分布式系统中存储、转发和接收消息。它实现了 AMQP&#xff08;高级消息队列协议&#xff09;标准&#xff0c;能够帮助构建可靠且高效的分布式应用程序 2、RabbitMQ能做…

Docker Compose V2 安装

要安装 docker-compose-plugin&#xff0c;需要确保系统已安装 Docker 引擎&#xff0c;因为 docker-compose-plugin 是 Docker CLI 的插件&#xff08;Docker Compose V2&#xff09;。以下是详细指南&#xff1a; 1. 安装 Docker 引擎&#xff1a; 确保系统上安装了 Docker…

【D3.js in Action 3 精译_038】4.2 D3 折线图的绘制方法及曲线插值处理

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

Git 的分支管理

一、分支介绍 1、分支是什么 Git作为一个分布式版本控制系统&#xff0c;提供了强大而灵活的分支管理功能&#xff0c;使得开发团队能够高效地协作开发、管理不同的功能和版本。 2、为什么有分支 一般情况下主分支&#xff08;master/main&#xff09;应始终保持可部署的状…

Linux环境基础和基础开发工具使用

文章目录 一、yum软件管理器1、包管理器2、yum3、apt4、安装源 二、编辑器vim1、各种模式2、打开时直接让光标定位到指定号3、&#xff01;加命令字符 三、命令模式1、i 进入插入模式2、**Shift :** 进入底行模式3、光标定位4、ZZ&#xff08;大写&#xff09;保存并退出vim5、…

2024 信友队 noip 冲刺 10.10

T1 前缀和 二分即可&#xff0c;再考虑一下左右端点还在睡觉的情况。 // Problem: D - Sleep Log // Contest: AtCoder - KYOCERA Programming Contest 2023&#xff08;AtCoder Beginner Contest 305&#xff09; // URL: https://atcoder.jp/contests/abc305/tasks/abc305…

【java】哈希<两数之和> 理解哈希

两数之和 题目描述&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次相同的元素。 你…

【Linux】信号三部曲——产生、保存、处理

信号 1. 信号的概念2. 进程如何看待信号3. 信号的产生3.1. kill命令3.2. 终端按键3.2.1. 核心转储core dump3.2.2. OS如何知道键盘在输入数据 3.3. 系统调用3.3.1. kill3.3.2. raise3.3.3. abort 3.4. 软件条件3.4.1. SIGPIPE信号3.4.2. SIGALRM信号 3.5. 硬件异常3.5.1. 除零异…

Vue 计算属性和监听器

文章目录 一、计算属性1. 计算属性定义2. computed 比较 methods3. 计算属性完整写法 二、监听器1. 普通监听2. 添加额外配置项 一、计算属性 1. 计算属性定义 概念&#xff1a;基于现有的数据&#xff0c;计算出来的新属性&#xff0c;依赖的数据变化&#xff0c;自动重新计…

【计网】实现reactor反应堆模型 --- 框架搭建

没有一颗星&#xff0c; 会因为追求梦想而受伤&#xff0c; 当你真心渴望某样东西时&#xff0c; 整个宇宙都会来帮忙。 --- 保罗・戈埃罗 《牧羊少年奇幻之旅》--- 实现Reactor反应堆模型 1 前言2 框架搭建3 准备工作4 Reactor类的设计5 Connection连接接口6 回调方法 1 …

【ARM Linux 系统稳定性分析入门及渐进 1.4 -- Crash 工具调用】

文章目录 Crash 工具的调用在实时系统上运行 crash自动查找内核对象文件内核构建要求Crash 工具的调用输出成功调用示例Crash 工具的调用 在使用 crash 工具分析转储文件时,至少需要两个参数: 内核对象文件名:通常称为内核 namelist。在最初从内核源代码构建时,其名称是 v…

外包干了2年,快要废了。。。

先说一下自己的情况&#xff0c;普通本科毕业&#xff0c;在外包干了2年多的功能测试&#xff0c;这几年因为大环境不好&#xff0c;我整个人心惊胆战的&#xff0c;怕自己卷铺盖走人了&#xff0c;我感觉自己不能够在这样蹉跎下去了&#xff0c;长时间呆在一个舒适的环境真的会…

linux驱动-i2c子系统框架学习(2)

linux驱动-i2c子系统框架学习(1) 在这篇博客里面已经交代了i2c设备驱动层&#xff0c;主要的功能就是编写具体i2c的外设驱动&#xff0c;和创建设备接点给上层使用 &#xff0c;按之前学习的字符设备&#xff0c;有了设备节点&#xff0c;就可以对硬件操作了&#xff0c;在i2c…