当前位置: 首页 > news >正文

JDK新特性(8-21)数据类型-直接内存

目录

Jdk 新特性

JDK 8 特性

默认方法实现作用:可以使接口更加灵活,不破坏现有实现的情况下添加新的方法。

函数式接口

StreamAPI

JDK 9 特性

JDK 10 特性

JDK 11 特性

JDK 14 特性

JDK 17 特性

JDK 21 特性

数据类型

基本数据类型和引用数据类型的区别

自动装箱自动拆箱

integer和int的区别

缓存池实现

直接内存


Jdk 新特性

JDK 8 特性

1、Lambda 表达式:这是 JDK 8 最重要的特性之一。它允许将函数作为方法参数传递,

使得代码更加简洁。对于接口可以直接用()->{}方式来表达

小括号表示方法入参,花括号内表示方法返回值,如Collections的sort()方法:

Optional判空。

例如,可以使用 Lambda 表达式来简化集合的遍历和操作。

如List<String> list = Arrays.asList("a", "b", "c");

list.forEach((s) -> System.out.println(s));。

2、Stream API:提供了一种对集合进行操作的新方式。它支持链式操作,

用于对数据进行过滤、映射、排序等操作。

例如,List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

 List<Integer> evenNumbers =

numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());

,可以方便地从一个集合中筛选出偶数。

3、接口默认方法和静态方法:接口可以有默认方法和静态方法。

默认方法允许在接口中提供默认的实现,

这样实现接口的类在没有重写该方法时可以使用默认实现。

例如,interface MyInterface {

default void myMethod() { System.out.println("Default method"); }

}。

4、新的日期和时间API

5、并发增强

6、支持多重注解

7、反射的加强 。JDK8加强了反射,它允许你直接通过反射获取参数的名字

9、JavaScript引擎Nashorn

10、Java虚拟机(JVM)的新特性

PermGen移出永久代,变成是Metaspace元空间。

JVM选项-XX:PermSize与-XX:MaxPermSize分别被-XX:MetaSpaceSize与-XX:MaxMetaspaceSize所代替。

原文链接:JDK 7 和 JDK8 的区别_jdk8个jdk7区别-CSDN博客

默认方法实现作用:可以使接口更加灵活不破坏现有实现的情况下添加新的方法


功能性接口:Function  接收一个功能参数t,并返回一个功能结果R。

断言性接口:Predicate  主要用到test方法 其中参数t为输入参数,

如果输入参数符合断言则返回true,否则false 。/ˈpredɪkət /

供给性接口:Supplier 不接收任何参数 但有返回值。/səˈplaɪə(r)/

java.util.function.Supplier <T>接口仅包含一个无参的方法:T get(),

用来获取一个泛型参数指定类型的对象数据

消费性接口:Consumer   只接收一个参数t,但是没有返回值。 

函数式接口

有且仅有一个抽象方法的接口(不包括默认方法、静态方法以及对Object方法的重写)

(注:一般会出现一个名词叫做“语法糖”,即使用更加方便而原理不变的代码语法,

如Lambda可以认为是匿名内部类的语法糖)

@FunctionalInterface 

// 定义一个接口,只包含一个抽象方法

public interface MyfuInter {

    public abstract void method();

}

StreamAPI

filter(T -> boolean)  保留 boolean 为 true 的元素

map(T -> R)  将流中的每一个元素 T 映射为 R(类似类型转换)

List<String> newlist = list.stream().map(Person::getName).collect(toList());

 flatMap(T -> Stream)

将流中的每一个元素 T 映射为一个流,再把每一个流连接成为一个流

//去重复

Stream<T> distinct();

//排序

Stream<T> sorted();

//根据属性排序

Stream<T> sorted(Comparator<? super T> comparator);

//对对象的进行操作

Stream<T> peek(Consumer<? super T> action);

//截断--取先maxSize个对象

Stream<T> limit(long maxSize);

