爱美容
当前位置: 首页 美容百科

springboot面试问题集合(SpringBoot面试)

时间:2023-05-28 作者: 小编 阅读量: 2 栏目名: 美容百科

随着SpringBoot使用越来越广泛,SpringBoot已经成为Java程序员面试的知识点,很多同学对SpringBoot理解不是那么深刻,经常就会被几个连环跑给干趴下了!比如下面这一段的SpringBoot问答:问:你觉得SpringBoot最大的优势是什么呢?

随着 Spring Boot 使用越来越广泛,Spring Boot 已经成为 Java 程序员面试的知识点,很多同学对 Spring Boot 理解不是那么深刻,经常就会被几个连环跑给干趴下了!

比如下面这一段的 Spring Boot 问答:

问:你觉得 Spring Boot 最大的优势是什么呢?

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

问:Spring Boot 中 “约定优于配置“的具体产品体现在哪里。

答:Spring Boot Starter、Spring Boot JPA 都是“约定优于配置“的一种体现。都是通过“约定优于配置“的设计思路来设计的,Spring Boot Starter 在启动的过程中会根据约定的信息对资源进行初始化;Spring Boot Jpa 通过约定的方式来自动生成 Sql ,避免大量无效代码编写。具体详细可以参考:Spring Boot 为什么这么火?

问:Spring Boot Starter 的工作原理是什么?

答:Spring Boot 在启动的时候会干这几件事情:

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

总结一下,其实就是 Spring Boot 在启动的时候,按照约定去读取 Spring Boot Starter 的配置信息,再根据配置信息对资源进行初始化,并注入到 Spring 容器中。这样 Spring Boot 启动完毕后,就已经准备好了一切资源,使用过程中直接注入对应 Bean 资源即可。

这只是简单的三连环问答,不知道有多少同学能够完整的回答出来。

其实 Spring Boot 中有很多的技术点可以挖掘,今天给大家整理了十个高频 Spring Boot 面试题,希望可以在后期的面试中帮助到大家。

一、Spring Boot 的自动配置是如何实现的?

Spring Boot 项目的启动注解是:@SpringBootApplication,其实它就是由下面三个注解组成的:

  • @Configuration
  • @ComponentScan
  • @EnableAutoConfiguration

其中 @EnableAutoConfiguration 是实现自动配置的入口,该注解又通过 @Import 注解导入了AutoConfigurationImportSelector,在该类中加载 META-INF/spring.factories 的配置信息。然后筛选出以 EnableAutoConfiguration 为 key 的数据,加载到 IOC 容器中,实现自动配置功能!

二、什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?

思考一下在你的虚拟机上部署应用程序需要些什么。

第一步:安装 Java

第二部:安装 Web 或者是应用程序的服务器(Tomat/Wbesphere/Weblogic 等等)

第三部:部署应用程序 war 包

如果我们想简化这些步骤,应该如何做呢?

让我们来思考如何使服务器成为应用程序的一部分?

你只需要一个安装了 Java 的虚拟机,就可以直接在上面部署应用程序了,

是不是很爽?

这个想法是嵌入式服务器的起源。

当我们创建一个可以部署的应用程序的时候,我们将会把服务器(例如,tomcat)嵌入到可部署的服务器中。

例如,对于一个 Spring Boot 应用程序来说,你可以生成一个包含 Embedded Tomcat 的应用程序 jar。你就可以像运行正常 Java 应用程序一样来运行 web 应用程序了。

嵌入式服务器就是我们的可执行单元包含服务器的二进制文件(例如,tomcat.jar)。

三、微服务同时调用多个接口,怎么支持事务的啊?

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

四、shiro和oauth还有cas他们之间的关系是什么?问下您公司权限是如何设计,还有就是这几个概念的区别。

cas和oauth是一个解决单点登录的组件,shiro主要是负责权限安全方面的工作,所以功能点不一致。但往往需要单点登陆和权限控制一起来使用,所以就有 cas shiro或者oauth shiro这样的组合。

