一些小概念和实战有用的知识

news2024/10/23 12:50:44

-------------------------

IDEA是热保存,能一直crtl+z撤销的,除非已经代码入库了,入库也能看到git上该文件历史记录/本地历史记录(看以前自己改了什么)

--------------------------

引用bean时候最好写明一下名字,防止以后有多个了,忘记引用哪个了

--------------------------------------------------

StringBuffer线程安全,怕就无脑用得了

---------------------------------------------------

代码复用:就会引用jar包

比如,你在开发一个电商网站,想要处理用户信息。可以使用Apache Commons Lang库,它的JAR包提供了许多实用的工具类。只需在项目中引用这个JAR包,然后你可以使用StringUtils类中的方法,例如StringUtils.isEmpty(userInput)来检查用户输入是否为空,这样可以避免重复编写相似的代码。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version> <!-- 请根据需要选择版本 -->
</dependency>
import org.apache.commons.lang3.StringUtils;

public class UserInputChecker {
    public static void main(String[] args) {
        String userInput = ""; // 假设这是用户输入的内容

        if (StringUtils.isEmpty(userInput)) {
            System.out.println("用户输入不能为空!");
        } else {
            System.out.println("用户输入为: " + userInput);
        }
    }
}

-------------------------------------------------------------------------------------------------------------------

Ideal中点击Crtl只是看到哪里调用,点接口的"实现"才是跳到实现类

双击就可以选中单词,再点击就会选中一整行,然后shift shift就可以查了(意思是不用crtl c+crtl v),debug时候也一样,查看值的时候,有时候需要走到最底层的地方拿出那一行赋值的地方来查看值

没有过滤条件的sql语句不要写,就是需要有where

-------------------------------------------------------------------------------------

一个maven项目需要clean再install成功之后(没报错)才能成功跑流水线,否则跑流水线会失败

----------------------------------------------------------------------------------

DeveOps制品、介质概念:

在DevOps中,制品指的是软件交付过程中的可交付成果,如代码、构建产物和文档等,可以是你开发的应用程序或更新的代码包,比如一个新的手机应用。介质则是指支持协作和自动化的工具和流程,比如CI/CD管道、版本控制系统和监控工具 ,是你用来发布这些应用的工具,比如Git(用于代码管理)和Jenkins(用于自动化构建和部署)。

IBMjdk与Openjdk:

IBMjdk: 由IBM开发和维护,通常与IBM的其他软件和硬件解决方案紧密集成 提供商业支持和长期维护,特别适合在企业环境中使用。

Openjdk: 一个开源的Java开发工具包,由Java社区和Oracle主导开发,作为Java SE的参考实现。虽然是开源的,支持主要依赖于社区,更新频率较高,但缺乏官方的商业支持。

很重要:

JRE、JDK、JVM、JavaEE,JavaSE,JavaME区别_jdk1.8是j2ee还是javaee-CSDN博客

JVM->JRRE->JDK

在安装JRE或者JDK的时候,需要根据操作系统来下载不同的版本,而JDK和JRE里面已经包括了JVM

包括JAVA虚拟机和JAVA程序所需的核心类库,如果想要运行一个开发好的JAVA程序,计算机中只要安装JRE即可

JDK是提供给JAVA开发人员使用的,其中包含了JAVA的开发工具,也包括了JRE

--------------------------------

java SE(Java Platform,Standard Edition),应该先说这个,因为这个是标准版本

Java EE (Java Platform,Enterprise Edition),java 的企业版本

Java ME(Java Platform,Micro Edition),java的微型版本。

JavaSE 可以开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。是EE,和ME的基础。一般就是指JDK。就是Java的基础语法(变量、方法、类之间的调用、关系,继承、接口、线程之类的),工具包(java.util.* ),或者其他的一些封装,是学习其他的基础。

JavaEE,其实是一套规范,就是用java语言做企业开发(目前看来就是开发一些动态网站,或者对外提供调用服务的网站,或者其他没接触过的)中的一整套规范,比如类怎么封装,网页的请求要用什么方法处理,语言编码一类的处理,拦截器啊什么的定义,请求返回得有什么信息(具体看servlet的接口就知道了)

