Nacos 入门微服务项目实战

news2024/12/23 20:17:46

Nacos 核心源码精讲 - IT贱男 - 掘金小册全方位源码精讲,深度剖析 Nacos 注册中心和配置中心的核心思想。「Nacos 核心源码精讲」由IT贱男撰写,375人购买https://s.juejin.cn/ds/BuC3Vs9/

Hi,大家好,欢迎大家来学习《Nacos 核心源码精讲》小册。不过,在正式分析之前,考虑到有部分同学没有使用过 Nacos,同时也为了小册的完整性,我们还是先从 Nacos 的一些基础知识开始讲解,如果你已经熟练使用 Nacos 了,可以快速浏览本章内容

学习源码之前,首先我们肯定得知道 Nacos 是什么、它有什么功能,以及这些功能是怎么使用的。有了这些基础之后,才能更有效地展开后续的源码学习。那么,本章我们就一起先来看一看 Nacos 官方文档里面有哪些内容,紧接着我们尝试自己动手搭建属于自己的 Nacos 服务,最后我们在微服务当中集成我们的 Nacos。

本章重点

  • 掌握 Nacos 核心架构图;
  • 掌握动手搭建 Nacos 单机、集群环境搭建;
  • 掌握 Spring Cloud 微服务集成 Nacos。

Nacos 介绍

在早期 Spring Cloud 开始流行的时候,Eureka 使用得比较广泛,后来这个项目在 2018 年 7 月份的时候,官方宣布不再维护 Eureka 2.0 了,再来后阿里推出全新 Spring Cloud Alibaba 系列,其中 Nacos 就是一员。

那我们怎么入手开始学习呢?

学习一门新的技术,其实官方文档是最好的途径,也是最权威的途径。很多小伙伴都不喜欢依赖官方文档,比如不知道 Nacos 什么,就直接去搜索一下,搜索出来的结果五花八门,然后随便点击看一看就关闭了。我在这里可以推荐一个学习思路:

  • 先找到对应官方文档,看看官方介绍;
  • 然后找到核心架构图,架构图是能够很直观看出核心理念的;
  • 紧接着动手实战一波,加深理解;
  • 最后思考实现原理,尝试通过源码分析,找到答案。

为了方便大家学习,我已经把 Nacos 相关的链接地址,都准备好了。

  • 官方地址:nacos.io/zh-cn/index…
  • 1.x 文档地址:nacos.io/zh-cn/docs/…
  • GitHub 地址:github.com/alibaba/nac…
  • OpenAPI 文档:nacos.io/zh-cn/docs/…

进入 Nacos 官方,映入眼帘的是很醒目的一句话:一个更易于构建云原生应用的动态服务发现配置管理服务管理平台

这句话有三个重点:动态服务发现、配置管理、服务平台。那这三个重点到底是什么?

  • 动态服务发现:这个很好理解,我们新增一个微服务实例,Nacos 它能够感知到,也就是服务治理,这也是作为注册中心最基本的功能。

  • 配置管理:Nacos 它不仅仅是一款注册中心,它还提供了配置管理一大特点,不仅是对服务进行管理,而且还可以管理你项目中对应的配置文件,让你整个微服务项目配置中心化,统一全部放在 Nacos 配置管理中;除此之外,它还是动态化的。那什么是动态化?举个例子,在 Spring Boot 项目中,会包含 properties、yml 配置文件,在项目启动中,如果想要修改对应的配置文件,是需要重启应用,更改后的配置文件才能生效。而 Nacos 的配置管理,它可以让你在更改配置文件后,无需重启应用,即可生效。

  • 服务管理平台:Nacos 它提供了一套 Web 管理后台,在这个后台中,我们可以监控整个服务运行状态以及对配置管理进行操作。

通过 Nacos 官方中的介绍,我们已经初步掌握 Nacos 所具备的功能,但还是很抽象,不要紧,我们接着往下看。

在官方链接中,我们找到 Nacos 文档中的架构图:

从架构图中我们能够得到什么信息?

从最上层开始看,首先就是 Provider(提供者)、Consumer(消费者),都需要借助于 Name(服务名称、服务地址),这是最外层。Provider、Consumer 都是需要依赖 Nacos Server

