上篇讲了Spring相关的一些面试题,Spring的一些基本特性基本已经涵盖了,而Springboot,Springcloud作为其衍生框架,底层特性也相似,所以题目主要是针对一些这些框架的特有功能
Spring的一个子项目,提供一站式配置spring组件,降低开发难度,便于上手
容易入门,开箱即用,集成了大型开发需要的一些辅助功能,不需繁琐的xml配置,避免maven冲突
@Springbootapplication注解,用于启动类,包含了3个注解
1、@Springbootconfiguration,组合了configuration的注解,用来配置文件
2、EnableAutoConfiguration,打开自动配置,或者关闭自动配置
3、CmoponentScan,扫描Spring组件
一种注解,可以用java的方式替代xml的配置
它的好处有:提供了用java代码编写xml,避免在开发中在java与xml切换的麻烦
便于重构,类型安全:可以用类型而非名字查找bean
有面向对象的配置优点,可以继承配置并重写其中的bean
@EnableAutoCoufiguration调用metainfo下的spring.factories文件,读取对应的java配置类,进行相应的配置
YAML是一种可读性更好的数据结构化语言,它是分层配置数据的,可以配置文件
优势在于它更加简洁,配置有序,支持使用数组
可以通过注解@importResource引入
bootstrap.properties 和
application.properties 有何区别
bootstrap.properties和application.properties,bootstrap这个不常见,但在结合springcloud,做远程配置时会用到
前者由父applicationcontext配置,nacos,springcloud一些远程配置
后者由applicationcontext配置,用于springboot自动化配置
用来区分不同的环境,并且做相应的配置以适应运行环境
spring标签下的server.port为自定义端口号
添加spring-boot-security-parent依赖,并在配置类中继承websecurityConfigureAdapter类
ss是一个重量级安全框架,配置较为繁琐,但功能强大
shiro是一个轻量级框架,配置简单,功能简单
CORS,以前是在xml文件里配置,现在是实现webmvcconfiguer接口中的addcorsmapping方法
手动查看十分繁琐,使用基于springbootActuator的开源项目,提供了webui界面管理
项目如何热部署
热部署,引入devtools依赖,然后在编译器里配置,每次更改或者保存触发热部署
spring-boot-starter-下的activemq以及security
starter是一种spring的机制,只需要在pom中引入starter相关依赖,@enableautoconfiguration注解开启,spring会自动化配置,也可以自己自定义starter
指定jdk版本、编码版本(一般utf8),指定依赖版本号、自动资源过滤,配置打包操作,插件配置,针对不同环境下的配置文件资源过滤
springboot打的jar包与一般jar包结构不同,无法被引入,可以通过配置,打包为区别于可执行的依赖专用版本
通过实现controller类,来处理容器抛出的异常
使用spring data jpa实现可分页存储库方法
@schduled注解和quartz两种方法
Sprngbootstarter: 帮助封装了一些依赖,自动注入了需要的bean到spring容器中(官方的尾缀xxx,非官方前缀xxx)
autoconfigure: 配置bean到spring容器中,它其实在starter中
cli:命令行使用springboot的客户端工具
acuator:springboot的监控插件,提供一些接口可以获取项目的运行指标
答:SpringBootApplication @Autowired @component @ Controller @ Service @CrossOrigin @FeignClient
代了单体架构,Spring Cloud是目前最常用的微服务开发框架,已经在企
业级开发中大量的应用,Spring Cloud的子项目,大致可分成两类,一类是对现有成熟框架"Spring Boot化"的封装和抽象,第二类是开发了一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演
的就是kafka, ActiveMQ这样的角色
优点:
基于spring,有强大的支持
社区活跃度高,
更新迭代快,
功能丰富,
可以用不同的语言编写,跨平台
低耦合,粒度细
便于制定维护方案
支持并行开发
缺点:微服务繁多,治理成本高
分布式系统开发成本高
spingboot专注于单个个体微服务的开发,springcloud以springboot为基础,专注全局微服务的治理
网络问题,例如网络延迟,安全监测
部署复杂
服务目录的查询
分布式中的冗余问题
性能开销大
负载均衡
服务从项目开始配置后,可能会有位置变动,这些查找交给Eureka,在其中注册后负责查找,不需要手动查找
在服务中心上,SC能用zookeeper和eureka,dubbo只能用zookeeper
服务调用方式,sc是restapi,dubbo是RPC(远程过程调用)
服务网关,sc有zuul,dubbo自身没有,需要外部使用
增加吞吐量,减少局部过载,最小化响应时间,优化负载结构,应用时通常是将单台服务器的业务分摊到多个服务器上,以减轻压力
延迟和容错库,熔断器,防止异常传播,造成雪崩效应
通过在异常产生时,执行回退,并返回一些信息通知实现
是一种负载均衡的框架,封装了resttemplate和ribbon,可以实现更简单的负载均衡和rest api调用
提供跨实例刷新配置的功能,变动环境时,只要有一个微服务改了,其余侦听它的微服务会随之变动
SpringCloud的第二代网关框架,取代了zuul,提供权限校验,路由, 限流控制的功能
对微服务进行配置的文件,可以在内存中,也可以存在git中,分server和client角色,通过@enableconfig server开启
Eureka:服务注册与发现
Zuul:服务网关
Ribbon:客户端负载均衡
Feign:声明性的Web服务客户端
Hystrix:断路器
Confifig:分布式统一管理
默认的Feign是使用的HttpURLConnection是没有使用连接池的,可以使用httpclient,引入依赖,并在feign下配置httpclient的max-connections即可
超时优化:默认是1s这种短时,太短,可以在yml里配置timeout时间
请求连接优化,apachehttpclient可以进行优化
数据压缩:使用Gzip,可以减少数据体量,加快传输响应时间,也可以应对一些低带宽情况
负载均衡优化,这里默认是ribbon,也可以使用权重,区域敏感这些高级策略来优化
spring自己的resttemplate,通过事务
引入消息中间件,activemq,通过ack返回保证一致性
分库,多数据源分布式事务
nacos,eureka,zookper等等
autowired只用于spring框架,resource可用于多种java框架
autowired参数只有一个自动注入,默认为true,resource有七个,最重要的是byname和bytype
autowired默认按name注入,resource默认按type注入
一般有三种,将springboot打包发到容器中;也可直接运行main主方法;也可以mavern插件运行。