经典Java-SpringCloud面试题

文章目录

  • 经典Java-SpringCloud面试题
    • 1、 什么是微服务?
    • 2、微服务之间是如何独立通讯的?
    • 3、SpringCloud 和 Dubbo有那些区别?
    • 4、 SpringBoot 和 SpringCloud,请谈谈你对他们的理解
    • 5、什么是服务熔断?什么是服务降级?
    • 6、 微服务的优缺点分别是什么?说下你在项目开发中遇到的坑
    • 7、你所知道的微服务技术栈有哪些?列举一二
    • 8、Eureka和Zookeeper都可以提供服务注册与发现的功能,请说说两者的区别

1、 什么是微服务?

​ 微服务(Microservice Architecture) 是近几年流行的一种架构思想,关于它的概念很难一言以蔽之。
究竟什么是微服务呢?我们在此引用ThoughtWorks 公司的首席科学家 Martin Fowler 于2014年提出的一段话:
原文:https://martinfowler.com/articles/microservices.html
汉化:https://www.cnblogs.com/liuning8023/p/4493156.html

  • 就目前而言,对于微服务,业界并没有一个统一的,标准的定义。
  • 但通常而言,微服务架构是一种架构模式,或者说是一种架构风格,它体长将单一的应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程内,服务之间互相协调,互相配置,为用户提供最终价值,服务之间采用轻量级的通信机制(HTTP)互相沟通,每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境中,另外,应尽量避免统一的,集中式的服务管理机制,对具体的一个服务而言,应该根据业务上下文,选择合适的语言,工具(Maven)对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。

再来从技术维度角度理解下:

  • 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事情,从技术角度看就是一种小而独立的处理过程,类似进程的概念,能够自行单独启动或销毁,拥有自己独立的数据库。

2、微服务之间是如何独立通讯的?

  1. 将组建定义为可被独立替换和升级的软件单元。
  2. 以业务能力为出发点组织服务的策略。
  3. 倡导谁开发谁运营的开发运维一体化方法。
  4. RestFul Http协议是微服务架构中最常用的通讯机制。
  5. 每个微服务可以考虑采用最佳微服务完成(如不同的编程语言)。
  6. 允许不同的微服务采用不同的数据持久化技术。
  7. 微服务非常注重建立架构和业务相关指标的实时监控和日志机制,必须考虑每个服务的失败容错机制。
  8. 注重快速更新,因此系统会随着时间不断变化和演进。可替代性模块化设计。

微服务通信方式:

    同步:RPC,REST等异步:消息队列。要考虑消息可靠传输、高性能,以及编程模型的变化等。

1、客户端到服务端通信,API Gateway方法。

​ API Gateway是解决微服务通信的一个不错的方法。以客户端为例。一个客户端可以向多个微服务中的任意一个微服务发出请求。

​ API Gateway负责请求转发、合成和协议转换。所有请求都要先经过API Gateway,然后再将请求转发到对应的微服务中。

2、进程通信IPC

​ 这种通信不但可以实现一对一、一对多。还可以实现同步和异步请求。


3、SpringCloud 和 Dubbo有那些区别?

1、dubbo由于是二进制的传输,占用带宽会更少;

2、springCloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大;

3、dubbo的开发难度较大,原因是dubbo的jar包依赖问题,很多大型工程无法解决;

4、springcloud的接口协议约定比较自由且松散,需要有强有力的行政措施来限制接口无序升级;

5、dubbo的注册中心可以选择zookeeper、redis等多种,springcloud的注册中心只能用eureka或者自研。


4、 SpringBoot 和 SpringCloud,请谈谈你对他们的理解

  1. Spring boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具;
  2. Spring boot专注于快速、方便集成的单个个体,Spring Cloud是关注全局的服务治理框架;
  3. spring boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring boot来实现。
  4. Spring boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring boot,属于依赖的关系。

5、什么是服务熔断?什么是服务降级?

来源地址:服务雪崩、降级与熔断


6、 微服务的优缺点分别是什么?说下你在项目开发中遇到的坑

百度百科

优点:

  1. 服务的独立部署

    每个服务都是一个独立的项目,可以独立部署,不依赖于其他服务,耦合性低。

  2. 服务的快速启动

    拆分之后服务启动的速度必然要比拆分之前快很多,因为依赖的库少了,代码量也少了。

  3. 更加适合敏捷开发

    敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行。服务拆分可以快速发布新版本,修改哪个服务只需要发布对应的服务即可,不用整体重新发布。

  4. 职责专一,由专门的团队负责专门的服务

    业务发展迅速时,研发人员也会越来越多,每个团队可以负责对应的业务线,服务的拆分有利于团队之间的分工。

  5. 服务可以动态按需扩容

    当某个服务的访问量较大时,我们只需要将这个服务扩容即可。

  6. 代码的复用

    每个服务都提供 REST API,所有的基础服务都必须抽出来,很多的底层实现都可以以接口方式提供。

