1、SpringBoot 中如何解决跨域问题 ?
跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS,Cross-origin resource sharing) 来解决跨域问题。这种解决方案并非 SpringBoot 特有的,在传统的 SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfigurer接口然后重写addCorsMappings方法解决跨域问题。
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.maxAge(3600);
}
2、服务注册和发现是什么意思?Spring Cloud如何实现?
当我们开始一个项目时,我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会下降,而某些位置可能会发生变化。手动更改属性可能会产生问题。 Eureka服务注册和发现可以在这种情况下提供帮助。由于所有服务都在Eureka服务器上注册并通过调用Eureka服务器完成查找,因此无需处理服务地点的任何更改和处理。
3、如何集成SpringBoot和ActiveMQ?
对于集成SpringBoot和ActiveMQ,我们使用
依赖关系。 它只需要很少的配置,并且不需要样板代码。
4、什么是JavaConfig?
Spring JavaConfig是Spring社区的产品,它提供了配置Spring IoC容器的纯Java方法。因此它有助于避免使用XML配置。使用JavaConfig的优点在于:
面向对象的配置。由于配置被定义为JavaConfig中的类,因此用户可以充分利用Java中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean方法等。
减少或消除XML配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在XML和Java之间来回切换。
JavaConfig为开发人员提供了一种纯Java方法来配置与XML配置概念相似的Spring容器。
从技术角度来讲,只使用JavaConfig配置类来配置容器是可行的,但实际上很多人认为将JavaConfig与XML混合匹配是理想的。
类型安全和重构友好。JavaConfig提供了一种类型安全的方法来配置Spring容器。由于Java 5.0对泛型的支持,现在可以按类型而不是按名称检索bean,不需要任何强制转换或基于字符串的查找
5、什么是自动配置?
Spring 和 SpringMVC 的问题在于需要配置大量的参数。
我们能否带来更多的智能?当一个 MVC JAR 添加到应用程序中的时候,我们能否自动配置一些 beans?
Spring 查看(CLASSPATH 上可用的框架)已存在的应用程序的配置。在此基础上,SpringBoot 提供了配置应用程序和框架所需要的基本配置。这就是自动配置。
6、Container在微服务中的用途是什么?
容器是管理基于微服务的应用程序以便单独开发和部署它们的好方法。您可以将微服务封装在容器映像及其依赖项中,然后可以使用它来滚动按需实例的微服务,而无需任何额外的工作。
图15: 容器的表示及其在微服务中的使用方式 – 微服务访谈问题
7、保护 SpringBoot 应用有哪些方法?
1、 在生产中使用HTTPS
2、 使用Snyk检查你的依赖关系
3、 升级到最新版本
4、 启用CSRF保护
5、 使用内容安全策略防止XSS攻击
8、什么是Spring Cloud Bus?我们需要它吗?
考虑以下情况:我们有多个应用程序使用Spring Cloud Config读取属性,而Spring Cloud Config从GIT读取这些属性。
下面的例子中多个员工生产者模块从Employee Config Module获取Eureka注册的财产。
如果假设GIT中的Eureka注册属性更改为指向另一台Eureka服务器,会发生什么情况。在这种情况下,我们将不得不重新启动服务以获取更新的属性。
还有另一种使用执行器端点/刷新的方式。但是我们将不得不为每个模块单独调用这个url。例如,如果Employee Producer1部署在端口8080上,则调用 http:// localhost:8080 / refresh。同样对于Employee Producer2 http:// localhost:8081 / refresh等等。这又很麻烦。这就是Spring Cloud Bus发挥作用的地方。
Spring Cloud Bus提供了跨多个实例刷新配置的功能。因此,在上面的示例中,如果我们刷新Employee Producer1,则会自动刷新所有其他必需的模块。如果我们有多个微服务启动并运行,这特别有用。这是通过将所有微服务连接到单个消息代理来实现的。无论何时刷新实例,此事件都会订阅到侦听此代理的所有微服务,并且它们也会刷新。可以通过使用端点/总线/刷新来实现对任何单个实例的刷新。
9、微服务中如何实现 session 共享 ?
在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务器上,各自的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享 session ,常见的方案就是 Spring Session + Redis 来实现 session 共享。将所有微服务的 session 统一保存在 Redis 上,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上的 session 。这样就实现了 session 共享,Spring Session 基于 Spring 中的代理过滤器实现,使得 session 的同步操作对开发人员而言是透明的,非常简便。
10、Spring MVC的异常处理?
可以将异常抛给Spring框架,由Spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可。
11、什么是Netflix Feign?它的优点是什么?
12、Web,RESTful API在微服务中的作用是什么?
13、双因素身份验证的凭据类型有哪些?
14、不同版本的 Spring Framework 有哪些主要功能?
15、Spring Framework 有哪些不同的功能?
16、什么是 JavaConfig?
17、@RequestMapping 注解
18、使用 Spring 有哪些方式?
19、SpringBoot 中的 starter 到底是什么 ?
20、Spring Cloud Netflix
21、@Autowired 注解有什么用?
22、Spring支持的ORM
23、spring boot扫描流程?
24、什么是OAuth?
25、Spring Cloud Task
26、如何重新加载SpringBoot上的更改,而无需重新启动服务器?
27、如何在 SpringBoot 中添加通用的 JS 代码?
28、什么是 Spring IOC 容器?
29、Spring配置文件
30、什么是通知(Advice)?
31、如何使用SpringBoot实现分页和排序?
1、spring DAO 有什么用?
Spring DAO 使得 JDBC,Hibernate 或 JDO 这样的数据访问技术更容易以一种统一的方式工作。这使得用户容易在持久性技术之间切换。它还允许您在编写代码时,无需考虑捕获每种技术不同的异常。
2、什么是端到端微服务测试?
端到端测试验证了工作流中的每个流程都正常运行。这可确保系统作为一个整体协同工作并满足所有要求。
通俗地说,你可以说端到端测试是一种测试,在特定时期后测试所有东西。
图14:测试层次 – 微服务面试问题
3、解释WEB 模块。
Spring的WEB模块是构建在application context 模块基础之上,提供一个适合web应用的上下文。这个模块也包括支持多种面向web的任务,如透明地处理多个文件上传请求和程序级请求参数的绑定到你的业务对象。它也有对Jakarta Struts的支持。
4、SpringBoot 的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是@SpringBootApplication,它也是 SpringBoot 的核心注解,主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描。
5、spring 提供了哪些配置方式?
bean 所需的依赖项和服务在 XML 格式的配置文件中指定。 这些配置文件通常包含许多 bean 定义和特定于应用程序的配置选项。 它们通常以 bean 标签开头。
例如:
<bean id="studentbean" class="org.edureka.firstSpring.StudentBean">
<property name="name" value="Edureka"></property>
</bean>
基于注解配置
您可以通过在相关的类,方法或字段声明上使用注解,将 bean 配置为组件类本身,而不是使用 XML 来描述 bean 装配。 默认情况下,Spring 容器中未打开注解装配。 因此,您需要在使用它之前在 Spring 配置文件中启用它。 例如:
context:annotation-config/
Spring 的 Java 配置是通过使用@Bean 和 @Configuration 来实现。
@Bean 注解扮演与 元素相同的角色。 @Configuration 类允许通过简单地调用同一个类中的其他@Bean 方法来定义 bean 间依赖关系。
例如:
public class StudentConfig {
@Bean
public StudentBean myStudent() {
return new StudentBean();
}
}
6、SpringBoot需要独立的容器运行?
SpringBoot不需要独立的容器就可以运行,因为在SpringBoot工程发布的jar文件里已经包含了tomcat的jar文件。SpringBoot运行的时候会创建tomcat对象,实现web服务功能。也可以将SpringBoot发布成war文件,放到tomcat文件里面运行
7、微服务之间是如何独立通讯的
1、 远程过程调用(Remote Procedure Invocation):也就是我们常说的服务的注册与发现,直接通过远程过程调用来访问别的service。
优点:
简单,常见,因为没有中间件代理,系统更简单
缺点:
1、 只支持请求/响应的模式,不支持别的,比如通知、请求/异步响应、发布/订阅、发布/异步响应
2、 降低了可用性,因为客户端和服务端在请求过程中必须都是可用的
2、 消息:使用异步消息来做服务间通信。服务间通过消息管道来交换消息,从而通信。
优点:
1、 把客户端和服务端解耦,更松耦合
2、 提高可用性,因为消息中间件缓存了消息,直到消费者可以消费
3、 支持很多通信机制比如通知、请求/异步响应、发布/订阅、发布/异步响应
缺点:
消息中间件有额外的复杂
8、什么是CSRF攻击?
CSRF代表跨站请求伪造。这是一种攻击,迫使最终用户在当前通过身份验证的Web应用程序上执行不需要的操作。CSRF攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。
9、使用 Spring 有哪些方式?
使用 Spring 有以下方式:
1、 作为一个成熟的 Spring Web 应用程序。
2、 作为第三方 Web 框架,使用 Spring Frameworks 中间层。
3、 用于远程使用。
4、 作为企业级 Java Bean,它可以包装现有的 POJO(Plain Old Java Objects)。
10、运行 SpringBoot 有哪几种方式?
打包用命令或者放到容器中运行
用 Maven/ Gradle 插件运行
直接执行 main 方法运行
11、SpringBoot Starter 的工作原理是什么?
12、微服务的优点
13、什么是Eureka的自我保护模式,
14、如何使用 SpringBoot 生成一个 WAR 文件?
15、Spring框架中的单例bean是线程安全的吗?
16、你如何理解 SpringBoot 配置加载顺序?
17、Spring、SpringBoot、SpringMVC的区别?
18、缓存机制:
19、Eureka如何 保证AP
20、SpringBoot 2.X 有什么新特性?与 1.X 有什么区别?
21、单片,SOA和微服务架构有什么区别?
22、什么是执行器停机?
23、什么是客户证书?
24、什么是Hystrix?
25、SpringBoot 有哪几种读取配置的方式?
26、MVC是什么?MVC设计模式的好处有哪些
27、什么是SpringBoot?
28、XMLBeanFactory
29、服务降级底层是如何实现的?
30、Spring Cloud和SpringBoot版本对应关系
31、有哪些不同类型的IOC(依赖注入)方式?
1、自动装配有哪些局限性 ?
自动装配的局限性是:
重写: 你仍需用 和 配置来定义依赖,意味着总要重写自动装配。
基本数据类型:你不能自动装配简单的属性,如基本数据类型,String字符串,和类。
模糊特性:自动装配不如显式装配精确,如果有可能,建议使用显式装配。
2、什么是 AOP 目标对象?
被一个或者多个切面所通知的对象。它通常是一个代理对象。也指被通知(advised)对象。
3、shiro和oauth还有cas他们之间的关系是什么?问下您公司权限是如何设计,还有就是这几个概念的区别。
cas和oauth是一个解决单点登录的组件,shiro主要是负责权限安全方面的工作,所以功能点不一致。但往往需要单点登陆和权限控制一起来使用,所以就有 cas+shiro或者oauth+shiro这样的组合。
token一般是客户端登录后服务端生成的令牌,每次访问服务端会进行校验,一般保存到内存即可,也可以放到其他介质;Redis可以做Session共享,如果前端web服务器有几台负载,但是需要保持用户登录的状态,这场景使用比较常见。
我们公司使用oauth+shiro这样的方式来做后台权限的管理,oauth负责多后台统一登录认证,shiro负责给登录用户赋予不同的访问权限。
4、什么是Spring Cloud?
在微服务中,SpringCloud是一个提供与外部系统集成的系统。它是一个敏捷的框架,可以短平快构建应用程序。与有限数量的数据处理相关联,它在微服务体系结构中起着非常重要的作用。 以下为 Spring Cloud 的核心特性:
1、 版本化/分布式配置。
2、 服务注册和发现。
3、 服务和服务之间的调用。
4、 路由。
5、 断路器和负载平衡。
6、 分布式消息传递。
5、谈谈服务雪崩效应
雪崩效应是在大型互联网项目中,当某个服务发生宕机时,调用这个服务的其他服务也会发生宕机,大型项目的微服务之间的调用是互通的,这样就会将服务的不可用逐步扩大到各个其他服务中,从而使整个项目的服务宕机崩溃.发生雪崩效应的原因有以下几点
单个服务的代码存在bug、2请求访问量激增导致服务发生崩溃(如大型商城的枪红包,秒杀功能)、3.服务器的硬件故障也会导致部分服务不可用.
6、ApplicationContext通常的实现是什么?
1、 FileSystemXmlApplicationContext :此容器从一个XML文件中加载beans的定义,XML Bean 配置文件的全路径名必须提供给它的构造函数。
2、 ClassPathXmlApplicationContext:此容器也从一个XML文件中加载beans的定义,这里,你需要正确设置classpath因为这个容器将在classpath里找bean配置。
3、 WebXmlApplicationContext:此容器加载一个XML文件,此文件定义了一个WEB应用的所有bean。
7、网关的作用是什么
统一管理微服务请求,权限控制、负载均衡、路由转发、监控、安全控制黑名单和白名单等
8、什么是Spring Profiles?
Spring Profiles允许用户根据配置文件(dev,test,prod等)来注册bean。因此,当应用程序在开发中运行时,只有某些bean可以加载,而在PRODUCTION中,某些其他bean可以加载。假设我们的要求是Swagger文档仅适用于QA环境,并且禁用所有其他文档。这可以使用配置文件来完成。SpringBoot使得使用配置文件非常简单。
这个注解表明bean的属性必须在配置的时候设置,通过一个bean定义的显式的属性值或通过自动装配,若@Required注解的bean属性未被设置,容器将抛出BeanInitializationException。
10、我们如何监视所有 SpringBoot 微服务?
SpringBoot 提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应用程序的信息(如它们是否已启动)以及它们的组件(如数据库等)是否正常运行很有帮助。但是,使用监视器的一个主要缺点或困难是,我们必须单独打开应用程序的知识点以了解其状态或健康状况。想象一下涉及 50 个应用程序的微服务,管理员将不得不击中所有 50 个应用程序的执行终端。为了帮助我们处理这种情况,我们将使用位于的开源项目。 它建立在 SpringBoot Actuator 之上,它提供了一个 Web UI,使我们能够可视化多个应用程序的度量。