JAVA SE 11

news2024/9/20 20:32:11

文章目录

  • JDK 11 特性介绍
    • 语法增强
      • 1. `String`类的增强
      • 2. `Optional`类的增强
      • 3. 新的HTTP/2客户端
      • 4. `var`关键字的扩展
      • 5. `Collection`接口的增强
    • 语法改进
      • JDK 11引入的一些语法改进
    • 详细介绍
      • 1. 模块化系统(Java平台模块系统,JPMS)
      • 2. HTTP客户端
      • 3. 改进的性能
      • 4. 新的标准化HTTP方法
      • 5. 安全性增强
      • 6. 新的垃圾回收器
      • 7. 升级的JavaFX
      • 8. 移除的模块
      • 9. 改进的Lambda表达式

JDK 11 特性介绍

超链接[HTTP1.1升级HTTP2.0]

语法增强

1. String类的增强

String text = "  Hello, World!  ";
System.out.println(text.isBlank()); // 输出:false, 因为文本非空且非空白
System.out.println(text.strip()); // 输出:"Hello, World!",去除前后空白字符

2. Optional类的增强

Optional<String> optionalValue = Optional.ofNullable(null);
System.out.println(optionalValue.orElse("Default Value")); // 输出:"Default Value"
optionalValue.ifPresent(System.out::println); // 不输出任何内容,因为optionalValue为空
System.out.println(optionalValue.isEmpty()); // 输出:true,isEmpty() 是一个新方法,与isPresent()相反

3. 新的HTTP/2客户端

HttpClient client = HttpClient.newBuilder().version(HttpClient.Version.HTTP_2).build();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.example.com/data"))
    .build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
    .thenApply(HttpResponse::body)
    .thenAccept(System.out::println);

4. var关键字的扩展

var numbers = List.of(1, 2, 3, 4, 5);
var sum = numbers.stream().mapToInt(Integer::intValue).sum();
System.out.println(sum); // 输出:15

for (var element : numbers) {
  System.out.println(element);
}

try (var reader = new BufferedReader(new FileReader("file.txt"))) {
  // 使用reader读取文件内容
}

5. Collection接口的增强

List<Integer> numbers = new ArrayList<>(List.of(1, 2, 3, 4, 5));
numbers.forEach(System.out::println);

numbers.removeIf(n -> n % 2 == 0);
System.out.println(numbers); // 输出:[1, 3, 5]

Spliterator<Integer> spliterator = numbers.spliterator();
spliterator.forEachRemaining(System.out::println);

语法改进

JDK 11引入的一些语法改进

JDK 11引入了一些改进来提高代码的可读性和开发效率。以下是一些JDK 11的改进:

  1. var关键字的使用

    • 在JDK 10中引入了var关键字,用于局部变量的类型推断。在JDK 11中,这个特性得到了保留,并且可以用于多种情况,如局部变量声明、循环变量以及try-with-resources语句中的资源变量。这可以帮助简化代码,减少重复的类型声明,提高可读性和开发效率。
    var numbers = List.of(1, 2, 3, 4, 5);
    var sum = numbers.stream().mapToInt(Integer::intValue).sum();
    System.out.println(sum); // 输出:15
    
    for (var element : numbers) {
      System.out.println(element);
    }
    
    try (var reader = new BufferedReader(new FileReader("file.txt"))) {
      // 使用reader读取文件内容
    }
    
  2. Lambda表达式的参数类型推断

    • Lambda表达式的参数类型推断并不依赖于var关键字。实际上,Lambda表达式的参数类型可以根据上下文自动推断。这意味着即使在JDK 10之前,如果上下文明确,也可以省略Lambda参数的类型。
    // JDK 10之前的写法
    List<Integer> numbers = List.of(1, 2, 3, 4, 5);
    numbers.forEach((Integer number) -> System.out.println(number));
    
    // JDK 10及之后的写法
    numbers.forEach(number -> System.out.println(number));
    
  3. 单个下划线作为标识符

    • 单个下划线_作为标识符在Java中一直是可以接受的,并不是JDK 11引入的新特性。使用下划线作为标识符可以表示该变量是一个“丢弃”变量,即一个不会被使用的变量。尽管如此,这种做法并不推荐,因为它可能会导致代码难以理解。
    List<Integer> numbers = List.of(1, 2, 3, 4, 5);
    numbers.forEach(_ -> System.out.println("Hello"));
    

