首页>>科技 >>内容

Dubbo - 为什么选择Nacos nacos面试题

发布时间:2023-09-06 11:22:10编辑:温柔的背包来源:

网上有很多关于Dubbo - 为什么选择Nacos的问题,也有很多人解答有关nacos面试题的知识,今天每日小编为大家整理了关于这方面的知识,让我们一起来看下吧!

内容导航:

一、Dubbo - 为什么选择Nacos

二、聊聊Spring Boot面试相关问题

一、Dubbo - 为什么选择Nacos

文章链接:这是阿里巴巴写的,主要考虑dub的开发、动向、审核、物理初犯节点太多,zk效率太低,一致性太强的原因

下载链接

来自bo的配音360问答的版本控制实在是太糟糕了。东西一直在缺失,所以如果运行时出现任何加载错误,你可以直接查找该类是否根本不存在,然后找到一个合适的版本即可。

服务器端配置:

启动类与dubbo的介绍相同。几乎一样,可以直接启动。然后进入Nocas的服务器端界面。

二、聊聊Spring Boot面试相关问题

Spring Boot是Spring开源组织下的一个子项目。它是Spring组件的一站式解决方案。主要是简化了Spring的使用难度,省去了繁重的配置,并提供了各种启动器,方便开发者快速上手。 Spring Boot主要有以下优点: 启动类上的注解是@SpringBootApplication,这也是Spring Boot的核心注解。主要组合包括以下三个注解: @SpringBootConfiguration:组合@Configuration注解来实现配置文件的功能。 @EnableAutoConfiguration:开启自动配置功能。还可以关闭一个自动配置选项,比如关闭数据源自动配置功能:@SpringBootApplication(exclude={ DataSourceAutoConfiguration.class })。 @ComponentScan:Spring组件扫描。 Spring JavaConfig 是Spring 社区的产品,它提供了配置Spring IoC 容器的纯Java 方式。因此它有助于避免XML 配置。使用JavaConfig的优点是: (1) 面向对象的配置。由于配置在JavaConfig 中被定义为类,因此用户可以充分利用Java 中面向对象的功能。一个配置类可以继承另一个配置类,覆盖其@Bean方法等。 (2)减少或消除XML配置。基于依赖注入原理的外部化配置的好处已经被证明。然而,许多开发人员不想在XML 和Java 之间来回切换。 JavaConfig为开发人员提供了一种纯Java方式来配置Spring容器,其概念与XML配置类似。从技术角度来看,只使用JavaConfig配置类来配置容器是可以的,但在实践中很多人认为JavaConfig与XML混合搭配是比较理想的。 (3)类型安全和重构友好。 JavaConfig 提供了一种类型安全的方式来配置Spring 容器。由于Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索bean,无需任何强制转换或基于字符串的查找。 BFPP: BeanFactoryPostProcessor BPP: BeanPostProcessor BDRPP: BeanDefinitionRegistryPostProcessor 表达的大意是:total-point-total1、什么是springboot自动组装,解决什么问题2、自动组装实现原理:1、springboot启动时应用程序运行时,首先会创建SpringApplication的对象,并在该对象的构造方法中初始化一些参数。最重要的是判断当前应用程序的类型,以及初始化器和监听器。在这个过程中,它会加载整个应用程序中的spring.factories 文件,并将该文件的内容放入缓存对象中以供后续获取。 2、 SpringApplication对象创建完成后,开始执行run方法,完成整个启动。启动过程主要有两个方法,第一个叫prepareContext,第二个叫refreshContext。在这两个关键步骤中,完整的覆盖了自动装配的核心功能。前面的处理逻辑包括上下文对象的创建、banner的打印、异常上报期的准备等准备工作,方便后续调用。

