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

效率翻倍新技能:JDK8后的新特性

以下是 JDK 8 至 JDK 21 中最具实用性的新特性整理,涵盖语言特性、工具类增强、性能优化等方向,附代码示例和注释说明:

一、JDK 8(2014):函数式编程与现代化API

JDK 8 是 Java 发展的里程碑版本,引入了大量颠覆性特性,至今仍是企业级项目的基础。

  1. Lambda 表达式

简化匿名内部类,支持函数式编程,使代码更简洁。
示例:用 Lambda 实现 Runnable 和 Comparator
// 传统匿名内部类
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("传统方式");
}
}).start();

// Lambda 表达式(简化版)
new Thread(() -> System.out.println("Lambda 方式")).start();

// 传统 Comparator 排序
List list = Arrays.asList("banana", "apple", "cherry");
Collections.sort(list, new Comparator() {
@Override
public int compare(String a, String b) {
return a.compareTo(b);
}
});

// Lambda 排序(更简洁)
Collections.sort(list, (a, b) -> a.compareTo(b));
// 或直接使用方法引用:list.sort(String::compareTo);

  1. Stream API

提供声明式集合操作(过滤、映射、聚合等),支持并行计算。
示例:用 Stream 处理集合
List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);

// 过滤偶数,平方后求和
int sum = numbers.stream()
.filter(n -> n % 2 == 0) // 过滤偶数
.mapToInt(n -> n * n) // 平方
.sum(); // 求和

System.out.println(sum); // 输出:2² + 4² + 6² = 4 + 16 + 36 = 56

  1. Optional 类

解决空指针异常(NPE),显式处理可能为空的值。
示例:避免空指针
public class OptionalDemo {
public static String getUsername(User user) {
// 如果 user/user.getName() 为 null,返回 "未知用户"
return Optional.ofNullable(user) // 包装可能为空的对象
.map(User::getName) // 提取 name(若 user 非空)
.orElse("未知用户"); // 最终默认值
}

public static void main(String[] args) {User user = new User("张三");User nullUser = null;System.out.println(getUsername(user));   // 输出:张三System.out.println(getUsername(nullUser));// 输出:未知用户
}static class User {private String name;public User(String name) { this.name = name; }public String getName() { return name; }
}

}

  1. 新的日期时间 API(java.time)

替代老旧的 Date 和 SimpleDateFormat,线程安全且设计更合理。
示例:日期时间操作
// 获取当前日期(不含时间)
LocalDate today = LocalDate.now();
System.out.println("今天:" + today); // 输出:2025-09-17

// 解析日期字符串
LocalDate birthday = LocalDate.parse("1990-05-20");
System.out.println("生日:" + birthday); // 输出:1990-05-20

// 计算两个日期的间隔(天数)
long daysBetween = ChronoUnit.DAYS.between(birthday, today);
System.out.println("距离生日已过:" + daysBetween + "天");

// 时间操作(带时区)
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
System.out.println("上海时间:" + zonedDateTime); // 输出:2025-09-17T16:45:00+08:00[Asia/Shanghai]

二、JDK 9(2017):模块化与基础增强

JDK 9 引入了模块化系统(JPMS),并对核心类库做了多项实用改进。

  1. 模块化系统(JPMS)

通过 module-info.java 明确模块依赖,提升代码封装性和安全性。
示例:模块定义与依赖
// 模块描述文件:module-info.java
module com.example.app {
requires java.base; // 依赖基础模块(所有模块隐式依赖)
requires com.example.utils; // 显式依赖自定义工具模块
exports com.example.app.api; // 导出包供其他模块使用
}

// 模块内代码(com/example/app/api/Calculator.java)
package com.example.app.api;
public class Calculator {
public int add(int a, int b) { return a + b; }
}

  1. 不可变集合工厂方法

List、Set、Map 新增静态工厂方法(如 of()、ofEntries()),快速创建不可变集合。
示例:创建不可变集合
// 不可变 List(线程安全,无法添加/删除元素)
List immutableList = List.of("a", "b", "c");
// immutableList.add("d"); // 抛出 UnsupportedOperationException