缺点:

  1. 分布式部署,调用的复杂性高

    单体应用的时候,所有模块之前的调用都是在本地进行的,在微服务中,每个模块都是独立部署的,通过 HTTP 来进行通信,这当中会产生很多问题,比如网络问题、容错问题、调用关系等。

  2. 独立的数据库,分布式事务的挑战

    每个微服务都有自己的数据库,这就是所谓的去中心化的数据管理。这种模式的优点在于不同的服务,可以选择适合自身业务的数据,比如订单服务可以用 MySQL、评论服务可以用 Mongodb、商品搜索服务可以用 Elasticsearch。

  3. 测试的难度提升

    服务和服务之间通过接口来交互,当接口有改变的时候,对所有的调用方都是有影响的,这时自动化测试就显得非常重要了,如果要靠人工一个个接口去测试,那工作量就太大了。这里要强调一点,就是 API 文档的管理尤为重要。

  4. 运维难度的提升

    在采用传统的单体应用时,我们可能只需要关注一个 Tomcat 的集群、一个 MySQL 的集群就可以了,但这在微服务架构下是行不通的。当业务增加时,服务也将越来越多,服务的部署、监控将变得非常复杂,这个时候对于运维的要求就高了。


7、你所知道的微服务技术栈有哪些?列举一二

微服务条目 技术 备注
服务开发 Springboot、Spring、SpringMVC
服务配置与管理 Netflix公司的Archaius、阿里的Diamond等
服务注册与发现 Eureka、Consul、Zookeeper等
服务调用 REST、RPC、gRPC
服务熔断器 Hystrix、Envoy等
负载均衡 Ribbon、Nginx等
服务接口调用(客户端调用服务发简单工具) Feign等
消息队列 kafka、RabbitMQ、ActiveMQ等
服务配置中心管理 SpringCloudConfig、Chef等
服务路由(API网关) Zuul等
服务监控 Zabbix、Nagios、Metrics、Spectator等
全链路追踪 Zipkin、Brave、Dapper等
服务部署 Docker、OpenStack、Kubernetes等
数据流操作开发包 SpringCloud Stream(封装与Redis,Rabbit、Kafka等发送接收消息)
事件消息总线 SpringCloud Bus

8、Eureka和Zookeeper都可以提供服务注册与发现的功能,请说说两者的区别

  1. ​ ZooKeeper保证的是CP,Eureka保证的是AP
  2. ​ ZooKeeper在选举期间注册服务瘫痪,虽然服务最终会恢复,但是选举期间不可用的
  3. ​ Eureka各个节点是平等关系,只要有一台Eureka就可以保证服务可用,而查询到的数据并不是最新的,自我保护机制会导致Eureka不再从注册列表移除因长时间没收到心跳而应该过期的服务,Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其他节点(高可用)
  4. ​ 当网络稳定时,当前实例新的注册信息会被同步到其他节点中(最终一致性),Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像ZooKeeper一样使得整个注册系统瘫痪
  5. ​ ZooKeeper有Leader和Follower角色,Eureka各个节点平等
  6. ​ ZooKeeper采用过半数存活原则,Eureka采用自我保护机制解决分区问题
  7. ​ Eureka本质上是一个工程,而ZooKeeper只是一个进程

各微服务框架对比

功能点/服务框架 Netflix/SpringCloud Motan gRPC Thrift Dubbo/DubboX
功能定位 完整的微服务框架 RPC框架,但整合了ZK或Consul,实现集群环境的基本服务注册/发现 RPC框架 RPC框架 服务框架
支持Rest 是,Ribbon支持多种可插拔的序列化选择
支持RPC 是(Hession2)
支持多语言 是(Rest形式)?
负载均衡 是(服务端zuul+客户端Ribbon),zuul-服务,动态路由,云端负载均衡Eureka(针对中间层服务器) 是(客户端) 是(客户端)
配置服务 Netfix Archaius,Spring Cloud Config Server集中配置 是(zookeeper提供)
服务调用链监控 是(zuul),zuul提供边缘服务,API网关
高可用/容错 是(服务端Hystrix+客户端Ribbon) 是(客户端) 是(客户端)
典型应用案例 Netflix Sina Google Facebook
社区活跃程度 一般 一般 2017年后重新开始维护,之前中断了5年
学习难度 中等
文档丰富程度 一般 一般 一般
其他 Spring Cloud Bus为我们的应用程序带来了更多管理端点 支持降级 Netflix内部在开发集成gRPC IDL定义 实践的公司比较多
     | Spring Cloud Bus为我们的应用程序带来了更多管理端点           | 支持降级                                                     | Netflix内部在开发集成gRPC | IDL定义  | 实践的公司比较多                    |

