1. TCP与UDP的区别及应用场景
-
TCP (传输控制协议):
- 特点:面向连接,可靠性高,数据顺序保证,流量控制和拥塞控制。
- 应用场景:文件传输(FTP),电子邮件(SMTP),网页加载(HTTP/HTTPS)。
-
UDP (用户数据报协议):
- 特点:无连接,不可靠,数据顺序不保证,开销小。
- 应用场景:视频流,语音通话(VoIP),在线游戏,实时应用。
2. 浏览器键入URL后的流程
- DNS解析:将域名解析为IP地址。
- 建立TCP连接:与服务器建立TCP连接(三次握手)。
- 发送HTTP请求:浏览器向服务器发送请求。
- 服务器处理请求:服务器处理请求并返回响应。
- 浏览器渲染页面:接收响应并渲染网页。
3. HTTPS数字证书的认证过程
- 生成密钥对:网站生成公钥和私钥。
- 申请证书:向CA(证书颁发机构)申请证书,提供公钥。
- CA验证:CA验证申请者身份,颁发数字证书。
- 使用证书:网站使用证书进行HTTPS加密通信。
4. 堆和栈的区别及数据结构
-
堆:
- 特点:动态分配内存,大小可变,管理复杂。
- 数据结构:通常是链表或树结构。
-
栈:
- 特点:后进先出(LIFO),内存分配速度快,大小固定。
- 数据结构:数组或链表实现。
5. 如何避免内存泄漏
- 及时释放资源:使用完毕后立即释放动态分配的内存。
- 智能指针:使用智能指针(如C++中的
std::unique_ptr
)自动管理内存。 - 代码审查:定期审查代码,查找未释放的内存。
6. Redis与MySQL的数据一致性保证
-
Redis:
- 持久化:使用RDB快照和AOF日志实现数据持久化。
- 主从复制:主节点变更数据时,从节点同步更新。
-
MySQL:
- 事务:通过ACID属性保证数据一致性。
- 锁机制:使用行锁和表锁防止并发冲突。
7. Redis的数据类型
- 字符串:最基本的数据类型。
- 哈希:键值对集合,适合存储对象。
- 列表:有序字符串列表,支持推入和弹出操作。
- 集合:无序字符串集合,支持集合运算。
- 有序集合:带权重的字符串集合,支持范围查询。
8. 什么是数据库事务
- 定义:一组操作的集合,要么全部执行成功,要么全部失败。
- 特性:遵循ACID原则(原子性、一致性、隔离性、持久性)。
9. MySQL的分页查询
使用LIMIT
和OFFSET
实现分页:
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 等工具进行压力测试,模拟高并发场景,发现瓶颈。
- 慢查询日志:开启慢查询日志,分析查询性能,识别高负载的查询。
- 容量规划:根据数据增长趋势,定期评估数据库容量。