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

embedded/2025/4/1 5:32:58/

✍个人博客:Pandaconda-CSDN博客
📣专栏地址:https://blog.csdn.net/newin2020/category_12903849.html
📚专栏简介:在这个专栏中,我将会分享后端开发面试中常见的面试题给大家,每天的题目都是独立且随机的,之前的面试题不会影响接下来的学习~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

题目 1: 什么是分布式系统中的 CAP 理论?如何在实际项目中权衡 CAP?

答案:
CAP 理论指出,在分布式系统中,无法同时满足以下三个特性,最多只能满足其中两个:

  • C (Consistency):一致性,所有节点在同一时间看到的数据是一致的。
  • A (Availability):可用性,每个请求都能收到响应,无论成功或失败。
  • P (Partition Tolerance):分区容错性,系统在网络分区发生时仍能继续工作。

实际项目中的权衡:

  1. CP 系统

    • 特点:优先保证一致性和分区容错性,牺牲可用性。
    • 适用场景:金融系统、支付系统等对数据一致性要求高的场景。
    • 示例:当网络分区发生时,系统拒绝请求以确保数据一致性。
  2. AP 系统

    • 特点:优先保证可用性和分区容错性,牺牲一致性。
    • 适用场景:社交网络、内容分发等对高可用性要求高的场景。
    • 示例:允许不同节点返回不一致的数据,但在网络恢复后通过同步机制修复。
  3. CA 系统

    • 特点:在没有网络分区的情况下,可以同时保证一致性和可用性。
    • 适用场景:单机系统或局域网环境下的小型应用。
    • 示例:传统的关系型数据库(如 MySQL)通常偏向 CA。

总结:

  • 分布式环境中,分区容错性通常是必须的,因此需要在一致性和可用性之间权衡。
  • 根据业务需求选择合适的策略,例如金融系统更注重一致性,而社交网络更注重可用性。

题目 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。


http://www.ppmy.cn/embedded/176809.html

相关文章

go test相关命令

在 Go 项目中,go test 可以用于运行整个工程中的测试文件。以下是几种方式: 1. 运行当前模块或整个工程的测试 go test ./..../... 表示递归测试所有子目录中的测试文件(*_test.go)。适用于 Go Modules 或 GOPATH 结构的项目。 …

2020年全国职业院校技能大赛改革试点赛高职组“云计算”竞赛赛卷第三场次题目:公有云部署与运维

2020年全国职业院校技能大赛改革试点赛高职组 “云计算”竞赛赛卷 第三场次题目:公有云部署与运维 云梦是一家科技公司,在公司内为产品展示搭建了面向公众的WordPress。公司技术管理员将WordPress架设在一台互联网的虚拟主机服务器中,域名为wpXX.yunmeng.com, 服务器公网…

代码随想录第55期训练营第十一天|LeetCode150.逆波兰表达式求值、239.滑动窗口最大值、347.前K个高频元素

前言 这是我参加的第二次训练营!!!爽!这次我将更加细致的写清每一道难题,不仅是提升自己,也希望我自己的写的文章对读者有一定的帮助! 打卡代码随想录算法训练营第55期第十一天(づ…

Leetcode刷题笔记1 图论part07

卡码网 53 寻宝 prim算法 prim算法核心就是三步,称为prim三部曲: 第一步,选距离生成树最近节点第二步,最近节点加入生成树第三步,更新非生成树节点到生成树的距离(即更新minDist数组) def p…

使用事件监听器来处理并发环境中RabbitMQ的同步响应问题

RabbitListener 是 Spring AMQP 提供的核心注解,用于简化 RabbitMQ 消息监听器的创建。以下是对 RabbitListener(queues "balloonWords.queue") 的详细解析: 一、基础功能 队列监听 通过 queues 属性指定监听的队列名称(如 "…

STM32F103_LL库+寄存器学习笔记02 - 开启SysTick(滴答定时器)中断

导言 《STM32F103_LL库寄存器学习笔记01 - 梳理CubeMX生成的LL库最小的裸机系统框架》上一章节对CubeMX生成的最小系统框架进行梳理,在此工程的基础上,梳理SysTick(滴答定时器)中断是怎样开启的?为什么SysTick中断会自…

Uniapp使用大疆SDK打包离线原生插件二

上一篇讲了如何下载及配置原生插件,今天深入的了解下如何将java代码的SDK引入Uniapp 一、配置libs: 在Android开发中,libs目录通常用于存放项目所需的第三方库文件。 将sdk中的包lib.5plus.base-release.aar、android-gif-drawable-release1.2.23.aa…

批量启动远程服务

在ZooKeeper集群中,需要启动所有服务节点(至少达到法定人数)才能保证集群正常对外提供服务,一下是批量启动服务的脚本 编写启动脚本 vim start_servers.sh #判断参数个数 if [ $# -lt 1 ]; thenecho "错误:请输…