比如:tomcat就是按照这套规范开发的容器软件,还有什么weblogic,JBoss、Resin等等

正因为我们开发网站(使用JSP,Servelet或者封装了这些的框架:SSH)可以放在tomcat,也可以放在JBoss,因为都是按照一个规范开发的东西,实际使用的还是JavaSE的那些东西,多出来的就是EE的一些规范类的封装代码。

JavaME 是微型版本,顾名思义,使用在手机啊,小设备上面的Java版本,特点就是小,相比JavaSE精简了很大一部分东西,(增加了一些小设备上的专有API,这个不是很确定)。

安卓中既然用的是Java,那么Java的语法应该都是适用的。所以SE是核心基础。其他的都是使用方法方式不同。

-------------------------------------------------------------

javaSE:

Java SE(Java Platform, Standard Edition)是Java编程语言的标准版本,提供了开发和运行Java应用程序所需的基本功能。它包括以下主要组件:(以下看不懂无所谓,不是人话,就是一种语言结构,平时正常用即可,我理解是比如导入一些包应该就是相当于使用了它)

  1. 核心库

    • 提供基本的数据结构、算法和输入输出功能,比如java.utiljava.io包。
  2. Java虚拟机(JVM)

    • 负责执行Java字节码,提供跨平台运行的能力。
  3. Java开发工具

    • 包括编译器(javac)、文档生成工具(javadoc)等,帮助开发者编写和管理Java代码。
  4. 图形用户界面(GUI)支持

    • 提供Swing和JavaFX等库,支持创建桌面应用程序的图形界面。
  5. 网络编程

    • 提供Socket编程、HTTP请求处理等功能,方便进行网络应用开发。
  6. 多线程

    • 提供支持多线程编程的API,使得开发并发应用变得更简单。

---------------------------------------------------------------------------------------

kubernetes(k8s)与docker:

虚拟机->容器->docker(越来越轻便)

一文了解docker与k8s-CSDN博客

以下是该链接核心内容(我认为):

容器化解决了什么问题?

用一段话描述:

测试人员:你这个功能有问题。

开发人员:我本地是好的呀!

开发人员编写代码,在自己本地环境测试完成后,将代码部署到测试或生产环境中经常会遇到各种各样的问题。明明本地完美运行的代码为什么部署后出现很多 bug,原因有很多:不同的操作系统、不同的依赖库等。

总结一句话:因为本地环境和远程环境不一致。

容器化技术正好解决了这一关键问题,它将软件程序和运行的基础环境分开。开发人员编码完成后将程序打包到一个容器镜像中,镜像中详细列出了所依赖的环境,在不同的容器中运行标准化的镜像,从根本上解决了环境不一致的问题。

注:容器的概念已经出现不短的时间。但直到 2013 年开源项目 Docker 的出现才极大推广了容器这项技术,并推动了软件开发中容器化和微服务的趋势,这种趋势后来被称为云原生开发

Docker如何使用
其实大多数人谈论 Docker 时说的是 Docker Engine,这只是一个构建和运行的容器。

在运行容器前需要编写 Docker File,通过 dockerFile 生成镜像,然后才能运行 Docker 容器。

Docker File 定义了运行镜像(image)所需的所有内容,包括操作系统和软件安装位置。一般情况下都不需要从头开始编写 Docker File,在 Docker Hub 中有来自世界各地的工程师编写好的镜像,你可以基于此修改。

                        

入门级容器技术解析:Docker和K8s的区别与关系-CSDN博客

  • Docker与Kubernetes的协作:Kubernetes通常使用Docker作为其容器运行时。你可以使用Docker来构建和打包应用的容器,然后使用Kubernetes来管理和编排这些容器。(详情见小白debug公众号)
  • 使用场景
    • Docker:适合开发和测试环境,快速构建和运行容器化应用。
    • Kubernetes:适合生产环境,特别是在需要管理多个容器和微服务架构时。

--------------------------

------------------------------------------------------------------------------------

处理器架构:

