Java面试之Springboot,SpringCloud

前言

上篇讲了Spring相关的一些面试题,Spring的一些基本特性基本已经涵盖了,而Springboot,Springcloud作为其衍生框架,底层特性也相似,所以题目主要是针对一些这些框架的特有功能

Spring Boot面试题

1. 什么是 Spring Boot?

Spring的一个子项目,提供一站式配置spring组件,降低开发难度,便于上手

2. Spring Boot 有哪些优点?

容易入门,开箱即用,集成了大型开发需要的一些辅助功能,不需繁琐的xml配置,避免maven冲突

3. Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

@Springbootapplication注解,用于启动类,包含了3个注解
1、@Springbootconfiguration,组合了configuration的注解,用来配置文件
2、EnableAutoConfiguration,打开自动配置,或者关闭自动配置
3、CmoponentScan,扫描Spring组件

4. 什么是 JavaConfig?

一种注解,可以用java的方式替代xml的配置
它的好处有:提供了用java代码编写xml,避免在开发中在java与xml切换的麻烦
便于重构,类型安全:可以用类型而非名字查找bean
有面向对象的配置优点,可以继承配置并重写其中的bean

5. Spring Boot 自动配置原理是什么?

@EnableAutoCoufiguration调用metainfo下的spring.factories文件,读取对应的java配置类,进行相应的配置

6. 什么是 YAML,它有什么优势?

YAML是一种可读性更好的数据结构化语言,它是分层配置数据的,可以配置文件
优势在于它更加简洁,配置有序,支持使用数组

7. Spring Boot 是否可以使用 XML 配置

可以通过注解@importResource引入

8. spring boot 核心配置文件是什么?

bootstrap.properties 和
application.properties 有何区别
bootstrap.properties和application.properties,bootstrap这个不常见,但在结合springcloud,做远程配置时会用到
前者由父applicationcontext配置,nacos,springcloud一些远程配置
后者由applicationcontext配置,用于springboot自动化配置

9. 什么是 Spring Profiles

用来区分不同的环境,并且做相应的配置以适应运行环境

10. 如何在自定义端口上运行 Spring Boot 应用程序

spring标签下的server.port为自定义端口号

11. 如何实现 Spring Boot 应用程序的安全性?

添加spring-boot-security-parent依赖,并在配置类中继承websecurityConfigureAdapter类

12. 比较一下 Spring Security 和 Shiro 各自的优缺点 ?

ss是一个重量级安全框架,配置较为繁琐,但功能强大
shiro是一个轻量级框架,配置简单,功能简单

13. Spring Boot 中如何解决跨域问题 ?

CORS,以前是在xml文件里配置,现在是实现webmvcconfiguer接口中的addcorsmapping方法

14. 如何监视所有 Spring Boot 微服务?

手动查看十分繁琐,使用基于springbootActuator的开源项目,提供了webui界面管理

15. 如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?Spring Boot

项目如何热部署
热部署,引入devtools依赖,然后在编译器里配置,每次更改或者保存触发热部署

16. 使用了哪些 starter maven 依赖项,starter是什么

spring-boot-starter-下的activemq以及security
starter是一种spring的机制,只需要在pom中引入starter相关依赖,@enableautoconfiguration注解开启,spring会自动化配置,也可以自己自定义starter

17. spring-boot-starter-parent 有什么用 ?

指定jdk版本、编码版本(一般utf8),指定依赖版本号、自动资源过滤,配置打包操作,插件配置,针对不同环境下的配置文件资源过滤

18. Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?

springboot打的jar包与一般jar包结构不同,无法被引入,可以通过配置,打包为区别于可执行的依赖专用版本

19. 如何使用 Spring Boot 实现异常处理

通过实现controller类,来处理容器抛出的异常

20. 如何使用 Spring Boot 实现分页和排序

使用spring data jpa实现可分页存储库方法

21. Spring Boot 中如何实现定时任务 ?

@schduled注解和quartz两种方法

22. springboot四大组件

Sprngbootstarter: 帮助封装了一些依赖,自动注入了需要的bean到spring容器中(官方的尾缀xxx,非官方前缀xxx)
autoconfigure: 配置bean到spring容器中,它其实在starter中
cli:命令行使用springboot的客户端工具
acuator:springboot的监控插件,提供一些接口可以获取项目的运行指标