这些改进使得代码更加简洁、清晰,并提供了更好的开发体验。请注意,这些改进是在JDK 10中引入并在JDK 11中得以延续的,如果使用较旧版本的Java,可能无法使用这些新的语法特性。

详细介绍

1. 模块化系统(Java平台模块系统,JPMS)

JDK 11 进一步完善了 JDK 9 引入的模块化系统。模块化系统允许开发人员将代码和依赖项组织成模块,以提高可维护性、安全性和性能。开发人员可以使用 module 关键字定义模块,并使用 requiresexports 语句来声明模块之间的依赖关系和对外暴露的 API。模块化系统还提供了更细粒度的访问控制,可以限制对模块中的内部 API 的访问。

模块化系统的核心概念是模块(Module)。一个模块是一个逻辑上独立的单元,它包含了相关的代码和数据,并且可以与其他模块进行交互。模块可以声明自己的依赖关系,并且可以对外部模块隐藏自己的实现细节,只暴露必要的公共接口。

以下是模块化系统的一些关键概念:

  1. 模块声明(Module Declaration):每个模块都需要在其代码中声明自己的模块信息。模块声明使用module-info.java文件来描述,其中包含模块的名称、依赖关系和导出的包等信息。
  2. 模块路径(Module Path):JDK 11引入了模块路径,它是一组模块的集合。与传统的类路径(Classpath)不同,模块路径明确指定了模块之间的依赖关系,并且可以进行更细粒度的控制。
  3. 模块化编译(Module Compilation):模块化系统引入了新的编译选项,可以使用javac命令编译模块化的代码。编译器会检查模块之间的依赖关系,并确保模块之间的访问是合法的。
  4. 模块化运行时(Module Runtime):在模块化系统中,Java运行时环境(JRE)和Java开发工具包(JDK)被组织成一组模块。运行时环境只加载应用程序所需的模块,减少了不必要的类加载和内存占用。
  5. 模块化的库和应用程序(Module Libraries and Applications):模块化系统可以应用于库和应用程序的开发。开发者可以将自己的代码组织成模块,并声明自己的依赖关系,从而提供更清晰、可维护和可扩展的代码结构。

2. HTTP客户端

JDK 11引入了一个全新的HTTP客户端API,它提供了一种现代化、灵活和异步的方式来发送HTTP请求和处理响应。这个新的HTTP客户端API是在java.net包之外单独提供的,它基于Java的非阻塞IO模型,可以与Java的CompletableFuture一起使用,支持异步操作。

以下是JDK 11的HTTP客户端的一些关键特性和优势:

  1. 异步和非阻塞:HTTP客户端API是基于异步和非阻塞的设计。它使用Java的CompletableFuture来支持异步操作,可以发送多个请求并在后台进行处理,提高了应用程序的性能和吞吐量。
  2. 支持HTTP/1.1和HTTP/2:HTTP客户端API同时支持HTTP/1.1和HTTP/2协议。它可以自动根据服务器的支持情况选择合适的协议版本,并提供相应的功能和性能优势。
  3. 请求和响应处理:HTTP客户端API提供了丰富的方法来构建和定制HTTP请求,包括设置请求头、请求方法、请求体等。它还提供了灵活的方式来处理HTTP响应,包括读取响应头、响应体、处理响应状态等。
  4. 连接池管理:HTTP客户端API提供了连接池管理的功能,可以重用连接以提高性能。它支持连接的保持活动状态、连接的超时和关闭等。
  5. SSL/TLS支持:HTTP客户端API对于安全通信提供了全面的支持,包括SSL/TLS协议、证书验证和安全套接字配置等。
  6. Cookie管理:HTTP客户端API提供了对Cookie的支持,可以自动处理和管理请求和响应中的Cookie信息。
  7. 代理支持:HTTP客户端API可以与代理服务器一起使用,支持通过代理发送请求和接收响应。

