当前位置: 首页 > ai >正文

黑马Java面试笔记之 微服务篇(业务)

一. 限流

你们项目中有没有做过限流?怎么做的?

 为什么要限流呢?

一是并发的确大(突发流量)

二是防止用户恶意刷接口

 限流的实现方式:

  • Tomcat:可以设置最大连接数

可以通过maxThreads设置最大Tomcat连接数,实现限流,但是适用于单体架构

  • Nginx:漏桶算法
  • 网关,令牌桶算法
  • 自定义拦截器

1.1 Nginx限流

  • 控制速率(突发流量)

  • 控制并发连接数

 1.2 网关限流

        yml配置文件中,微服务路由设置添加局部过滤器RequestRateLimiter

令牌桶:

令牌桶和漏桶的区别:

        令牌桶存储的是令牌,漏桶存储的是请求,两者都可以应对突发的流量.不同的是二者的速率,不管请求量有多大,漏桶都是以固定的速率往外露出请求,以恒定的速率进行放行;而令牌桶可能会超出令牌生成的速度

总结

限流常见的算法有哪些?

对令牌桶和漏桶进行分析,并解释二者的区别

 二. 分布式系统理论

解释一下 CAP 和 BASE

  • 分布式事务方案的指导
  • 分布式系统设计方向
  • 根据业务指导使用正确的技术选择

 2.1 CAP

        1998年,加州大学的计算机科学家 Eric Brewer提出,分布式系统有三个指标:

  • Consistency(一致性)

        用户访问分布式系统中的任意节点,得到的数据必须一致

  • Availability(可用性)

        用户访问集群中的任意健康节点,必须能得到响应,而不是超时或拒绝

  • Partition tolerance(分区容错性)

        Partition(分区):因为网络故障或其他原因导致分布式系统中的部分节点与其他节点失去连接,形成独立分区.

        tolerance(容错):再集群出现分区时,整个系统也要持续对外提供服务

Eric Brewer说,分布式系统无法同时满足这三个指标.

这个结论就叫做CAP定理.

 结论

  • 分布式系统节点之间肯定是需要网络连接的,分区(P)是必然的
  • 如果保证访问的高可用性(A),可以持续对外提供服务,但不能保证数据的强一致性 --> AP
  • 如果保证访问的数据强一致性(C),就要放弃高可用 --> CP

 2.2 BASE理论

        BASE理论是对CAP的一种解决思路,包含三个思想:

  • Basically Available(基本可用):分布式系统在出现故障时,允许损失部分可用性,即保证核心可用.
  • Soft State (软状态):在一定时间内,允许出现中间状态,比如临时的不一致状态
  • Eventually Consistent(最终一致性):虽然无法保证强一致性,但是在软状态结束后,最终达到数据一致.

总结

三. 分布式事务解决方案

你们采用哪种分布式事务解决方案?

3.1 Seata架构

        Seata事务管理中有三个重要的角色:

  • TC(Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚.
  • TM(Transaction Manager) - 事务管理器:定义全局事务的范围,开始全局事务,提交或回滚全局事务
  • RM(Resource Manager) - 资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚.

3.2 模式1 seata的XA模式

3.3 模式2 AT模式原理

3.4 TCC模式原理

3.5 MQ分布式事务

总结

        根据自己的业务跟面试官进行陈述

四. 分布式服务接口幂等性

4.1 接口幂等

        基于RESTful API 的角度对部分常见类型请求的幂等性进行特点分析

解决幂等性有三种方案:

  • 数据库唯一索引  (新增)
  • token+redis  (新增,修改)
  • 分布式锁  (新增,修改)

4.2 token+redis

        创建商品,提交订单,转账,支付等操作

4.3 分布式锁

总结

五. 分布式任务调度

你们项目中使用了什么分布式任务调度?

首先,要先描述但是实在什么场景使用了任务调度

5.1 xxl-job路由策略有哪些?

5.2 xxl-job 任务执行失败会怎么样

故障转移+失败重试,查看日志分析 --->  邮件告警

5.3 如果有大数据量的任务同时都需要执行,怎么解决?

        执行器集群部署时,任务路由策略选择分片广播情况下,一次任务调度将会广播触发对应集群中所有执行器执行一次任务

总结

http://www.xdnf.cn/news/10682.html

相关文章:

  • 6.3 day 35
  • 榕壹云健身预约系统:多门店管理的数字化解决方案(ThinkPHP+MySQL+UniApp实现)
  • 前端面试高频问题通关指南—通用性问题
  • 相机Camera日志分析之二十三:高通相机Camx 基于预览1帧的process_capture_request二级日志分析详解
  • rate-limit 为 java 设计的渐进式限流开源工具
  • java Semaphore‌
  • 线程安全与线程池
  • Artificial Analysis2025年Q1人工智能发展六大趋势总结
  • PCIe-Error Detection(一)
  • dify应用探索
  • 全文索引详解及适用场景分析
  • NLP学习路线图(十七):主题模型(LDA)
  • AI Agent企业级生产应用全解析
  • Greyctf 2025 writeup
  • 【JAVA】注解+元注解+自定义注解(万字详解)
  • 【位运算】只出现⼀次的数字 II(medium)
  • 1. 前言与安装pytorch、d2l
  • 【Java学习笔记】异常
  • Chapter 10 Inductive DC–DC Converters
  • MCP (模型上下文协议):AI界的“USB-C”标准,开启大模型应用新纪元
  • C语言基础(10)【二维数组 字符数组 字符串相关操作】
  • 代码随想录算法训练营第十一天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素、栈与队列总结
  • 光伏功率预测 | LSTM多变量单步光伏功率预测(Matlab完整源码和数据)
  • 用“照片放大/缩小”来通俗理解多尺度
  • QT入门学习(二)---继承关系、访问控制和变量定义
  • Dockerfile常用指令介绍
  • 【Redis】Set 集合
  • Python列表、字典、元组、集合
  • 推荐一款使用html开发桌面应用的工具——mixone
  • 39. 组合总和【 力扣(LeetCode) 】