快手测试开发一面 2023秋招
1.介绍实习项目,针对项目仔细提问,问测试流程,压测怎么做的,开发用了什么技术栈,具体细节等。
压测模拟高并发用户访问或极端负载条件,系统在压力下的性能、稳定性、可靠性
(1)明确压测目标
- 性能指标:如响应时间、吞吐量、并发用户数、tps等。
- 系统瓶颈:如 CPU、内存、磁盘 I/O、网络带宽等。
- 稳定性:系统在长时间高负载下的表现。
- 容错能力:系统在极端条件下的恢复能力。
(2)压测计划
- 测试场景:模拟哪些用户行为(如登录、搜索、下单等)。
- 测试工具:选择合适的压测工具(如 JMeter、LoadRunner、Locust 等)。
- 测试环境:搭建与生产环境相似的测试环境。
- 测试数据:准备足够的测试数据(如用户账号、商品信息等)。
- 性能指标:定义需要监控的性能指标(如响应时间、95线、错误率、TPS 等)。
(3)搭建测试环境
- 硬件环境:确保测试环境的硬件配置(如服务器、网络)与生产环境一致或接近。
- 软件环境:部署与生产环境相同的软件版本(如操作系统、数据库、中间件等)。
- 监控工具:部署性能监控工具(如 Prometheus、Grafana、Zabbix 等),实时监控系统资源使用情况。
(4)设计测试场景
根据实际业务需求,设计不同的测试场景:
- 基准测试:低并发下测试系统的性能基线。
- 负载测试:逐步增加并发用户数,测试系统在不同负载下的表现。
- 压力测试:模拟极端高并发,测试系统的极限性能。
- 稳定性测试:长时间运行高负载,测试系统的稳定性。
- 容错测试:模拟异常情况(如网络中断、服务器宕机),测试系统的容错能力。
(5)编写压测脚本,模拟用户行为
- HTTP 请求:模拟用户访问网页、提交表单等操作。
- 数据库操作:模拟用户查询、插入、更新等数据库操作。
- 业务流程:模拟完整的业务流程(如用户登录、浏览商品、下单支付)。
(6)执行压测
- 逐步加压:从低并发开始,逐步增加并发用户数,观察系统表现。
- 监控性能:实时监控系统的性能指标(如响应时间、错误率、资源使用率)。
- 记录日志:记录压测过程中的日志和错误信息,便于后续分析。
(7)分析压测结果
- 性能指标:对比实际性能与预期目标,判断是否达标。
- 系统瓶颈:分析系统在高负载下的瓶颈(如 CPU 使用率过高、数据库连接池耗尽)。
- 错误日志:分析错误日志,找出系统的问题(如超时、崩溃、内存泄漏)
(8)优化调整
根据压测结果,对系统进行优化和调整:
- 代码优化:优化性能瓶颈代码(如减少数据库查询、使用缓存)。
- 配置调整:调整系统配置(如线程池大小、数据库连接数)。
- 架构改进:优化系统架构(如引入负载均衡、分布式缓存)
(9)回归测试
在优化和调整后,重新执行压测,验证优化效果:
- 验证性能提升:确认优化后的系统性能是否达到预期。
- 确保稳定性:确认系统在高负载下是否稳定运行。
(10)输出压测报告
- 测试目标:压测的目的和范围。
- 测试环境:硬件、软件和网络配置。
- 测试场景:设计的测试场景和脚本。
- 性能指标:压测过程中的性能数据(如响应时间、吞吐量、错误率)。
- 问题分析:发现的问题和瓶颈。
- 优化建议:针对问题的优化建议和改进措施
2.http和https,加密机制
都是客户端和服务端之间传输数据的协议,主要区别在于安全性,主要是数据的加密机制
https是http的安全版本,通过SSL/TLS协议对数据进行加密传输,需要服务器从CA配置 SSL/TLS 证书。
HTTP 和 HTTPS 的对比
协议 | 明文传输 | 加密传输(SSL/TLS) |
端口 | 80 | 443 |
安全性 | 不安全 | 安全 |
加密机制 | 无 | 对称加密 + 非对称加密 |
证书 | 不需要 | 需要 SSL/TLS 证书 |
性能 | 较快 | 稍慢(由于加密开销) |
适用场景 | 不涉及敏感信息的传输 | 涉及敏感信息的传输(如登录、支付) |
加密机制 SSL/TLS 协议
其包含
(1)对称加密
相同密钥
(2)非对称加密
公钥 私钥 会话密钥
HTTPS 的加密通信是通过 SSL/TLS 握手过程建立的,具体步骤如下:
加密通信:客户端和服务器使用会话密钥进行对称加密通信。
3.一个网址从浏览器输入的全流程
解析域名 :协议 域名 路径
dns解析:域名->IP地址 在浏览器缓存内部->host本地缓存->dns缓存->根DNS服务器->顶级域服务器->权威域DNS服务器
首先于服务器建立tcp连接(三次握手)->建立https协议(TLS/SSL握手)->发送HTTP请求->收到HTTP响应报文->渲染界面
四次挥手关闭tcp连接
4.python多线程
多线程是一种并发编程技术,允许程序同时运行多个线程,从而提高程序的执行效率。
Python 提供了 threading
模块来实现多线程编程。主要类和方法包括:
专注四小时到啦!你真棒!现在去吃饭!
5.代码:最长公共子序列
思路: 双字符串动态规划问题