使用JDK 11的HTTP客户端API,开发者可以轻松地构建现代化的、高性能的HTTP客户端应用程序。它提供了丰富的功能和灵活的定制选项,同时还与Java的异步编程模型紧密集成,使得处理HTTP请求和响应变得更加简单和高效。

3. 改进的性能


JDK 11在性能方面进行了一些改进,以下是其中一些主要的改进点:

  1. G1垃圾收集器的改进:JDK 11引入了一些对G1垃圾收集器(Garbage First Collector)的改进,包括并行Full GC(全局垃圾回收)、并行标记阶段的性能改进以及减少停顿时间。这些改进可以提高应用程序的垃圾收集性能,减少垃圾收集引起的停顿时间。

  2. 垃圾收集器的默认选择:JDK 11将G1垃圾收集器作为默认的垃圾收集器。相比于先前的默认收集器(Parallel GC),G1在性能和可预测性方面有所改进,特别适用于大内存应用和具有不同大小堆的应用。

  3. Epsilon垃圾收集器:JDK 11引入了一种实验性的垃圾收集器,称为Epsilon。Epsilon垃圾收集器是一种几乎不做任何工作的垃圾收集器,它主要用于性能测试和其他需要最小开销的场景。这可以为一些特殊的使用场景提供更高的性能,如性能测试和短暂的内存分配测试。

  4. 基准测试工具的改进:JDK 11提供了一些改进的基准测试工具,如JMH(Java Microbenchmark Harness)。JMH可以帮助开发者更准确地评估和比较不同代码片段的性能,提供了更精确的性能测量和更丰富的性能分析功能。

  5. 并行类加载:JDK 11引入了并行类加载功能,可以在多个CPU核心上并行加载类。这可以加快应用程序的启动时间和类加载性能。

  6. JIT编译器的改进:JDK 11中的JIT(Just-In-Time)编译器进行了一些性能优化,包括更好的代码优化、更高效的方法内联等。这些改进可以提高应用程序的执行速度和吞吐量。


4. 新的标准化HTTP方法


JDK 11引入了一些新的标准化HTTP方法,以提供更全面和灵活的HTTP请求功能。以下是在JDK 11中引入的一些新的标准化HTTP方法:

  1. GET:GET方法用于从服务器获取资源。它是HTTP协议中最常用的方法之一,用于请求服务器返回指定资源的内容。
  2. POST:POST方法用于向服务器提交数据,通常用于创建新资源或提交表单数据。它将请求的数据作为请求体发送给服务器。
  3. PUT:PUT方法用于向服务器上传或更新资源。它将请求的数据作为请求体发送给服务器,并将其存储在服务器上指定的位置。
  4. DELETE:DELETE方法用于从服务器删除指定的资源。它指示服务器删除请求URL所指定的资源。
  5. HEAD:HEAD方法与GET方法类似,但它只返回响应头部信息,而不返回响应体。它常用于获取资源的元数据或检查资源的状态。
  6. OPTIONS:OPTIONS方法用于获取服务器支持的HTTP方法和功能。它可以用于客户端了解服务器的能力和配置。
  7. TRACE:TRACE方法用于回显服务器收到的请求。它可以用于测试和诊断,以查看请求在传输过程中是否被修改。

对于HTTP请求的处理,传统上主要依赖于Java的URLConnection类或第三方库,如Apache HttpClient和OkHttp。然而,这些库可能在API设计和功能上存在一些限制和不一致性。

JDK 11引入了一个新的标准化的HTTP客户端API,提供了更现代和灵活的方式来处理HTTP请求。这个API基于HTTP/1.1和HTTP/2标准,并提供了一组简单易用的方法来构建和发送HTTP请求,以及处理服务器返回的响应。

通过引入标准化的HTTP方法,JDK 11使得开发者可以更方便地使用常见的HTTP方法,如GET、POST、PUT、DELETE等,而无需依赖于第三方库或手动处理HTTP请求。

此外,标准化的HTTP方法也提供了更好的可读性和一致性,使得开发者在处理HTTP请求时更容易理解和维护代码。


