JAVA面试八股文之微服务相关

这篇具有很好参考价值的文章主要介绍了JAVA面试八股文之微服务相关。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

JAVA面试八股文之微服务相关,面经,java,面试,微服务,redis,spring boot,后端,职场和发展

gatway限流和sentinel限流有什么区别?

  • gatway: gatway采用的是基于redis的令牌桶算法(由服务端决定生成token的速度,然后请求从令牌桶中获取token,生成token的速度会慢慢递增防止请求一下增大打死服务器)

  • sentinel: 默认限流滑动窗口算法排队等待漏桶算法热点参数限流是令牌桶算法

linux的常用命令和docker的常用命令?

linux:

  • tail -f server.log 查看日志
  • tail -f log_file | grep ‘xxxxxx’ 查看包含特定内容的日志
  • ls-查看目录
  • mkdir创建目录
  • rm 删除(rm -rf递归删除)
  • mv移动
  • cp拷贝
  • pwd查看当前目录
  • vim编辑
  • cat 查看
  • tar -zxvf 解压
  • ifconfig查看网络
  • ps -ef 查看进程
  • lsof -i查看端口
    dokcer:
  • docker stats 查看cpu占用率
  • docker images查看镜像
  • docker pull拉取镜像
  • docker rmi删除镜像
  • docker run运行镜像
  • docker ps显示当前运行的容器
  • docker stop 停止容器
  • docker kill强制停止

openfeign怎么进行远程调用的?

通过发送http请求进行通信(调用接口中定义的方法,OpenFeign 会根据方法的注解信息生成对应的 HTTP 请求。)
openfeign相当于nacosclient+rabbin+http请求

seate的事务参与者和事务协调者之间通信?

通过netty框架进行通信;

nginx是服务端负载均衡,rabbin是客户端负载均衡

什么是微服务,什么是分布式?

微服务:每个模块都是一个单独的服务,需要单独部署,运行在一个单独的容器中,每个服务都需要统一管理。每个服务都可以连接自己的数据库,使用不同的语言开发,服务和服务之间使用轻量级的通讯框架进行通讯。

分布式:是指将一个系统或应用程序分布在多个计算机或服务器上,并通过网络进行通信和协调;

通常微服务架构会采用分布式的方式实现,每个微服务可以独立地部署在不同的服务器上,它们之间通过网络进行通信,共同构成了一个分布式系统。分布式系统的核心思想是将系统分解为多个独立的组件,每个组件负责处理特定的功能,并通过网络进行通信,从而实现整个系统的协作工作。

分布式事务seata的模式有哪些,它的执行原理?

seata有AT,TCC,SAGA,XA四种事务模式;
执行流程:TM事务的发起者)先向TC事务协调者)注册一个xid(全局事务 ID),并返回,TM在调用RM事务参与者)的时候,把xid在服务链路中
传递,到RM后先向TC注册一个事务分支,这个分支在xid下,RM执行本地事务,做一个反向操作在undo_log表中,并告诉给TC,TC收到所有结果再给RM发送提交操作,如果都成功则删除undo_log表中的记录,如果有一个失败,则给所有RM发送回滚消息,执行反向操作。

在分布式事务中,有些异常想回滚,有些异常不想回滚,要如何处理?

1,在 @GlobalTransactional 注解中,有一个 rollbackFor 参数,用于指定需要回滚的异常类型。你可以在这个参数中列出你希望回滚的异常类型,其他异常不会触发回滚。

gateway的工作原理?

gateway作为流量的统一入口,所有请求都会打到gateway,gateway进行解析和验证,根据所配置的断言规则,发送到不同的后端服务。

gateway是如何配合redis工作的,是怎么衔接工作的?

1,缓存,可以做缓存技术,将经常请求的数据缓存到redis中,避免每次请求直接后端服务,当接收到客户端请求时,Gateway 先检查 Redis 缓存中是否存在请求所需的数据,如果存在则直接返回给客户端,不再访问后端服务;如果不存在,则从后端服务获取数据,并将数据存储到 Redis 缓存中,然后再返回给客户端。
2,会话管理:Gateway 可以使用 Redis 作为会话存储,将用户的会话信息存储在 Redis 中。当用户发送请求时,Gateway 可以通过读取 Redis 中的会话信息来验证用户身份、权限等信息,而不需要每次都去查询数据库或调用其他服务进行验证。

微服务5大组件有哪些?

注册中心/配置中心 Nacos(阿里巴巴)

负载均衡 Ribbon