23. springboot 常见注解

答:SpringBootApplication @Autowired @component @ Controller @ Service @CrossOrigin @FeignClient

Spring Cloud面试题

1. Springcloud概述 单体结构的应用随着系统复杂度的增高,会暴露出各种各样的问题,微服务架构逐渐取

代了单体架构,Spring Cloud是目前最常用的微服务开发框架,已经在企
业级开发中大量的应用,Spring Cloud的子项目,大致可分成两类,一类是对现有成熟框架"Spring Boot化"的封装和抽象,第二类是开发了一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演
的就是kafka, ActiveMQ这样的角色

2. ,springcloud优缺点

优点:
基于spring,有强大的支持
社区活跃度高,
更新迭代快,
功能丰富,
可以用不同的语言编写,跨平台
低耦合,粒度细
便于制定维护方案
支持并行开发
缺点:微服务繁多,治理成本高
分布式系统开发成本高

3. SpringBoot和SpringCloud的区别

spingboot专注于单个个体微服务的开发,springcloud以springboot为基础,专注全局微服务的治理

4. 使用 Spring Boot 开发分布式微服务时,有什么问题

网络问题,例如网络延迟,安全监测
部署复杂
服务目录的查询
分布式中的冗余问题
性能开销大
负载均衡

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

服务从项目开始配置后,可能会有位置变动,这些查找交给Eureka,在其中注册后负责查找,不需要手动查找

6. Spring Cloud 和dubbo区别?

在服务中心上,SC能用zookeeper和eureka,dubbo只能用zookeeper
服务调用方式,sc是restapi,dubbo是RPC(远程过程调用)
服务网关,sc有zuul,dubbo自身没有,需要外部使用

7. 负载均衡意义

增加吞吐量,减少局部过载,最小化响应时间,优化负载结构,应用时通常是将单台服务器的业务分摊到多个服务器上,以减轻压力
Java面试之Springboot,SpringCloud_第1张图片

8. 什么是 Hystrix?它如何实现容错

延迟和容错库,熔断器,防止异常传播,造成雪崩效应
通过在异常产生时,执行回退,并返回一些信息通知实现

9. netflix feign?

是一种负载均衡的框架,封装了resttemplate和ribbon,可以实现更简单的负载均衡和rest api调用

10. Spring Cloud Bus?

提供跨实例刷新配置的功能,变动环境时,只要有一个微服务改了,其余侦听它的微服务会随之变动

11. spring cloud gateway?

SpringCloud的第二代网关框架,取代了zuul,提供权限校验,路由, 限流控制的功能

12. Spring Cloud Config?

对微服务进行配置的文件,可以在内存中,也可以存在git中,分server和client角色,通过@enableconfig server开启

13. Spring常见服务?

Eureka:服务注册与发现
Zuul:服务网关
Ribbon:客户端负载均衡
Java面试之Springboot,SpringCloud_第2张图片
Feign:声明性的Web服务客户端
Hystrix:断路器
Confifig:分布式统一管理

14. openfeign接口保证安全性?例如有一个请求大量访问连接池时,openfeign有哪些优化手段

默认的Feign是使用的HttpURLConnection是没有使用连接池的,可以使用httpclient,引入依赖,并在feign下配置httpclient的max-connections即可
超时优化:默认是1s这种短时,太短,可以在yml里配置timeout时间
请求连接优化,apachehttpclient可以进行优化
数据压缩:使用Gzip,可以减少数据体量,加快传输响应时间,也可以应对一些低带宽情况
负载均衡优化,这里默认是ribbon,也可以使用权重,区域敏感这些高级策略来优化

15. 微服务之间保持数据一致性

spring自己的resttemplate,通过事务
引入消息中间件,activemq,通过ack返回保证一致性
分库,多数据源分布式事务

16. 微服务注册组件有哪些

nacos,eureka,zookper等等

17. Autowired和resource注解的区别

autowired只用于spring框架,resource可用于多种java框架
autowired参数只有一个自动注入,默认为true,resource有七个,最重要的是byname和bytype
autowired默认按name注入,resource默认按type注入

18. springboot运行方式

一般有三种,将springboot打包发到容器中;也可直接运行main主方法;也可以mavern插件运行。

你可能感兴趣的:(Java面试,java,spring,boot,spring,cloud,面试)