黑马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 微服务架构中常用的组件,它们各自承担着不同的功能,帮助实现高效、可靠的分布式服务管理。下面是对每个组件的简要解释:

  1. Eureka:服务注册中心

    • Eureka 是一个 RESTful 风格的服务注册与发现框架,提供了服务注册与服务发现的功能。各个微服务实例会在启动时向 Eureka 注册其信息,其他微服务通过 Eureka 获取服务的实例信息进行调用。
    • 它帮助系统中的各个微服务相互发现,并且在服务实例的 IP 地址、端口变化时,能够动态更新,确保服务能够持续可用。
  2. Ribbon:客户端负载均衡器

    • Ribbon 是一个负载均衡工具,它在客户端实现了服务实例的负载均衡。通过 Ribbon,客户端可以动态地根据负载均衡算法(如轮询、加权等)选择要调用的服务实例。
    • 它与 Spring Cloud 集成,可以在服务调用时自动选择一个合适的服务实例,避免了客户端调用硬编码服务地址的问题。
  3. Feign:声明式的服务调用

    • Feign 是一个声明式的 Web 服务客户端,简化了服务之间的 HTTP 调用。通过 Feign,开发者只需要定义一个接口,Feign 会自动实现该接口并处理 HTTP 请求的发送。
    • 它与 Ribbon 集成,可以实现负载均衡,同时也与 Eureka 集成,方便进行服务发现,极大地减少了服务调用的复杂度。
  4. Hystrix:服务熔断器

    • Hystrix 是一个提供容错处理的库,用来防止服务的级联失败。当某个服务调用失败或超时时,Hystrix 会自动进行熔断,防止故障蔓延到其他服务。
    • 它通过“断路器”模式实现服务的隔离,如果服务连续失败,Hystrix 会停止请求该服务,从而保护系统的其他部分不受影响,减少系统故障的范围。
  5. Zuul/Gateway:API网关

    • ZuulGateway 都是用于处理 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 的 配置中心 功能是它的一个重要组成部分,能够帮助开发团队实现配置的集中管理、动态更新和版本控制。它极大地简化了分布式系统中配置管理的复杂性,提高了系统的灵活性和可维护性。

配置中心的优势:
集中管理:所有微服务的配置集中存储,统一管理,减少了分布式架构中配置分散带来的麻烦。
实时更新:支持配置变更时的实时推送,不需要重启服务,提升了配置更新的效率。
多环境支持:支持不同环境的配置隔离,使得多环境部署更加简单清晰。

在这里插入图片描述

面试文稿

  1. 我看你之前也用过nacos,你能说下nacos与eureka的区别?

候选人:
在使用Nacos作为注册中心的项目中,我注意到Nacos与Eureka的共同点和区别:

  • 共同点:两者都支持服务注册与发现,以及心跳检测作为健康检查机制。
  • 区别:
    1. Nacos支持服务端主动检测服务提供者状态,而Eureka依赖客户端心跳。
    2. Nacos区分临时实例和非临时实例,采用不同的健康检查策略。临时实例采用心跳模式,非临时实例采用主动检测模式
    3. Nacos支持服务列表变更的消息推送,使服务更新更及时。
    4. Nacos集群默认采用AP模式,但在存在非临时实例时,会采用CP模式;而Eureka始终采用AP模式。

2.4 你们项目负载均衡如何实现的?

  • 负载均衡 Ribbon,发起远程调用feign就会使用Ribbon
  • Ribbon负载均衡策略有哪些?
  • 如果想自定义负载均衡策略如何实现 ?
    在这里插入图片描述
    在这里插入图片描述
    最后一个比如先选择北京地区,然后在区域内选择服务。
    在这里插入图片描述
    左边全局生效,右边局部生效只针对user的service

在这里插入图片描述