// 不可变 Set(无重复元素)
Set immutableSet = Set.of(1, 2, 3);

// 不可变 Map(键值对固定)
Map<String, Integer> immutableMap = Map.of("one", 1, "two", 2);
// 若需多个键值对,使用 Map.ofEntries()
Map<String, Integer> map = Map.ofEntries(
entry("three", 3),
entry("four", 4)
);

  1. Stream 增强

新增 takeWhile()、dropWhile()(按条件截断流)和 ofNullable()(处理空值)。
示例:Stream 截断与空值处理
List numbers = Arrays.asList(2, 4, 6, 7, 8, 10);

// takeWhile:遇到第一个不满足条件的元素后停止处理(顺序流)
numbers.stream()
.takeWhile(n -> n % 2 == 0) // 取前三个偶数(2,4,6)
.forEach(System.out::print); // 输出:246

// dropWhile:跳过前几个满足条件的元素,直到遇到不满足的(顺序流)
numbers.stream()
.dropWhile(n -> n < 7) // 跳过 2,4,6(都小于7),从7开始
.forEach(System.out::print); // 输出:7810

// ofNullable:避免空流
Stream stream = Stream.ofNullable(null);
stream.findFirst().ifPresent(System.out::println); // 无输出(流为空)

三、JDK 10(2018):局部变量类型推断

JDK 10 引入 var 关键字,简化局部变量声明(仅适用于局部变量,不可用于方法参数或字段)。

var 局部变量类型推断

编译器自动推断变量类型,减少冗余代码。
示例:用 var 简化代码
public class VarDemo {
public static void main(String[] args) {
// 传统声明
String name = "张三";
List numbers = new ArrayList<>();

    // 使用 var(类型由编译器推断)var nameInferred = "张三";       // 推断为 Stringvar numbersInferred = new ArrayList<>(); // 推断为 ArrayList<Object>(需注意类型安全)var list = List.of(1, 2, 3);     // 推断为 List<Integer>// 注意:var 不能用于方法参数或返回值类型// public var method(var param) {} // 编译错误
}

}

四、JDK 11(2018):HTTP Client 与字符串增强

JDK 11 是长期支持(LTS)版本,新增 HTTP/2 客户端、字符串工具方法等。

  1. HTTP Client(正式版)

替代传统的 HttpURLConnection,支持 HTTP/1.1 和 HTTP/2,异步非阻塞。
示例:发送 HTTP GET 请求
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;

public class HttpClientDemo {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();

    // 同步请求HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://httpbin.org/get")).build();HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());System.out.println("状态码:" + response.statusCode()); // 输出:200System.out.println("响应体:" + response.body().substring(0, 50) + "..."); // 输出部分内容// 异步请求(返回 CompletableFuture)CompletableFuture<HttpResponse<String>> asyncResponse = client.sendAsync(request,HttpResponse.BodyHandlers.ofString());asyncResponse.thenAccept(res -> System.out.println("异步响应状态码:" + res.statusCode()));
}

}

  1. 字符串新增方法

String 类新增 isBlank()、strip()(去除首尾空白)、repeat() 等方法。
示例:字符串操作
String str1 = " \t hello \n ";
String str2 = "";
String str3 = "Java";

System.out.println(str1.isBlank()); // 输出:false(包含非空白字符)
System.out.println(str2.isBlank()); // 输出:true(空字符串或全空白)

System.out.println(str1.strip()); // 输出:"hello"(去除首尾空白)
System.out.println(str1.trim()); // 输出:"hello"(传统方法,不处理 \t/\n)

System.out.println(str3.repeat(3)); // 输出:"JavaJavaJava"

五、JDK 12(2019):Switch 表达式(预览)

JDK 12 引入更简洁的 Switch 表达式(预览版,JDK 14 正式发布),支持箭头语法和 yield 返回值。

Switch 表达式(JDK 14 正式)

用 -> 替代 :,支持直接返回值,避免 break 冗余。
示例:Switch 表达式
int day = 3;
String dayName;