//截断--忽略前N个对象

Stream<T> (long n);

anyMatch表示,判断的条件里,任意一个元素成功,返回true

allMatch表示,判断条件里的元素,所有的都是,返回true

noneMatch跟allMatch相反,判断条件里的元素,所有的都不是,返回true

 joining 连接字符串   .collect(joining(",")); 返回String

groupingBy 用于将数据分组,最终返回一个 Map 类型

 统计(count、averaging)

 min,max,findFirst,findAny

平均值:averagingInt、averagingLong、averagingDouble

最值:maxBy、minBy

求和:summingInt、summingLong、summingDouble

统计以上所有:summarizingInt、summarizingLong、summarizingDouble

List<User> userList = Lists.newArrayList();

userList.add(new User(1L, "彼得", 18));

userList.stream() .filter(user -> user.getAge() >18) .map(User::getName).forEach(System.out::println);

userRespDtoList.stream().filter(x -> !ObjectUtils.isEmpty(x.getDeptId())).forEach(user -> {})

Map、collect、group by、distinct、sum

list.stream()

                .filter(s -> s.startsWith("张"))

                .filter(s -> s.length() == 3)

                .forEach(System.out::println);

List<String> idcards= users.stream().map(User::getIdcard).collect(Collectors.toList())

原文链接:list对象转map stream /去重( 根据属性转Map或者分组)_list转map去重-CSDN博客

JDK 9 特性

模块系统(Java Platform Module System - JPMS):这是 JDK 9 的核心变化。它将 Java 代 码组织成模块,每个模块有自己的名称、依赖关系和封装边界。

例如,可以创建一个名为com.example.mymodule的模块,

并且在模块描述文件module - info.java中定义模块的依赖和导出的包,如module com.example.mymodule

 { exports com.example.api; requires java.base; }。

改进的 JShell 工具:JShell 是一个交互式的 Java 编程环境。

在 JDK 9 中它得到了改进,允许开发者快速地测试 Java 代码片段,而不 需要编写完整的类和方法。

例如,可以直接在 JShell 中输入int a = 5; System.out.println(a);

并立即看到输出结果。

JDK 10 特性

局部变量类型推断(var 关键字):可以在声明局部变量时使用var关键字来让编译器自动 推断变量的类型。

例如,var list = new ArrayList<String>();,

编译器会根据赋值的右侧自动推断list是ArrayList<String>类型。

这使得代码编写更加简洁,尤其是在处理复杂的泛型类型时。

JDK 11 特性

新的 HTTP 客户端 API:提供了一个标准的、现代化的 HTTP 客户端,

用于替代旧的HttpURLConnection。

它支持同步和异步请求,并且可以方便地处理请求和响应。

例如,HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder().uri(URI.create("http://example.com")).build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body());。

字符串处理方法改进:新增了一些字符串处理方法,

如isBlank()用于判断字符串是否为空或仅包含空白字符,

lines()用于按行拆分字符串等。这些方法使得字符串的处理更加方便。

JDK 14 特性

Records(记录):Records 是一种新的类类型,用于创建不可变的数据类。

它自动生成了构造函数、访问器方法和equals()、hashCode()等方法。

例如,record Point(int x, int y) {}定义了一个记录类,它有x和y两个属性,可以通过new Point(1, 2)来创建实例,并且可以直接访问x和y属性。

Pattern Matching for instanceof(针对 instanceof 的模式匹配):这是对instanceof操作的 改进。以前在使用instanceof检查类型后还需要进行类 型转换,现在可以在instanceof表达式中直接声明变量并使 用。例如,if (obj instanceof String str)

 { System.out.println(str.length()); }。

