黑马Java面试教程_P5_微服务
系列博客目录
文章目录
- 系列博客目录
- 1.引言
- 2.Spring Cloud
- 2.1 Spring Cloud 5大组件有哪些?
- 面试文稿
- 2.2 服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?
- 面试文稿
- 2.3 我看你之前也用过nacos、你能说下nacos与eureka的区别?
- 面试文稿
- 2.4 你们项目负载均衡如何实现的?
- 面试文稿
- 2.5 什么是服务雪崩,怎么解决这个问题?
- 面试文稿
- 2.6 你们的微服务是怎么监控的?
- 面试文稿
- 3. 业务问题
- 3.1 你们项目中有没有做过限流?怎么做的?
- 面试文稿
- 3.2 解释一下CAP和BASE
- 面试文稿
- 2.4 你们采用哪种分布式事务解决方案?
- 面试文稿
- 2.5 分布式服务的接口幂等性如何设计?
- 面试文稿
- 2.6 你们项目中使用了什么分布式任务调度
- 面试文稿
1.引言
一定要有些微服务的内容在简历上,选择比较流行。要不然简历筛选过不了。
2.Spring Cloud
2.1 Spring Cloud 5大组件有哪些?
这是基础的内容考察
回答原则:简单的问题不能答错(一道面试题就能淘汰一个人)新手和老手都要注意。
这些都是在 Spring Cloud 微服务架构中常用的组件,它们各自承担着不同的功能,帮助实现高效、可靠的分布式服务管理。下面是对每个组件的简要解释:
-
Eureka:服务注册中心
- Eureka 是一个 RESTful 风格的服务注册与发现框架,提供了服务注册与服务发现的功能。各个微服务实例会在启动时向 Eureka 注册其信息,其他微服务通过 Eureka 获取服务的实例信息进行调用。
- 它帮助系统中的各个微服务相互发现,并且在服务实例的 IP 地址、端口变化时,能够动态更新,确保服务能够持续可用。
-
Ribbon:客户端负载均衡器
- Ribbon 是一个负载均衡工具,它在客户端实现了服务实例的负载均衡。通过 Ribbon,客户端可以动态地根据负载均衡算法(如轮询、加权等)选择要调用的服务实例。
- 它与 Spring Cloud 集成,可以在服务调用时自动选择一个合适的服务实例,避免了客户端调用硬编码服务地址的问题。
-
Feign:声明式的服务调用
- Feign 是一个声明式的 Web 服务客户端,简化了服务之间的 HTTP 调用。通过 Feign,开发者只需要定义一个接口,Feign 会自动实现该接口并处理 HTTP 请求的发送。
- 它与 Ribbon 集成,可以实现负载均衡,同时也与 Eureka 集成,方便进行服务发现,极大地减少了服务调用的复杂度。
-
Hystrix:服务熔断器
- Hystrix 是一个提供容错处理的库,用来防止服务的级联失败。当某个服务调用失败或超时时,Hystrix 会自动进行熔断,防止故障蔓延到其他服务。
- 它通过“断路器”模式实现服务的隔离,如果服务连续失败,Hystrix 会停止请求该服务,从而保护系统的其他部分不受影响,减少系统故障的范围。
-
Zuul/Gateway:API网关
- Zuul 和 Gateway 都是用于处理 API 请求的网关组件。它们充当客户端与后端服务之间的中介,接收客户端请求并转发到相应的服务。
- Zuul 提供路由、过滤、监控等功能,适用于复杂的服务网关需求。Gateway 是 Spring Cloud 提供的新一代 API 网关,功能上更为全面,支持更强的路由、过滤和安全管理,推荐用于新的项目。
这些组件在 Spring Cloud 中提供了完整的微服务架构支持,使得开发者可以专注于业务逻辑,简化了分布式系统的管理与开发。
面试文稿
候选人:
在早期,Spring Cloud的五大组件通常指的是:
- Eureka:服务注册中心。
- Ribbon:客户端负载均衡器。
- Feign:声明式的服务调用。
- Hystrix:服务熔断器。
- Zuul/Gateway:API网关。
随着Spring Cloud Alibaba的兴起,我们项目中也融入了一些阿里巴巴的技术组件:
- 服务注册与配置中心:Nacos。
- 负载均衡:Ribbon。
- 服务调用:Feign。
- 服务保护:Sentinel。
- API网关:Gateway。
2.2 服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?
微服务中必须要使用的组件,考察我们使用微服务的程度
注册中心的核心作用是:服务注册和发现
常见的注册中心:eureka、nocas、zookeeper
面试文稿
服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?
候选人:
服务注册与发现主要包含三个核心功能:服务注册、服务发现和服务状态监控。
我们项目中采用了eureka作为服务注册中心,它是Spring Cloud体系中的一个关键组件。
- 服务注册:服务提供者将自己的信息(如服务名称、IP、端口等)注册到eureka。
- 服务发现:消费者从eureka获取服务列表信息,并利用负载均衡算法选择一个服务进行调用。
- 服务监控:服务提供者定期向eureka发送心跳以报告健康状态;如果eureka在一定时间内未接收到心跳,将服务实例从注册中心剔除。
2.3 我看你之前也用过nacos、你能说下nacos与eureka的区别?
Nacos 的 配置中心 功能是它的一个重要组成部分,能够帮助开发团队实现配置的集中管理、动态更新和版本控制。它极大地简化了分布式系统中配置管理的复杂性,提高了系统的灵活性和可维护性。
配置中心的优势:
集中管理:所有微服务的配置集中存储,统一管理,减少了分布式架构中配置分散带来的麻烦。
实时更新:支持配置变更时的实时推送,不需要重启服务,提升了配置更新的效率。
多环境支持:支持不同环境的配置隔离,使得多环境部署更加简单清晰。
面试文稿
- 我看你之前也用过nacos,你能说下nacos与eureka的区别?
候选人:
在使用Nacos作为注册中心的项目中,我注意到Nacos与Eureka的共同点和区别:
- 共同点:两者都支持服务注册与发现,以及心跳检测作为健康检查机制。
- 区别:
- Nacos支持服务端主动检测服务提供者状态,而Eureka依赖客户端心跳。
- Nacos区分临时实例和非临时实例,采用不同的健康检查策略。临时实例采用心跳模式,非临时实例采用主动检测模式
- Nacos支持服务列表变更的消息推送,使服务更新更及时。
- Nacos集群默认采用AP模式,但在存在非临时实例时,会采用CP模式;而Eureka始终采用AP模式。
2.4 你们项目负载均衡如何实现的?
- 负载均衡 Ribbon,发起远程调用feign就会使用Ribbon
- Ribbon负载均衡策略有哪些?
- 如果想自定义负载均衡策略如何实现 ?
最后一个比如先选择北京地区,然后在区域内选择服务。
左边全局生效,右边局部生效只针对user的service
面试文稿
-
你们项目负载均衡如何实现的?
候选人:
在服务调用过程中,我们使用Spring Cloud的Ribbon组件来实现客户端负载均衡。Feign客户端在底层已经集成了Ribbon,使得使用非常简便。
当发起远程调用时,Ribbon首先从注册中心获取服务地址列表,然后根据预设的路由策略选择一个服务实例进行调用,常用的策略是轮询。 -
Ribbon负载均衡策略有哪些?
候选人:
Ribbon提供了多种负载均衡策略,包括:
- RoundRobinRule:简单的轮询策略。
- WeightedResponseTimeRule:根据响应时间加权选择服务器。
- RandomRule:随机选择服务器。
- ZoneAvoidanceRule:区域感知的负载均衡,优先选择同一区域中可用的服务器。
- 如果想自定义负载均衡策略如何实现?
候选人:
自定义Ribbon负载均衡策略有两种方式:- 创建一个类实现IRule接口,这将定义全局的负载均衡策略。
- 在一个微服务的配置文件中指定该特定服务调用的负载均衡策略,这将仅对该服务生效。
2.5 什么是服务雪崩,怎么解决这个问题?
如果降级(位置来的请求)太多,就会触发熔断机制。
面试文稿
- 什么是服务雪崩,怎么解决这个问题?
候选人:
服务雪崩是指一个服务的失败导致整个链路的服务相继失败。我们通常通过服务降级和服务熔断来解决这个问题:- 服务降级:在请求量突增时,主动降低服务的级别,确保核心服务可用。
- 服务熔断:当服务调用失败率达到一定阈值时,熔断机制会启动,防止系统过载。
2.6 你们的微服务是怎么监控的?
为什么监控,为了解决下面的四个问题:
问题定位:微服务链路中有个地方挂了之后,能不能很快找到。
性能分析:有个微服务调用mysql,接口响应时间比较长,超过了2s中,那当前服务链路中有一个服务慢,就让整个链路慢,还不好定位。
服务关系
服务告警
如何实现监控:
面试文稿
3. 业务问题
3.1 你们项目中有没有做过限流?怎么做的?
Tomcat不适合微服务。因为有很多Tomcat实例。
而Nginx和网关比较合适。
回答面试管的时候,只需要说通过Nginx的漏桶算法来限流,漏桶算法就是把水滴代表请求的流量,通过一个漏桶来存储请求,以固定速率漏出请求,多于请求等待或抛弃。
除了控制速率还可以控制并发连接数。
令牌桶与漏桶的区别是,使用令牌桶时,请求获得令牌的速率不是固定的,可能会超过令牌生成的固定速率。
面试文稿
上面QPS比如1000;
-
你们项目中有没有做过限流?怎么做的?
在我们的项目中存在抢券的功能,由于面临可能的突发流量,我们采用了限流策略是使用Nginx按照IP进行限流,通过漏桶算法控制请求处理速率,
-
限流常见算法有哪些?
候选人:
常见的限流算法包括:- 漏桶算法:以固定速率处理请求,平滑突发流量。
- 令牌桶算法:按照一定速率生成令牌,请求在获得令牌后才被处理,适用于请求量有波动的场景。
3.2 解释一下CAP和BASE
学习这两个理论的目的:
- 分布式事务方案的指导
- 分布式系统设计方向
- 根据业务指导使用正确的技术选择
、可用性(Availability)和分区容错性(Partition tolerance)。在网络分区发生时,系统只能在一致性和可用性之间选择其一。 -
为什么分布式系统中无法同时保证一致性和可用性?
候选人:
在分布式系统中,为了保证分区容错性,我们通常需要在一致性和可用性之间做出选择。如果系统优先保证一致性,可能需要牺牲可用性,反之亦然。 -
什么是BASE理论?
候选人:
BASE理论是分布式系统设计中对CAP理论中AP方案的延伸,强调通过基本可用、软状态和最终一致性来实现系统设计。
2.4 你们采用哪种分布式事务解决方案?
只要你在简历上写了微服务 项目,就得发送远程请求,就可能涉及到分布式事务。
面试文稿
你们采用哪种分布式事务解决方案?
候选人:
我们项目中使用了Seata的AT模式来解决分布式事务问题。AT模式通过记录业务数据的变更日志来保证事务的最终一致性。
2.5 分布式服务的接口幂等性如何设计?
唯一索引 有的数据库表中没有,所以这里不使用。
面试文稿
- 分布式服务的接口幂等性如何设计?
候选人:
幂等: 多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。新增和增量更新不是幂等的。
我们通过Token和Redis来实现接口幂等性。用户操作时,系统生成一个Token并存储在Redis中,当用户提交操作时,系统会验证Token的存在性,并在验证通过后删除Token,确保每个Token只被处理一次。
2.6 你们项目中使用了什么分布式任务调度
面试文稿
-
xxl-job路由策略有哪些?
候选人:
xxl-job支持多种路由策略,包括轮询、故障转移和分片广播等。 -
xxl-job任务执行失败怎么解决?
候选人:
面对任务执行失败,我们可以:- 选择故障转移路由策略,优先使用健康的实例执行任务。
- 设置任务重试次数。
- 通过日志记录和邮件告警通知相关负责人。
-
如果有大数据量的任务同时都需要执行,怎么解决?
候选人:
我们可以通过部署多个实例并使用分片广播路由策略来分散任务负载。在任务执行代码中,根据分片信息和总数对任务进行分配。
相关文章:

黑马Java面试教程_P5_微服务
系列博客目录 文章目录 系列博客目录1.引言2.Spring Cloud2.1 Spring Cloud 5大组件有哪些?面试文稿 2.2 服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?面试文稿 2.3 我看你之前也用过nacos、你能说下nacos与eureka的区别?面试文稿 2.4 你们项目负载均衡如…...
使用Fuse-DFS挂载文件存储 HDFS-后端存储ceph
1. 编译环境准备 yum install cmake3 ln -s /usr/bin/cmake3 /usr/bin/cmake yum install gcc-c安装挂载依赖 yum -y install fuse fuse-devel fuse-libs执行以下命令,载入FUSE模块 modprobe fuse2. 下载源码包 hadoop-3.3.4-src.tar.gz解压后执行以下命令 打开…...

生成式AI项目的生命周期
总结自视频(吴恩达大模型入门课):9_13_generative-ai-project-lifecycle_哔哩哔哩_bilibili 生成周期如下图,包含四部分:任务范围(Scope),选择大模型(Select)…...

SOC-ATF 安全启动BL1流程分析(1)
一、ATF 源码下载链接 1. ARM Trusted Firmware (ATF) 官方 GitHub 仓库 GitHub 地址: https://github.com/ARM-software/arm-trusted-firmware 这是 ATF 的官方源码仓库,包含最新的代码、文档和示例。 下载方式: 使用 Git 克隆仓库: git…...