// 传统 Switch(语句,无返回值)
switch (day) {
case 1:
dayName = "周一";
break;
case 2:
dayName = "周二";
break;
case 3:
dayName = "周三"; // 输出:周三
break;
default:
dayName = "未知";
}

// Switch 表达式(JDK 14+,可直接返回值)
dayName = switch (day) {
case 1 -> "周一";
case 2 -> "周二";
case 3 -> "周三"; // 自动返回 "周三"
default -> "未知";
};

// 复杂逻辑用 yield(需用大括号)
int numLetters = switch (dayName) {
case "周一", "周二", "周三", "周四", "周五" -> 2; // 多个值合并
case "周六", "周日" -> {
System.out.println("周末");
yield 3; // 用 yield 返回值
}
default -> throw new IllegalStateException("无效星期");
};
System.out.println("字母数:" + numLetters); // 输出:2(周三对应2)

六、JDK 16(2021):Record 与 Pattern Matching(正式)

JDK 16 是 LTS 版本,正式发布 Record(不可变数据载体)和改进的 instanceof 模式匹配。

  1. Record(正式版)

简化不可变数据类的定义(自动生成 equals()、hashCode()、toString() 等方法)。
示例:用 Record 定义数据类
// 传统方式定义不可变类
class TraditionalUser {
private final String name;
private final int age;

public TraditionalUser(String name, int age) {this.name = name;this.age = age;
}// 需手动实现 equals、hashCode、toString...

}

// Record 方式(一行代码搞定)
record RecordUser(String name, int age) {}

public class RecordDemo {
public static void main(String[] args) {
RecordUser user = new RecordUser("张三", 25);
System.out.println(user); // 输出:RecordUser[name=张三, age=25](自动生成 toString)
System.out.println(user.name()); // 输出:张三(自动生成访问器 name())
System.out.println(user.age()); // 输出:25
}
}

  1. Pattern Matching for instanceof(正式版)

简化 instanceof 类型检查和强制转换的代码。
示例:模式匹配 instanceof
Object obj = "Hello JDK 16";

// 传统方式
if (obj instanceof String) {
String str = (String) obj; // 需显式强制转换
System.out.println(str.length()); // 输出:11
}

// 模式匹配(JDK 16+)
if (obj instanceof String str) { // 自动转换为 String 类型并赋值给 str
System.out.println(str.length()); // 输出:11(无需显式转换)
}

七、JDK 17(2021):密封类与虚拟线程(孵化)

JDK 17 是 LTS 版本,正式发布密封类(Sealed Classes),并孵化虚拟线程(Virtual Threads)。

  1. 密封类(正式版)

限制类的继承范围(仅允许指定子类继承或实现),增强类型安全性。
示例:密封类与允许的子类
// 密封接口,仅允许 Circle 和 Rectangle 实现
public sealed interface Shape permits Circle, Rectangle {}

// 子类必须声明为 final、sealed 或 non-sealed
final class Circle implements Shape {
private final double radius;
public Circle(double r) { this.radius = r; }
public double area() { return Math.PI * radius * radius; }
}

sealed class Rectangle implements Shape permits Square {} // 子类可进一步限制
final class Square extends Rectangle {
private final double side;
public Square(double s) { this.side = s; }
public double area() { return side * side; }
}

// 模式匹配中可安全使用密封类的子类型
public static double calculateArea(Shape shape) {
return switch (shape) {
case Circle c -> c.area(); // 仅允许 Circle
case Rectangle r -> r.area(); // 仅允许 Rectangle(或其允许的子类 Square)
// 无需 default,因为 Shape 的子类已被完全限制
};
}

public static void main(String[] args) {
Shape circle = new Circle(5);
Shape square = new Square(4);
System.out.println(calculateArea(circle)); // 输出:78.5398...
System.out.println(calculateArea(square)); // 输出:16.0
}

  1. 虚拟线程(孵化,JDK 21 正式)

