SpringBoot和SpringCloud⾯试题持续更新
Spring Boot
Spring Boot 与 Spring 的区别
Spring Boot可以建⽴独⽴的Spring应⽤程序;
内嵌了如Tomcat,Jetty和Undertow这样的容器,也就是说可以直接跑起来,⽤不着再做部署⼯作了。
⽆需再像Spring那样搞⼀堆繁琐的xml⽂件的配置; 可以⾃动配置Spring;
提供了⼀些现有的功能,如度量⼯具,表单数据验证以及⼀些外部配置这样的⼀些第三⽅功能; 提供的POM可以简化Maven的配置;
SpringBoot 的⾃动配置是怎么做的?
⾃动化配置的实现都在 spring-boot-autoconfigure 依赖中,通过@EnableAutoConfiguration 核⼼注解初始化,并扫描
ClassPath ⽬录中⾃动配置类对应依赖。并对对应的组件依赖按⼀定规则获取默认配置并⾃动初始化所
需要的Bean。
springboot如何添加【修改代码】⾃动重启功能分布式和微服务的关系
添加开发者⼯具集=====spring-boot-devtools
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
springboot读取配置⽂件的⽅式
springboot默认读取配置⽂件为application.properties或者是l
SpringBoot常⽤的starter:
1、spring-boot-starter-web(嵌⼊Tomcat和web开发需要的servlet和jsp⽀持)
2、spring-boot-starter-data-jpa(数据库⽀持)
3、spring-boot-starter-data-Redis(Redis⽀持)
4、spring-boot-starter-data-solr(solr搜索应⽤框架⽀持)
5、mybatis-spring-boot-starter(第三⽅mybatis集成starter)
SpringBoot starter⼯作原理:
1、SpringBoot在启动时扫描项⽬依赖的jar包,寻包含spring.factories⽂件的jar
2、根据spring.factories配置加载AutoConfigure
3、根据@Conditional注解的条件,进⾏⾃动配置并将bean注⼊到Spring Context
SpringBoot的优点:
1. 减少开发、测试时间和努⼒
2. 使⽤JavaConfig有助于避免使⽤XML
3. 避免⼤量的maven导⼊和各种版本冲突
4. 提供意见发展⽅法
5. 通过提供默认值快速开始开发
6. 没有单独的web服务器需要,这就意味着不再需要启动Tomcat、Glassfish或其他任何东西
7. 需要更少的配置,因为没有l⽂件。只需添加⽤@Configuration注释的类,然后添加⽤@Bean注释的⽅法,Spring将⾃动加
载对象并像以前⼀样对其进⾏管理。甚⾄可以将@Autowired添加到bean⽅法中,以使⽤Spring⾃动装⼊需要的依赖关系中
springboot集成mybatis的过程
添加mybatis的starter maven依赖
<dependency>
<groupId&batis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency>
在mybatis的接⼝中 添加@Mapper注解
在l配置数据源信息
spring cloud
什么是微服务?
单个轻量级服务⼀般为⼀个单独微服务,微服务讲究的是 专注某个功能的实现,⽐如登录系统只专注于⽤户登录⽅⾯功能的实现,讲究的是职责单⼀,开箱即⽤,可以独⽴运⾏。
微服务架构系统是⼀个分布式的系统,按照业务进⾏划分服务单元模块,解决单个系统的不⾜,满⾜越来越复杂的业务需求。
什么是 spring cloud?
spring cloud 是⼀系列框架的有序集合。它利⽤ spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中⼼、消息总线、负载均衡、断路器、数据监控等,都可以⽤ spring boot 的开发风格做到⼀键启动和部署。
spring cloud 的核⼼组件有哪些?
Eureka:服务注册于发现。
Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。
Ribbon:实现负载均衡,从⼀个服务的多台机器中选择⼀台。
Hystrix:提供线程池,不同的服务⾛不同的线程池,实现了不同服务调⽤的隔离,避免了服务雪崩的问题。
Zuul:⽹关管理,由 Zuul ⽹关转发请求给对应的服务。
Springcloud解决哪些问题:
配置管理 (注册中⼼eureka、zk)
服务发现
服务注册
断路器
路由策略
全局锁
分布式会话
客户端调⽤
接⼝⽹关(zuul)
服务管理系统
springcloud如何实现服务注册与发现?
服务发布时指定对应的服务名(IP地址和端⼝号),将服务注册到注册中⼼(eureka和zookeeper),但是这⼀切是Springcloud⾃动实现的,只需要在SpringBoot的启动类上加上@EnableDisscoveryClient注解,同⼀服务修改端⼝就可以启动多个实例调⽤⽅法:传递服务名称通过注册中⼼获取所有的可⽤实例,通过负载均衡策略(Ribbon和Feign)调⽤对应的服务
spring cloud 和dubbo区别?
1. 服务调⽤⽅式 dubbo是RPC springcloud Rest Api
2. 注册中⼼,dubbo 是zookeeper springcloud是eureka,也可以是zookeeper
3. 服务⽹关,dubbo本⾝没有实现,只能通过其他第三⽅技术整合,springcloud有Zuul路由⽹关,作为路由服务器,进⾏消费者的请求
分发,springcloud⽀持断路器,与git完美集成配置⽂件⽀持版本控制,事物总线实现配置⽂件的更新与服务⾃动装配等等⼀系列的微服务架构要素。
微服务之间是如何独⽴通讯的
1. 同步通讯:远程过程调⽤(Remote Procedure Invocation):
也就是我们常说的服务的注册与发现直接通过远程过程调⽤来访问别的service。
优点:
简单,常见,因为没有中间件代理,系统更简单
缺点:
只⽀持请求/响应的模式,不⽀持别的,⽐如通知、请求/异步响应、发布/订阅、发布/异步响应
降低了可⽤性,因为客户端和服务端在请求过程中必须都是可⽤的
2. 异步通讯:消息:
使⽤异步消息来做服务间通信。服务间通过消息管道来交换消息,从⽽通信。
优点:
把客户端和服务端解耦,更松耦合
提⾼可⽤性,因为消息中间件缓存了消息,直到消费者可以消费
⽀持很多通信机制⽐如通知、请求/异步响应、发布/订阅、发布/异步响应
缺点:
消息中间件有额外的复杂
什么是服务熔断?什么是服务降级
【服务雪崩】
在复杂的分布式系统中,微服务之间的相互调⽤,有可能出现各种各样的原因导致服务的阻塞,在⾼并发场景下,服务的阻塞意味着线程的阻塞,导致当前线程不可⽤,服务器的线程全部阻塞,导致服务器崩溃,由于服务之间的调⽤关系是同步的,会对整个微服务系统造成服务雪崩
为了解决某个微服务的调⽤响应时间过长或者不可⽤进⽽占⽤越来越多的系统资源引起【雪崩效应】就需要进⾏【服务熔断】和【服务降级】处理。
【服务熔断】
是某个服务故障或异常⼀起类似显⽰世界中的“保险丝"当某个异常条件被触发就直接熔断整个服务,⽽不是⼀直等到此服务超时。
服务熔断就是相当于我们电闸的保险丝,⼀旦发⽣服务雪崩的,就会熔断整个服务,通过维护⼀个⾃⼰的线程池,当线程达到阈值的时候就启动服务降级,如果其他请求继续访问就直接返回fallback的默认值
微服务的优缺点分别是什么?说下你在项⽬开发中碰到的坑
优点
每⼀个服务⾜够内聚,代码容易理解
开发效率提⾼,⼀个服务只做⼀件事
微服务能够被⼩团队单独开发
微服务是松耦合的,是有功能意义的服务
可以⽤不同的语⾔开发,⾯向接⼝编程
易于与第三⽅集成
微服务只是业务逻辑的代码,不会和HTML,CSS或者其他界⾯组合
开发中,两种开发模式
- 前后端分离
- 全栈⼯程师
可以灵活搭配,连接公共库/连接独⽴库
缺点
分布式系统的负责性
多服务运维难度,随着服务的增加,运维的压⼒也在增⼤
系统部署依赖
服务间通信成本
数据⼀致性
系统集成测试
性能监控
Eureka和ZooKeeper都可以提供服务注册与发现的功能,请说说两个的区别
1. ZooKeeper保证的是CP,Eureka保证的是AP
ZooKeeper在选举期间注册服务瘫痪,虽然服务最终会恢复,但是选举期间不可⽤的
Eureka各个节点是平等关系,只要有⼀台Eureka就可以保证服务可⽤,⽽查询到的数据并不是最新的
⾃我保护机制会导致Eureka不再从注册列表移除因长时间没收到⼼跳⽽应该过期的服务
Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其他节点(⾼可⽤)
当⽹络稳定时,当前实例新的注册信息会被同步到其他节点中(最终⼀致性)
Eureka可以很好的应对因⽹络故障导致部分节点失去联系的情况,⽽不会像ZooKeeper⼀样使得整个注册系统瘫痪
2. ZooKeeper有Leader和Follower⾓⾊,Eureka各个节点平等
3. ZooKeeper采⽤过半数存活原则,Eureka采⽤⾃我保护机制解决分区问题
4. Eureka本质上是⼀个⼯程,⽽ZooKeeper只是⼀个进程
eureka⾃我保护机制是什么?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论