游戏引擎学习第127天
仓库:https://gitee.com/mrxiao_com/2d_game_3 为本周设定阶段 我们目前的渲染器已经实现了令人惊讶的优化,经过过去两周的优化工作后,渲染器在1920x1080分辨率下稳定地运行在60帧每秒。这个结果是意料之外的,因为我们没有预计会达到这样的…...

Grafana使用日志7--开启Sigv4
背景 在Grafana中,有些data source是需要开启sigv4认证的,例如OpenSearch,这个配置项默认是关闭的,这里我们介绍一下怎么开启 步骤 传统方式 如果我们想在Grafana中开启sigv4认证,我们需要在grafana.ini中修改一个…...

UWB人员定位:精准、高效、安全的智能管理解决方案
在现代企业管理、工业生产、安全监测等领域,UWB(超宽带)人员定位系统正逐步成为高精度定位技术的首选。相较于传统的GPS、Wi-Fi、蓝牙等定位方式,UWB具备厘米级高精度、低延迟、高安全性、抗干扰强等突出优势,能够实现…...

二、QT和驱动模块实现智能家居----2、编译支持QT的系统
因为我们的Linux内核文件不支持QT系统(当然如果你的支持,完全跳过这篇文章),所以我们要从网上下载很多软件包,这里直接用百问网的软件包,非常方便。 一:Ubuntu 配置 1 设置交叉编译工具链 以…...