token一般是客户端登录后服务端生成的令牌,每次访问服务端会进行校验,一般保存到内存即可,也可以放到其他介质;redis可以做Session共享,如果前端web服务器有几台负载,但是需要保持用户登录的状态,这场景使用比较常见。

我们公司使用oauth shiro这样的方式来做后台权限的管理,oauth负责多后台统一登录认证,shiro负责给登录用户赋予不同的访问权限。

五、各服务之间通信,对restful和rpc这2种方式如何做选择?

在传统的SOA治理中,使用rpc的居多;Spring Cloud默认使用restful进行服务之间的通讯。rpc通讯效率会比restful要高一些,但是对于大多数公司来讲,这点效率影响甚微。我建议使用restful这种方式,易于在不同语言实现的服务之间通讯。

六、怎么设计无状态服务?

对于无状态服务,首先说一下什么是状态:如果一个数据需要被多个服务共享,才能完成一笔交易,那么这个数据被称为状态。进而依赖这个“状态”数据的服务被称为有状态服务,反之称为无状态服务。

那么这个无状态服务原则并不是说在微服务架构里就不允许存在状态,表达的真实意思是要把有状态的业务服务改变为无状态的计算类服务,那么状态数据也就相应的迁移到对应的“有状态数据服务”中。

场景说明:例如我们以前在本地内存中建立的数据缓存、Session缓存,到现在的微服务架构中就应该把这些数据迁移到分布式缓存中存储,让业务服务变成一个无状态的计算节点。迁移后,就可以做到按需动态伸缩,微服务应用在运行时动态增删节点,就不再需要考虑缓存数据如何同步的问题。

七、Spring Cache 三种常用的缓存注解和意义?

  • @Cacheable ,用来声明方法是可缓存,将结果存储到缓存中以便后续使用相同参数调用时不需执行实际的方法,直接从缓存中取值。
  • @CachePut,使用 @CachePut 标注的方法在执行前,不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。
  • @CacheEvict,是用来标注在需要清除缓存元素的方法或类上的,当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。

八、Spring Boot 如何设置支持跨域请求?

现代浏览器出于安全的考虑, HTTP 请求时必须遵守同源策略,否则就是跨域的 HTTP 请求,默认情况下是被禁止的,IP(域名)不同、或者端口不同、协议不同(比如 HTTP、HTTPS)都会造成跨域问题。

一般前端的解决方案有:

  1. 使用 JSONP 来支持跨域的请求,JSONP 实现跨域请求的原理简单的说,就是动态创建<script>标签,然后利用<script>的 SRC 不受同源策略约束来跨域获取数据。缺点是需要后端配合输出特定的返回信息。
  2. 利用反应代理的机制来解决跨域的问题,前端请求的时候先将请求发送到同源地址的后端,通过后端请求转发来避免跨域的访问。

后来 HTML5 支持了 CORS 协议。CORS 是一个 W3C 标准,全称是”跨域资源共享”(Cross-origin resource sharing),允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。它通过服务器增加一个特殊的 Header[Access-Control-Allow-Origin]来告诉客户端跨域的限制,如果浏览器支持 CORS、并且判断 Origin 通过的话,就会允许 XMLHttpRequest 发起跨域请求。

前端使用了 CORS 协议,就需要后端设置支持非同源的请求,Spring Boot 设置支持非同源的请求有两种方式。

第一,配置 CorsFilter。

@Configurationpublic class GlobalCorsConfig { @Bean public CorsFilter corsFilter() { CorsConfiguration config = new CorsConfiguration(); config.addAllowedOrigin("*"); config.setAllowCredentials(true); config.addAllowedMethod("*"); config.addAllowedHeader("*"); config.addExposedHeader("*"); UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(); configSource.registerCorsConfiguration("/**", config); return new CorsFilter(configSource); }}

需要配置上述的一段代码。第二种方式稍微简单一些。

第二,在启动类上添加:

public class Application extends WebMvcConfigurerAdapter {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowCredentials(true).allowedHeaders("*").allowedOrigins("*").allowedMethods("*");} }

九、JPA 和 Hibernate 有哪些区别?JPA 可以支持动态 SQL 吗?

JPA本身是一种规范,它的本质是一种ORM规范(不是ORM框架,因为JPA并未提供ORM实现,只是制定了规范)因为JPA是一种规范,所以,只是提供了一些相关的接口,但是接口并不能直接使用,JPA底层需要某种JPA实现,Hibernate 是 JPA 的一个实现集。

JPA 是根据实体类的注解来创建对应的表和字段,如果需要动态创建表或者字段,需要动态构建对应的实体类,再重新调用Jpa刷新整个Entity。动态SQL,mybatis支持的最好,jpa也可以支持,但是没有Mybatis那么灵活。

十、Spring 、Spring Boot 和 Spring Cloud 的关系?

Spring 最初最核心的两大核心功能 Spring Ioc 和 Spring Aop 成就了 Spring,Spring 在这两大核心的功能上不断的发展,才有了 Spring 事务、Spring Mvc 等一系列伟大的产品,最终成就了 Spring 帝国,到了后期 Spring 几乎可以解决企业开发中的所有问题。

Spring Boot 是在强大的 Spring 帝国生态基础上面发展而来,发明 Spring Boot 不是为了取代 Spring ,是为了让人们更容易的使用 Spring 。

Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。

Spring Cloud 是为了解决微服务架构中服务治理而提供的一系列功能的开发框架,并且 Spring Cloud 是完全基于 Spring Boot 而开发,Spring Cloud 利用 Spring Boot 特性整合了开源行业中优秀的组件,整体对外提供了一套在微服务架构中服务治理的解决方案。

用一组不太合理的包含关系来表达它们之间的关系。

Spring ioc/aop > Spring > Spring Boot > Spring Cloud