面试文稿

  1. 你们项目负载均衡如何实现的?
    候选人:
    在服务调用过程中,我们使用Spring Cloud的Ribbon组件来实现客户端负载均衡。Feign客户端在底层已经集成了Ribbon,使得使用非常简便。
    当发起远程调用时,Ribbon首先从注册中心获取服务地址列表,然后根据预设的路由策略选择一个服务实例进行调用,常用的策略是轮询。

  2. Ribbon负载均衡策略有哪些?
    候选人:
    Ribbon提供了多种负载均衡策略,包括:

  • RoundRobinRule:简单的轮询策略。
  • WeightedResponseTimeRule:根据响应时间加权选择服务器。
  • RandomRule:随机选择服务器。
  • ZoneAvoidanceRule:区域感知的负载均衡,优先选择同一区域中可用的服务器。
  1. 如果想自定义负载均衡策略如何实现?
    候选人:
    自定义Ribbon负载均衡策略有两种方式:
    1. 创建一个类实现IRule接口,这将定义全局的负载均衡策略。
    2. 在一个微服务的配置文件中指定该特定服务调用的负载均衡策略,这将仅对该服务生效。

2.5 什么是服务雪崩,怎么解决这个问题?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果降级(位置来的请求)太多,就会触发熔断机制。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

面试文稿

  1. 什么是服务雪崩,怎么解决这个问题?
    候选人:
    服务雪崩是指一个服务的失败导致整个链路的服务相继失败。我们通常通过服务降级和服务熔断来解决这个问题:
    • 服务降级:在请求量突增时,主动降低服务的级别,确保核心服务可用。
    • 服务熔断:当服务调用失败率达到一定阈值时,熔断机制会启动,防止系统过载。

2.6 你们的微服务是怎么监控的?

为什么监控,为了解决下面的四个问题:
问题定位:微服务链路中有个地方挂了之后,能不能很快找到。
性能分析:有个微服务调用mysql,接口响应时间比较长,超过了2s中,那当前服务链路中有一个服务慢,就让整个链路慢,还不好定位。
服务关系
服务告警

如何实现监控:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

面试文稿

在这里插入图片描述

3. 业务问题

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

在这里插入图片描述

Tomcat不适合微服务。因为有很多Tomcat实例。
而Nginx和网关比较合适。
在这里插入图片描述
回答面试管的时候,只需要说通过Nginx的漏桶算法来限流,漏桶算法就是把水滴代表请求的流量,通过一个漏桶来存储请求,以固定速率漏出请求,多于请求等待或抛弃。
除了控制速率还可以控制并发连接数。
在这里插入图片描述
在这里插入图片描述
令牌桶与漏桶的区别是,使用令牌桶时,请求获得令牌的速率不是固定的,可能会超过令牌生成的固定速率。

面试文稿

在这里插入图片描述
上面QPS比如1000;

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

    在我们的项目中存在抢券的功能,由于面临可能的突发流量,我们采用了限流策略是使用Nginx按照IP进行限流,通过漏桶算法控制请求处理速率,

  2. 限流常见算法有哪些?
    候选人:
    常见的限流算法包括:

    • 漏桶算法:以固定速率处理请求,平滑突发流量。
    • 令牌桶算法:按照一定速率生成令牌,请求在获得令牌后才被处理,适用于请求量有波动的场景。

3.2 解释一下CAP和BASE

学习这两个理论的目的:

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d24500e39adf407081575649e9e1dd03.png在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

面试文稿

  1. 什么是CAP理论?
    候选人:
    CAP理论是分布式系统设计的基础理论,包含一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)。在网络分区发生时,系统只能在一致性和可用性之间选择其一。

  2. 为什么分布式系统中无法同时保证一致性和可用性?
    候选人:
    在分布式系统中,为了保证分区容错性,我们通常需要在一致性和可用性之间做出选择。如果系统优先保证一致性,可能需要牺牲可用性,反之亦然。

  3. 什么是BASE理论?
    候选人:
    BASE理论是分布式系统设计中对CAP理论中AP方案的延伸,强调通过基本可用、软状态和最终一致性来实现系统设计。

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

只要你在简历上写了微服务 项目,就得发送远程请求,就可能涉及到分布式事务。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

面试文稿

你们采用哪种分布式事务解决方案?
候选人:
我们项目中使用了Seata的AT模式来解决分布式事务问题。AT模式通过记录业务数据的变更日志来保证事务的最终一致性。

2.5 分布式服务的接口幂等性如何设计?