轻量级线程(用户态线程),大幅降低高并发场景的资源消耗(如百万级连接)。
示例:虚拟线程执行任务
public class VirtualThreadDemo {
public static void main(String[] args) {
// 创建 10 个虚拟线程
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
for (int i = 0; i < 10; i++) {
int taskId = i;
executor.submit(() -> {
System.out.println("任务 " + taskId + " 运行在:" + Thread.currentThread());
// 模拟耗时操作
Thread.sleep(Duration.ofSeconds(1));
return taskId;
});
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
// 输出类似:
// 任务 0 运行在:VirtualThread[#1]/runnable@123456
// 任务 1 运行在:VirtualThread[#2]/runnable@7890ab
// ...(每个任务几乎同时启动)

八、JDK 21(2023):虚拟线程正式版与字符串模板

JDK 21 是 LTS 版本,虚拟线程正式发布,并新增字符串模板(String Templates)。

  1. 虚拟线程(正式版)

如前所述,虚拟线程是 JDK 21 的核心特性之一,适用于高并发 I/O 密集型场景(如 Web 服务器、数据库连接)。

  1. 字符串模板(正式版)

简化字符串拼接,支持表达式嵌入和安全转义(类似 Python 的 f-string)。
示例:字符串模板
// 定义模板(使用 StringTemplate)
String name = "张三";
int age = 25;
String message = STR."""
用户信息:
姓名:{name}
年龄:{age}
""";

System.out.println(message);
// 输出:
// 用户信息:
// 姓名:张三
// 年龄:25

  1. 外国函数接口(FFI,正式版)

通过 jdk.incubator.foreign 包安全调用本地代码(如 C/C++),替代 JNI(Java Native Interface)。
示例:调用 C 的 strlen 函数
import jdk.incubator.foreign.;
import static jdk.incubator.foreign.CLinker.
;

public class FFIExample {
public static void main(String[] args) {
try (Arena arena = Arena.ofConfined()) {
// 在本地内存中分配字符串(以 null 结尾)
MemorySegment str = arena.allocateUtf8String("Hello FFI");

        // 获取 C 的 strlen 函数指针MemorySegment strlenFunc = CLinker.getInstance().lookup("strlen").get();// 调用 strlen(参数:C指针)long length = (long) CLinker.invokeExact(strlenFunc, FunctionDescriptor.of(CLong, CPointer), str.address());System.out.println("字符串长度:" + length); // 输出:10("Hello FFI" 长度为10)}
}

}

总结

JDK 8 后的版本持续聚焦开发效率(Lambda、Stream、Record)、性能优化(向量API、ZGC)、现代化API(日期时间、HTTP Client)和并发模型革新(虚拟线程)。实际项目中,建议优先使用 LTS 版本(如 JDK 8、11、17、21),并根据需求选择特性(如用 Record 简化数据类,用虚拟线程处理高并发)。

相关文章:

效率翻倍新技能:JDK8后的新特性

以下是 JDK 8 至 JDK 21 中最具实用性的新特性整理,涵盖语言特性、工具类增强、性能优化等方向,附代码示例和注释说明: 一、JDK 8(2014):函数式编程与现代化API JDK 8 是 Java 发展的里程碑版本,引入了大量颠覆性特性,至今仍是企业级项目的基础。Lambda 表达式简化匿名…...

实用指南:《URP管线中后处理效果的创新应用与优化实践》

实用指南:《URP管线中后处理效果的创新应用与优化实践》pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", mo…...

百日筑基

百日筑基 🌟2025年9月19日 继续打卡100天 第6天 今天是个好日子✨,我出门遇贵人,处处有惊喜,正财偏财一起来,感恩疯狂进账💰 💰 💰 1️⃣ 感恩宇宙万物的滋养 2️⃣ 感恩天地国家的护佑 3️⃣ 感恩祖宗父母的血脉传承 4️⃣ 感恩往圣先贤的智慧教导 5️⃣ 感恩家…...

顶尖科技人才超50万城市:印度4个,中国3个,美国0个

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087 “9月发布的‘世界百强创新集群排名’中,以深圳为核心的‘深圳-香港-广州’集群结束‘五年老二’地位,超越日本‘东京-横…...

院士增选有效候选人公示材料都有什么内容?

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 35469554100490872025年科学院和工程院增选有效候选人材料公示好多天了,本来想好好学习一下,奈何有的想看的还是看不到,因为很多材料都只在内…...

GPU微架构与多线程架构深入解析

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087 摘要本文深入探讨GPU微架构的核心概念,重点分析多线程架构、存储体冲突、流水线设计以及全局内存合并等关键技术。内容涵盖G…...

TechInsights 拆解:蔚来“亚当(Adam)”超级计算机

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087 添加图片注释,不超过 140 字(可选)蔚来亚当超级计算机是蔚来电动汽车汽车功能的中心。来源:TechInsights汽车制造商正经历…...

拼接

叠甲:作者本人没有 npy,故事纯虚构。谢谢你的陪伴呢!你真的是一个出色的人!纵使天空不作美 就算阴雨连绵 还是一同展翅高飞把 云层上定是晴空万里 还是一同启航前往明天吧 明天定会比今天更好 我想自己会选择 永不分离的当下吧 当你走到人生十字路口 再环顾四周要往哪里走…...

用户只需要知道「怎么办」,不需要知道「为什么炸了」

大家好,我是晓凡。 写在前面 一到月初或者月末(某些业务操作大规模爆发的时候),手机狂震,生产告警狂轰滥炸:xxx接口超时、用户中心 CPU 飙到 98%…… 运维在群里疯狂 @ 你,你却只能回一句“我本地是好的”。 别问,问就是接口设计欠下的技术债。 下面,晓凡总结成 18 条…...

2025数学院士增选背后的争议:海外光环与本土贡献的考量

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087自从2025年中国科学院数学物理学部院士增选有效候选人名单公布以来,学术圈内外的讨论持续升温。一股不同寻常的舆论浪潮在网络…...

完整教程:建筑物裂缝、钢筋裸漏、建筑物墙面脱落图像数据集

完整教程:建筑物裂缝、钢筋裸漏、建筑物墙面脱落图像数据集pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New",…...

深入剖析布谷网剧短剧app系统软件源码之技术

随着短视频和网剧市场的迅猛发展,企业和内容创作者对专业、高效的短剧平台需求日益增长。山东布谷鸟网络科技有限公司凭借丰富的软件开发经验,推出了布谷短剧app源码、网剧系统源码及短剧软件搭建服务,致力于为客户打造一站式数字内容解决方案。 一、布谷短剧app源码简介 布…...

在AI技术快速实现功能的时代,挖掘电子书阅读器新需求成为关键突破点

随着AI技术让功能实现变得前所未有的简单,真正的挑战转向了如何发现和满足用户未被满足的需求。本文通过分析某知名跨平台电子书阅读器的用户反馈,揭示了阅读体验优化、格式兼容性、安全增强等关键需求领域。内容描述 该项目是一个极简主义的跨平台电子书阅读器,基于Tauri框…...

PHP 如何利用 Opcache 来实现保护源码

PHP 如何利用 Opcache 来实现保护源码感兴趣得可以试试看!!!要求不用 IonCube(或类似的)。不知道这是啥的话,就是加密 PHP 代码但还能运行的工具。问题是太贵了。😅 性能要好,PHP 原生支持。原文链接 PHP 如何利用 Opcache 来实现保护源码 后来想到,PHP 有个"op…...

给RAG打分:小白也能懂的AI系统评测全攻略

RAG系统评估听起来高深,其实跟我们生活中的尝鲜评测没啥两样!本文用轻松幽默的方式,带你从检索质量、生成质量到用户体验,全方位掌握如何科学评测RAG系统,避免踩坑,让你的AI应用又快又准。#RAG技术 #AI评估 #信息检索 #大模型 #数据科学你是不是经常被这些问题困扰: &qu…...

P8114 [Cnoi2021] 六边形战士

传送 非常好玩的题! 首先你大概率看过一些“无字证明”,其中很经典的是这个: 证明:用若干个边长为 \(1\),顶角为 \(60\) 度的菱形拼成一个边长为 \(n\) 的正六边形,三个方向的菱形个数一定相等。这是一个经典的无字证明,虽然前置的说明要费很大功夫,不过你不关心这个。…...

【GitHub每日速递 250918】开发者必藏!336k 星标项目告诉你:前端 / 后端 / AI 岗该怎么学才高效

原文:https://mp.weixin.qq.com/s/Oo5T6g68BNe9QUTL4bHrIg AI外语学习神器Enjoy上线!网页版、桌面版全攻略来袭 everyone-can-use-english 是一个帮助用户学习和使用英语的工具类应用。简单讲,它通过技术手段降低英语使用门槛,让每个人都能轻松练习和掌握英语。适用人群:英…...

css-4

定位布局...

【操作系统】从实模式到保护模式,

实模式...

Flutter CSV导入导出:大数据处理与用户体验优化

Flutter CSV导入导出:大数据处理与用户体验优化本文基于BeeCount(蜜蜂记账)项目的实际开发经验,深入探讨如何在Flutter应用中实现高效、用户友好的CSV数据导入导出功能。项目背景 BeeCount(蜜蜂记账)是一款开源、简洁、无广告的个人记账应用。所有财务数据完全由用户掌控,支…...

读人形机器人15未来城市

读人形机器人15未来城市1. 将机器人技术融入城市规划 1.1. 新一轮工业革命的曙光要求我们重新审视城市的设计与功能 1.2. 将机器人技术融入城市规划已不再是未来主义的概念,而是一种现实需要 1.3. 将机器人技术融入城市规划,能够将城市转变为充满活力的智能生态系统1.3.1. 通…...

解锁智能检索新境界:CriticGPT 赋能检索模型洞察人类偏好

随着大型语言模型技术的快速发展,检索增强生成 (RAG) 系统已成为连接海量知识与精准回答的关键桥梁。然而,传统 RAG 模型在理解和满足用户真实需求方面仍存在明显局限。2024 年 6 月 OpenAI 发布的 CriticGPT 技术,为突破这一瓶颈提供了全新思路。本文将深入剖析 Reward-RAG…...

NET 中 Async/Await 的演进:从状态机到运行时优化的 Continuation

NET 中 Async/Await 的演进:从状态机到运行时优化的 Continuation C# 的 `async/await` 长期以来是编写简洁、非阻塞代码的基石,但其传统实现——每个异步方法生成一个独立状态机——在高性能场景(如递归或链式异步调用)中暴露出显著局限性。2025 年的 .NET 9 和 .NET 10 …...

最长公共子序列

题目描述 给你一个序列X和另一个序列Z,当Z中的所有元素都在X中存在,并且在X中的下标顺序是严格递增的,那么就把Z叫做X的子序列。 例如:Z=是序列X=的一个子序列,Z中的元素在X中的下标序列为<1,2,4,6>。 现给你两个序列X和Y,请问它们的最长公共子序列的长度是多少? …...

使用 Ansible 管理服务器集群

Inventory Ansible 使用 /etc/ansible/hosts 管理受控服务器列表: --- ungrouped:hosts:node-1:ansible_host: 192.168.1.1ansible_user: johnnode-2:ansible_host: 192.168.1.2ansible_user: janenode-3:ansible_host: 192.168.1.3ansible_user: frank关于 inventory 文件的字…...

1现在处于非常破防的阶段,不知道为什么会打成这个样子。 ABC 过得很快。看到 D1 的第一眼就会了,发现转移只需要随便优化一下就能通过 D2,不太想写。E 看上去挺可做,F 看上去是板子题。于是开始写 F,不知道这种代码不长、没有任何思维难度的题怎么能写那么长时间,根本原因…...

Codeforces Round 1051 (Div. 2)

A. All Lengths Subtraction 题意:一个排列,对于每个\(k \in [1, n]\),你都要选择一个长度为\(k\)的子数组使得它们都减一,求有没有方案使得最终所有数都是\(0\)。 考虑\(k\)从大到小,发现做\(n\)的时候\(1\)变成\(0\),此时如果\(1\)不在两端,则\(k = n - 1\)时必然再把…...

再不学就晚了!RDT LeRobot与RDKS100部署详解

作者:SkyXZ CSDN:SkyXZ~-CSDN博客 博客园:SkyXZ - 博客园 机械臂:LeRobot-SO101 数采机:MacBook-Pro Python3.10 开发机:Ubuntu 22.04, Cuda12.4,8 NVIDIA A100-SXM4-40GB 开发板:RDK OS 4.0.2 Based on Ubuntu 22.04, Python 3.10.12, OpenExplore 3.2.0 相…...

编译Unity4.3.1f1

参考: 编译 Unity 4.3.1 引擎_unity-source-4.3.1f1-CSDN博客 Unity 4.3.1f1编译调试 - 知乎 Unity source 4.3.1f1 源代码分析-腾讯游戏学堂 附: 早期版本下载(4.x之前的版本)...

【R课堂-电机专栏】为什么提高电机的电压时,转速会随之上升?

本文探讨的问题是 “为什么提高电机的电压时,转速会随之上升?”具体而言,就是当给电机绕组施加的电压升高(增大)时,为什么其转速会随之上升。这一现象看似理所当然,但其背后的原理却涉及诸多物理公式。这个问题对于深入了解电机原理非常关键,下面将为大家详细阐述。●问…...

抽象 CF

一道题在 CF 上有三倍经验,我有个细节假了: \(n \le 10^5\),84 个点的那道在 #64 寄了。 \(n \le 2 \times 10^5\),88 个点的那道在 #88 寄了。 \(n \le 5 \times 10^5\),111 个点的那道直接 A 了。...

单元测试之Mockito使用

测试中为什么需要Mock 在实际的测试中,被测试的对象并不都是可以通过简单的new操作符就可以创建出来的! 实际的业务代码中,一个业务类往往要依赖很多其他的类才能完成一个完整的业务方法,这些依赖包括第三方的rpc,db的查询等等,具体的拓扑如下图我们想测试ClassA,但是Cl…...

Jetson有Jtop,Linux有Htop,RDK也有Dtop!

作者:SkyXZ CSDN:SkyXZ~-CSDN博客 博客园:SkyXZ - 博客园 本项目基于btop开源项目进行二次开发,旨在为RDK平台提供更强大的系统监控工具。 Linux系统下有Htop可以作为系统监控,英伟达的Jetson也有第三方的Jtop,咱们RDK虽然也提供了hrut_somstatus来查看BPU的使用…...

《原子习惯》-读书笔记4

2025.09.17 Day4 1、 养成习惯的过程可以分为四个简单的步骤:提示、渴求、反应和奖励。2、你的头脑在不断分析你的内外部环境,寻找奖励所在的线索。因为线索是我们已然接近奖励的第一个迹象,它自然会导致人们滋生渴求。3、提示的作用是让你注意到奖励的存在。渴求是想要得到…...

Java学习第二天

数据类型 Java、c++是一种强类型语言要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用,安全性高,速度较慢 弱类型语言:安全性低,速度较快 Java数据类型分为两大类:基本类型、引用类型位:计算机内部数据存储的最小单位,11001100是一个八位二进制数 字节:是…...

Java学习第三天

顺序结构 package Scanner;import java.util.Scanner;public class Demo05 {public static void main(String[] args) {//我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并非输出执行结果Scanner scanner=new Scanner(System.…...

Java学习第四天

break continue break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句(break语句也在switch语句中使用) continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行…...

搜索百科(1):Lucene —— 打开现代搜索世界的第一扇门

大家好,我是 INFINI Labs 的石阳。 这是《搜索百科》专栏系列文章,每天 5 分钟,带你速览一款搜索相关的技术或产品,同时还会带你探索它们背后的技术原理、发展故事及上手体验等。 搜索技术看似专业,但它早已深度融入我们的日常生活。无论是电商搜索、知识检索,还是 AI 语…...

02020308 .NET Core核心基础组件08-结构化日志和集中日志服务

02020308 .NET Core核心基础组件08-结构化日志和集中日志服务...

zookeeper的配置

问题:1.1号和二号虚拟机可以成功启动三号报错 2025-09-17 17:57:46,219 [myid:] - INFO [main:QuorumPeerConfig@133] - Reading configuration from: /export/server/apache-zookeeper-3.5.6-bin/bin/../conf/zoo.cfg 2025-09-17 17:57:46,228 [myid:] - INFO [main:Quorum…...

02020307 .NET Core核心基础组件07-什么是Logging、NLog

02020307 .NET Core核心基础组件07-什么是Logging、NLog...

算法第一周博客

算法第一周博客任务一,搜索大公司内部编码规范,列出本学期编码需遵守的规范 1.程序块要采用缩进风格编写,缩进的空格数为4个,使得层次分明。 2.控制每行最大长度不超120个字符,超过时换行并适当缩进,并且一行通常一个语句。 3.命名标识符(包括变量,函数,结构体等)时,…...

nid修改dbid/dbname

Table of Contents1. 简述 2. 操作步骤说明 3. 操作命令1. 简述2. 操作步骤说明如果配置了DBconsole,需要删除DBconsole对象。之后完全关闭,再启动到mount状态。 nid 命令支持修改dbid 和 dbname两个值。具体操作见之后示例。 但是在操作之前,需要明确是只需要修改dbid 还是同…...

攻防世界-parallel-comparator-200 - xxx

下载后得到是一个c语言文件,用vs创建一个项目后复制代码发现无法打开<pthread.h>,去网上搜了一下发现windows平台配置有点麻烦 于是就去搜索了一下这个的作用,后面分析代码的时候再提。 先看main函数user_string就是用户需要输入一个长度为20的字符串,然后去看能够触…...

Manim实现脉冲闪烁特效

在数学可视化中,脉冲闪烁特效能像聚光灯一样引导观众注意力,突出关键公式、特殊点或重要结论。 本文将介绍如何一步步通过代码来实现这个特效,并通过参数精准控制视觉效果。 1. 实现原理 脉冲闪烁特效的核心是周期性改变发光体的半径和透明度,模拟能量波动的视觉效果。 这个…...

2025.9.17总结

今天主要内容就是在IDEA里编写代码,后端还是springboot,前端vue3,数据库用hbase。 其他的和之前编写的web项目流程都一样。 就是数据库的使用,和数据库的读写,操作不太一样。 还有hbase,创建表,表结构,读写和常规的mysql不一样。在ai帮助下完成创建表,表结构,读写数据…...

office2024安装包下载安装教程(2025最新整理)office2024专业增强版下载安装教程

在当今数字化办公的时代,一款功能强大且稳定的办公软件是提高工作效率的关键。Office 2024 专业增强版作为微软办公软件家族中的佼佼者,集成了多种实用的办公组件,能够满足各类用户在文档处理、数据管理、演示汇报等多方面的需求。本文将为大家详细介绍 Office 2024 专业增强…...

2025竞赛学习资料

2025竞赛学习资料链接1、竞赛资源链接集 2、CSP-J/S资源链接1 3、C++竞赛综合 4、2025年3月GESP认证C++5级判断题真题详解 5、GESP考试集...

C++ 模板参数推导问题小记(模板类的模板构造函数)

本篇主要是为了记录在编写一个模板类的模板构造函数中遇到的初始化问题,以及针对这个问题展开的相关知识整理,文章就以引发这个问题的代码为标题了。 问题代码 在编写一个代表空间点的模板类 point 时,我打算为它添加一个模板构造函数:代码template<typename T, std::si…...

axios两种写法

// 登录 export const login = (data) => {return request.post(/login, data) }// 权限管理列表 get请求需要写在url上面 export const authAdmin = (params) => {return request.get(/auth/admin, { params }) } ///////////////////////////////////////////////////…...