springboot面试

springboot架构图
在这里插入图片描述

1.springboot的优势

Spring Boot 的最大的优势是“约定优于配置“。“约定优于配置“是一种软件设计范式,开发人员按照约定的方式来进行编程,可以减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。

2.springboot中 “约定优于配置“的具体产品体现

在这里插入图片描述
SpringBoot Starter、SpringBoot Jpa 都是“约定优于配置“的一种体现。都是通过“约定优于配置“的设计思路来设计的,Spring Boot Starter 在启动的过程中会根据约定的信息对资源进行初始化;SpringBoot Jpa 通过约定的方式来自动生成Sql ,避免大量无效代码编写。

3.SpringBoot自动配置原理

在这里插入图片描述
注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心。
@EnableAutoConfiguration 给容器导入META-INF/spring.factories 里定义的自动配置类。筛选有效的自动配置类。
在这里插入图片描述

4.Spring Boot Starter 的工作原理

Spring Boot 在启动的时候会干这几件事情:① Spring Boot 在启动时会去依赖的 Starter 包中寻找 resources/META-INF/spring.factories 文件,然后根据文件中配置的 Jar 包去扫描项目所依赖的 Jar 包。② 根据 spring.factories 配置加载 AutoConfigure 类。③ 根据 @Conditional 注解的条件,进行自动配置并将 Bean 注入 Spring Context。

5.springboot核心配置文件

bootstrap.properties 和 application.properties是核心配置文件。
单纯做 Spring Boot 开发,可能不太容易遇到 bootstrap.properties 配置文件,但是在结合 SpringCloud时,这个配置就会经常遇到了,特别是在需要加载一些远程配置文件的时侯。
spring boot 核心的两个配置文件:bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的,比 applicaton 优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在 SpringCloudConfig 或者Nacos 中会用到它。且boostrap 里面的属性不能被覆盖。application (. yml 或者 . properties)由ApplicatonContext加载,用于springboot项目的自动化配置。

6.微服务同时调用多个接口,怎么支持事务

支持分布式事务,可以使用SpringBoot集成Aatomikos来解决,但是我一般不建议这样使用,因为使用分布式事务会增加请求的响应时间,影响系统的TPS。一般在实际工作中,会利用消息的补偿机制来处理分布式的事务。

7.springboot安全框架,权限是如何设计。

在这里插入图片描述
SpringSecurity是专门针对基于Spring项目的安全框架,充分利用了依赖注入和AOP来实现安全管控。

OAuth是一个关于授权的开放网络标准,在全世界得到的广泛的应用,目前是2.0的版本。OAuth2在“客户端”与“服务提供商”之间,设置了一个授权层(authorization layer)。“客户端”不能直接登录“服务提供商”,只能登录授权层,以此将用户与客户端分离。“客户端”登录需要OAuth提供的令牌,否则将提示认证失败而导致客户端无法访问服务。

JWT是一种用户双方之间传递安全信息的简洁的、URL安全的表述性声明规范。JWT(Json Web Token)作为一个开放的标准(RFC 7519),定义了一种简洁的、自包含的方法用于通信双方之间以Json对象的形式进行安全性信息传递,传递时有数字签名所以信息时安全的,JWT使用RSA公钥密钥的形式进行签名。

Shiro是 pache旗下开源的一款强大且易用的Java安全框架,身份验证、授权、加密、会话管理。 相比Spring Security而言Shiro 更加轻量级,且 API 更易于理解。Shiro 主要分为 安全认证 和 接口授权 两个部分,其中的核心组件为 Subject、SecurityManager、Realms,公共部分 Shiro 都已经为我们封装好了,我们只需要按照一定的规则去编写响应的代码即可。

8.Spring Profiles配置

Spring Profiles允许用户根据配置文件(dev,test,prod等)来注册 bean。因此,当应用程序在开发中运行时,只有某些bean可以加载,而在 prod中,某些其他 bean 可以加载。假设我们的要求是Swagger文档仅适用于QA环境,并且禁用所有其他文档,这可以使用配置文件来完成。

9.微服务中session共享

在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务器上,各自的session被从物理空间上隔离开了。但是经常,我们需要在不同微服务之间共享 session,常见的方案就是Spring Session + Redis 来实现 session 共享。将所有微服务的 session 统一保存在 Redis 上,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上的 session 。这样就实现了 session 共享,Spring Session 基于 Spring 中的代理过滤器实现,使得 session 的同步操作对开发人员而言是透明的,非常简便。

10.设计无状态服务

对于无状态服务,首先说一下什么是状态:如果一个数据需要被多个服务共享,才能完成一笔交易,那么这个数据被称为状态。进而依赖这个“状态”数据的服务被称为有状态服务,反之称为无状态服务。那么这个无状态服务原则并不是说在微服务架构里就不允许存在状态,表达的真实意思是要把有状态的业务服务改变为无状态的计算类服务,那么状态数据也就相应的迁移到对应的“有状态数据服务”中。
场景说明:例如我们以前在本地内存中建立的数据缓存、Session缓存,到现在的微服务架构中就应该把这些数据迁移到分布式缓存中存储,让业务服务变成一个无状态的计算节点。迁移后,就可以做到按需动态伸缩,微服务应用在运行时动态增删节点,就不再需要考虑缓存数据如何同步的问题。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
引用:史上最全Java面试宝典,BAT大厂面试必备。整理不易,建议先关注点赞加收藏 序号名称地址1Java基础面试题(91道含答案)(点击查看)2Java并发编程面试题 (123道含答案)(点击查看)3Java异常面试题 (33道含答案)(点击查看)4Java虚拟机(JVM)面试题(51道含答案)(点击查看)5Java集合面试题(52道含答案)(点击查看)6Linux面试题(50道含答案)(点击查看)7Memcache面试题(23道含答案)(点击查看)8Mybatiss面试题 (37道含答案)(点击查看)9MySQL面试题(40道含答案)(点击查看)10Netty面试题(49道含答案)(点击查看)11Nginx面试题(23道含答案)(点击查看)12RabbitMQ面试题(22道含答案)(点击查看)13Redis面试题(70道含答案)(点击查看)14SpringBoot面试题(44道含答案)(点击查看)15SpringCloud面试题(49道含答案)(点击查看)16SpringMVC面试题(29道含答案)(点击查看)17Spring面试题(75道含答案)(点击查看)18TCP、UDP、Socket、Http网络编程面试题(47道含答案)(点击查看)19Tomcat面试题(15道含答案)(点击查看)20Zookeeper面试题(28道含答案)(点击查看)21多线程面试题(60道含答案)(点击查看)22设计模式面试题(14道含答案)(点击查看)23BIO、NIO、AIO、Netty面试题(35道含答案)(点击查看)24Dubbo面试题(47道含答案)(点击查看)25ElasticSearch面试题(31道含答案)(点击查看)26Git常用命令(63条)(点击查看)。 引用:运行Spring Boot应用程序:可以使用spring-boot:run命令在开发阶段启动Spring Boot应用程序。 引用:生成Spring Boot项目文档:可以使用spring-boot:help命令生成Spring Boot项目的文档。11.SpringBoot 打成jar和普通的jar有什么区别? Spring Boot的打包方式主要有两种,一种是打成可执行的jar包,另一种是传统的普通jar包。两者的区别在于可执行的jar包中包含了一个内嵌的Tomcat服务器,可以直接运行,而普通的jar包则需要在外部环境中运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值