在这里插入图片描述
在这里插入图片描述
唯一索引 有的数据库表中没有,所以这里不使用。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

面试文稿

  1. 分布式服务的接口幂等性如何设计?
    候选人:
    幂等: 多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。新增和增量更新不是幂等的。
    我们通过Token和Redis来实现接口幂等性。用户操作时,系统生成一个Token并存储在Redis中,当用户提交操作时,系统会验证Token的存在性,并在验证通过后删除Token,确保每个Token只被处理一次。

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

面试文稿

  1. xxl-job路由策略有哪些?
    候选人:
    xxl-job支持多种路由策略,包括轮询、故障转移和分片广播等。

  2. xxl-job任务执行失败怎么解决?
    候选人:
    面对任务执行失败,我们可以:

    1. 选择故障转移路由策略,优先使用健康的实例执行任务。
    2. 设置任务重试次数。
    3. 通过日志记录和邮件告警通知相关负责人。
  3. 如果有大数据量的任务同时都需要执行,怎么解决?
    候选人:
    我们可以通过部署多个实例并使用分片广播路由策略来分散任务负载。在任务执行代码中,根据分片信息和总数对任务进行分配。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/70965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2025深度学习环境搭建-2】pytorch+Docker+VS Code+DevContainer搭建本地深度学习环境

上一篇文章:【2025深度学习环境搭建-1】在Win11上用WSL2和Docker解锁GPU加速 先启动Docker!对文件内容有疑问,就去问AI 一、用Docker拉取pytorch镜像,启动容器,测试GPU docker pull pytorch/pytorch:2.5.0-cuda12.4…

Linux驱动开发实战(一):LED控制驱动详解

Linux驱动开发野火实战(一):LED控制驱动详解 文章目录 Linux驱动开发野火实战(一):LED控制驱动详解引言一、基础知识1.1 什么是字符设备驱动1.2 重要的数据结构read 函数write 函数open 函数release 函数 二…

Linux上用C++和GCC开发程序实现不同MySQL实例下单个Schema之间的稳定高效的数据迁移

设计一个在Linux上运行的GCC C程序,同时连接两个不同的MySQL实例,两个实例中分别有两个Schema的表结构完全相同,复制一个实例中一个Schema里的所有表的数据到另一个实例中一个Schema里,使用以下快速高效的方法,加入异常…

Redis除了做缓存还能做什么?

Redis 除了作为高性能缓存外,还因其丰富的数据结构和功能,广泛应用于多种场景。以下是 Redis 的十大核心用途及具体示例: 1. 分布式会话存储 用途:存储用户会话信息(如登录状态),实现多服务间共…

JBoltAI_SpringBoot如何区分DeepSeek R1深度思考和具体回答的内容(基于Ollama)?

当我们用Ollama运行DeepSeek R1模型,向它提问时,会发现它的回答里是有think标签的 如果我们直接将Ollama的回复用于生产环境,肯定是不行的,对于不同的场景,前面输出的一堆内容,可能并不需要在客户端展示&a…

MySQL 使用 `WHERE` 子句时 `COUNT(*)`、`COUNT(1)` 和 `COUNT(column)` 的区别解析

文章目录 1. COUNT() 函数的基本作用2. COUNT(*)、COUNT(1) 和 COUNT(column) 的详细对比2.1 COUNT(*) —— 统计所有符合条件的行2.2 COUNT(1) —— 统计所有符合条件的行2.3 COUNT(column) —— 统计某一列非 NULL 的记录数 3. 性能对比3.1 EXPLAIN 分析 4. 哪种方式更好&…

将DeepSeek接入vscode的N种方法

接入deepseek方法一:cline 步骤1:安装 Visual Studio Code 后,左侧导航栏上点击扩展。 步骤2:搜索 cline,找到插件后点击安装。 步骤3:在大模型下拉菜单中找到deep seek,然后下面的输入框输入你在deepseek申请的api key,就可以用了 让deepseek给我写了一首关于天气的…

AndroidManifest.xml文件的作用

AndroidManifest.xml文件在Android应用程序中扮演着至关重要的角色。它是应用程序的全局配置文件,提供了关于应用程序的所有必要信息,这些信息对于Android系统来说是至关重要的,因为它决定了应用程序的运行方式和权限要求,确保了应…