接着往下看,Nacos Server 最上层,有一层 OpenAPI,对外提供服务。那对外提供什么服务呢?

  • Naming Service :注册服务,我们微服务实例的注册、注销、服务管理都是在这一块进行实现的。
  • Config Service:配置服务,它提供了在微服务架构中,统一配置中心的功能。 Nacos 配置中心为服务配置提供了编辑、存储、分发、变更管理、历史版本管理等功能,并且支持在实例运行中,更改配置。

除此之外,Naming Service、Config Service 也是依赖于 Nacos Core 核心来完成的,并且在 Nacos Core 核心中还包含了Consistency Protocol(一致性协议),这一块就涉及到分布式一致性协议的内容,包括 CAP 理论、Raft 协议,这些也都是我们在使用微服务架构中需要考虑的问题。

至于 Nacos Console,这一整块相当于服务管理平台,也是依赖于 Nacos 提供的 OpenAPI 来进行扩展的额外功能。

Nacos 架构图我们看完了,要记住重点:Config Server 对应配置管理中心、Naming Service 对应注册中心,这个在后续看源码的时候会有帮助的。

讲了这么多理论知识,光说不练假把式,那么接下来,我们开始讲解如何在本地环境中搭建 Nacos 服务,并且把 Nacos 集成到 Spring Cloud 项目中,来使用 Nacos 两大核心功能

Nacos 单机搭建

官网看了,架构图也解释了,对于我们刚刚讲解的理论部分,可能还有部分同学对于 Nacos 还是感觉比较抽象,那么接下来我们先把 Nacos 环境搭建起来,具体地去使用 Nacos,再加深一下理解。

本次搭建Nacos1.4.1版本,系统用的是CentOS 7,安装好 JDK 1.8 版本或以上,安装 Maven 3.2+ 版本,建议 2 核 CPU/4G 内存及其以上。

Nacos 搭建核心文件 Nacos-server.1.4.1.zip 给同学们准备好了,把文件下载后,解压上传到 CentOS 系统对应目录位置即可。

链接:pan.baidu.com/s/1b7Y2AvaL…

提取码:k1wx

然后进入解压后到 Nacos 目录,执行单机启动命令:bin/startup.sh -m standalone,这里的 standalone 就是表示单机的意思。如下图所示,就表示启动成功了。

如果你是 Mac、Windows 也一样,解压缩之后,使用控制台执行启动命令,也可以正常使用。Windows 系统使用startup.cmd这个文件来启动 ,后面命令一样(如下图)。

启动成功之后,Nacos 默认端口是8848,浏览器中输入http://localhost:8848/nacos/即可进入登录页面,账号密码默认是 nacos/nacos

成功启动之后,又该如何正确关闭 Nacos 呢?同样还是来到解压后的 Nacos 目录下,执行:bin/shutdown.sh,如下图:

就这样,单机环境的搭建就完成了,还是很简单的!当然这也是前期我先让大家使用 nacos-server 中已经编译好的 Jar 包来启动,在后面的课程中,我会教大家如何使用Nacos 源码的方式来启动。

在这里提醒一点Nacos 建议在内部隔离网络环境中部署,强烈建议不要部署在公共网络环境中。Nacos 属于微服务内部所使用的组件,是没有必要暴露在公网当中。

Nacos 集群搭建

在生产环境当中,我们搭建的 Nacos 肯定是需要保证高可用的,单台一般不建议在生产环境中使用,所以掌握 Nacos 集群搭建也是很有必要的。

先给大家看看 Nacos 集群架构搭建完成之后的架构,如下图所示:

这种架构,官方称之为 “ 域名 + SLB 模式 ” ,其优点可读性好,而且换 IP 方便。

不管是访问 Nacos 后台、还是微服务集成 Nacos,所使用的地址都是域名,因为域名变动性最小,哪怕域名背后的 IP 地址变更了,对于客户端来说是无感知的。

域名是直接解析到负载均衡上,再由负载均衡选择具体 Nacos 实例来进行访问,这种架构也是 Nacos 官方推荐集群模式。

准备工作

在搭建之前,我们得先准备一个可用的 MySQL 数据库,因为在 Nacos 集群模式下,数据的持久化是需要公用的,每一台 Nacos 实例都需要连接同一个 MySQL 数据库。

有了 MySQL 数据库之后,我们需要在 MySQL 创建一个对应 Nacos 所使用的数据库,并且创建好对应的表结构以及数据。

