Springboot&Springcloud面试题(含代码及展示图)

1 简单说一下springboot?

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。 -使用springboot以后,搭建一个spring应用和开发,部署变得很简单.

2 怎么简单实现一个springboot应用

1)新建maven项目

2)让项目以spring-boot-starter-parent为父模块

<parent>     
    <groupId>org.springframework.boot</groupId>   
    <artifactId>spring-boot-starter-parent</artifactId>    
    <version>2.0.5.RELEASE</version> 
</parent>

3)根据场景选择一些starter

<dependency>   
   <groupId>org.springframework.boot</groupId>    
   <artifactId>spring-boot-starter-web</artifactId>  
</dependency>  

<dependency>      
  <groupId>org.springframework.boot</groupId>    
  <artifactId>spring-boot-starter-test</artifactId>
</dependency>

4)进行application.yml/application.properties配置

server:

 port: 8080 

5)写入口类

@SpringBootApplication 

 public class PetHomeApplication {   
       public static void main(String[] args) {
            SpringApplication.run(PetHomeApplication.class,args);    
  }  }

6)测试

启动main,通过localhost:8080启动不报错

3 springboot怎么实现多环境配置

1)什么是多环境配置

就是一套代码,有可能要在多个环境使用。就要对多种环境进行配置。

2)怎么进行多环境配置

①在一个文件中配置多个环境

②多个文件(application-环境名.yml/properties)

3)怎么指定具体的环境

①默认启动

②指定启动环境

4 springboot项目怎么部署

Springboot默认已经集成了内置的Tomcat,对它进行打包jar后,里面就有tomcat。直接以jar包方式运行就ok。

1)打包

pom.xml加入打包插件

<build>      
      <plugins>          
          <plugin>            
  <groupId>org.springframework.boot</groupId>       
  <artifactId>spring-boot-maven-plugin</artifactId>         
          </plugin>      
      </plugins> 
</build>

打包:

mvn clean package

2)部署

windows: java -jar xxx.jar

Linux:后台运行nohup java -jar xxx.jar

5 springboot自动配置原理

当我们引入了starter,就会使用springboot自动配置原理,对这种场景进行配置。

image

①Springboot应用入口类通过@SpringBootApplication注解简介使用@EnableAutoConfiguration(是父注解)

②使用@EnableAutoConfiguration后,会扫描所有jar中的spring.factories文件,加载所有的配置类(加了 @Configuration的类)

③配置类(加了@Configuration的类)使用XxxProperties以@Bean的方式完成对应场景的配置

④XxxPropereis里面的配置信息有默认值,但是我们可以在application.properties/application.yml中获取

6 Monolith是什么

通常情况下,这个项目所对应的代码由可以多个模块所组成,各个模块会根据自身所提供功能的不同具有一个明确的边界。在编译时,这些项目将被打包成为一个个JAR包,并最终合并在一起形成一个jar或WAR包

image

在项目很小的情况下这种单体应用比较简单,但是随着项目越变越大,代码越来越多。就会存在以下缺点。

   ①编译难,部署难,测试难

     代码量变多,即使更改一行代码,也需花大量时间编译,部署前要编译打包,解压等所以部署难,部署完了还要测试所以测试难。

   ②技术选择难

    在变得越来越大的同时,我们的应用所使用的技术也会变得越来越多。这些技术有些是不兼容的,就比如在一个项目中大范围地混合使用C++和Java几乎是不可能的事情。在这种情况下,我们就需要抛弃对某些不兼容技术的使用,而选择一种不是那么适合的技术来实现特定的功能。

  ③扩展难

     哪怕只有一个功能并发高,也要全部扩展
image

7 MicroService是什么

微服务架构是一种架构风格,一个大型复杂软件应由一个或多个微服务组成。系统中的各个微服务可被独立技术选型,独立开发,独立部署,独立运维,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。

image

8 Monolith&MicroService选型

image

从上图中可以看到,在刚开始的阶段,使用Microservice架构模式开发应用的效率明显低于Monolith。但是随着应用规模的增大,基于Microservice架构模式的开发效率将明显上升,而基于Monolith模式开发的效率将逐步下降。

单体应用架构:中小型项目(功能相对较少),公司官网,管理系统等

微服务架构:大型项目(功能比较多) 商城 erp,人力资源,宠物乐园等-互联网项目

9 MicroService拆分微服务注意些什么

  1. 单一职责、高内聚低耦合

  2. 服务粒度适中

  3. 考虑团队结构

  4. 以业务模型切入

  5. 演进式拆分

  6. 避免环形依赖与双向依赖