os架构有:x86 aarch64(ARM) 

不同架构所需要的(算法)驱动文件不一样,需要注意,一般找厂商拿的

  • x86:Intel和AMD的架构,广泛用于个人计算机和服务器。
  • x86_64:x86的64位扩展,支持更大的内存和更高的性能。
  • ARM:用于移动设备和嵌入式系统,具有低功耗特性。
  • AArch64(又叫ARM64):ARM架构的64位版本,适用于服务器和高性能计算。
  • RISC-V:开放的指令集架构,正在逐渐获得关注,适用于各种应用。
  • --------------------------------------------------------------------------------

------------------------------------------------------------------------

软负载与硬负载:

软负载均衡通常指基于软件实现的负载均衡,它通过应用程序或软件层进行流量分配。实现方式:通常通过反向代理服务器(如Nginx、HAProxy等)或应用层负载均衡器实现

  • 适用于流量波动较大或需要快速调整的环境。
  • 常用于Web服务器、API服务等。

硬负载均衡是指通过专用的硬件设备来实现负载均衡。这些设备通常被称为负载均衡器,专门设计用于流量分配。

硬件设备通常具有较高的可靠性和稳定性,适合高负载场景:

  • 适用于需要处理大量流量的企业级应用、在线交易平台等。
  • 常见于数据中心和大规模云计算环境。

-------------------------------------------------------------------------------------------------------------------

跨域(可以看那个黑马视频):

----------------------------------------------------------

通俗说ngnix:(有时间/用到之后再仔细学)

Nginx(发音为“engine-x”)是一个高性能的开源Web服务器和反向代理服务器,主要用于处理HTTP和HTTPS请求。

反向代理是一种服务器配置,它接收客户端的请求,并将这些请求转发给一个或多个后端服务器进行处理。客户端并不知道具体的后端服务器,而是只与反向代理服务器进行交互。反向代理可以将用户请求均匀分配到多台后端服务器,从而避免单个服务器的过载,提高系统的整体性能和可靠性。

假设你有一个在线商店,使用Nginx可以这样配置:

  • 当用户访问网站时,Nginx接收请求。
  • Nginx将请求转发到多个应用服务器,这些服务器处理订单、用户登录等操作。
  • Nginx将响应结果(如订单确认)返回给用户。

总之,Nginx是一款功能强大的服务器软件,适合用于各种规模的网站,尤其是需要处理大量请求的场景。

-------------------------------------------------------------------------------------------

通俗说netty:(有时间/用到之后再仔细学)

Nginx五个作用和应用举例_nginx的作用-CSDN博客

Netty 是一个高性能的网络应用框架,主要用于快速开发网络应用,比如服务器和客户端。可以将其通俗理解为一个“工具箱”,帮助开发者更轻松地处理网络通信。

TCP服务器:

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.channel.SimpleChannelInboundHandler;

public class NettyServer {
    public static void main(String[] args) throws Exception {
        // 创建事件循环组
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        EventLoopGroup workerGroup = new NioEventLoopGroup();
        
        try {
            // 创建服务器引导程序
            ServerBootstrap bootstrap = new ServerBootstrap();
            bootstrap.group(bossGroup, workerGroup)
                     .channel(NioServerSocketChannel.class)
                     .childHandler(new ChannelInitializer<SocketChannel>() {
                         @Override
                         protected void initChannel(SocketChannel ch) {
                             ch.pipeline().addLast(new SimpleChannelInboundHandler<String>() {
                                 @Override
                                 protected void channelRead0(ChannelHandlerContext ctx, String msg) {
                                     System.out.println("接收到消息: " + msg);
                                     ctx.writeAndFlush("你好, 客户端!\n");
                                 }
                             });
                         }
                     });

            // 绑定端口并启动服务器
            ChannelFuture future = bootstrap.bind(8080).sync();
            System.out.println("服务器已启动,监听端口 8080");
            future.channel().closeFuture().sync();
        } finally {
            // 优雅关闭
            workerGroup.shutdownGracefully();
            bossGroup.shutdownGracefully();
        }
    }
}