MySQL 创建数据库,数据库名字可以自定义,但对应的表结构以及数据,我们执行 Nacos 所提供的 SQL 语句即可,在解压后的 Nacos-server.1.4.1.zip 文件中,有一个 conf 文件夹,在 conf 文件夹下有个文件叫 nacos-mysql.sql,这个 sql 文件里面包含了表结构、数据,我们只需要复制 sql 文件的内容到对应数据库中执行创建表结构、数据即可。

最后结果如下图:

三步法:搭建Nacos集群

本次集群搭建,我们也按照 3 台 Nacos 的规模来搭建,3 台最好放在 3 台不同的服务器上。我这里为了做教学,放在了同一台服务器上搭建的,把 Nacos-server.1.4.1.zip 解压后的文件,复制了 3 份出来,为了做区分,文件名加上了“端口号”(如下图)。

第一步:配置 MySQL 信息  把 MySQL 数据库信息配置到 Nacos 配置文件当中,在解压后的 Nacos-server.1.4.1.zip 文件中,有一个 conf 文件夹,修改里面的 application.properties文件,如下图:

进行如下三个操作:

  • spring.datasource.platform=mysql 前面的 # 去掉;
  • 把 db.num=1 前面的 # 去掉,默认是注释掉了;
  • 把自己 MySQL 连接信息给配置上去。

application.properties 文件中,也可以修改 Nacos 服务的端口号,对应配置是:server.port=8848 。在不同的服务器上搭建,全部端口都适用 8848 没问题;但如果是在同一台服务器上搭建,那么端口号就需要修改了,否则会出现端口被占用的问题。

第二步:配置集群信息。这一步就是告诉 Nacos,其他节点都部署在哪台服务器上,怎么告诉呢?在 conf 文件夹下,有一个cluster.conf.example文件,首先我们把文件名改成cluster.conf,然后编辑这个文件,把 Nacos 每台对应的 IP 以及 Nacos 端口号配置进去。

我这里就只有一台机器,所以 IP 就都是10.0.16.3,只是把端口号改了。

第三步:修改集群内存大小。修改 bin/start.sh 文件,启动文件默认就是集群模式,但是集群模式下分配的系统内存占用特别大,如果你机器内存很足,那可以忽视。但是我一台机器 hold 不住,所以得改配置文件,小伙伴可以根据电脑本身选择是否修改。

这里我改成 -Xms64m -Xmx64m -Xmn32m,系统内存省着点花。

JAVA_OPT="${JAVA_OPT} -server -Xms64m -Xmx64m -Xmn32m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

注意:这三步骤,在每一台 Nacos 实例,都需要进行配置。

启动集群服务

把 3 台 Nacos 节点都启动,如下所示,这次启动的命令就有点不同,不需要带-m standalone参数了,默认就是集群模式启动。

bin/startup.sh

在 Nacos 管理后台,节点列表中就能看到我们集群的状态了,如下图:

到这里,我们 Nacos 集群环境搭建就成功了,那么接下来就是使用我们 Nacos 服务的两个核心功能了。

Nacos 注册服务

现在假设我们有两个 Spring Boot 项目,一个是订单服务 order-service,一个是库存服务 stock-service,如下图:

这里简单说明一下:Spring Boot 项目的创建过程就不讲解了,查询接口也不详细讲了,都是很简单的例子,代码案例你可自行下载。

链接:pan.baidu.com/s/1c4So_yYF…

提取码:btwq

项目需求分析

现在产品经理说,得加一个功能:

订单服务下单时,需要调用库存服务查询接口,查询商品库存是否充足。

现在库存服务有一个查询接口,通过商品编码,就可以查询到商品的库存信息,接口详情如下图:

其实就是一个很简单的查询接口。 那么现在问题来了,这个接口怎么提供给订单服务使用呢?最简单粗暴的方式,就是使用一个 HttpUtils 工具类,直接 get 方法一下就能调用了。但咱们现在是微服务架构的模式,这么干就有点不妥当了,那么本次我们就利用 Nacos 来实现。

集成 Nacos 注册中心服务

首先,我们需要把订单服务库存服务两个项目都注册到 Nacos 中去。这个就好比卖房子,房东要先去中介那儿登记一下房屋信息,买家找到中介寻找对应的房源,然后通过房东登记的信息,去看对应的房子。

微服务与微服务调用,也是这么个道理,首先库存服务告诉注册中心:我的 IP 地址是 127.0.0.1:8080,这个时候订单服务就去问注册中心要库存服务登记的 IP + Port 信息,这样订单服务就能直接找到库存服务了。

那服务注册具体是怎么实现的呢?

  • 第一步,在 pom.xml 文件中引入 Nacos 注册中心依赖:
<dependency><groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  • 第二步,application.properties 中配置 Nacos 服务地址:
spring:
  application:name: stock-service
  cloud: 
      nacos:
          discovery:server-addr: http://124.223.102.236:8848

本章讲 Nacos 注册中心的实现,其实是很简单的方式,配置也仅仅配置了一个nacos.discovery.server-addr而已,更多详细配置可以点击查看这个地址。

完成上面两个步骤,直接启动项目即可,这个时候我们来查看 Nacos 的控制台,就多了一个sotck-serivce服务。

点击详情查看,是不是stock-service服务 IP 和 Port 都登记好了。

库存服务注册到 Nacos 中了,那订单服务当然也要注册到对应的 Nacos 才行。订单服务 也是重复上面两个步骤,注册到 Nacos 当中。

两个服务都注册到 Nacos 中了,那么接下来就可以使用Feign的方式,进行微服务调用了。

// 指定微服务名称
@FeignClient(name = "stock-service")
public interface StockService {


    /**
     * 查询库存
     * @return
     */
    @GetMapping(value = "/stock/getStockByProductId")
    Integer selectStockByProductId(@RequestParam("productId") Integer productId);

}

Feign 的使用方式我就不展开来讲了,否则文章太长了,Feign 是我们微服务最常见的调用方式。

最后效果如下图,请求的地址是订单服务的下单地址,通过集成 Nacos 注册服务,从而能够以微服务的形式,调用库存服务的查询接口,拿到商品库存结果。

Nacos 配置服务

接下来我们继续讲解实战使用 Nacos 另外一个核心功能:配置服务。 配置服务也是 Nacos 一大亮点,我面试的时候,问面试者:“你们公司为什么要选用 Nacos 呀?” 绝大多数回答中,都会包含说:“ Nacos 对比其他注册中心多了一个配置中心,可以把微服务项目配置文件统一管理,并且能够做到无需重启项目,也能感知配置文件的修改。”

好,那我们就来看看 Nacos 配置服务具体该怎么使用它。

集成 Nacos 配置中心服务

这个配置也比较简单,主要分以下四个步骤。

第一步,在 Nacos 管理中心创建对应配置文件。我们先打开 Nacos 后台,配置管理 → 配置列表,点击 + 号,创建一个新的配置文件。

这里的 Data ID 可以理解为配置文件名字,具有唯一性;groups相当于分组,可以分不同的环境、不同的业务;配置格式我这里选择的是 YAML,最后按照所选格式,把配置内容放进去就行了。如下所示: 

Nacos 后台操作完成之后,可以看见刚刚创建的配置文件记录。

第二步,引入配种服务依赖,现在我们还需要把 Spring Boot 项目集成 Nacos 配置中心服务,在 pom.xml 文件中,引入 Naocs 配置中心对应的 Maven 依赖。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

第三步,修改配置文件名,把配置文件的文件名改成 bootstrap.yml,默认是 application.yml。

第四步,配置 Nacos 配置服务信息。在 yml 文件中,新增 Nacos 配置中心相关配置:

spring:
    application:
        name: stock-service
        cloud:
            nacos:
                # 配置中心
                config:server-addr: http://124.223.102.236:8848
                    ## 配置文件前缀
                    prefix: stock-service
                    # 配置文件类型
                    file-extension: yml
                # 注册中心
                discovery:
                    server-addr: http://124.223.102.236:8848

配置中心演示

下面我们在 stock-service 项目中编写一个User实体类代码,进行测试一下。@Value注解的意思就是从配置文件中去读取这个属性;@RefreshScope这个注解是表示动态刷新,动态感知配置文件变化,不加这个注解的话,修改 Nacos 上的配置文件,是不会有动态刷新的效果。

@Data
@Component
@RefreshScope
public class User {

    @Value("${user.userName}")
    private String userName;

}

我写了 controller 来测试,原本数据是李四,在 Nacos 后台管理,把配置文件中 usereName 属性,修改成王五之后,项目不需要重新启动也能动态改变原来的值,具体演示如下图:

总结