经典Java-SpringCloud面试题相关推荐

  1. java接口面试题_7道经典Java接口面试题

    Java接口,Java语言中存在的结构,有特定的语法和结构,是Java面试中经常出现的考点,本文为大家准备了7道经典Java接口面试题. 1.什么是接口 接口就是内部模块对模块,外部系统对其他服务提供 ...

  2. 十个经典Java 集合面试题!

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:终于放弃了单调的swagger-ui了,选择了这款神器-knife4j个人原创+1博客:点击前往,查看更多 这里 ...

  3. java springcloud面试题_JAVA语言之springboot+springcloud相关面试题

    本文主要向大家介绍了JAVA语言之springboot+springcloud相关面试题,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 什么是springboot 用来简化sprin ...

  4. 经典Java编程面试题分析

    求职者参加企业面试是进入职场的一个必经阶段,企业的面试官一般都用哪些问题来考求职者呢?不少求职人员认为,面试官提题出的问都是随机的,没有一定的规律.其实面试官基于想多方面了解面试者的情况下,会通过特定 ...

  5. Java编程经典10道_10道经典java编程笔试题

    [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少 //这是一个菲波拉契数列问题 publi ...

  6. SpringCloud面试题及答案 300道,springcloud面试题总结 (持续更新)

    SpringCloud面试题及答案(SpringCloud面试题大全带答案) 2021年面试题及答案[最新版]高级SpringCloud面试题大全,发现网上很多SpringCloud面试题及答案整理都 ...

  7. 贵港java_贵港人才网:经典java笔试题及答案分享

    经典java笔试题及谜底,共享与参考: 1.Anonymous Inner Class (匿名里面类) 是否能够extends(秉承)别的类,是否能够implements(完成)interface(接 ...

  8. 经典java程序员的面试题及答案

    今天动力节点java培训机构小编为大家分享"经典java程序员的面试题及答案",希望通过此文能够帮助到正在找工作或是即将毕业的"你",下面就随小编一起看看经典j ...

  9. java char 计算_经典Java面试题之Java中Char类型的运算

    经典Java面试题之Java中Char类型的运算 char在java中称为"字符型",占2个字节.本文是百分网小编搜索整理的关于经典Java面试题之Java中Char类型的运算,有 ...

  10. 达内java面试题集_达内经典java面试题集(一)

    达内经典java面试题集(一) 1.HashMap和Hashtable的区别. 都属于Map接口的类,实现了将惟一键映射到特定的值上. HashMap 类没有分类或者排序.它允许一个 null 键和多 ...

最新文章

  1. 浏览器无法打开摄像头
  2. 请分别介绍一下aof和rdb都有哪些优点?以及两者有何区别?
  3. Kohana和Zencart
  4. android谷歌补丁日期,久违的Android更新补丁:多年前的坑,谷歌终于给填上了
  5. 55天 - 算法 - 动态规划 - 数组类 从前往后
  6. linux系列之-—01 shell编程笔记
  7. oracle建表空间、用户
  8. 替换空格python实现
  9. 完整简单c语言程序代码,初学C语言常用简单程序代码
  10. web前端开发技术实验与实践(第三版)储久良编著 项目14 设计中国教育网络杂志简介
  11. 手机b站封面提取网站_【软件分享】B站视频提取器
  12. 禁止计算机使用u盘启动,电脑禁用u盘的设置方法
  13. D语言/DLang 2.085.1 发布,修复性迭代
  14. 教你在Windows下上传iOS APP ipa到苹果应用商店App Store
  15. win7系统安装高版本node
  16. 逢二进一 、逢八进一、逢十六进一
  17. (转载)分享一个昨天写的,3GQQ登录及取回sid的php源代码,内涵post/get访问网页的源代码。...
  18. Spring的依赖注入方法
  19. 容联云AI科学院研发先进KBQA能力,问鼎大规模中文知识图谱问答权威性测评
  20. 北美电影票房Top10-2020年1月31日:《绝地战警3》三连冠

热门文章

  1. postman与Jmeter调用接口
  2. C# ASP.NET 转换为int型的方法 很实用
  3. [Go] 通过 17 个简短代码片段,切底弄懂 channel 基础
  4. hastable与dictionary
  5. Linux里常见术语的缩写
  6. Nginx何防止流量攻击
  7. 使用Excel公式,获取 当前 Excel 文件 的 名字
  8. 解决误删/bin/bash问题
  9. 问题解决:pip无法使用,经升级后可以使用
  10. MATLAB 不能保存变量问题及解决办法