10 MicroService核心需要解决的问题

  1. 服务注册与发现-注册中心

  2. 微服务的统一入口-API网管

  3. 服务容错限流

  4. 服务的集中式配置中心

  5. 服务调用链追踪

  6. 服务部署

  7. 服务监控

11 MicroService常见的解决方案

  1. Springcloud Netflix

  2. Springcloud alibaba

  3. Dubbo

  4. Kubernates-k8s

  5. Service mesh-istio

  6. 其他

12 简单说一下Springcloud

微服务架构是一种思想,需要技术落地, 在spring微服务解决方案中,springboot使用用来实现单个服务,而服务间协调调用要使用服务治理框架springcloud netflix/alibaba来实现。下面主要讲netflix常用组件如下:

五大神兽:

服务注册发现(注册中心)——Netflix Eureka :帮我们管理服务的通信地址(ip,端口)

客户端负载均衡——Netflix Ribbon\Feign : 解决服务调用的

断路器——Netflix Hystrix :解决微服务故障的,保护微服务的

服务网关——Netflix Zuul :统一访问入口,微服务的大门(安保部门)

分布式配置——Spring Cloud Config :统一管理微服务的配置

13 简单说一下Springcloud Netflix eureka

Eureka是netflix的一个子模块,也是核心模块之一。

Eureka是一个服务注册与发现组件,简单说就是用来统一管理微服务的通信地址,它包含了EurekaServer服务端(也叫注册中心)和EurekaClient客户端两部分组成,EureakServer是独立的服务,而EurekaClient需要继承到每个微服务中。

微服务(EurekaClient)在启动的时候会向EureakServer提交自己的通信地址清单如:服务名,ip,端口,在EurekaServer会形成一个微服务的通信地址列表 --- 这叫服务注册

微服务(EurekaClient)会定期的从EureakServer拉取一份微服务通信地址列表缓存到本地。一个微服务在向另一个微服务发起调用的时候会根据目标服务的服务名找到其通信地址清单,然后基于HTTP协议向目标服务发起请求。---这叫服务发现

另外,微服务(EurekaClient)采用“心跳”机制向EureakServer发请求进行服务续约,其实就是定时向EureakServer发请求报告自己的健康状况,告诉EureakServer自己还活着,不要把自己从服务地址清单中掉,那么当微服务(EurekaClient)宕机未向EureakServer续约,或者续约请求超时,注册中心机会从地址清单中剔除该续约失败的服务

14 简单说一下Springcloud Netflix ribbon/feign

Ribbon是Netflix发布的云中间层服务开源项目,主要功能是提供客户端负载均衡算法。

Ribbon是一个客户端负载均衡器,它可以按照一定规则来完成多台服务器负载均衡调用,这些规则还支持自定义。

Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单。Feign提供了HTTP请求的接口模板(上面标的有访问地址),通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。Feign整合了Ribbon和Hystrix(关于Hystrix我们后面再讲),可以让我们不再需要显式地使用这两个组件。

15 简单说一下Springcloud Netflix hystrix

Hystrix是国外知名的视频网站Netflix所开源的非常流行的高可用架构框架。Hystrix能够完美的解决分布式系统架构中打造高可用服务面临的一系列技术难题。

Hystrix “豪猪”,具有自我保护的能力。hystrix 通过如下机制来解决雪崩效应问题。

1 资源隔离(限流):包括线程池隔离和信号量隔离,限制调用分布式服务的资源使用,某一个调用的服务出现问题不会影响其他服务调用。

2 熔断:当失败率达到阀值自动触发降级(如因网络故障/超时造成的失败率高),熔断器触发的快速失败会进行快速恢复。

3降级机制:超时降级、资源不足时(线程或信号量)降级,降级后可以配合降级接口返回托底数据。

4 缓存:提供了请求缓存、请求合并实现。

16 简单说一下Springcloud Netflix zuul

Zuul 是netflix开源的一个API Gateway 服务器。主要功能如下:

  1. 动态路由 通过不同的地址区分调用哪个具体的服务

  2. 过滤器 通过过滤器可以实现登录拦截,权限判断等

  3. 负载均衡 底层通过ribbon实现负载均衡调用

  4. 熔断降级 底层通过hystrix实现熔断降级等服务保障措施

  5. ...

17 简单说一下Springcloud Netflix Config server

在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。

18 MicroService架构-链路追踪

在微服务架构中,存在服务之间的相互调用,需要做服务调用链监控。市场上存在的产品很多,具体优缺点如下:

image

19 MicroService架构-部署

微服务架构中,有众多的服务,所以需要对众多服务进行快速部署与快速升级。所以一般都会使用docker部署,并且需要cicd流水线。具体流程如下:

image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容