5. 安全性增强

  1. 支持HTTPS:标准化的HTTP方法在JDK 11中支持HTTPS协议。HTTPS通过使用TLS/SSL加密通信,提供了更安全的数据传输。使用标准化的HTTP方法,您可以轻松地与使用HTTPS的服务器进行通信,并确保数据的机密性和完整性。
  2. 安全头部处理:JDK 11的HTTP客户端API提供了对安全头部的支持。安全头部是一组HTTP响应头部,用于增强应用程序的安全性。通过使用标准化的HTTP方法,您可以轻松地访问和处理安全头部,以确保应用程序与服务器之间的通信符合安全最佳实践。
  3. 安全协议支持:JDK 11中的HTTP客户端API支持多种安全协议,包括TLS 1.2和TLS 1.3。这些协议提供了更强大的安全性和加密算法,以保护您的数据免受恶意攻击。
  4. 安全认证支持:标准化的HTTP方法在JDK 11中提供了对基本身份验证和摘要身份验证的支持。这使得您可以轻松地与要求身份验证的服务器进行通信,并提供必要的凭据进行身份验证。

6. 新的垃圾回收器


JDK 11引入了一种新的垃圾回收器,名为ZGC(Z Garbage Collector)。ZGC是一种专注于低延迟的垃圾回收器,旨在减少应用程序的停顿时间,并提供可扩展性和高吞吐量。

以下是ZGC垃圾回收器的主要特点和优势:

  1. 低停顿时间:ZGC的设计目标是减少垃圾回收期间应用程序的停顿时间。通过使用并发的垃圾回收算法,大部分垃圾回收工作可以与应用程序的执行并行进行,从而减少了停顿时间。

  2. 可扩展性:ZGC被设计为具有良好的可扩展性,可以处理大型堆内存。它能够有效地利用多个处理器和大量内存,提供高吞吐量和更快的垃圾回收性能。

  3. 动态堆内存分配:ZGC允许动态调整堆内存的大小,以适应应用程序的需求。这使得应用程序可以更灵活地管理内存,并根据实际需求进行调整,提高内存利用率和性能。

  4. 并发操作:ZGC的并发垃圾回收算法允许在垃圾回收过程中进行并发操作,包括对象分配、引用处理和根扫描等。这意味着应用程序可以在垃圾回收期间继续执行,而不会出现明显的停顿。

  5. 分代垃圾回收:ZGC采用了分代垃圾回收的策略,将堆内存分为不同的代。这种策略可以更有效地管理不同生命周期的对象,提高垃圾回收的效率。

  6. 基于读屏障的并发引用处理:ZGC使用了读屏障技术来追踪对象引用的变化。通过读屏障,ZGC可以在并发引用处理期间捕获到引用的变化,确保垃圾回收器能够正确地处理对象引用。

  7. 可预测的停顿时间:尽管ZGC旨在降低停顿时间,但它也提供了可配置的停顿时间目标。开发者可以根据应用程序的需求,在低延迟和吞吐量之间进行权衡,并设置适当的停顿时间目标。

  8. 兼容现有应用程序:ZGC是为了与现有的Java应用程序兼容而设计的。它可以与现有的Java应用程序和工具链无缝集成,而无需进行大规模的代码更改。

  9. 并发引用处理:ZGC使用并发引用处理技术,可以在垃圾回收期间并发地处理对象引用。这意味着应用程序可以在垃圾回收过程中继续执行,减少了停顿时间的影响。

  10. 空间压缩:ZGC还提供了一种空间压缩的机制,可以在需要时对堆内存进行压缩,从而减少内存的占用。这有助于提高内存利用率和整体性能。

  11. 透明性:ZGC的设计目标之一是尽可能减少对应用程序的干扰。它提供了透明的垃圾回收过程,应用程序开发者无需关注垃圾回收的具体细节,可以专注于应用程序的开发和优化。

  12. 自适应调整:ZGC可以根据应用程序的运行情况自动调整垃圾回收的策略和参数。它能够监控应用程序的行为,并根据需要进行动态调整,以提供最佳的性能和响应性。