JDK 17 特性

  1. 语言特性增强  
    1. 密封类(Sealed Classes)改进:密封类可以精确控制哪些类可以继承它。例如,定义一个密封类sealed class Shape permits Circle, Square,这就限制了只有CircleSquare类能够继承Shape类,使得类的继承层次更加可控,有助于在设计模式(如状态模式、策略模式)中限制子类的范围,增强代码的安全性和可维护性。 /siːld/
    2. 模式匹配(Pattern Matching)增强:在处理instanceof操作时有了很大的改进。以前使用instanceof需要先进行类型判断,再进行类型转换,如if (obj instanceof String) { String str = (String) obj; System.out.println(str.length()); }。在 Java GDK 17 中,可以直接写if (obj instanceof String str) { System.out.println(str.length()); },这种方式更加简洁高效,提高了代码的可读性。
  2. 性能优化
    1. JIT(即时编译)编译器优化:通过对 JIT 编译器的改进,加快了代码的执行速度。编译器能够更智能地对热点代码进行优化编译,减少了字节码解释执行的时间,提高了 Java 应用程序的整体性能。
    2. 内存管理优化:在内存布局和分配方面进行了优化。例如,对于对象的内存分配机制进行了调整,减少了内存碎片的产生,提高了内存的利用率。这对于内存密集型的应用程序(如大数据处理、内存数据库等)非常有利,可以降低内存占用,提升系统的稳定性。
  3. 新的 API 提供
    1. 日期和时间 API 增强:新增了一些用于处理日期和时间的方法,使得日期时间的计算和格式化更加精准。比如在处理跨时区的日期时间问题时,提供了更方便的函数来进行时区转换和计算,方便开发全球化应用程序。
    2. 安全相关 API 更新:在安全方面提供了新的 API,可能包括增强的加密算法相关函数。例如,在网络通信加密、数据存储加密等场景下,可以利用这些新的 API 来提高应用程序的安全性,保护用户数据。
  4. 容器化和云原生支持提升
    1. 更好地适应容器编排平台:能够更好地与 Kubernetes 等容器编排平台配合。在资源动态分配的场景下,Java 应用可以更快地响应资源的变化。例如,当容器的 CPU 或内存资源被重新分配时,Java 应用能够及时调整自身的性能和资源消耗策略,保证应用的稳定运行。
    2. 云原生服务集成增强:在云原生的分布式应用开发方面,提供了更好的接口用于与其他服务集成。比如,在微服务架构中,可以更方便地与服务发现、配置管理等服务进行交互,促进云原生应用的开发和部署。

JDK 21 特性

虚拟线程(Virtual Threads):这是一种轻量级的线程,可以有效减少编写高吞吐量并发应 用程序的难度。虚拟线程能够在不增加系统资源消耗的前提下,

大大提高应用程序的并发处理能力。

分代 ZGC(Z Garbage Collector):进一步优化了垃圾回收的性能,

特别是在处理大型堆内存场景下的性能表现更好,

能够减少垃圾回收的暂停时间,提高系统的稳定性。

记录模式(Record Patterns)和模式匹配(Pattern Matching)增强:在语言语法方面有新的 预览功能出现,让代码在处理复杂数据结构和类型判断时更加简 洁高效。

例如,在处理复杂的嵌套数据结构时,可以更方便地提取和使用其中的数据。

2023年9月19日,Oracle公司正式发布了JDK 21

数据类型

Java中的数据类型分为两大类,基本数据类型引用数据类型


基本数据类型只有8种,可按照如下分类四类
①整数类型:long、int、short、byte
②浮点类型:float、double
③字符类型:char
④布尔类型:boolean

引用类型
大致包括:接口类型、 数组类型、 枚举类型、 注解类型、 字符串型
例如,String类型就是引用类型,

还有Double,Byte,Long,Float,Char,Boolean,Short(注意这里和基本类型相比首字母是大写)
简单来说,所有的非基本数据类型都是引用数据类型

基本数据类型和引用数据类型的区别

存储位置

方法中声明的变量:局部变量只能在方法中有效

每当程序调用方法时,系统都会为该方法建立一个方法栈,结束系统会释放方法栈。