3、prepareContext方法主要完成上下文对象的初始化,包括属性值的设置,比如环境对象。整个过程中,有一个非常重要的方法,叫做load。 Load主要完成一件事,将当前启动类注册为注册表中的beanDefinition,这样在执行BeanFactoryPostProcessor调用时,可以找到对应的主类,完成@SpringBootApplication、@EnableAutoConfiguration等注解的解析010- 63025 在refreshContext方法中会进行整个容器刷新过程,会调用spring中的refresh方法。 Refresh中有13个非常关键的方法来完成整个Spring应用的启动。在自动组装过程中,会调用invokeBeanFactoryPostProcessor方法。该方法中主要是ConfigurationClassPostProcessor类的处理。这次,BFPP 的子类也是BDRPP 的子类。调用时,会先调用BDRPP中的postProcessBeanDefinitionRegistry方法,然后再调用postProcessBeanFactory方法。执行postProcessBeanDefinitionRegistry时,会解析处理各种注解,包括@PropertySource、@ComponentScan、@ComponentScans、@Bean、@Import等注解,其中最重要的是@Import注解的解析。 5、 解析@Import注解时,会有一个getImports方法,从主类中递归解析注解,解析所有包含@Import的注解,然后在processImport方法中对Import类进行分类。这里主要标识的时候,AutoConfigurationImportSelect属于ImportSelect的子类,在后续过程中会调用deferredImportSelectorHandler中的process方法来完成EnableAutoConfiguration的加载。 6、 以上是我对springboot自动组装的简单理解。面试官请看一下。如果我有任何疑问,请给我一些建议!在Spring Boot中,可以使用以下方法来加载配置。 1)属性文件; 2)YAML文件; 3)系统环境变量;等等. YAML 是一种人类可读的数据序列化语言。它通常用在配置文件中。与属性文件相比,如果我们想在配置文件中添加复杂的属性,YAML 文件更加结构化且不易混乱。可以看到YAML有分层的配置数据。 YAML可以算是现在非常流行的配置文件格式,无论是前端还是后端,都可以看到YAML配置。那么YAML配置相比传统的properties配置有哪些优势呢?与properties配置文件相比,YAML还有一个缺点,就是不支持@PropertySource注解导入自定义YAML配置。 Spring Boot建议使用Java配置而不是XML配置,但是Spring Boot中也可以使用XML配置,并且可以通过@ImportResource注解引入XML配置。 spring boot核心配置文件是什么? bootstrap.properties 和application.properties 之间有什么区别?单纯做Spring Boot开发,可能不太容易遇到bootstrap.properties配置文件,但是当与Spring Cloud结合时,这个配置就会经常遇到,特别是当你需要远程加载一些配置文件时。 spring boot核心的两个配置文件: bootstrap(.yml或.properties):boostrap由父ApplicationContext加载,优先级高于applicationton,配置在应用上下文的bootstrap阶段生效。一般来说,我们会在Spring Cloud Config或者Nacos中使用。

而且boostrap中的属性不能被覆盖; application(.yml或.properties):由ApplicationContext加载,用于spring boot项目的自动化配置。 Spring Profiles 允许用户根据配置文件(dev、test、prod 等)注册bean。因此,当应用程序在开发中运行时,只能加载某些bean,而在生产中,则可以加载某些其他bean。假设我们的要求是Swagger 文档仅在QA 环境中可用,并且所有其他文档均被禁用。这可以使用配置文件来完成。 Spring Boot 使配置文件的使用变得非常容易。为了在自定义端口上运行Spring Boot 应用程序,您可以在application.properties 中指定端口。 server.port=8090 为了实现Spring Boot 安全性,我们使用spring-boot-starter-security 依赖,并且必须添加安全配置。它需要很少的代码。配置类必须扩展WebSecurityConfigurerAdapter 并重写其方法。前端可以通过JSONP解决跨域问题,但是JSONP只能发送GET请求,不能发送其他类型的请求。在RESTful风格的应用程序中,它非常无用,因此我们建议在后端使用(CORS,跨域)。资源共享)来解决跨域问题。这个解决方案并不是Spring Boot 独有的。在传统的SSM框架中,CORS可以用来解决跨域问题。不过,在我们在XML 文件中配置CORS 之前,我们现在可以实现WebMvcConfigurer 接口,然后重写addCorsMappings 方法。解决跨域问题。项目中前端和后端是分开部署的,所以需要解决跨域问题。我们使用cookie来存储用户登录信息,并在spring拦截器中进行权限控制。当不满足权限时,直接返回固定的json结果给用户。用户登录后即可正常使用;当用户注销或者token过期时,由于拦截器和跨域顺序的问题,会出现跨域现象。我们知道,http请求首先经过过滤器,到达servlet后由拦截器处理。如果我们把cors放在过滤器中,它可以在权限拦截器之前执行。 CSRF 代表跨站请求伪造。这是一种迫使最终用户在当前经过身份验证的Web 应用程序上执行不需要的操作的攻击。 CSRF 攻击专门针对状态更改请求,而不是数据盗窃,因为攻击者无法查看对伪造请求的响应。 Spring Boot Actuator是Spring启动框架中的重要功能之一。 Spring boot 监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。在生产环境中必须检查和监控多个指标。甚至某些外部应用程序也可能正在使用这些服务向相关人员触发警报消息。监控模块公开一组可直接作为HTTP URL 访问的REST 端点来检查状态。如何在Spring Boot 中禁用Actuator 端点安全?默认情况下,所有敏感HTTP 端点都受到保护,只有具有ACTUATOR 角色的用户才能访问它们。使用标准HttpServletRequest.isUserInRole 方法强制执行安全性。我们可以使用禁用安全性。仅当在防火墙后面访问执行器端点时才建议禁用安全性。 Spring Boot 提供了监控端点来监控各个微服务的指标。这些端点对于获取有关应用程序的信息(例如它们是否已启动)及其组件(例如数据库等)是否正常运行非常有用。