服务调用 Feign

服务保护(熔断降级) sentinel(阿里巴巴)

服务网关 Gateway

服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?

我们当时项目采用的nacos作为注册中心,这个也是spring cloud体系中的一个核心组件

服务注册:服务提供者需要把自己的信息注册到nacos,由nacos来保存这些信息,比如服务名称、ip、端口等等

服务发现:消费者向nacos拉取服务列表信息,如果服务提供者有集群,则消费者会利用负载均衡算法,选择一个发起调用。

nacos与eureka的区别?

共同点

Nacos与eureka都支持服务注册和服务拉取,都支持服务提供者心跳方式做健康检测

区别

①Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式

②临时实例心跳不正常会被剔除,非临时实例则不会被剔除

③Nacos支持服务列表变更的消息推送模式,服务列表更新更及时

④Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

Nacos集群后数据是如何做同步的?

Nacos集群有角色之分,分为Leader、Flollower角色,leader负责写然后广播给所有flollower,flollower负责读,底层是reft算法。

Nacos是如何完成选举的?

Leader会给Flollower发送心跳,每个节点自身都有超时时间,在这个超时时间内没有收到Leader的心跳,该节点就会变为候选者,然后它会发送投票信息给其他的节点,票数过多的成为Leader。

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

在服务调用过程中的负载均衡一般使用SpringCloud的Ribbon 组件实现 , Feign的底层已经自动集成了Ribbon , 使用起来非常简单。

当发起远程调用时,ribbon先从注册中心拉取服务地址列表,然后按照一定的路由策略选择一个发起远程调用,一般的调用策略是轮询。
JAVA面试八股文之微服务相关,面经,java,面试,微服务,redis,spring boot,后端,职场和发展

Ribbon负载均衡策略有哪些 ?

RoundRobinRule:简单轮询服务列表来选择服务器。

WeightedResponseTimeRule:按照权重来选择服务器,响应时间越长,权重越小。

RandomRule:随机选择一个可用的服务器。

ZoneAvoidanceRule:区域敏感策略,以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询(默认)。

如果想自定义负载均衡策略如何实现 ?

提供了两种方式:

1,创建类实现IRule接口,可以指定负载均衡策略,这个是全局的,对所有的远程调用都起作用。

2,在客户端的配置文件中,可以配置某一个服务调用的负载均衡策略,只是对配置的这个服务生效远程调用。
JAVA面试八股文之微服务相关,面经,java,面试,微服务,redis,spring boot,后端,职场和发展

feign调用需不需要经过网关?

不需要,因为网关是对外的服务,外部发送的请求才会走网关,feign是服务和服务之间的调用;

feign实现原理?

1,给feign接口创建一个动态代理,这个代理使用JDk动态代理;
2,在服务中使用的时候注入的代理对象;

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

服务雪崩是指一个服务失败,导致整条链路的服务都失败的情形,一般我们在项目解决的话就是两种方案,第一个是服务降级,第二个是服务熔断,如果流量太大的话,可以考虑限流

服务降级:服务自我保护的一种方式,或者保护下游服务的一种方式,用于确保服务不会受请求突增影响变得不可用,确保服务不会崩溃,一般在实际开发中与feign接口整合,编写降级逻辑,调用本地降级方法,返回一个兜底数据。

服务熔断:熔断器机制(关闭,打开,半开),默认情况下熔断器是关闭的状态,满足条件(出现故障的率,超时时间)熔断器会启动打开,熔断器打开后会所有的请求过来后直接调用本地降级返回拿到兜底数据返回(注意这里不在进行远程调用了)提供了响应时间,每过一段时间熔断器会进入半开状态,这种状态下会放一部分请求过去,测试下服务是否正常。如果还是出现故障熔断器继续进入全开状态,如果服务正常熔断器关闭。
JAVA面试八股文之微服务相关,面经,java,面试,微服务,redis,spring boot,后端,职场和发展

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

我们项目中采用的skywalking进行监控的

1,skywalking主要可以监控接口、服务、物理实例的一些状态。特别是在压测的时候可以看到众多服务中哪些服务和接口比较慢,我们可以针对性的分析和优化。

2,我们还在skywalking设置了告警规则,特别是在项目上线以后,如果报错,我们分别设置了可以给相关负责人发短信和发邮件,第一时间知道项目的bug情况,第一时间修复。

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

