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

Java8新特性Optional,Function,Supplier,Consumer

Java8新特性

1.Optional

首先,Optional 它不是一个函数式接口,设计它的目的是为了防止空指针异常(NullPointerException),要知道在 Java 编程中, 空指针异常可是臭名昭著的。

让我们来快速了解一下 Optional 要如何使用!你可以将 Optional 看做是包装对象(可能是 null, 也有可能非 null)的容器。当你定义了 一个方法,这个方法返回的对象可能是空,也有可能非空的时候,你就可以考虑用 Optional 来包装它,这也是在 Java 8 被推荐使用的做法。

Optional<String> optional = Optional.of("bam");optional.isPresent();           // true
optional.get();                 // "bam"
optional.orElse("fallback");    // "bam"optional.ifPresent((s) -> System.out.println(s.charAt(0)));     // "b"

Optional 经典实践

Optional 经典实践
上面对 Optional 类中的函数都作了简要说明,但是在实践中不是每一个方法都会经常被使用到。接下来提供一些经典场景的演示代码,如果在实践中还有其他常见的情况,欢迎大家进行补充。获取指定字段,返回非null结果
// 返回个人简介内容,没有则返回空字符串
String intro = Optional.ofNullable(person.getIntro()).orElse("");// 返回学生列表,没有则返回空列表// 3-优雅版
List<Student> students3 = Optional.ofNullable(data).map(Data::getStudents).orElse(Collections.emptyList());#获取指定字段,不存在时通过工具方法生成赋值或抛出异常
// 补充缺失的uid字段
String uid = Optional.ofNullable(data.getUid()).orElseGet(() -> UUID.randomUUID().toString());
// uuid不能存在则抛出异常
String uuid = Optional.ofNullable(data.getUid()).orElseThrow(Exception::new);#进行条件筛选
// 列表大小小于5时返回空列表
List<Student> list = Optional.ofNullable(data).map(Data::getStudents).filter(s -> s.size() > 5).orElse(Collections.emptyList());#map常用用法static class Outer {Nested nested = new Nested();public Nested getNested() {return nested;}public String getString(){return "12345";}}static class Nested {Inner inner = new Inner();public Inner getInner() {return inner;}}static class Inner {String foo = "boo";public String getFoo() {return foo;}}private static void test2() {Optional.of(new Outer()).map(Outer::getNested).map(Nested::getInner).map(Inner::getFoo).ifPresent(System.out::println);}

2.Function

Function 函数式接口的作用是,我们可以为其提供一个原料,他给生产一个最终的产品。通过它提供的默认方法,组合,链行处理(compose, andThen):

核心代码

// Java Function 接口的定义
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {Objects.requireNonNull(before);return (V v) -> apply(before.apply(v));
}default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {Objects.requireNonNull(after);return (T t) -> after.apply(apply(t));
}static <T> Function<T, T> identity() {return t -> t;
}

apply 方法的使用方式如下:

Function<Integer, Integer> add = p -> p + 10;
Integer result = add.apply(10);
// 这里会输出 20,因为这个函数定义的操作时把参数加上 10 后返回
System.out.println(result);

compose 方法的参数也是一个 Function 对象。在 A 这个 Function 上调用 compose 方法时传入 B 这个 Function 对象,然后得到一个新的 Function 对象 C。C 这个 Function 对象的实现逻辑是先带调用 B 的 apply 方法对参数进行操作,将得到的结果再作为参数传递给 A 这个 Function 对象的 apply 方法,然后返回执行后的结果。

addThen 方法也是类似的原理,只不过内部执行方法的顺序不一样而已。

Function<Integer, Integer> multiplyTen = a -> a * 10;
Function<Integer, Integer> addTen = a -> a + 10;
// 先增加 10,然后再乘 10,输出结果 110
Function<Integer, Integer> addTenThenMultiplyTen = multiplyTen.compose(addTen);
System.out.println(addTenThenMultiplyTen.apply(1));// 先乘 10,然后再加 10,输出结果 20
Function<Integer, Integer> multiplyTenAddTenThen = multiplyTen.andThen(addTen);
System.out.println(multiplyTenAddTenThen.apply(1));

Function 接口的实例