7. 升级的JavaFX


JavaFX是Java平台上的一个用户界面(UI)工具包,用于创建富客户端应用程序。JavaFX在Java 8中首次引入,并在后续版本中得到改进和增强。尽管JavaFX在Java 8中已经具备了许多功能,但在Java 11及以后的版本中进行了一些重要的升级。

以下是JavaFX在升级过程中的一些改进:

  1. 模块化:JavaFX在Java 11中成为了一个独立的模块,称为javafx。这意味着它可以作为一个单独的模块进行管理和依赖,而不需要将整个JavaFX库打包到应用程序中。这为模块化开发提供了便利,同时也减小了应用程序的体积。

  2. 移除JavaFX Scene Builder:JavaFX Scene Builder是一个可视化布局工具,用于设计JavaFX应用程序的用户界面。在Java 8中,Scene Builder是与JavaFX捆绑在一起的,但从Java 11开始,它被移除了。开发者可以选择使用其他第三方工具(如SceneBuilder、GlueGen-Scene-Builder等)或手动编写UI布局代码。

  3. 改进的性能和稳定性:JavaFX在升级过程中进行了性能和稳定性方面的改进。这包括对渲染引擎的优化,提高了应用程序的响应速度和流畅性,并修复了一些已知的问题和错误。这些改进使得JavaFX应用程序运行得更加稳定和快速。

  4. 新的功能和组件:JavaFX在升级过程中引入了一些新的功能和组件,以增强应用程序的功能和用户体验。例如,JavaFX 11引入了WebView组件,用于在应用程序中显示Web内容。JavaFX 14引入了多个新的控件和布局选项,如SpinnerDatePickerAccordion等。这些新组件和功能使得开发者可以创建更加丰富和互动的用户界面。

  5. 支持更多平台:JavaFX在升级过程中增加了对更多平台的支持。除了Windows、Linux和Mac OS X之外,JavaFX还可以在其他操作系统上运行,如Android和iOS。这使得开发者可以使用JavaFX构建跨平台的应用程序,从而覆盖更广泛的用户群体。

这些是JavaFX在升级过程中的一些改进和增强。通过这些改进,JavaFX提供了更好的开发体验和功能,使开发者能够创建出更强大、更具吸引力的Java应用程序。


8. 移除的模块

我之前提到的JavaFX在Java 11中成为了一个独立的模块,称为javafx。在这个过程中,并没有移除任何JavaFX的核心模块。然而,JavaFX Scene Builder在Java 11中被移除了,它是一个可视化布局工具,用于设计JavaFX应用程序的用户界面。从Java 11开始,开发者需要使用其他第三方工具或手动编写UI布局代码来代替JavaFX Scene Builder。

9. 改进的Lambda表达式

实际上,在JDK 11中,并没有直接对Lambda表达式的语法或功能进行改进。Lambda表达式的语法和用法在JDK 8中已经得到了定义,并没有在后续的JDK版本中做出重大变化。

JDK 8引入了Lambda表达式作为函数式编程的一部分,它提供了一种简洁的方式来定义函数式接口的实现。Lambda表达式的语法如下所示:

(parameter_list) -> { lambda_body }

尽管JDK 11没有直接对Lambda表达式进行改进,但JDK 11引入了其他功能和改进,可以与Lambda表达式一起使用,以提高代码的可读性、性能和开发者的生产效率。例如:

  1. 局部变量类型推断(var关键字):JDK 11引入了var关键字,它可以用于声明局部变量的类型推断。这可以使Lambda表达式的参数类型更加简洁,例如:

    (var x, var y) -> x + y
    
  2. 新的标准库API:JDK 11引入了一些新的标准库API,如Optional的增强和String类的新方法。这些API可以与Lambda表达式结合使用,提供更好的功能和更简洁的代码编写方式。

尽管JDK 11没有直接改进Lambda表达式的语法或功能,但它提供了其他功能和改进,可以与Lambda表达式结合使用,以提高代码的质量和开发者的生产效率。

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

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

相关文章

揭开 Vue 3 中大量使用 ref 的隐藏危机