在方法中声明的变量可以是基本类型的变量,也可以是引用类型的变量

当声明是基本类型的变量的时,其变量名及值是放在JAVA虚拟机栈中

当声明的是引用变量时,所声明的变量(该变量实际上是在方法中存储的是内存地址值)是放在JAVA虚拟机的栈中,该变量所指向的对象是放在堆类存中的

在类中声明的变量

在类中声明的变量是成员变量,也叫全局变量,放在堆中的(因为全局变量不会随着某个方法执行结束而销毁)。

在类中声明的变量即可是基本类型的变量 也可是引用类型的变量

声明的是基本类型的变量其变量名及其值放在堆内存中的

引用类型时,其声明的变量仍然会存储一个内存地址值,该内存地址值指向所引用的对象。引用变量名和对应的对象仍然存储在相应的中。

 传递方式

基本变量类型:在方法中定义非全局基本数据类型变量,调用方法时作为参数是按数传递的

引用变量类型:引用数据类型变量,调用方法时作为参数是按引用传递的。

一切的引用数据类型都可以使用object进行接收

自动装箱自动拆箱

将基本数据类型转化为引用数据类型的过程叫做装箱

把从引用数据类型转化为基本数据类型的过程叫做拆箱

Integer类型的对象,使用intValue()可以将Integer对象拆箱为int类型变量

valueOf()--装箱


java自己的一种机制,叫做自动装箱和自动拆箱

必须看:一篇文章带你搞定 Java 基本数据类型和引用数据类型的区别_java基本数据类型和引用数据类型的区别-CSDN博客

integer和int的区别

1.数据类型和内存存储方式不同:

int是Java的基本数据类型,直接存储数值

而Integer是int的包装类,是一个对象,存储在堆内存中

2.默认值不同

int的默认值为0;而Integer的默认值为null。

变量比较方式不同。当比较两个变量是否相等时,

可以直接使用==操作符比较两个int变量;

而Integer变量则需要使用equals方法进行比较。

3.实例化需求不同

int变量不需要实例化即可使用;而Integer变量必须实例化后才能使用。

4.方法和功能不同。

Integer提供了一些额外的操作方法,例如将字符串转换成整数,

以及表示整数的最大值和最小值的常量;而int主要用作数值运算。

Integer最小值-2^31 , 最大值2^31-1

1byte = 1字节 = 8 bit(位)

String           4个字节   默认会被压缩,不压缩8个

缓存池实现

private static class IntegerCache {

        static final int low = -128;

assert IntegerCache.high >= 127;  

}

assert [boolean 表达式]  assert  断言 [əˈsɜːt]

Java 是从 JDK1.4 开始支持断言的,主要用于程序代码的调试或测试阶段,千万不能用在正式环境上。

常量池:可以看作一张表,虚拟机指令根据这张表找到要执行的类名、方法名、参数类型、字面量等信息。

运行时常量池:当类被加载,它的常量池信息就会放入运行时常量池,并把里面的符号地址变为真实地址

  • Byte Short Integer Long 四种类型字面量在-128<= x <=127 时对象将进入常量池。
  • Character 类型 不能为负数,字面量大于等于0 且 ,小于等于127时对象将进入常量池。
  • Boolean类型 两个字面量都会进入常量池
  • Float 和Double 类型 不会进入常量池

彻底弄懂java中的常量池-腾讯云开发者社区-腾讯云

直接内存

并不属于jvm中内存结构,不由jvm进行管理。是虚拟机的系统内存

常见NIO操作时,用于数据缓冲区,分配回收成本较高,但读写性能高,不收jvm内存回收管理。

相关文章:

JDK新特性(8-21)数据类型-直接内存