我当时做的xx项目,采用就是微服务的架构,因为xx因为,应该会有突发流量,最大QPS可以达到2000,但是服务支撑不住,我们项目都通过压测最多可以支撑1200QPS。因为我们平时的QPS也就不到100,为了解决这些突发流量,所以采用了限流。

【版本1】

我们当时采用的nginx限流操作,nginx使用的漏桶算法来实现过滤,让请求以固定的速率处理请求,可以应对突发流量,我们控制的速率是按照ip进行限流,限制的流量是每秒20。
JAVA面试八股文之微服务相关,面经,java,面试,微服务,redis,spring boot,后端,职场和发展

【版本2】

我们当时采用的是spring cloud gateway中支持局部过滤器RequestRateLimiter来做限流,使用的是令牌桶算法,可以根据ip或路径进行限流,可以设置每秒填充平均速率,和令牌桶总容量。
JAVA面试八股文之微服务相关,面经,java,面试,微服务,redis,spring boot,后端,职场和发展

限流常见的算法有哪些呢?

比较常见的限流算法有漏桶算法和令牌桶算法

漏桶算法是把请求存入到桶中,以固定速率从桶中流出,可以让我们的服务做到绝对的平均,起到很好的限流效果。

令牌桶算法在桶中存储的是令牌,按照一定的速率生成令牌,每个请求都要先申请令牌,申请到令牌以后才能正常请求,也可以起到很好的限流作用。

它们的区别是,漏桶和令牌桶都可以处理突发流量,其中漏桶可以做到绝对的平滑,令牌桶有可能会产生突发大量请求的情况,一般nginx限流采用的漏桶,spring cloud gateway中可以支持令牌桶算法。

什么是CAP理论?

CAP主要是在分布式项目下的一个理论。包含了三项,一致性、可用性、分区容错性。
JAVA面试八股文之微服务相关,面经,java,面试,微服务,redis,spring boot,后端,职场和发展
一致性(Consistency)是指更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致(强一致性),不能存在中间状态。

可用性(Availability) 是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。

分区容错性(Partition tolerance) 是指分布式系统在遇到任何网络分区故障时,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。

为什么分布式系统中无法同时保证一致性和可用性?

首先一个前提,对于分布式系统而言,分区容错性是一个最基本的要求,因此基本上我们在设计分布式系统的时候只能从一致性(C)和可用性(A)之间进行取舍。

如果保证了一致性(C):对于节点A和B,当往A里写数据时,B上的操作必须被暂停,只有当A同步数据到B时才能对B进行读写请求,在B被暂停操作期间客户端提交的请求会收到失败或超时。显然,这与可用性是相悖的。

如果保证了可用性(A):A在写的同时,B在读这样就会造成数据不一致,这就违背了一致性的要求。

什么是BASE理论?