好了,到这里本章就结束了,我们一起来回顾一下本章的重点。

  • 首先讲解了如何入门学习一项新的技术,也带大家看了 Nacos 核心架构图,从架构图中能够很直观地反映出 Nacos 具备的核心功能,一个是Naming Service,另一个是 Config service

  • 紧接着详细讲解了,利用Nacos-server.1.4.1.zip的方式搭建 Nacos 单机版本、集群版本的详细操作步骤。

  • 最后通过两个 SpringCloud 微服务集成 Nacos 的注册中心配置中心 演示了两大核心功能,在这个演示案例中,使用方式还是比较简单的,主要是因为本小册的交付核心是源码分析,这里只是让没有使用过 Nacos 的同学,先有一个大致的概念,至少知道 Nacos 它具备什么功能,这样面对后面的源码分析时才不会一头雾水。

思考问题

本小册核心是分析 Nacos 底层源码,前面使用了 Nacos 服务注册功能,不知道现在你在脑海中有没有产生疑问。

  • 为什么引入 Nacos 注册中心的依赖,配置好 Nacos 地址,项目启动就能够触发注册这个动作?底层是怎么做的?
  • 在 Nacos 后台管理可以看到,stock-service的 ip 地址以及端口号,那这些信息是怎么传给 Nacos 服务端的?
  • Nacos 服务端接收这些信息,又是如何处理的?

这些就是我们需要思考的问题,产生了疑问,说明开始动脑思考了,对于这些问题,你可以先尝试自己找到答案,在后续的文章中,我都会带着大家去分析,吃透源码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/337400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022黑马Redis跟学笔记.基础篇(一)

2022黑马Redis跟学笔记.基础篇 一1.Redis入门1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结1.2.认识Redis1.3.安装Redis步骤一&#xff1a;安装Redis依赖步骤二&#xff1a;上传安装包并解压步骤三&#xff1a;启动(1).默认启动(2…

开发微服务电商项目演示(三)

一&#xff0c;nginx动静分离第1步&#xff1a;通过SwitchHosts新增二级域名&#xff1a;images.zmall.com第2步&#xff1a;将本次项目的易买网所有静态资源js/css/images复制到nginx中的html目录下第3步&#xff1a;在nginx的核心配置文件nginx.conf中新增二级域名images.zma…

论文阅读:MINE: Towards Continuous Depth MPI with NeRF for Novel View Synthes

中文标题&#xff1a;基于连续深度多平面和神经辐射场的新视角合成 本文只介绍与NeRF原文不同的部分 创新点 对单一图像进行密集三维重建&#xff0c;完成新视角合成与深度估计的工作。从单个图像生成连续和遮挡绘制的三维重建。MINE借鉴NeRF可以生成连续的深度图像。 解决…

leaflet上传CSV文件,在地图上显示图形(示例代码054)

第054个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载CSV文件,将图形显示在地图上。CSV(逗号分隔值)文件是一种简单且开放的文件格式,以纯文本形式存储表格数据。 几乎所有电子表格和数据库软件都可以导入/导出这种文件格式。 直接复制下面的 vue+ope…

Navicat无法连接MySQL报错1251的解决方法

日期&#xff1a;2023年2月10日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

C++中的智能指针

1.RAII 与引用计数了解 Objective-C/Swift 的程序员应该知道引用计数的概念。引用计数这种计数是为了防止内存泄露而产生的。 基本想法是对于动态分配的对象&#xff0c;进行引用计数&#xff0c;每当增加一次对同一个对象的引用&#xff0c;那么引用对象的引用计数就会增加一次…

[AAAI 2022] TransFG: A Transformer Architecture for Fine-grained Recognition

Contents TransFG ArchitectureExperimentsReferencesTransFG Architecture Overlapping patch split:ViT 是把图片分成一系列不重叠的 patches,作者认为这可能会破坏 discriminative regions. 为了解决上述问题,作者提出使用 Overlapping patch split,划分的 patch 数 N …

消息中间件RabbitMQ

文章目录1. 协议2. RabbitMQ架构原理3.内存管理4.磁盘控制5. RabbiMQ 插件管理6. 死信6.1 死信队列6.2 延时插件7. 高可用集群方案7.1 普通集群模式7.2 镜像集群模式7.3 基于HAproxyKeepalived搭建高可用8.可靠性投递8.1 消息从生产者发送到Broker两种确认机制8.2 消息从Exchan…

数据Kylin(三):Kylin配置

Kylin配置 一、kylin.metadata.url 指定元数据库路径,默认值为 kylin_metadata@hbase 二、kylin.metadata.sync-retries 指定元数据同步重试次数,默认值为 3 三、kylin.env.hdfs-working-dir 指定 Kylin 服务所用的 HDFS 路径,默认值为 /kylin,请确保启动 Kylin 实例的用户…