然而,使用监视器的主要缺点或困难之一是我们必须单独打开应用程序的知识点才能了解其状态或健康状况。想象一个涉及50 个应用程序的微服务,管理员必须访问所有50 个应用程序的执行端点。为了帮助我们处理这种情况,我们将使用开源项目,它构建在Spring Boot Actuator 之上,它提供了一个Web UI,允许我们跨多个应用程序可视化指标。 WebSocket 是一种计算机通信协议,它通过单个TCP 连接提供全双工通信通道。 1、 WebSocket 是双向的- 使用WebSocket 客户端或服务器都可以发起消息发送。 2、 WebSocket 是全双工的——客户端和服务器通信是相互独立的。 3、 单个TCP 连接- 初始连接使用HTTP,然后此连接升级为基于套接字的连接。然后,此单个连接将用于所有未来的通信4、 Light - 与http 相比,WebSocket 消息数据交换要轻得多。什么是Spring数据? Spring Data是Spring的一个子项目。用于简化数据库访问,支持NoSQL和关系数据存储。其主要目标是使数据库访问变得简单快捷。 Spring Data 具有以下特点: SpringData 项目支持NoSQL 存储:SpringData 项目支持的关系型数据存储技术:Spring Boot Batch 提供了在处理大量记录时非常重要的可重用功能,包括日志/跟踪、事务管理, job 处理统计、作业重启、跳过和资源管理。它还提供更先进的技术服务和功能,通过优化和分区技术,可以实现非常高的批量和高性能的批处理作业。简单和复杂的大批量批处理作业都可以利用该框架以高度可扩展的方式处理大量信息。 FreeMarker 是一个基于Java 的模板引擎,最初专注于使用MVC 软件架构生成动态网页。使用Freemarker 的主要优点是表示层和业务层完全分离。程序员可以处理应用程序代码,而设计人员可以处理html 页面设计。然后可以使用freemarker 将它们组合起来以给出最终的输出页面。为了集成Spring Boot 和ActiveMQ,我们使用依赖项。它需要很少的配置,并且不需要样板代码。 Swagger 广泛用于可视化API,使用Swagger UI 为前端开发人员提供在线沙箱。 Swagger 是一个工具、规范和完整的框架实现,用于生成RESTful Web 服务的可视化表示。它使文档能够以与服务器相同的速度更新。当通过Swagger 正确定义时,消费者可以使用少量的实现逻辑来理解远程服务并与之交互。因此,Swagger 消除了调用服务时的猜测。前后端分离,接口文档如何维护?前后端分离开发越来越流行。大多数情况下,我们都是通过Spring Boot进行前后端分离开发。必须有前后端分离的接口文档,否则前后端将深深陷入扯皮中。一个比较笨的方法就是用word或者md来维护接口文档,但是效率太低了。一旦界面变了,大家的文档也要变。在Spring Boot中,解决这个问题的常用方法是Swagger。使用Swagger,我们可以快速生成一个界面文档网站。一旦界面发生变化,文档也会自动更新。所有开发工程师都可以访问这个在线网站来获取新的。接口文档非常方便。