public class CheckUtils {private static final Function<String, String> lengthCheck = params -> {if (params.length() > 100) {throw new RuntimeException("Length exceed max limit.");}return params;};private static final Function<String, String> invalidCharacterCheck = str -> {if (!str.matches("^[a-f,A-F]$")) {throw new RuntimeException("Contains invalid character.");}return str;};/*** 这里的公共方法组合了该类中的基本校验逻辑构成一个复合的逻辑*/public static void checkStringLengthAndPhoneNumber(String string) {invalidCharacterCheck.compose(lengthCheck).apply(string);}
}

3.Supplier 生产者

SupplierFunction 不同,它不接受入参,直接为我们生产一个指定的结果,有点像生产者模式:

class Person {String firstName;String lastName;Person() {}Person(String firstName, String lastName) {this.firstName = firstName;this.lastName = lastName;}
}
Supplier<Person> personSupplier = Person::new;
personSupplier.get();   // new Person

使用场景:

场景一:随机数生成

假设我们需要生成一个指定范围的随机数,可以使用Supplier来封装随机数生成的逻辑。

java 代码解读复制代码import java.util.Random;  
import java.util.function.Supplier;  public class RandomNumberSupplier {  public static void main(String[] args) {  Supplier<Integer> randomNumberSupplier = () -> new Random().nextInt(100);  System.out.println(randomNumberSupplier.get()); // 输出一个0到99之间的随机数  }  
}

场景二:创建对象

在创建对象时,我们可以使用Supplier来封装对象的创建逻辑,这样可以使代码更加清晰和易于维护。

import java.util.function.Supplier;  public class User {  private String name;  private int age;  public User(String name, int age) {  this.name = name;  this.age = age;  }  @Override  public String toString() {  return "User{" + "name='" + name + '\'' + ", age=" + age + '}';  }  public static void main(String[] args) {  Supplier<User> userSupplier = () -> new User("张三", 25);  User user = userSupplier.get();  System.out.println(user); // 输出:User{name='张三', age=25}  }  
}

场景三:结合Stream API使用

Supplier可以与Java 8的Stream API结合使用,用于生成Stream的数据源。

import java.util.function.Supplier;  
import java.util.stream.Stream;  public class StreamWithSupplier {  public static void main(String[] args) {  Supplier<Integer> numberSupplier = () -> (int) (Math.random() * 100);  Stream<Integer> numberStream = Stream.generate(numberSupplier);  numberStream.limit(5).forEach(System.out::println); // 输出5个随机数  }  
}

4.Consumer 消费者

Consumer接口也是一个函数式接口,它表示一个接受单一输入参数并且不返回任何结果的操作。你可以把它想象成一个消费者,你给它一个东西,它消费掉这个东西,但不给你任何回报。

consumer.get();//获取消费主题consumer.accept("")//设置传参内容

场景一:打印数据

当我们需要打印某个数据时,可以使用Consumer来封装打印的逻辑。

import java.util.function.Consumer;  public class PrintConsumer {  public static void main(String[] args) {  Consumer<String> printConsumer = System.out::println;  printConsumer.accept("Hello, World!"); // 输出:Hello, World!  }  
}

场景二:数据验证

在处理数据时,我们可能需要验证数据的合法性。使用Consumer可以方便地封装验证逻辑。

import java.util.function.Consumer;  public class ValidationConsumer {  public static void main(String[] args) {  String data = "12345";  Consumer<String> validationConsumer = s -> {  if (s.length() < 5) {  throw new IllegalArgumentException("数据长度不足");  }  // 其他验证逻辑...  };  try {  validationConsumer.accept(data);  System.out.println("数据验证通过");  } catch (IllegalArgumentException e) {  System.out.println("数据验证失败:" + e.getMessage());  }  }  
}

**场景三:**修改集合元素

对于集合中的每个元素,我们可能需要执行一些修改操作。使用Consumer可以方便地对集合中的元素进行处理。

import java.util.ArrayList;  
import java.util.List;  
import java.util.function.Consumer;  public class ListModificationWithConsumer {  public static void main(String[] args) {  List<Integer> numbers = new ArrayList<>();  numbers.add(1);  numbers.add(2);  numbers.add(3);  Consumer<Integer> multiplyByTwo = n -> n *= 2;  numbers.forEach(multiplyByTwo);  numbers.forEach(System.out::println); // 输出:2, 4, 6  }  
}

在这个例子中,我们定义了一个Consumer,它接受一个整数并将其乘以2。然后,我们使用forEach方法将这个操作应用于列表中的每个元素。

电商系统的应用举例

接下来,我通过电商系统中应用SupplierConsumer接口的实际案例,旨在帮助您更好地理解和记忆这两个接口在业务场景中的应用。

案例一:用户积分更新(Consumer应用)

在电商系统中,Consumer接口在这里使得积分更新逻辑变得更加清晰和模块化,易于维护和测试。它允许开发者将用户积分更新的具体操作与用户购买行为的其他处理逻辑分离,提高代码的扩展性和可重用性。

// Consumer接口实现更新用户积分逻辑
Consumer<User> updateUserPoints = user -> {// 假设calculatePoints是一个方法,根据用户购买行为计算积分int pointsToAdd = PointsCalculator.calculatePoints(user.getPurchaseHistory());user.addPoints(pointsToAdd);// 更新用户积分到数据库userService.updateUserPoints(user);
};// 在用户完成购买后调用
usersWhoPurchased.forEach(updateUserPoints);
案例二:商品库存扣减(Consumer应用)

使用Consumer接口可以将库存扣减的逻辑封装起来,便于在不同的订单处理流程中重用。这种方式简化了代码结构,使得库存管理更加集中和一致。

 //Consumer接口实现库存扣减逻辑
Consumer<Product> deductInventory = product -> {// 检查库存if (inventoryService.checkInventory(product) > 0) {// 扣减库存inventoryService.deductInventory(product);}
};// 在订单处理流程中调用,对订单中的每个商品扣减库存
order.getProducts().forEach(deductInventory);

我觉得这个本质就是给业务提供不同的扩展机制实现

案例三:动态获取商品价格(Supplier应用)

商品的价格可能会从不同的对象数据中获取,明显的动态变化。我们可以使用Supplier接口来定义获取商品价格的逻辑。有点时候可能我们的商城系统有不同的价格对象,那么此时可以通过该接口返回不同对象的结果,也是OK的.

import java.util.function.Supplier;  public class ProductPriceProvider {  private double price;  public ProductPriceProvider(double initialPrice) {  this.price = initialPrice;  }  public double calcPrice(Supplier<Double> priceSupplier) {  // 使用Supplier获取价格,某些不同的逻辑  ,然后统一返回结果return priceSupplier.get();  }  public void setPrice(double newPrice) {  this.price = newPrice;  }  public static void main(String[] args) {  ProductPriceProvider provider = new ProductPriceProvider(100.0);  provider.calcPrice(() -> {             // 可以返回NormalUser对象的价格});provider.calcPrice(() -> {             // 可以返回EmployeeUser对象的价格});}  
}

相关文章:

Java8新特性Optional,Function,Supplier,Consumer

Java8新特性 1.Optional 首先&#xff0c;Optional 它不是一个函数式接口&#xff0c;设计它的目的是为了防止空指针异常&#xff08;NullPointerException&#xff09;&#xff0c;要知道在 Java 编程中&#xff0c; 空指针异常可是臭名昭著的。 让我们来快速了解一下 Opti…...

腾讯云服务器中Ubuntu18.04搭建python3.7.0与TensorFlow1.15.0与R-4.0.3环境

所有踩过的坑&#xff0c;都化成了这条平坦的路 云服务器配置 基础配置选择竞价实例&#xff08;便宜/需求小&#xff09; 选择地区&#xff08;距离自己近的就行&#xff09; 实例配置选择异构计算&#xff08;能力较强&#xff0c;性价比高&#xff09;根据GPU显存需求选择…...

01.Docker 概述

Docker 概述 1. Docker 的主要目标2. 使用Docker 容器化封装应用程序的意义3. 容器和虚拟机技术比较4. 容器和虚拟机表现比较5. Docker 的组成6. Namespace7. Control groups8. 容器管理工具9. docker 的优缺点10. 容器的相关技术 docker 官网: http://www.docker.com 帮助文档…...

DedeBIZ系统审计小结

之前简单审计过DedeBIZ系统&#xff0c;网上还没有对这个系统的漏洞有过详尽的分析&#xff0c;于是重新审计并总结文章&#xff0c;记录下自己审计的过程。 https://github.com/DedeBIZ/DedeV6/archive/refs/tags/6.2.10.zip &#x1f4cc;DedeBIZ 系统并非基于 MVC 框架&…...

docker运行perplexica

序 本文主要研究一下如何用docker运行perplexica 步骤 git clone git clone https://github.com/ItzCrazyKns/Perplexica.gitapp.dockerfile FROM docker.1ms.run/node:20.18.0-alpineARG NEXT_PUBLIC_WS_URLws://127.0.0.1:3001 ARG NEXT_PUBLIC_API_URLhttp://127.0.0.1…...

【ThreeJS Basics 1-3】Hello ThreeJS,实现第一个场景

文章目录 环境创建一个项目安装依赖基础 Web 页面概念解释编写代码运行项目 环境 我的环境是 node version 22 创建一个项目 首先&#xff0c;新建一个空的文件夹&#xff0c;然后 npm init -y , 此时会快速生成好默认的 package.json 安装依赖 在新建的项目下用 npm 安装依…...

解决珠玑妙算游戏问题:C 语言实现

一、引言 珠玑妙算游戏&#xff08;the game of master mind&#xff09;是一个有趣的逻辑推理游戏。在编程领域&#xff0c;我们可以通过编写代码来模拟游戏中计算猜中与伪猜中次数的过程。本文将详细介绍如何使用 C 语言实现这一功能&#xff0c;并对核心代码进行解析。 二、…...

【清晰教程】本地部署DeepSeek-r1模型

【清晰教程】通过Docker为本地DeepSeek-r1部署WebUI界面-CSDN博客 目录 Ollama 安装Ollama DeepSeek-r1模型 安装DeepSeek-r1模型 Ollama Ollama 是一个开源工具&#xff0c;专注于简化大型语言模型&#xff08;LLMs&#xff09;的本地部署和管理。它允许用户在本地计算机…...

Java/Kotlin 使用 Chrome 无头浏览器

1. 概念 无头浏览器在类似于流行网络浏览器的环境中提供对网页的自动控制&#xff0c;但是通过命令行界面或使用网络通信来执行。 它们对于测试网页特别有用&#xff0c;因为它们能够像浏览器一样呈现和理解超文本标记语言&#xff0c;包括页面布局、颜色、字体选择以及JavaSc…...

AI前端开发:赋能开发者,提升解决实际问题的能力

近年来&#xff0c;人工智能技术飞速发展&#xff0c;深刻地改变着各行各业。在软件开发领域&#xff0c;AI写代码工具的出现更是引发了一场革命&#xff0c;尤其是前端开发领域&#xff0c;AI的应用正在显著提升开发者的解决实际问题的能力。本文将探讨AI前端开发如何提升效率…...

【Elasticsearch】Elasticsearch检索方式全解析:从基础到实战(二)

接着上一篇文章&#xff1b;我们继续来研究es的复杂检索 文章目录 (1) bool用来做复合查询&#xff08;2&#xff09;Filter【结果过滤】&#xff08;3&#xff09;term&#xff08;4&#xff09;Aggregation&#xff08;执行聚合&#xff09; (1) bool用来做复合查询 复合语…...

ASP.NET Core SignalR的分布式部署

假设聊天室程序被部署在两台服务器上&#xff0c;客户端1、2连接到了服务器A上的ChatRoomHub&#xff0c;客户端3、4连接到服务器B上的ChatRoomHub&#xff0c;那么客户端1发送群聊消息时&#xff0c;只有客户端1、2能够收到&#xff0c;客户端3、4收不到&#xff1b;在客户端3…...

kafka的架构和工作原理

目录 Kafka 架构 Kafka 工作原理 Kafka 数据流 Kafka 核心特性 总结 Kafka 架构 1. 生产者(Producer) 2. 消费者(Consumer) 3. 主题(Topic) 4. 分区(Partition) 5. 副本(Replica) 6. 代理(Broker) 7. ZooKeeper(旧版本)/KRaft(新版本) Kafka 工作…...

当没有OpenGL时,Skia如何绘制?

Skia 是可以在没有 OpenGL 的情况下进行图形绘制的&#xff0c;但是具体能否成功绘制图形&#xff0c;取决于 Skia 是如何配置的&#xff0c;以及平台上是否提供了其他的底层图形 API。 Skia 的底层依赖 Skia 的目标是提供一种跨平台的 2D 图形绘制接口。为了加速图形渲染&…...

Java小白入门基础知识(一)

1.初识Java java源程序通过javac 编译生成字节码文件&#xff0c;通过java命令运行java程序 总结&#xff1a; 1&#xff09;在一个Java文件中&#xff0c;只能有一个public class 2&#xff09;public class一定要和文件名一致 3&#xff09;类里面包含方法 4&#xff09…...

游戏内常见加密

加密只是增大破解难度&#xff0c;没法说绝对安全&#xff0c;避免过度加密导致性能消耗过大。 通用算法库 lua的加密算法库&#xff1a;https://github.com/somesocks/lua-lockbox/tree/master 比如通信协议就用到里面一些算法cry.encrypt 算法优劣&#xff1a;AES加解密-CBC…...

【Java八股文】02-Java集合面试篇

【Java八股文】02-Java集合面试篇 概念数组与集合区别常用集合Java中的线程安全的集合是什么&#xff1f;Collections和Collection的区别 Listjava中list的几种实现把ArrayList变成线程安全的有哪些方法&#xff1f;CopyOnWriteArrayList是如何保证线程安全的&#xff1f; Mapj…...

springCloud-2021.0.9 之 GateWay 示例

文章目录 前言springCloud-2021.0.9 之 GateWay 示例1. GateWay 官网2. GateWay 三个关键名称3. GateWay 工作原理的高级概述4. 示例4.1. POM4.2. 启动类4.3. 过滤器4.4. 配置 5. 启动/测试 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收…...

公然上线传销项目,Web3 的底线已经被无限突破

作者&#xff1a;Techub 热点速递 撰文&#xff1a;Yangz&#xff0c;Techub News 今天早些时候&#xff0c;OKX 将上线 PI 的消息在圈内引起轩然大波&#xff0c;对于上线被板上钉钉为传销盘子的「项目」 &#xff0c;Techub News 联系了 OKX 公关&#xff0c;但对方拒绝置评…...

SQL数据清理:去除字段值中的多余符号(Demo例子)

目录 前言1. 基础2. 进阶 前言 Excel中有大量不合法的符号&#xff0c;导入到系统之后&#xff0c;数据库有很多脏数据&#xff0c;对此下述展开sql的清洗教程 在数据库的文本字段中&#xff0c;可能会存在多余的逗号或符号&#xff0c;如,销售,, 或 二手车,销售,,这种情况 希…...

MongoDB 的使用场景

一、内容管理系统 1. 博客平台 文章内容、作者信息、标签、评论等数据结构多样&#xff0c;MongoDB 的无模式特性可轻松应对。比如 WordPress 等博客系统&#xff0c;使用 MongoDB 能灵活存储不同格式和长度的文章内容&#xff0c;以及与文章相关的各种元数据。 2. 新闻网站…...

STM32 RTC 实时时钟说明

目录 背景 RTC(实时时钟)和后备寄存器 32.768HZ 如何产生1S定时 RTC配置程序 第一次上电RTC配置 第1步、启用备用寄存器外设时钟和PWR外设时钟 第2步、使能RTC和备份寄存器访问 第3步、备份寄存器初始化 第4步、开启LSE 第5步、等待LSE启动后稳定状态 第6步、配置LSE为…...

微服务SpringCloud Alibaba组件nacos教程【详解naocs基础使用、服务中心配置、集群配置,附有案例+示例代码】

一.Nacos教程 文章目录 一.Nacos教程1.1 Nacos简介1.2 nacos基本使用直接下载打包服务源码方式启动 1.3 创建nacos客服端1.4 nacos集群配置1.5 nacos配置中心 1.1 Nacos简介 nacos是spring cloud alibaba生态中非常重要的一个组件&#xff0c;它有两个作用&#xff1a; 1:注册…...

深度整理总结MySQL——Expalin指南(二)

Expalin指南(二 前言Extrano tables usedImpossible whereNo matching min/max rowUsing indexUsing index conditionUsing whereUsing join buffer (Block Nested Loop)Not existsUsing intersect(...)、Using union(...)和Using sort_union(...)Zero limitUsing filesortUsin…...

【机器学习】常见采样方法详解

在机器学习领域&#xff0c;数据采样&#xff08;Sampling&#xff09;是一项至关重要的技术。它不仅影响模型的训练效率&#xff0c;还直接关系到模型的性能与泛化能力。本文将从基础概念出发&#xff0c;逐步深入介绍机器学习中常见的采样方法&#xff0c;帮助读者全面理解并…...

Kubernetes 最佳实践:Top 10 常见 DevOps/SRE 面试问题及答案

1. 如何在 Kubernetes 中设置资源请求和限制&#xff1f; 资源请求确保容器有最小资源量&#xff08;CPU/内存&#xff09;&#xff0c;而限制则强制容器消耗的最大资源量。这有助于高效资源分配并防止资源争用。 示例&#xff1a; resources:requests:memory: "256Mi&…...

Python自动化办公之Excel拆分

在日常办公中&#xff0c;我们经常需要将包含多个Sheet页的Excel文件拆分成多个独立的Excel文件。例如&#xff0c;当我们要把一份Excel表格发给各部门确认时&#xff0c;出于控制信息知悉范围、确保数据保密性等方面的考虑&#xff0c;每个部门仅需查看和确认与自己部门对应的…...

Mac上搭建宝塔环境并部署PHP项目

安装Docker Desktop》搭建Centos版本的宝塔环境》部署PHP项目 1. 下载Docker for mac 软件&#xff1a;https://www.docker.com/ 或使用终端命令&#xff1a;brew install --cask --appdir/Applications docker 2. 使用命令安装宝塔环境的centos7系统&#xff1a; docker pul…...

qt 控件的焦点事件

在 Qt 中&#xff0c;设置焦点策略是通过 QWidget 的 setFocusPolicy() 方法来实现的。焦点策略控制了一个控件何时和如何获取焦点。Qt 提供了几种常见的焦点策略&#xff0c;以帮助管理控件的焦点行为。 常见的焦点策略 Qt::NoFocus&#xff1a;控件不接受焦点。Qt::TabFocus&…...

深度学习_学习笔记

pandas Pandas 是一个强大的数据分析库&#xff0c;它封装和集成了多个其他库的功能&#xff0c;以便为用户提供更加便捷的数据处理能力。 pandas与csv 都可用于处理csv文件&#xff08;注意csv文件不是excel文件&#xff09; csv 是 Python 标准库的一部分&#xff0c;适合…...

如何在 Elasticsearch 中设置向量搜索 - 第二部分

作者&#xff1a;来自 Elastic Valentin Crettaz 了解如何在 Elasticsearch 中设置向量搜索并执行 k-NN 搜索。 本文是三篇系列文章中的第二篇&#xff0c;深入探讨了向量搜索&#xff08;也称为语义搜索&#xff09;的复杂性以及它在 Elasticsearch 中的实现方式。 第一部分重…...

leetcode 面试经典 150 题:跳跃游戏 II

链接跳跃游戏 II题序号45题型数组题解贪心算法难度中等熟练度✅✅✅ 题目 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums…...

C++20 新特性解析

1. 概念(Concepts) 概念是 C++20 引入的一项重要特性,它允许程序员定义类型约束,从而在编译时检查模板参数是否符合某些要求。概念提供了模板参数的限制,使得模板代码更加可读和易于维护。 示例代码: #include <iostream> #include <concepts>// 定义一个…...

vue不是内部或外部命令?

问题&#xff1a;当我们在使用脚手架创建项目之前&#xff0c;执行了npm i vue/cli -g或yarn global add vue/cli之后&#xff0c;再执行vue --version无法执行&#xff0c;vue不是内部或外部命令。 前几天在学vue时也是遇到了这个问题&#xff0c;现在来分享一下解决方法。 …...

C#中的Frm_Welcome.Instance.Show(),是什么意思

Frm_Welcome.Instance.Show() 是一种常见的单例模式&#xff08;Singleton Pattern&#xff09;实现方式&#xff0c;通常用于在应用程序中确保某个窗体&#xff08;Form&#xff09;只有一个实例&#xff0c;并通过该实例显示窗体。以下是对这段代码的详细解释&#xff1a; 代…...

k8s优雅操作pod容器组

k8s优雅操作pod容器组 回退备份 kubectl get deploy deployName -o yaml>>deployName-bak-date "%Y-%m-%d".yaml获取副本数 replicasecho | kubectl get -o template deploy/deployName --template{{.spec.replicas}}停止容器组 kubectl scale deployment …...

【LeetCode: 1760. 袋子里最少数目的球 + 二分】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

动态规划LeetCode-416.分割等和子集

给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例 1&#xff1a; 输入&#xff1a;nums [1,5,11,5] 输出&#xff1a;true 解释&#xff1a;数组可以分割成 [1, 5, 5] 和 [11] 。 示例 2&…...

kotlin-kapt

kotlin-kapt kotlin-kapt 是 Kotlin 的一个插件&#xff0c;专门用于处理注解处理器&#xff08;Annotation Processor&#xff09;。以下是对该插件的详细解释和指南&#xff1a; kotlin-kapt 是什么&#xff1f; kotlin-kapt 是 Kotlin 官方提供的一个插件&#xff0c;用于在…...

网络安全技术复习总结

1|0第一章 概论 1.网络安全发展阶段包括四个阶段&#xff1a;通信安全、计算机安全、网络安全、网络空间安全。 2.2017年6月1日&#xff0c;我国第一部全面规范网络空间安全的基础性法律《中华人民共和国网络安全法》正式实施。 3.2021年 6月10日&#xff0c;《中华人民共和…...

java 集合

Java集合框架&#xff08;Java Collections Framework&#xff09;是一个强大的工具库&#xff0c;旨在简化数据存储和操作的任务。它提供了一组接口、类和算法&#xff0c;帮助开发者高效地管理数据&#xff0c;如列表、集合和映射。下面是Java集合框架的详细介绍&#xff1a;…...

Java常见排序算法及代码实现

1、选择排序算法 选择排序&#xff08;Selection Sort&#xff09;是一种简单直观的排序算法&#xff0c;它的工作原理是每次从未排序部分选择最小&#xff08;或最大&#xff09;的元素&#xff0c;将其放到已排序部分的末尾。 2、冒泡排序算法 冒泡排序&#xff08;Bubble…...

130,[1] 攻防世界 very_easy_sql

进入靶场 典型SQL注入页面 先查看源码 访问 试试http://127.0.0.1/ 还尝试了其他都是nonono 回归第一个登录页面 提交的内容不在url处显示&#xff0c;反而第二个url页面会在url处显示 明白第一个页面是通过post方式提交&#xff0c;反正没得到什么信息&#xff0c;去抓…...

Spring Boot从入门到精通:核心知识点+实战指南

目录 一、Spring Boot 是什么&#xff1f;为什么它如此流行&#xff1f; 二、快速创建你的第一个Spring Boot应用 2.1 使用Spring Initializr生成项目 2.2 核心代码示例 三、深度解析Spring Boot核心机制 3.1 自动配置原理揭秘 3.2 自定义Starter实战 四、生产环境必备…...

深入探索现代CSS:从基础到未来趋势

引言&#xff1a;CSS的进化之路 CSS&#xff08;层叠样式表&#xff09;自1996年诞生以来&#xff0c;已从简单的样式描述语言发展为构建现代Web体验的核心技术。截至2023年&#xff0c;超过98%的网站使用CSS3技术&#xff0c;其发展历程见证了Web从静态文档到富交互应用的蜕变…...

python-leetcode 23.反转链表

题目&#xff1a; 给单链表的头节点&#xff0c;反转链表&#xff0c;并返回反转后的链表。 方法一&#xff1a;迭代 在遍历链表时&#xff0c;将当前节点的next指针改为指向前一个节点。由于节点没有引用其前一个节点&#xff0c;因此要先存储前一个节点&#xff0c;在更改引…...

Foundation CSS 可见性

Foundation CSS 可见性 引言 在网页设计中,CSS可见性是一个至关重要的概念。它决定了元素在网页上是否可见,以及如何显示。Foundation CSS 是一个流行的前端框架,它提供了丰富的工具和组件来帮助开发者构建响应式和可访问的网页。本文将深入探讨 Foundation CSS 中的可见性…...

DeepSeek模拟阿里面试——java基本语法

为了全面准备阿里Java高级程序员的面试&#xff0c;以下是针对数据类型和变量、运算符、流程控制的系统性复习和准备策略&#xff1a; 数据类型和变量 基本数据类型 整数类型&#xff1a;byte&#xff08;1字节&#xff09;、short&#xff08;2字节&#xff09;、int&#xf…...

大模型基本原理(二)——ChatGPT的工作原理

如何得到一个ChatGPT&#xff1f; 1、无监督预训练&#xff1a;通过大量的文本数据集进行无监督训练&#xff0c;得到一个基座模型&#xff08;只会续写文本&#xff09; 2、监督微调&#xff1a;通过一些人类撰写的高质量对话数据对基座模型进行监督微调&#xff0c;得到一个…...

TensorRT 8.6.1教程1-TensorRT简介

区分计算节点和数据节点 视频 TensorRT 教程 | 基于 8.6.1 版本 | 第一部分_哔哩哔哩_bilibili cookbook...