Mac本地部署Deep Seek R1

Mac本地部署Deep Seek R1 1.安装本地部署大型语言模型的工具 ollama 官网:https://ollama.com/ 2.下载Deepseek R1模型 网址:https://ollama.com/library/deepseek-r1 根据电脑配置,选择模型。 我的电脑:Mac M3 24G内存。 这…

React进阶之前端业务Hooks库(五)

前端业务Hooks库 Hooks原理useStateuseEffect上述问题useState,useEffect 复用的能力练习:怎样实现一套React过程中的hooks状态 & 副作用Hooks原理 不能在循环中、条件判断、子函数中调用,只能在函数最外层去调用useEffect 中,deps 为空,执行一次useState 使用: imp…

从像素到光线:现代Shader开发的范式演进与性能优化实践

引言 在实时图形渲染领域,Shader作为GPU程序的核心载体,其开发范式已从早期的固定功能管线演进为高度可编程的计算单元。本文通过解析关键技术案例,结合现代图形API(如Vulkan、Metal)的特性,深入探讨Shade…

(七)消息队列-Kafka 序列化avro(传递)

(七)消息队列-Kafka 序列化avro(传递) 客从远方来,遗我双鲤鱼。呼儿烹鲤鱼,中有尺素书。 ——佚名《饮马长城窟行》 本文已同步CSDN、掘金平台、知乎等多个平台,图片依然保持最初发布的水印&…

PXE批量网络装机与Kickstart自动化安装工具

目录 一、系统装机的原理 1.1、系统装机方式 1.2、系统安装过程 二、PXE批量网络装机 2.1、PXE实现原理 2.2、搭建PXE实际案例 2.2.1、安装必要软件 2.2.2、搭建DHCP服务器 2.2.3、搭建TFTP服务器 2.2.4、挂载镜像并拷贝引导文件到tftp服务启动引导文件夹下 2.2.5、编…

【全栈开发】从0开始搭建一个图书管理系统【一】框架搭建

【全栈开发】从0开始搭建一个图书管理系统【一】框架搭建 前言 现在流行降本增笑,也就是不但每个人都要有事干不能闲着,更重要的是每个人都要通过报功的方式做到平日的各项工作异常饱和,实现1.5人的支出干2人的活计。单纯的数据库开发【肤浅…

部署Flink1.20.1

1、设置环境变量 export JAVA_HOME/cluster/jdk export CLASSPATH.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jarp #export HIVE_HOME/cluster/hive export MYSQL_HOME/cluster/mysql export HADOOP_HOME/cluster/hadoop3 export HADOOP_CONF_DIR$HADOOP_HOME/etc/hadoop …

【超详细】神经网络的可视化解释

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

深入了解 Python 中的 MRO(方法解析顺序)

文章目录 深入了解 Python 中的 MRO(方法解析顺序)什么是 MRO?如何计算 MRO?C3 算法的合并规则C3 算法的合并步骤示例:合并过程解析 MRO 解析失败的场景使用 mro() 方法查看 MRO示例 1:基本用法 菱形继承与…

数字化赋能:制造业如何突破低效生产的瓶颈?

随着全球经济的快速发展与市场需求的变化,制造业面临着前所未有的压力与挑战。生产效率、资源管理、品质控制、成本控制等方面的问题日益突出,尤其是低效生产成为了许多制造企业亟待解决的瓶颈。在这种背景下,数字化转型成为提升制造业效率的…

Element-Plus,使用 El-form中 的 scroll-to-error 没有效果问题记录

因业务需要表单组件中嵌套着表格列表,内容比较多; 所以需要表单校验不通过时,自动定位到不通过的节点; 但发现这个像是没有起到效果一样,后面就是排查的思路了: 容器高度问题:如果表单容器的高度…

基于Javase的停车场收费管理系统

基于Javase的停车场收费管理系统 停车场管理系统开发文档 项目概述 1.1 项目背景 随着现代化城市的不断发展,车辆数量不断增加,停车难问题也日益突出。为了更好地管理停车场资 源,提升停车效率,需要一个基于Java SE的停车场管理…