springboot知识

1. springboot自启动是怎么实现的?

springboot的自启动注解是@SpringBootApplication,其实就是三个注解组成的:
@configuration
@ComponentScan
@EnableAutoConfiguration
其中@EnableAutoConfiguration是实现自动配置的入口,该注解通过@Import注解导入了AutoConfigurationImportSelector,在该类中加载META-INF/spring.factories的配置信息。然后筛选出EnableAutoConfiguration为key的数据,加载到IOC容器中,实现自动配置功能。

2. 什么是嵌入式服务器?为什么使用嵌入式服务器?

虚拟机上部署应用程序需要做什么?
1 安装java
2 安装web或者应用程序的服务器(tomcat、Wbesphere、webLogic等)
3 部署应用程序war包
想简化这些步骤,该怎么做呢?就将服务器成为应用程序的一部分。
创建一个可以部署的应用程序的时候,我们将会把服务器(例如tomcat)嵌入到可部署的服务器中,例如一个spring boot应用程序,可以生成一个包含Embedded Tomcat的应用程序jar,就可以像运行正常java应用程序一样来运行web应用程序。

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

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

4. shiro和oauth还有cas之间的关系是什么?公司权限如何设计,还有着几个概念的区别?

cas和oauth是一个解决单点登录的组件,shiro主要负责权限安全方面的工作,所以功能点不一致,但往往需要单店登录和权限控制一起使用,所以就有cas+shiro或者oauth+shiro这样的组合。token一般是客户端登录后服务器生成的令牌,每次访问服务端会进行校验,一般保存在内存即可,也可以放在其他介质;redis可以做session共享,如果前端web服务器有几台负载,但是需要保持用户登录的状态,这场景比较常见。公司一般使用oauth+shiro做后台权限管理,oauth负责多后台统一登录认证,shiro负责给登录用户赋予不同的访问权限。

5. 各服务之间通信,对Restful和Rpc这2种方式如何做选择?

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

6. 怎么设计无状态服务?

如果一个数据需要被多个服务共享,才能完成一笔交易,那么这个数据被称为状态。进而依赖这个“状态”数据的服务被称为有状态服务,反之称为无状态服务。这个无状态服务原则并不是说在微服务架构中就不允许存在误差,表达的真实意思是要把有状态的业务服务改成无状态的计算类服务,那么状态数据也就响应的迁移到对应的“有状态数据服务”中。

7. Spring Cache三种常见的缓存注解和意义?

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

8. Springboot设置跨域请求?

一般的前端解决方案有:
1. 使用JSONP来支持跨域的请求,JSONP实现跨域请求的原理:就是动态创建
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 {      @Override      public void addCorsMappings(CorsRegistry registry) {          registry.addMapping("/**")                  .allowCredentials(true)                  .allowedHeaders("*")                  .allowedOrigins("*")                  .allowedMethods("*");      }  }  

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

JPA本身是一种规范,它的本质是一种ORM规范(不是ORM框架,因为JPA并未提供ORM实现,只是制定了规范)因为JPA是一种规范,所以,只是提供了一些相关的接口,但是接口并不能直接使用,JPA底层需要某种JPA实现,Hibernate 是 JPA 的一个实现集。JPA 是根据实体类的注解来创建对应的表和字段,如果需要动态创建表或者字段,需要动态构建对应的实体类,再重新调用Jpa刷新整个Entity。动态SQL,mybatis支持的最好,jpa也可以支持,但是没有Mybatis那么灵活。

10. 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值