在 Vue 3 中&#xff0c;ref 是用来创建响应式的引用&#xff0c;它能够追踪和管理单一的变量或对象。当代码中大量使用 ref 时&#xff0c;虽然可以实现对各个状态或数据的精细控制&#xff0c;但也会带来一些问题和潜在影响。 1. 大量使用 ref 带来的问题 1、代码冗长与维护…

超强提分神器:大模型+RAG!新SOTA性能提升50%+,实现计算资源动态分配

现在的大模型因为“幻觉”问题&#xff0c;已经离不开“外挂”检索增强生成RAG了&#xff0c;而且很多大模型应用几乎完全基于RAG构建&#xff0c;可以说决定了大模型生成的天花板。 这是因为RAG可以将外部数据检索集成到生成过程中&#xff0c;不仅确保了大模型生成的内容具有…

微服务保护详细笔记(一):雪崩问题--Sentinel

目录 1.雪崩问题 1.1.雪崩问题产生原因&#xff1a; 1.2.雪崩问题解决方案 1.2.1.请求限流 1.1.2.线程隔离 1.1.3.服务熔断 1.3.微服务保护技术对比 1.4.Sentinel 1.4.1.介绍与安装 1.4.2.微服务整合 1.雪崩问题 1.1.雪崩问题产生原因&#xff1a; 比如查询购物车的…

【省时省力】告别 Node.js 安装配置的繁琐!国内镜像源加速,版本切换轻松搞定

前言 最近电脑开发环境又意外出现了异常,每次更新系统都是冒着很大的风险,这次最直接的影响就是一些基于nodejs的前端项目. 不同项目的版本环境要求不一致,最新的nodejs并不总是满足项目要求,因此为了重新部署自己开发的以及别人开发的项目,需要根据项目随时切换到相应的版本.…

git使用“保姆级”教程2——初始化及工作机制解释

1、设置用户签名 解释&#xff1a; 签名的作用就是用来&#xff1a;标识用户&#xff0c;以区分不同的开发人员简单来说&#xff1a;用来标识"你是谁"&#xff0c;在提交代码时&#xff0c;会显示提交代码的是谁&#xff0c;把设置的信息一起提交上去 设置&#xff…

sqoop的安装与简单使用

文章目录 一、安装1、上传&#xff0c;解压&#xff0c;重命名2、修改环境变量3、修改配置文件4、上传驱动包5、拷贝jar包 二、import命令1、将mysql的数据导入到hdfs上2、将mysql的数据导入到hive上3、增量导入数据 三、export命令1、从hdfs导出到mysql中2、从hive导出到mysql…

【JPCS出版】第二届应用统计、建模与先进算法国际学术会议(ASMA2024,9月27日-29)

第二届应用统计、建模与先进算法国际学术会议 2024 2nd International Conference on Applied Statistics, Modeling and Advanced Algorithms&#xff08;ASMA2024&#xff09; 会议官方 会议官网&#xff1a;www.icasma.org 2024 2nd International Conference on Applied …

第四届计算机、信息工程与电子材料国际学术会议 (CTIEEM 2024)

目录 重要信息 大会简介 出版信息 大会组委 会议征稿主题 会议议程 参会须知 重要信息 大会时间&#xff1a;2024年11月15-17日 大会地点&#xff1a;中国-郑州 大会官网&#xff1a;www.ctieem.org 收录检索&#xff1a;EI Compendex&#xff0c;Scopus 大会简介 随着信…

XXL-JOB 漏洞大全

一、前言 在当今的数字化时代&#xff0c;任务调度平台对于企业级应用来说至关重要。它们负责自动化和协调各种时间敏感或周期性的任务&#xff0c;确保业务流程的顺畅运行。XXL-JOB作为一款流行的分布式任务调度平台&#xff0c;因其强大的功能和易用性&#xff0c;被广泛部署…

【4.3】图搜索算法-DFS和BFS解被围绕的区域

一、题目 给定一个二维的矩阵&#xff0c;包含 X 和 O &#xff08; 字母 O &#xff09;。 找到所有被 X 围绕的区域&#xff0c;并将这些区域里所有的 O 用 X 填充。 示例 : X X X X X O O X X X O X X O X X 运行你的函数后&#xff0c;矩阵变为…