作者简介:纯洁的微笑,一个有故事的程序员。曾在互联网金融,第三方支付公司工作,现为一名自由职业者,和你一起用技术的角度去看这个世界。我的个人微信号puresmile2,欢迎大家找我聊天,记录你我的故事。

    推荐阅读
  • 巴西暴雨对大豆的影响(农产品的收割和种植)

    巴西暴雨对大豆的影响作为世界重要的大豆产区,巴西马托格罗索州遭受暴雨袭击,大豆产量损失严重,影响到巴西国内大豆及大豆油市场。巴西马托格罗索州的农畜官表示,受恶劣天气影响,马托格罗索州连续普降大雨达一周之久。马托格罗索州的大豆产量占全国总产量的三成,此次大豆受损数量将近50万吨,这对巴西国内大豆市场和大豆油市场的影响不可小觑。

  • 梦见小白兔子是什么意思周公解梦 梦见小白兔子是什么意思周公解梦女

    梦见小白兔子,精神直觉上的认识和跳跃。小兔子被放出来表示精神重获自由,并且对过去的婚姻有了本质的认识。梦见手抱小白兔子、捉小白兔子,代表你会有客人到访,未有爱侣的将会觅得一个终生伴侣。梦见小白兔子梦见白兔,必有贵人所接。《敦煌本梦书》梦食白兔,吉。疾病者梦此,不用药亦有转机;怀孕者梦此,生女大贵,凡事皆吉。《敦煌本梦书》梦见兔子是吉兆,梦见养兔预示着你会远离灾祸,幸福平安。

  • 有多少人叫赵羽(赵羽迎融媒体时代)

    这一媒体的报道使“报纸消亡论”广为传播,继而引发众声喧哗、各抒己见。2008年10月,美国颇具影响力的报纸《基督教科学箴言报》宣布,将在2009年3月停止发行印刷报刊。实际上,菲利普·迈耶的“报纸消亡论”,不过是指出了纸媒的减少和衰落,并没有全盘否定纸媒的存在。

  • 二本选什么专业比较好就业(刚过二本分数线可以选择的专业)

    目前来说,专科应该是最难就业的,不仅要受到专业的限制还要受到学历的限制。而且本科生升职都是非常有利的,发展也是相当不错的。而且,这个专业的分数并不是特别高,有很多院校基本上是压线就能上。稳妥才是最重要的。对于这样的学生,只有一个原则,能走本科绝不走专科。这个概率只有一半。这对于学生而言,就是吃了大亏了。要知道,事物都是有概率的,就像复读一样,概率就是一半一半。高考的目的就是为了考大学,好就业。

  • 描写起床的优美句子(描写早晨的优美段落)

    睡眼惺忪迎接黎明,刷牙洗脸手要轻。阳光给我好心情,享受清新好空气。一杯热饮好甜蜜,家有人伴好温馨。新的一天,新期待,美好生活常伴您!早晨,美丽的、雄赳赳的和气昂昂的公鸡用激扬的叫声报晓着黎明的到来,此起彼伏地歌唱着。乡村慢慢地睁开睡眼惺忪的眼睛,在一阵舒服中醒来。一片无色的光线透过心爱的窗帘,照射在脸上。我快速地起床后,拉开帘布,推开窗户,浅吟低唱的微风轻轻地吹进,伴随着一股清鲜的气味扑鼻而来。

  • 我的世界里生成的村民怎么不干活(我的世界都有什么模式)

    我的世界里生成的村民怎么不干活?以下内容大家不妨参考一二希望能帮到您!我的世界里生成的村民怎么不干活村庄里面的村民,是有耕种范围的,自动农田需要远离村庄64格才能正常干活。玩家们可以在游戏中自由选择模式,在各种模式中体验不一样的有趣玩法,在生存模式中享受打怪、冒险等多种乐趣,在创造模式下享受当创世神的乐趣。

  • 九江德安春节期间黄码人员核酸检测点

    健康码黄码人员需接受必要的核酸检测、健康监测等措施。请提前报告社区,并在做好防护后再前往以下黄码人员核酸采样点。提交成功后,县区解码专员会在24小时内在线审核,实现网上转码全闭环操作。如还有其他需要解答的问题,请与属地指挥部或社区工作人员联系。

  • 四成网售儿童内裤不达标(网售4成儿童内裤抽检不合格)

    网售4成儿童内裤抽检不合格继不合格童鞋被曝光,儿童内裤也出了问题!前段时间,广西消委会委托广西产品质量检验研究院,对儿童内裤进行了测评结果发现:有四成网售儿童内裤不合格!!!涉及多个品牌,谨慎给孩子穿在这次测评中,消委会的工作。

  • 春节搞笑拜年祝福语(盘点春节搞笑拜年祝福语)

    春节搞笑拜年祝福语事业百尺竿头,爱情甜在心头,挣钱富得流油,祝你:好事连连,好梦圆圆!祝我最亲爱的朋友在新年里高举发财大旗,紧密团结在以人民币为核心的钱中央周围,坚持潇洒基本原则,把握艳遇、与钱俱进,把幸福的道理走到底!甭管大海再多水,大山再多伟,蜘蛛再多腿,辣椒再辣嘴,总之春节你最美!新年将至,为了地球环境与资源,请减少购买传统纸制贺卡,你可在大面值人民币上用铅笔填上贺词,寄给我!

  • 炖牛肉的方法(牛肉的炖煮方法)

    炖牛肉的方法炖牛肉时,应使用热水,不可用冷水,因为热水可以使牛肉表面蛋白质迅速凝固,防止氨基酸流失,保持肉味鲜美。旺火烧开后,揭开盖子炖20分钟以去除异味,然后加盖,改用微火,使汤面上浮油保持一定温度,以起到焖的作用。将少量茶叶用纱布包好,放入炉中与牛肉同炖煮,肉不仅熟得快,而且味道清香。加些酒或醋炖牛肉,可使肉更软嫩。放几个山楂或几片萝卜,令牛肉熟得快,而且可以驱除异味。