目录 Jdk 新特性 JDK 8 特性 默认方法实现作用:可以使接口更加灵活&#xff0c;不破坏现有实现的情况下添加新的方法。 函数式接口 StreamAPI JDK 9 特性 JDK 10 特性 JDK 11 特性 JDK 14 特性 JDK 17 特性 JDK 21 特性 数据类型 基本数据类型和引用数据类型的区别…...

003-Kotlin界面开发之声明式编程范式

概念本源 在界面程序开发中&#xff0c;有两个非常典型的编程范式&#xff1a;命令式编程和声明式编程。命令式编程是指通过编写一系列命令来描述程序的运行逻辑&#xff0c;而声明式编程则是通过编写一系列声明来描述程序的状态。在命令式编程中&#xff0c;程序员需要关心程…...

QT pro项目工程的条件编译

QT pro项目工程的条件编译 前言 项目场景&#xff1a;项目中用到同一型号两个相机&#xff0c;同时导入两个版本有冲突&#xff0c;编译不通过&#xff0c; 故从编译就区分相机导入调用&#xff0c;使用宏区分 一、定义宏 在pro文件中定义宏&#xff1a; DEFINES USE_Cam…...

深度学习之经典网络-AlexNet详解

AlexNet 是一种经典的卷积神经网络&#xff08;CNN&#xff09;架构&#xff0c;在 2012 年的 ImageNet 大规模视觉识别挑战赛&#xff08;ILSVRC&#xff09;中表现优异&#xff0c;将 CNN 引入深度学习的新时代。AlexNet 的设计在多方面改进了卷积神经网络的架构&#xff0c;…...

部署Prometheus、Grafana、Zipkin、Kiali监控度量Istio

1. 模块简介 Prometheus 是一个开源的监控系统和时间序列数据库。Istio 使用 Prometheus 来记录指标&#xff0c;跟踪 Istio 和网格中的应用程序的健康状况。Grafana 是一个用于分析和监控的开放平台。Grafana 可以连接到各种数据源&#xff0c;并使用图形、表格、热图等将数据…...

结合 Spring Boot Native 和 Spring Boot 构建高性能服务器架构

随着云计算和微服务架构的普及&#xff0c;开发者们不断寻求提高应用性能和用户体验的解决方案。Spring Boot Native 的出现&#xff0c;利用 GraalVM 的原生映像特性&#xff0c;使得 Java 应用的启动速度和资源占用得到了显著改善。本文将深入探讨如何将前端应用使用 Spring …...

ArcGIS影像调色(三原色)三原色调整

本期主要介绍ArcGIS影像调色&#xff08;三原色&#xff09; ArcGIS影像调色&#xff08;三原色&#xff09;&#xff0c;对比度、亮度、gamma。红绿蓝三原色调整。 视频学习 ArcGIS影像调色&#xff08;三原色&#xff09;...

SQLite从入门到精通面试题及参考答案