客户端:

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.channel.SimpleChannelInboundHandler;

public class NettyClient {
    public static void main(String[] args) throws Exception {
        // 创建事件循环组
        EventLoopGroup group = new NioEventLoopGroup();
        
        try {
            // 创建客户端引导程序
            Bootstrap bootstrap = new Bootstrap();
            bootstrap.group(group)
                     .channel(NioSocketChannel.class)
                     .handler(new ChannelInitializer<SocketChannel>() {
                         @Override
                         protected void initChannel(SocketChannel ch) {
                             ch.pipeline().addLast(new SimpleChannelInboundHandler<String>() {
                                 @Override
                                 protected void channelRead0(ChannelHandlerContext ctx, String msg) {
                                     System.out.println("接收到服务器消息: " + msg);
                                 }
                             });
                         }
                     });

            // 连接到服务器
            ChannelFuture future = bootstrap.connect("127.0.0.1", 8080).sync();
            future.channel().writeAndFlush("你好, 服务器!\n");
            future.channel().closeFuture().sync();
        } finally {
            // 优雅关闭
            group.shutdownGracefully();
        }
    }
}

代码说明

  • NettyServer:创建一个TCP服务器,监听8080端口。当接收到消息时,它会打印消息并回复客户端。
  • NettyClient:创建一个TCP客户端,连接到服务器,发送一条消息,并接收服务器的响应。

运行步骤

  1. 首先运行NettyServer类,启动服务器。
  2. 然后运行NettyClient类,客户端将连接到服务器并发送消息。

-------------------------------------------------

Bootstrap,来自 Twitter,是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷。

--------------------------------------------------

nos:NOS通常指的是“网络操作系统”(Network Operating System)?存储在nos节点?

-------------------------------------

Cocoa

----------------------------------

学习解决git合并冲突

手撕rpc框架/http框架,做个demo

如何用udp实现tcp

------------------------------------------------------------

重要:

@configuration注解:

@Configuration
在Spring 3.0之前,配置都是通过XML完成的。Spring 3.0引入了一个新特性: 基于Java的配置,这就是@Configuration注释的来源。

@Configuration注解用于定义配置类,这些类是使用基于 Java 的应用程序配置来代替或者与XML结合的一种方法。配置类可以是包级别的,也可以是嵌套的。它们允许你使用@Bean注解定义方法。这些方法会创建由Spring容器管理的对象。
 

细节性东西:

@Configuration和@Bean注解的关系以及使用细节_java的configuration注解和bean注解的关系-CSDN博客

@Configuration 和 @Component 到底有啥区别?_configuration和component的区别-CSDN博客

 从底层看@Configuration 注解本质上还是 @Component   @Component 注解也会当做配置类

Spring 注解中 @Configuration 和 @Component 的区别总结为一句话就是:

        @Configuration 中所有带 @Bean 注解的方法都会被动态代理(cglib),因此调用该方法返回的都是同一个实例。而 @Conponent 修饰的类不会被代理,每实例化一次就会创建一个新的对象。

-------------------------------------------------------------------

具体使用:

@Configuration注解使用详解【记录】-CSDN博客

@Configuration
public class MyConfig {

    @Bean("user")
    public User getUser(){
    	System.out.println("User对象进行创建!");
        return new User("用户", 22, getDog());
    }

    @Bean("dog")
    public Dog getDog(){
    	System.out.println("Dog对象进行创建!");
        return new Dog("金毛", 3);
    }
}

常常一起搭配使用的注解有@Bean 配置类里面使用@Bean标注在方法上给容器注册组件,默认是单实例的。 

  • @Scope:用于声明该bean的作用域,作用域有singleton(单例)、prototype(多例)、request、session。
  • 其底层代码就两个属性,一个用于声明配置类的名称,一个用于声明是否是代理对象方法(重点)。

  • 由于底层有@Component注解的加持,那么被声明的配置类本身也是一个组件

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

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

相关文章

双十一期间有哪些入手不亏的数码好物?这五款优质产品不容错过!

