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

✍个人博客:Pandaconda-CSDN博客

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

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

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

题目 1: 什么是缓存穿透、缓存击穿和缓存雪崩?如何解决这些问题?

答案:

缓存是提高系统性能的重要手段,但在实际使用中可能会遇到以下三种问题:

  1. 缓存穿透

    • 定义:查询一个不存在的数据,缓存和数据库都没有命中,导致请求直接打到数据库。
    • 解决方案
      • 使用布隆过滤器(Bloom Filter)提前过滤掉无效的查询请求。
      • 对于空结果也设置缓存,并设置较短的过期时间。
  2. 缓存击穿

    • 定义:某个热点数据在缓存中失效时,大量请求同时打到数据库,造成数据库压力骤增。
    • 解决方案
      • 设置热点数据永不过期。
      • 使用互斥锁(如 Redis 的分布式锁)确保只有一个请求加载数据到缓存,其他请求等待。
  3. 缓存雪崩

    • 定义:大量缓存在同一时间失效,导致所有请求都打到数据库,引发系统崩溃。
    • 解决方案
      • 给缓存设置随机的过期时间,避免同时失效。
      • 增加多级缓存(如本地缓存 + 分布式缓存)。
      • 在缓存失效时启动降级策略(如返回默认值或静态页面)。

题目 2: 如何设计一个分布式任务调度系统?请描述核心组件和实现思路。

答案:

分布式任务调度系统用于在分布式环境中协调和执行定时任务,以下是其核心组件和实现思路:

核心组件:

  1. 任务管理模块

    负责任务的注册、配置和状态管理,包括任务名称、执行时间、执行频率等信息。

  2. 调度器 (Scheduler)

    根据任务的执行时间和频率,触发任务的执行。可以使用时间轮算法或优先队列实现高效的调度。

  3. 执行器 (Executor)

    实际执行任务逻辑的组件,分布在不同的节点上,支持水平扩展。

  4. 分布式协调模块

    使用分布式协调工具(如 Zookeeper 或 Consul)确保任务在多个节点之间只被一个节点执行。

  5. 监控与报警模块

    记录任务的执行日志、状态和性能指标,并在任务失败时发送报警通知。

实现思路:

  1. 任务分发

    调度器将任务分配给可用的执行器,确保负载均衡。

  2. 任务幂等性

    确保任务即使被多次执行也不会产生副作用。

  3. 容错机制

    如果某个执行器宕机,调度器需重新分配任务到其他节点。

  4. 动态扩展

    支持动态添加或移除执行器节点,无需重启系统。

示例:

使用 Quartz 配合 Redis 实现分布式任务调度:

  • Quartz 负责任务的调度逻辑。
  • Redis 存储任务的状态和锁,确保任务的唯一性和一致性。

题目 3: 什么是消息队列?它的作用是什么?常见的消息队列有哪些?

答案:
消息队列是一种异步通信机制,用于在分布式系统中传递消息,解耦生产者和消费者。

作用:

  1. 解耦

    生产者和消费者之间通过消息队列进行通信,彼此无需直接依赖。

  2. 异步处理

    将耗时操作放入消息队列,消费者异步处理,提升系统的响应速度。

  3. 削峰填谷

    在高并发场景下,消息队列可以缓冲流量,避免下游系统过载。

  4. 可靠性

    消息队列支持持久化存储,确保消息不会因系统故障而丢失。

常见的消息队列:

  1. RabbitMQ

    • 特点:支持多种协议(如 AMQP),功能强大,适合复杂的路由场景。
    • 应用场景:金融系统、订单处理。
  2. Kafka

    • 特点:高吞吐量,适合大规模数据流处理。
    • 应用场景:日志收集、实时数据分析。
  3. RocketMQ

    • 特点:高性能,支持事务消息,适合电商等对可靠性要求高的场景。
    • 应用场景:订单系统、库存管理。
  4. ActiveMQ

    • 特点:成熟稳定,支持 JMS 协议。
    • 应用场景:传统企业级应用。

选择建议:

根据业务需求选择合适的消息队列,例如高吞吐量场景选择 Kafka,复杂路由场景选择 RabbitMQ。

相关推荐
yy鹈鹕灌顶5 分钟前
Redis 基础详解:从入门到精通
数据库·redis·缓存
郭尘帅6667 分钟前
SpringBoot学习(上) , SpringBoot项目的创建(IDEA2024版本)
spring boot·后端·学习
野犬寒鸦39 分钟前
MySQL索引详解(下)(SQL性能分析,索引使用)
数据库·后端·sql·mysql
.生产的驴5 小时前
SpringBoot 集成滑块验证码AJ-Captcha行为验证码 Redis分布式 接口限流 防爬虫
java·spring boot·redis·分布式·后端·爬虫·tomcat
野犬寒鸦6 小时前
MySQL索引使用规则详解:从设计到优化的完整指南
java·数据库·后端·sql·mysql
思考的橙子6 小时前
Springboot之会话技术
java·spring boot·后端
A尘埃9 小时前
K8S有状态服务部署(MySQL、Redis、ES、RabbitMQ、Nacos、ZipKin、Sentinel)
redis·mysql·kubernetes
免檒9 小时前
go基于redis+jwt进行用户认证和权限控制
开发语言·redis·golang
兆。9 小时前
电子商城后台管理平台-Flask Vue项目开发
前端·vue.js·后端·python·flask
weixin_437398219 小时前
RabbitMQ深入学习
java·分布式·后端·spring·spring cloud·微服务·rabbitmq