uniapp H5 打开地图 并选中标记点

uniapp H5 打开地图 并选中标记点 先上代码 //打开地图 显示景区位置openMap() {// 支付宝// #ifdef MP-ALIPAYmy.openLocation({longitude: Number(this.detailObj.longitude), // 经度latitude: Number(this.detailObj.latitude), // 纬度name: this.detailObj.scenicName, …

C++速通LeetCode中等第10题-轮转数组(四种方法)

方法一&#xff1a;巧用deque双向队列容器 class Solution { public:void rotate(vector<int>& nums, int k) {deque<int> q;int tmp;if(nums.size() > 1){for(auto num:nums) q.push_back(num);for(int i 0;i < k;i){tmp q.back();q.pop_back();q.pu…

dgl库安装

此篇文章继续上一篇pytorch已经安装成功的情况 &#xff08;python3.9&#xff0c;pytorch2.2.2&#xff0c;cuda11.8&#xff09; 上一篇pytorch安装教学链接 选择与之匹配的版本 输入下方代码进行测试 import dgl.data dataset dgl.data.CoraGraphDataset() print(‘Numb…

24 小时不关机的挂机云电脑,还能这么玩?

云电脑技术为我们提供了无限可能。特别是对于游戏爱好者&#xff0c;挂机云电脑不仅解决了传统电脑的局限性&#xff0c;还带来了更为便利的游戏体验。除此之外云电脑还有什么其他玩法呢&#xff1f; 01 挂机云电脑的优势 首先要知道&#xff0c;什么是挂机云电脑&#xff1f…

局域网变压器市场价值

2024 年全球局域网变压器市场价值为 3.056 亿美元&#xff0c;预计到 2030 年将达到 4.426 亿美元&#xff0c;2024-2030 年的复合年增长率为 5.4%。 局域网变压器市场包括用于改变电信号电压或格式的产品&#xff0c;以改善和简化局域网 (LAN) 上的数据传输。这些变压器对于保…

【JavaScript】数据结构之链表(双指针、滑动窗口)

什么是链表&#xff1f; 多个元素存储的列表链表中的元素在内存中不是顺序存储的&#xff0c;而是通过“next”指针联系在一起的&#xff0c;这个“next”可以自定义。JS中的原型链原理就是链表结构&#xff0c;是通过__proto__指针联系在一起的。 双指针形式 对撞指针&am…

分布式事务一致性:本地消息表设计与实践

概念 本地消息表是一种常见的解决分布式事务问题的方法。其核心思想是将分布式事务拆分成本地事务来处理&#xff0c;通过消息队列来保证各个本地事务的最终一致性。 实现步骤 创建本地消息表&#xff1a;在数据库中创建一个本地消息表&#xff0c;用于存储待发送的消息以及消…

【图像检索】基于灰度共生矩的纹理图像检索,matlab实现

博主简介&#xff1a;matlab图像代码项目合作&#xff08;扣扣&#xff1a;3249726188&#xff09; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于灰度共生矩的纹理图像检索&#xff0c;用matlab实现。 一、案例背景和算法介绍 …

从“群聊”到“一单到底”,天润融通工单系统助力品牌服务升级

“您好&#xff0c;我在xx店买的酸奶出现了质量问题&#xff0c;怎么处理&#xff1f;” “你们xx门店的服务态度怎么那么差啊&#xff0c;我要投诉&#xff01;” “您好&#xff0c;xx店的微波炉总是坏的&#xff0c;店员根本不管&#xff01;” 这些耳熟能详的抱怨&#…

【qt】一个WPS项目了解qt界面设计的基本套路

项目功能演示: 放心食用!最后有完整代码. 超级详细,期待您的一个点赞❥(^_-) 一览全局: WPS项目目录 一.创建项目二.导入资源三.ui设计四.字号选择框初始化五.滚动条初始化六.添加自定义文本类七.初始化action状态八.新建文档九.打开文件十.保存与另存为十一.打印/打印预览十…