【面试题】对闭包的理解?什么是闭包?

大厂面试题分享 面试题库后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库闭包的背景由于js中只有两种作用域&#xff0c;全局作用域和函数作用域&#xff0c;而在开发场景下&#xff0c;将变量暴露在全局作用域下的时候…

云盘满了怎么办?阿里云服务器云盘扩容操作了解一下

1.背景 2.确定扩容云盘类型与控制台操作 3.ECS实例内部扩容操作说明 3.1 ECS实例内部执行扩容分区 3.2 ECS实例内部执行扩容文件系统 1.背景软件应用的数据库所在服务器磁盘使用率已经达到97%,服务器操作实例如下: 一旦使用达到上限,所有的数…

python基于django的 大学生健康管理系统

随着时代的发展,大学生的数量与日预增但是相对的也出现了很多心理问题,大学生因为各类心理引发的社会问题已经受到了很多人的关注,所以如何更好的培养大学生正确的心理健康问题是现在很多大学多面临的一个重要的问题。 系统设置了三种身份的登录,包括管理员,医生和学生。其中管…

SpringBoot 实现 Excel 导入导出,百万数据量,性能爆表!

最近我做过一个MySQL百万级别数据的excel导出功能&#xff0c;已经正常上线使用了。这个功能挺有意思的&#xff0c;里面需要注意的细节还真不少&#xff0c;现在拿出来跟大家分享一下&#xff0c;希望对你会有所帮助。原始需求&#xff1a;用户在UI界面上点击全部导出按钮&…

最近面试了一位5年的测试,一问三不知,还反怼我...

最近看了很多简历&#xff0c;很多候选人年限不小&#xff0c;但是做的都是一些非常传统的项目&#xff0c;想着也不能通过简历就直接否定一个人&#xff0c;何况现在大环境越来 越难&#xff0c;大家找工作也不容易&#xff0c;于是就打算见一见。 在沟通中发现&#xff0c;由…

ISYSTEM调试实践8-winIDEA Analyzer功能1

前面几篇介绍了ISYSTEM的基本调试界面和功能&#xff0c;相比我之前用过的IDE&#xff0c;除了几种断点方式和脚本功能以外&#xff0c;应该都是比较简单&#xff0c;稍微操作一下就可以直接上手&#xff0c;后续我将介绍winIDEA的Analyzer 功能。 1 Analyzer简介 iSYSTEM An…

一文带你为PySide6编译MySQL插件驱动

1.概述 最近使用PySide6开发程序&#xff0c;涉及与MySQL的数据交互。但是qt官方自pyqt5.12&#xff08;记不太清了&#xff09;以后不再提供MySQL的插件驱动&#xff0c;只能自己根据qt的源码编译。不过网上大部分都是qt5的MySQL驱动的编译教程。后来搜到了一个qt6的编译教程…

为什么我需要一个网站?必须拥有网站的 5 个理由

当社交媒体似乎统治了互联网时&#xff0c;您可能会问自己&#xff1a;“我需要一个网站吗&#xff1f;” 答案是肯定的&#xff0c;我在这里告诉你为什么。2019 年&#xff0c;70-80% 的人在访问/购买之前会在线研究公司&#xff0c;同样比例的客户可能会流向没有网站的小企业…

vlookup怎么用详细步骤,看这一篇就够了

1、vlookup函数&#xff1a;使用方法 以下便是vlookup函数&#xff0c;功能、语法和参数用法&#xff1a; excel函数vlookup 2、vlookup函数&#xff1a;查询参数 首先&#xff0c;选中F2单元格&#xff0c;然后在编辑栏输入函数公式&#xff1a;VLOOKUP(E2&#xff0c;B&…

JVM - 认识JVM规范

目录 重识JVM JVM规范作用及其核心 JVM 整体组成 理解ClassFile结构 ASM开发 重识JVM JVM概述JVM&#xff1a; Java Virtual Machine&#xff0c;也就是Java虚拟机所谓虚拟机是指&#xff1a; 通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统…

InstructGPT

文章目录Abstract 给定人类的命令&#xff0c;并且用人工标注想要的结果&#xff0c;构成数据集&#xff0c;使用监督学习来微调GPT-3。 然后&#xff0c;我们对模型输出进行排名&#xff0c;构成新的数据集&#xff0c;我们利用强化学习来进一步微调这个监督模型。 我们把产…