在这个令人期待的双十一购物狂欢节期间&#xff0c;我们总希望能以最实惠的方式&#xff0c;入手那些能够提升生活品质的数码好物。但是还有一些人还在犹豫考虑&#xff0c;不知道入手什么产品比较好&#xff0c;我也是特地挑选了五款实用又富有创意的数码产品&#xff0c;希望…

通过AI检测越权漏洞的指令

通过AI检测越权漏洞的指令 这段指令描述了一个AI的功能和工作流程&#xff0c;主要是用于比较两个HTTP响应数据包&#xff0c;以检测潜在的越权行为。以下是对其内容的详细介绍&#xff1a; 效果 先看一个简单的示例效果&#xff1a; 指令详情 指令详情&#xff1a; {&q…

快速上手C语言【下】(非常详细!!!)

目录 1. 指针 1.1 指针是什么 1.2 指针类型 1.2.1 指针-整数 1.2.2 指针解引用 1.3 const修饰 1.4 字符指针 1.5 指针-指针 1.6 二级指针 2. 数组 2.1 定义和初始化 2.2 下标引用操作符[ ] 2.3 二维数组 2.4 终极测试 3. 函数 3.1 声明和定义 3.2 传值调用…

Java最全面试题->Java基础面试题->JavaEE面试题->Web应用服务器面试题

文章目录 Web应用服务器面试题Tomcat是什么?Tomcat缺省端口是多少&#xff0c;如何修改&#xff1f;Tomcat 有那几种Connector 运行模式&#xff1f;什么是Servlet&#xff1f;Servlet请求过程&#xff1f;Tomcat执行流程&#xff1f;Tomcat部署方式?什么是JBoss ?在JBoss 7…

数据结构与算法:贪心算法与应用场景

目录 11.1 贪心算法的原理 11.2 经典贪心问题 11.3 贪心算法在图中的应用 11.4 贪心算法的优化与扩展 总结 数据结构与算法&#xff1a;贪心算法与应用场景 贪心算法是一种通过选择当前最佳解来构造整体最优解的算法策略。贪心算法在很多实际问题中都取得了良好的效果&am…

双十一母婴必买清单 推荐超实用母婴用品

随着双十一购物狂欢节的临近&#xff0c;无数准父母和年轻家长开始摩拳擦掌&#xff0c;准备为家中的小宝贝抢购一系列高品质、实用的母婴用品。在这个年度最大的电商促销活动中&#xff0c;选择对的产品不仅能够节省开支&#xff0c;更能确保宝宝的健康成长与舒适生活。以下是…

告别微信封号!学会这5招,让你的账号坚不可摧

在这个信息爆炸的时代&#xff0c;无论是工作沟通、社交互动还是获取信息&#xff0c;微信都扮演着极其重要的角色。但是&#xff0c;随着微信平台规则的日益严格&#xff0c;账号被封的风险也随之增加。今天&#xff0c;我们就来聊聊如何有效防止 微信被封&#xff0c;让你的账…

Java基于SSM微信小程序物流仓库管理系统设计与实现(源码+lw+数据库+讲解等)

选题背景 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…

搞错了,再来!谷歌利用AI重新推出全新的Google Shopping

近年来&#xff0c;随着电子商务的迅猛发展&#xff0c;消费者对个性化和便捷购物体验的需求愈发高涨。谷歌&#xff0c;作为互联网巨头之一&#xff0c;一直在不断探索和创新&#xff0c;它一直在应对这样一个事实&#xff1a;越来越多的消费者首先访问零售商的网站&#xff0…

jmeter正则表达式教程

正则表达式用于提取相应数据中的代码、文本等数据&#xff0c;利用正则表达式&#xff0c;提取响应数据&#xff0c;移植到下一线程组的参数中&#xff0c;从而进行测试。 一、解释&#xff1a;解释很多&#xff0c;但是最关键 &#xff08;1&#xff09;注释不多说&#xff0c…

实验干货|电流型霍尔传感调理电路设计01