Windows上使用go-ios实现iOS17自动化
前言 在Windows上运行iOS的自动化,tidevice对于iOS17以上并不支持,原因是iOS 17 引入新通信协议 RemoteXPCQUIC,改变了 XCUITest 的启动方式。 一、go-ios的安装 1、安装命令:npm i go-ios 2、安装完成后输入命令which io…...

越南SD-WAN跨境组网专线助力制造业访问国内 OA、ERP系统难题
近年来,随着全球制造业格局的不断调整,越来越多的制造业企业选择将工厂建立在越南。越南凭借其相对低廉的劳动力成本、优惠的政策以及优越的地理位置,吸引了大量的外资制造业企业入驻。然而,这些在越南设厂的企业却面临着一个棘手…...

【广度优先搜索】图像渲染 岛屿数量
文章目录 733. 图像渲染解题思路:BFS200. 岛屿数量解题思路:广度优先遍历 733. 图像渲染 733. 图像渲染 有一幅以 m x n 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。 你也被给予三个整数 sr , sc 和…...

Rust学习总结之-枚举
枚举是一个很多语言都有的功能,不过不同语言中其功能各不相同但是要表达的意思是一致的,枚举就是对于一个事物可以穷举出所有可能得值。比如说人的性别就可以用枚举,男人和女人两种。下面我们来学习Rust中的枚举。 一:枚举定义 …...
Linux下用route命令修改默认网关,不用重启网络
在Linux系统中,可以使用route命令来修改默认网关,而不需要重启网络。 下面是使用route命令修改默认网关的步骤: 打开终端窗口,以root用户或拥有sudo权限的用户身份登录。 使用以下命令查看当前的路由表信息: route…...