目录 SQLite 是什么? SQLite 的优点有哪些? 轻量级与易于部署 零配置和低维护成本 良好的兼容性和跨平台性 高性能和可靠性 SQLite 的局限性有哪些? 并发处理能力有限 缺乏用户管理和权限控制功能 有限的扩展性 有限的网络支持 SQLite 和其他数据库系统(如 MyS…...

【C/C++】字符/字符串函数(0)(补充)——由ctype.h提供

零.导言 除了字符分类函数&#xff0c;字符转换函数也是一类字符/字符串函数。 C语言提供了两种字符转换函数&#xff0c;分别是 toupper &#xff0c; tolower。 一.什么是字符转换函数&#xff1f; 顾名思义&#xff0c;即转换字符的函数&#xff0c;如大写字母转小写字母&am…...

Git 的特殊配置文件

文章目录 1.前言2.Git 标准配置文件.gitignore作用格式示例 .gitattributes作用格式示例 .gitmodules作用格式示例 .gitconfig作用格式示例 3.非 Git 标准约定文件.gitkeep简介示例 .gitacls作用格式示例 参考文献 1.前言 Git 是一个强大的版本控制系统&#xff0c;它使用多个…...

数据的表现形式(1)

数据的表现形式 西文字符编码 ASCII码&#xff08;美国信息交换标准码&#xff09; 计算机内部用一个字节&#xff08;8位二进制&#xff09;&#xff0c;来存放一个7位ASCII码&#xff0c;最高位为“0”&#xff0c;共 可以表示128个不同字符 ASCII码中&#xff0c;0是48&…...

《高频电子线路》—— 调幅

文章内容来源于【中国大学MOOC 华中科技大学通信&#xff08;高频&#xff09;电子线路精品公开课】&#xff0c;此篇文章仅作为笔记分享。 调幅 普通调幅 AM 普通调幅&#xff0c;也属于线性调制&#xff0c;需要了解其时域和频域。 时域&#xff08;表达式&#xff09; vΩ…...

ubuntu22.04安装ROS2Humble

参考链接 Ubuntu22.04——ROS2安装以及小海龟画圆 Ubuntu 22.04 安装 ros noetic Slam_in_autonomous_driving(一) 环境配置...

软中端,硬中断(学习笔记)

/proc/softirqs 提供了软中断的运行情况&#xff1b; /proc/interrupts 提供了硬中断的运行情况。 以下图片展示的是软中断内容&#xff1a; 在查看 /proc/softirqs 文件内容时&#xff0c;你要特别注意以下这两点。 第一&#xff0c;要注意软中断的类型&#xff0c;也就是这…...

scIDST:弱监督学习推断单细胞转录组数据中的疾病进展阶段

背景&#xff1a;患者来源组织中的单个细胞&#xff0c;每个都处于不同的病理阶段&#xff0c;因此这种细胞变异性阻碍了随后的差异基因表达分析。 结果&#xff1a;为了克服这种异质性问题&#xff0c;作者提出了一种新的深度学习方法&#xff0c;scIDST&#xff0c;该方法可以…...

Linux 下执行定时任务之 Systemd Timers

不知道 ECS 因为什么缘故&#xff0c;上面安装的 MySQL 服务老是不定期挂掉&#xff0c;本来想通过 Linux 得 Cron 配置个半小时的定时检测任务&#xff0c;结果一直没有执行&#xff0c;因此又尝试使用了 Systemd Timers 进行了重新配置&#xff0c;简要做个记录。 Systemd Ti…...

flutter 专题二 Flutter状态管理之Riverpod 0.8.4

一 、flutter 有哪些状态管理方式 Flutter的状态管理方式有很多&#xff0c;Redux、 Bloc、 MobX、Provider等等。单单一个Provider&#xff0c;我也见到了各种组合&#xff0c;例如ChangeNotifier Provider / StateNotifier Provider&#xff08; freezed&#xff09;。各…...

【Linux】从零开始使用多路转接IO --- poll

碌碌无为&#xff0c;则余生太长&#xff1b; 欲有所为&#xff0c;则人生苦短。 --- 中岛敦 《山月记》--- 从零开始使用多路转接IO 1 前言1 poll接口介绍3 代码编写4 总结 1 前言 上一篇文章我们学习了多路转接中的Select&#xff0c;其操作很简单&#xff0c;但有一些缺…...

Docker配置宿主机目录和网络映射

容器挂载宿主机目录 在Docker中&#xff0c;你可以通过-v或--volume选项将宿主机的目录挂载到容器中。这可以让你在容器和宿主机之间共享文件。 例如&#xff0c;如果你想将宿主机的/home/user/data目录挂载到容器的/data目录&#xff0c;你可以使用以下命令&#xff1a; do…...

第十七课 component组件解析

component组件解析 component组件的写法在众多组件写法中算是比较简单的&#xff0c;component组件结构组成如下&#xff1a; 1&#xff09;组件名 2&#xff09;组件模板 3&#xff09;利用Vue对象进行生成 基础示例&#xff1a; <div id"app"><test>…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...