在做逆变器实验时&#xff0c;需要测量逆变器输出电压以及电流。作为初学者&#xff0c;因为缺乏经验也踩过不少坑&#xff0c;写一篇博客记录下来希望能帮到跟我一样的初学者。 踩坑回顾 用什么采样&#xff1f;片内ADC还是片外ADC&#xff1f; 早前&#xff0c;在用RTLAB做…

51单片机快速入门之 LCD1602 液晶显示屏2024/10/19

51单片机快速入门之 LCD1602 液晶显示屏 Proteus 电路图 : 74HC595 拓展电路可以不用,给 p0-p17 添加上拉电阻也可以!,我这里是方便读取和节省电阻线路 (因为之前不知道 在没有明确循环的情况下&#xff0c;Keil编译器可能会在main()中自动添加类似以下的汇编代码&#xff1a…

手机淘宝自动下单退货自动化RPA脚本机器人

使用手机集线器连接多个手机并发运行。 脚本分3个部分&#xff08;读取本地连接下单&#xff0c;退货获取退货地址信息&#xff0c;填写快递单号&#xff09; 脚本部分图结构看下面的图片 部分数据统计展示

ORACLE SELECT INTO 赋值为空,抛出 NO DATA FOUND 异常

例子&#xff1a; DECLARE ORDER_NUM VARCHAR2(20); BEGIN SELECT S.ORDER_NUM INTO ORDER_NUM FROM SALES_ORDER S WHERE S.ID122344; DBMS_OUTPUT.PUT_LINE(单号: || ORDER_NUM); END; 在查询结果为空的情况下&#xff0c;以上代码会报错&#xff1a;未找到任何数据 解决方…

1024程序员节探讨<程序员的人生观和价值观>

程序员的人生观和价值观 程序员的人生观和价值观往往受到其职业特性和工作环境的影响&#xff0c;但也会因个体差异而有所不同。 人生观 持续学习与成长&#xff1a; 程序员通常认识到技术的快速发展&#xff0c;因此他们倾向于保持一种持续学习和自我提升的态度。他们可能将…

全网最详细图文测评!Stability.AI 发布 SD3.5 Large 模型,能否逆风翻盘超越FLUX?

原文链接&#xff1a;全网最详细图文测评&#xff01;Stability.AI 发布 SD3.5 Large 模型&#xff0c;能否逆风翻盘超越FLUX&#xff1f; (chinaz.com) SD3.5 的前世今生 6 月的时候&#xff0c;Stability AI发布了 Stable Diffusion 3 Medium&#xff0c;但是在在 FLUX 发布…

FPGA学习(7)-线性序列机原理与应用,不同类型的LED控制开关

目录 1.实现1 2.实现2 2.1方法1 2.2方法2 3.实现3 3.1实验现象 4.实现4 4.1分析 4.2实现过程 4.2.1 counter的计数 4.2.2 en_counter2的判断 4.2.3 en_counter0的判断 4.2.4 对case语句加判断条件 4.3仿真结果 ​编辑 4.4实验现象 1.实现1 1.实现以下图示功能…

qt QBuffer详解

QBuffer 是 Qt 提供的一个类&#xff0c;用于在内存中操作二进制数据。它是 QIODevice 的一个子类&#xff0c;允许你将数据读入和写出到一个内存缓冲区&#xff0c;而不需要与文件系统交互。 常用方法 构造函数: QBuffer(QObject *parent nullptr): 创建一个空的 QBuffer 对象…

vue项目启动报错:exit status 1

vue项目启动报错&#xff1a;&#xff08;vite构建&#xff09; npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! Exit status 1 如下图所示&#xff1a; 解决 检查node版本&#xff0c;Vite 需要 Node.js 版本 18 或 20 我之前是 14.16.1&#xff0c;更换成 20.0.0 就可…

Flink 06 聚合操作入门学习,真不难

抛砖引玉 让你统计1小时内每种商品的销售额&#xff0c;用Flink 该怎么实现。 还是让你统计1小时内每种商品的销售额&#xff0c;但是要过滤掉退款的订单&#xff0c;用Flink 该怎么实现。 学了本文两个操作&#xff0c;不信你还不会。 AggregateFunction ❝ 通常用于对数据…