BASE是CAP理论中AP方案的延伸,核心思想是即使无法做到强一致性(CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。它的思想包含三方面:

1、Basically Available(基本可用):基本可用是指分布式系统在出现不可预知的故障的时候,允许损失部分可用性,但不等于系统不可用。

2、Soft state(软状态):即是指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。

3、Eventually consistent(最终一致性):强调系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。其本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。

Redission如何实现分布式锁?

在分布式的情况下本地锁会失效,本地锁只能锁本地的服务器,所以需要分布式来管理;
利用redis的setnx命令和lua脚本实现。

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

我们当时是xx项目,主要使用到的seata的at模式解决的分布式事务

seata的AT模型分为两个阶段:

1、阶段一RM的工作:① 注册分支事务 ② 记录undo-log(数据快照)③ 执行业务sql并提交 ④报告事务状态

2、阶段二提交时RM的工作:删除undo-log即可

3、阶段二回滚时RM的工作:根据undo-log恢复数据到更新前

at模式牺牲了一致性,保证了可用性,不过,它保证的是最终一致性
JAVA面试八股文之微服务相关,面经,java,面试,微服务,redis,spring boot,后端,职场和发展

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

我们当时有一个xx项目的下单操作,采用的token+redis实现的,流程是这样的

第一次请求,也就是用户打开了商品详情页面,我们会发起一个请求,在后台生成一个唯一token存入redis,key就是用户的id,value就是这个token,同时把这个token返回前端。

第二次请求,当用户点击了下单操作会后,会携带之前的token,后台先到redis进行验证,如果存在token,可以执行业务,同时删除token;如果不存在,则直接返回,不处理业务,就保证了同一个token只处理一次业务,就保证了幂等性。
JAVA面试八股文之微服务相关,面经,java,面试,微服务,redis,spring boot,后端,职场和发展

xxl-job路由策略有哪些?

xxl-job提供了很多的路由策略,我们平时用的较多就是:轮询、故障转移、分片广播…

xxl-job任务执行失败怎么解决?

有这么几个操作

第一:路由策略选择故障转移,优先使用健康的实例来执行任务

第二,如果还有失败的,我们在创建任务时,可以设置重试次数

第三,如果还有失败的,就可以查看日志或者配置邮件告警来通知相关负责人解决

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

我们会让部署多个实例,共同去执行这些批量的任务,其中任务的路由策略是分片广播

在任务执行的代码中可以获取分片总数和当前分片,按照取模的方式分摊到各个实例执行就可以了。

后记
👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹
文章来源地址https://www.toymoban.com/news/detail-855835.html

到了这里,关于JAVA面试八股文之微服务相关的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【八股文篇】Java 面试题

    👉 博主介绍 : 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO TOP红人 Java知识图谱点击链接: 体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收藏关注下 , 不然下次找不到哟

    2024年02月12日
    浏览(49)
  • 一天吃透Java面试八股文

    Java是一门面向对象的编程语言 。面向对象和面向过程的区别参考下一个问题。 Java具有平台独立性和移植性 。 Java有一句口号: Write once, run anywhere ,一次编写、到处运行。这也是Java的魅力所在。而实现这种特性的正是Java虚拟机JVM。已编译的Java程序可以在任何带有JVM的平台

    2024年02月05日
    浏览(56)
  • JAVA-软开-常见八股文(2)-数据库相关

    1 Drop Delete Truncate三者之间的区别和联系 drop删除整张表,包括表结构和表数据。用法 drop table 表名 truncate表示清空数据,不会删除表结构。truncate table 表名 delete表示删除数据,不会删除表结构。delete from 表名 where 列名 = 值, 那么,truncate和delete的区别:             trunca

    2024年02月06日
    浏览(47)
  • java八股文面试[JVM]——元空间

    JAVA8为什么要增加元空间 为什么要移除永久代?    知识来源: 【2023年面试】JVM8为什么要增加元空间_哔哩哔哩_bilibili

    2024年02月11日
    浏览(52)
  • java八股文面试[JVM]——垃圾回收

    参考:JVM学习笔记(一)_卷心菜不卷Iris的博客-CSDN博客 GC垃圾回收 面试题: JVM内存模型 以及分区,需要详细到每个区放什么 堆里面的分区:Eden,survival from to,老年代,各自的特点。 GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方 针

    2024年02月11日
    浏览(48)
  • 2023面试八股文 ——Java基础知识

    编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并 终得到结果的过程。 为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、 和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一 步一步去工作,

    2024年02月12日
    浏览(53)
  • 一天吃透Java并发面试八股文

    内容摘自我的学习网站:topjavaer.cn 分享50道Java并发高频面试题 。 线程池:一个管理线程的池子。 嗯,手动创建线程有两个缺点 不受控风险 频繁创建开销大 为什么不受控 ? 系统资源有限,每个人针对不同业务都可以手动创建线程,并且创建线程没有统一标准,比如创建的

    2024年02月08日
    浏览(54)
  • 34 道 Java八股文 精选面试题

    java 是一门 开源的跨平台的面向对象的 计算机语言.   跨平台是因为 java 的 class 文件是运行在虚拟机上的,其实跨平台的,而 虚拟机是不同平台有不同版本 ,所以说 java 是跨平台的. 面向对象有几个特点:   1. 封装 两层含义:一层含义是把对象的属性和行为看成一个密不可分的

    2024年02月10日
    浏览(50)
  • java八股文面试[多线程]——自旋锁

    优点: 1.  自旋锁尽可能的减少线程的阻塞, 这对于锁的竞争不激烈,且占用锁时间非常短的代码块来说性能能大幅度的提升,因为自旋的消耗会小于线程阻塞挂起再唤醒的操作的消耗  ,这些操作会导致线程发生两次上下文切换! 2. 非自旋锁在获取不到锁的时候会进入阻

    2024年02月10日
    浏览(51)
  • java八股文面试[java基础]—— 重载 和 重写

      Overload Override Overwrite三者区别:   Java中,有一个名叫方法签名的东西,它的定义是这样的 Definition: Two of the components of a method declaration comprise the method signature—the method’s name and the parameter types. 大概意思是,方法签名有两部分组成——方法名和参数列表 我上面的函数的方法

    2024年02月12日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包