这可以使用DEV 工具来实现。通过此依赖项,您可以保存任何更改,嵌入式tomcat 将重新启动。 Spring Boot 有一个开发工具(DevTools)模块,有助于提高开发人员的工作效率。 Java开发人员面临的一个主要挑战是自动将文件更改部署到服务器并自动重新启动服务器。开发人员可以重新加载在Spring Boot 上所做的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。 Spring Boot发布第一个版本时并没有这个功能。这是开发人员需要的功能。 DevTools模块充分满足开发人员的需求。该模块在生产环境中将被禁用。它还提供H2数据库控制台,以便更好地测试应用程序。使用以下一些依赖项spring-boot-starter-activemq spring-boot-starter-security 有助于添加更少的依赖项并减少版本冲突。 Spring Boot中的starter到底是什么?首先这个starter并不是什么新的技术点,基本都是基于Spring现有的功能来实现的。首先它提供了一个自动配置类,一般命名为XXXAutoConfiguration,其中通过条件注解来判断某个配置是否生效(条件注解本来是Spring中的),然后它还提供了一系列的默认配置,并且还允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性注入的方式注入这些配置属性,新注入的属性会替换默认的属性。正因为如此,对于很多第三方框架,我们只需要引入依赖,直接使用即可。当然,开发者也可以定制Starter。 spring-boot-starter-parent有什么用?我们都知道,在创建新的Spring Boot项目时,默认有一个父项目。这个parent就是spring-boot-starter-parent,spring -boot-starter-parent主要有以下功能: Spring Boot打包的jar和普通的jar有什么区别? Spring Boot项目打包的jar是可执行jar,可以通过java jar xxx.jar 命令直接执行来运行,这种jar不能像普通jar一样被其他项目依赖,而且即使是依赖,不能使用其中的类。 Spring Boot的jar不能被其他项目依赖,主要是它的结构与普通jar不同。普通的jar包,解压后直接是包名,我们的代码就在包里。解压后,Spring Boot打包的可执行jar就是我们在BOOT-INFclasses目录下的代码,所以不能直接引用。如果一定要引用,可以在pom.xml文件中添加配置,将Spring Boot项目打包成两个jar,一个可执行,一个可引用。 1)用命令打包或者在容器中运行2)使用Maven/Gradle插件运行3)直接执行main方法运行1)继承spring-boot-starter-parent项目2)导入spring-boot-dependencies项目依赖Spring提供了一个非常有用的方法来使用ControllerAdvice来处理异常。我们实现一个ControllerAdvice 类来处理控制器类抛出的所有异常。使用Spring Boot 实现分页非常简单。使用Spring Data-JPA 可以将可分页传递给存储库方法。

微服务中如何实现Session共享?在微服务中,一个完整的项目被拆分为多个独立的服务。每个服务独立部署在不同的服务器上,各自的会话物理隔离。是的,但通常,我们需要在不同的微服务之间共享会话。常见的解决方案是Spring Session + Redis来实现会话共享。将所有微服务的会话存储在Redis中。当各个微服务对Session有相关的读写操作时,就会对Redis上的Session进行操作。这样就实现了会话共享。 Spring Session是基于Spring中的代理过滤器实现的,使得Session的同步操作对于开发者来说是透明的,并且非常简单。计划任务也是一个常见的需求。 Spring Boot中对定时任务的支持主要来自于Spring框架。 Spring Boot 中使用计划任务的方式主要有两种。一种是使用Spring中的@Scheduled注解,另一种是使用第三方框架Quartz。 Spring中使用@Scheduled的方式主要是通过@Scheduled注解。使用Quartz时,只需像Quartz一样定义Job和Trigger即可。

以上就是关于Dubbo - 为什么选择Nacos的知识,后面我们会继续为大家整理关于nacos面试题的知识,希望能够帮助到大家!