✍个人博客:Pandaconda-优快云博客
📣专栏地址:https://blog.youkuaiyun.com/newin2020/category_12903849.html
📚专栏简介:在这个专栏中,我将会分享后端开发面试中常见的面试题给大家,每天的题目都是独立且随机的,之前的面试题不会影响接下来的学习~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
题目 1: 什么是分布式事务?有哪些常见的解决方案?
答案:
分布式事务是指在分布式系统中,多个服务或数据库需要共同完成一个事务,保证数据的一致性。由于涉及多个节点,传统的单机事务(如 ACID)无法直接应用。
常见解决方案:
-
两阶段提交 (2PC, Two-Phase Commit)
- 原理:分为准备阶段和提交阶段。协调者先向所有参与者发送准备请求,确认是否可以提交;如果所有参与者都同意,则进入提交阶段。
- 优点:强一致性。
- 缺点:性能较差,存在单点故障风险。
-
补偿事务 (TCC, Try-Confirm-Cancel)
- 原理:将事务分为三个步骤:尝试(Try)、确认(Confirm)和取消(Cancel)。每个操作都需要支持回滚逻辑。
- 优点:灵活性高,适合复杂业务场景。
- 缺点:实现复杂,需要手动编写补偿逻辑。
-
消息队列最终一致性
- 原理:通过消息队列(如 Kafka、RabbitMQ)传递事务消息,确保上下游服务的数据最终一致。
- 优点:高性能,解耦性强。
- 缺点:可能存在短暂的不一致状态。
-
SAGA 模式
- 原理:将事务拆分为多个小事务,每个小事务完成后触发下一个事务。如果某个事务失败,则执行补偿操作回滚之前的操作。
- 优点:适合长事务,扩展性强。
- 缺点:实现复杂,可能需要额外的监控机制。
总结:
- 对于强一致性要求高的场景,选择 2PC 或 TCC。
- 对于高并发和最终一致性要求的场景,选择消息队列或 SAGA 模式。
题目 2: 如何设计一个高效的分布式 ID 生成方案?请列举常见的实现方式及其优缺点。
答案:
分布式 ID 生成方案的目标是为分布式系统中的每个实体分配唯一的标识符。以下是常见的实现方式及其优缺点:
-
UUID
- 特点:基于时间戳、随机数和硬件地址生成 128 位的唯一标识符。
- 优点:无需中心化服务,生成速度快。
- 缺点:ID 较长,占用存储空间大;无序性可能导致索引性能下降。
-
Snowflake 算法
- 特点:由 Twitter 提出,基于时间戳、机器 ID 和序列号生成 64 位 ID。
- 优点:生成的 ID 有序且较短,适合数据库索引优化。
- 缺点:需要协调机器 ID 的分配,依赖时间戳可能受时钟回拨影响。
-
数据库自增主键
- 特点:使用数据库的自增列生成唯一 ID。
- 优点:简单易用,ID 有序。
- 缺点:单点瓶颈,扩展性差。
-
Redis 自增
- 特点:利用 Redis 的
INCR命令生成唯一 ID。 - 优点:高性能,支持分布式环境。
- 缺点:依赖 Redis 的高可用性。
- 特点:利用 Redis 的
-
号段模式
- 特点:预先从数据库中获取一段 ID 范围,在内存中分配使用。
- 优点:减少数据库压力,支持批量生成。
- 缺点:号段耗尽时需重新获取,存在短暂延迟。
选择建议:
- 对于高并发场景,推荐使用 Snowflake 算法或 Redis 自增。
- 对于简单场景,可以考虑 UUID 或数据库自增主键。
题目 3: 什么是 OAuth 2.0?它的授权流程是什么?有哪些常见的授权模式?
答案:
OAuth 2.0 是一种开放标准的授权协议,允许第三方应用在用户授权的情况下访问用户的资源,而无需暴露用户的凭据。
授权流程:
- 用户访问客户端应用,客户端引导用户跳转到授权服务器。
- 用户登录并同意授权,授权服务器返回授权码(Authorization Code)。
- 客户端使用授权码向授权服务器请求访问令牌(Access Token)。
- 客户端使用访问令牌访问资源服务器的受保护资源。
常见的授权模式:
-
授权码模式 (Authorization Code)
- 适用场景:适用于 Web 应用和移动端应用。
- 特点:安全性高,授权码通过后端交换访问令牌。
-
隐式模式 (Implicit)
- 适用场景:适用于纯前端应用(如单页应用)。
- 特点:直接返回访问令牌,无需后端参与,但安全性较低。
-
密码模式 (Resource Owner Password Credentials)
- 适用场景:适用于高度信任的客户端(如内部系统)。
- 特点:用户直接提供用户名和密码给客户端,客户端换取访问令牌。
-
客户端凭证模式 (Client Credentials)
- 适用场景:适用于客户端自身需要访问资源的场景。
- 特点:无需用户授权,客户端直接使用自己的凭据获取访问令牌。
总结:
OAuth 2.0 的核心思想是“授权而非认证”,通过多种授权模式满足不同场景的需求。
1974

被折叠的 条评论
为什么被折叠?



