【后端开发面试题】每日 3 题(十二)

✍个人博客:Pandaconda-CSDN博客

📣专栏地址:https://blog.csdn.net/newin2020/category_12903849.html

📚专栏简介:在这个专栏中,我将会分享后端开发面试中常见的面试题给大家,每天的题目都是独立且随机的,之前的面试题不会影响接下来的学习~

❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

题目 1: 什么是事务?在数据库中如何保证事务的 ACID 特性?

事务是指一组操作的集合,这些操作要么全部成功执行,要么全部失败回滚,从而保证数据的一致性。事务具有以下四个特性(ACID):

  1. 原子性 (Atomicity)

    事务是一个不可分割的整体,所有操作必须全部完成,否则全部回滚。例如,银行转账操作中,扣款和存款必须同时成功或失败。

  2. 一致性 (Consistency)

    事务执行前后,数据库的状态必须保持一致。例如,转账前后账户总金额不变。

  3. 隔离性 (Isolation)

    并发事务之间互不干扰,每个事务都像是独立运行的。数据库通过隔离级别(如读未提交、读已提交、可重复读、串行化)来控制并发行为。

  4. 持久性 (Durability)

    一旦事务提交,其结果将永久保存到数据库中,即使系统发生故障也不会丢失。

实现方式:

  • 使用日志记录(如 Redo Log 和 Undo Log)来支持崩溃恢复。
  • 通过锁机制(如行锁、表锁)实现隔离性。
  • 数据库引擎(如 MySQL 的 InnoDB)提供了事务管理功能。

题目 2: 如何设计一个高并发的秒杀系统?请简要说明关键点。

秒杀系统需要处理短时间内大量用户的请求,因此设计时需要考虑高并发、低延迟和数据一致性。以下是关键点:

  1. 限流与降级

    • 使用限流算法(如令牌桶、漏桶)限制请求速率,防止系统过载。
    • 对非核心功能进行降级处理,确保核心功能可用。
  2. 缓存优化

    • 将商品库存信息存储在内存缓存(如 Redis)中,减少数据库压力。
    • 使用分布式锁(如 Redis 的 SETNX)控制库存扣减,避免超卖。
  3. 异步处理

    • 将订单生成、支付等耗时操作放入消息队列(如 Kafka、RabbitMQ),异步处理以提高响应速度。
  4. 分库分表

    • 对用户和订单数据进行分库分表,提升数据库的读写性能。
  5. 前端优化

    • 静态资源使用 CDN 加速。
    • 秒杀按钮通过后端动态控制显示,避免提前暴露接口。
  6. 监控与扩容

    • 实时监控系统性能指标(如 QPS、响应时间)。
    • 根据流量动态扩容服务器资源。

题目 3: 什么是负载均衡?常见的负载均衡算法有哪些?

负载均衡是一种将客户端请求分发到多个服务器的技术,用于提高系统的可用性和扩展性。它通常由硬件设备(如 F5)或软件工具(如 Nginx、HAProxy)实现。

常见的负载均衡算法:

  1. 轮询 (Round Robin)

    按顺序将请求分配给服务器,适合服务器性能相近的场景。

  2. 加权轮询 (Weighted Round Robin)

    根据服务器的权重分配请求,权重高的服务器处理更多请求。

  3. 最少连接 (Least Connections)

    将请求分配给当前连接数最少的服务器,适合处理时间不均的场景。

  4. 哈希算法 (Hashing)

    根据请求的特征(如 IP 地址、URL)计算哈希值,将请求固定分配到某台服务器,常用于会话保持。

  5. 随机分配 (Random)

    随机选择一台服务器处理请求,适合服务器性能相近的场景。

应用场景:

  • 在 Web 应用中,使用负载均衡分发用户请求到多个应用服务器。
  • 在微服务架构中,使用负载均衡分发服务调用请求。
  • 在数据库集群中,使用负载均衡分发查询请求。
相关推荐
paopaokaka_luck1 小时前
基于SpringBoot+Vue的电影售票系统(协同过滤算法)
vue.js·spring boot·后端
晋阳十二夜6 小时前
【压力测试之_Jmeter链接Oracle数据库链接】
数据库·oracle·压力测试
GDAL7 小时前
Node.js v22.5+ 官方 SQLite 模块全解析:从入门到实战
数据库·sqlite·node.js
IT_10247 小时前
Spring Boot项目开发实战销售管理系统——系统设计!
大数据·spring boot·后端
DCTANT8 小时前
【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库
java·数据库·spring boot·mysql·opengauss
ai小鬼头8 小时前
AIStarter最新版怎么卸载AI项目?一键删除操作指南(附路径设置技巧)
前端·后端·github
Touper.8 小时前
SpringBoot -- 自动配置原理
java·spring boot·后端
Alfred king8 小时前
面试150 生命游戏
leetcode·游戏·面试·数组
一只叫煤球的猫9 小时前
普通程序员,从开发到管理岗,为什么我越升职越痛苦?
前端·后端·全栈
一只鹿鹿鹿9 小时前
信息化项目验收,软件工程评审和检查表单
大数据·人工智能·后端·智慧城市·软件工程