【后端开发面试题】每日 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 应用中,使用负载均衡分发用户请求到多个应用服务器。
  • 在微服务架构中,使用负载均衡分发服务调用请求。
  • 在数据库集群中,使用负载均衡分发查询请求。
相关推荐
Victor356几秒前
Redis(7)Redis如何实现高效的内存管理?
后端
David爱编程1 小时前
进程 vs 线程到底差在哪?一文吃透操作系统视角与 Java 视角的关键差异
后端
xiao-xiang7 小时前
redis-保姆级配置详解
数据库·redis
白鹭9 小时前
MySQL(多表查询练习)
数据库·mysql
独行soc10 小时前
2025年渗透测试面试题总结-18(题目+回答)
android·python·科技·面试·职场和发展·渗透测试
艾伦~耶格尔11 小时前
【数据结构进阶】
java·开发语言·数据结构·学习·面试
smileNicky11 小时前
SpringBoot系列之从繁琐配置到一键启动之旅
java·spring boot·后端
David爱编程12 小时前
为什么必须学并发编程?一文带你看懂从单线程到多线程的演进史
java·后端
愿天堂没有C++12 小时前
剑指offer第2版——面试题4:二维数组中的查找
c++·面试
long31612 小时前
java 策略模式 demo
java·开发语言·后端·spring·设计模式