Datawhale 数学建模导论二 笔记5 多模数据与智能模型
主要涉及到的知识点有: 数字图像处理与计算机视觉 计算语言学与自然语言处理 数字信号处理与智能感知 10.1 数字图像处理与计算机视觉 视觉信息是我们第一种非常规的数据模式,在Python当中可以使用opencv处理数字图像,并提取出视觉特征用…...
【练习】【贪心】力扣1005. K 次取反后最大化的数组和
题目 1005 K 次取反后最大化的数组和 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后,返回数组 可…...
python学习七
作用域: 在编程语言中定义变量的可见性和生命周期的规则集合。它决定了在程序中的哪些位置可以访问或引用某个变量 1.全局作用域: 全局作用域是指在整个程序中都可见的变量。在函数外 部定义的变量通常具有全局作用域,在任何地方都可以访问和…...

安全运营的“黄金4小时“:如何突破告警疲劳困局
在当今复杂多变的网络安全环境中,安全团队面临着前所未有的挑战。尤其是面对高级持续性威胁(APT)时,最初的“黄金4小时”成为决定成败的关键窗口。在这段时间内,快速而准确地响应可以极大地降低损失,然而&a…...
本地部署Embedding模型API服务的实战教程
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学…...

数据结构:二叉树的链式结构及相关算法详解
目录 一.链式结构的实现 1.二叉树结点基本结构,初始化与销毁: 二.链式结构二叉树的几种遍历算法 1.几种算法的简单区分: 2.前序遍历: 3.中序遍历: 4.后序遍历: 5.层序遍历(广度优先遍历B…...

10.【线性代数】—— 四个基本子空间
十、 四个基本子空间 1. 列空间 C ( A ) C(A) C(A) in R m R^m Rm2. 零空间 N ( A ) N(A) N(A) in R n R^n Rn3. 行空间 C ( A T ) C(A^T) C(AT) in R n R^n Rn4. 左零空间 N ( A T ) N(A^T) N(AT) in R m R^m Rm综述5. 新的向量空间 讨论矩阵 A m ∗ n A_{m*n} Am∗n…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...

ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题
20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题 2025/6/9 20:54 缘起,为了跨网段推流,千辛万苦配置好了网络参数。 但是命令iptables -t filter -F tetherctrl_FORWARD可以在调试串口/DEBUG口正确执行。…...

基于django+vue的健身房管理系统-vue
开发语言:Python框架:djangoPython版本:python3.8数据库:mysql 5.7数据库工具:Navicat12开发软件:PyCharm 系统展示 会员信息管理 员工信息管理 会员卡类型管理 健身项目管理 会员卡管理 摘要 健身房管理…...