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

门户网站属于什么类型的模式/抖音矩阵排名软件seo

门户网站属于什么类型的模式,抖音矩阵排名软件seo,学设计需要什么条件,wordpress获取父分类文章目录 CompletableFuturede介绍CompletableFuturede使用场景常用异步编程实现方案- Thread- ExecutorService- CountDownLatch- CyclicBarrier- ForkJoinPool- CompletableFuture各种实现方案总结 CompletableFuturede结构结构梳理- Future接口- CompletionStage接口常用方法…

文章目录

  • CompletableFuturede介绍
  • CompletableFuturede使用场景
  • 常用异步编程实现方案
    • - Thread
    • - ExecutorService
    • - CountDownLatch
    • - CyclicBarrier
    • - ForkJoinPool
    • - CompletableFuture
    • 各种实现方案总结
  • CompletableFuturede结构
    • 结构梳理
    • - Future接口
    • - CompletionStage接口
    • 常用方法
  • CompletableFuture使用示例
    • 1. 基本异步操作
    • 2. 任务链式调用
    • 3. 多个异步任务组合
    • 4. 异常处理
    • 5. 并行执行多个任务
    • 6. 处理返回值的转换


CompletableFuturede介绍

Java 8 引入了 CompletableFuture 类,这是 Java 异步编程的一个重要进展。

CompletableFuture 提供了一种基于未来结果的异步编程模型,允许你以更加直观和易于理解的方式编写非阻塞代码。

CompletableFuturede使用场景

CompletableFuture 主要用于:

  • 异步计算:如果你有一些计算任务可以异步执行,并且不想阻塞主线程,可以使用 CompletableFuture。
  • 多个并行任务组合:当你有多个独立的异步任务,并且想要在它们都完成后执行某些操作时,可以用 CompletableFuture 来组合它们。
  • 异步回调:当异步计算完成后,你需要执行某些后续操作(如更新 UI、保存结果等),可以通过 thenApply(), thenAccept(), thenRun() 等方法指定回调。
  • 超时控制:可以为异步任务设置超时限制,防止任务执行时间过长,导致线程被长时间占用。
  • 错误处理:在异步任务中,如果有异常发生,可以通过 handle() 或 exceptionally() 方法进行错误处理。
  • 多任务的组合与合成:可以将多个异步任务的结果进行合成,产生新的任务。

常用异步编程实现方案

- Thread

特点:

  • Thread是 Java 中最基本的并发执行单位,代表一个独立的执行路径。
  • Thread可以通过继承 Thread 类或实现 Runnable 接口来创建和启动。
  • 线程会从 run() 方法开始执行,run() 方法可以包含任何逻辑。
  • 适合处理简单的并发任务,但不适合复杂的并发场景,因为线程管理较为麻烦。

使用示例:

	public static void main(String[] args) {Thread thread = new Thread(() -> {System.out.println(Thread.currentThread().getName() + " is running...");});thread.start();}

- ExecutorService

特点:

  • ExecutorService 是一个用于执行异步任务的接口,通常与线程池一起使用。
  • 它提供了方法来提交任务、关闭线程池、获取任务结果等。
  • ExecutorService 包括多种实现,如 ThreadPoolExecutor,并且支持任务的异步执行。
  • 支持有返回值的任务(通过 submit() 方法)和无返回值的任务(通过 execute() 方法)。

使用示例:

有返回值:

    public static void main(String[] args) throws InterruptedException, ExecutionException {ExecutorService executor = Executors.newFixedThreadPool(2);  // 创建线程池Callable<Integer> task = () -> {Thread.sleep(1000);return 42;};Future<Integer> result = executor.submit(task);  // 提交任务并获得 Future 对象System.out.println("Task result: " + result.get());  // 获取结果executor.shutdown();  // 关闭线程池}

无返回值:

    public static void main(String[] args) throws InterruptedException {ExecutorService executor = Executors.newFixedThreadPool(2);  // 创建线程池Runnable task = () -> {System.out.println(Thread.currentThread().getName() + " is running...");};executor.execute(task);  // 提交任务executor.shutdown();  // 关闭线程池}

- CountDownLatch

特点:

  • CountDownLatch 是一个同步辅助类,允许一个或多个线程等待直到其他线程完成某个操作。
  • 使用一个计数器(count)来表示待完成的任务数量,每个任务完成后调用 countDown() 方法,计数器减一。
  • 当计数器为零时,所有等待的线程会继续执行。
  • CountDownLatch 不能重用,它适合用于多个线程并行执行后,等待所有线程完成的场景。

使用示例:

    public static void main(String[] args) throws InterruptedException {int totalThreads = 3;CountDownLatch latch = new CountDownLatch(totalThreads);  // 初始化计数器为3Runnable task = () -> {try {Thread.sleep(1000);System.out.println(Thread.currentThread().getName() + " finished.");} catch (InterruptedException e) {e.printStackTrace();} finally {latch.countDown();  // 每个线程完成后减少计数器}};// 启动多个线程for (int i = 0; i < totalThreads; i++) {new Thread(task).start();}latch.await();  // 等待计数器归零System.out.println("All tasks are finished.");}

- CyclicBarrier

特点:

  • CyclicBarrier 允许一组线程互相等待,直到所有线程都到达一个公共屏障点,然后所有线程再一起继续执行。
  • 它的计数器每次归零后会重置,适合用来处理多轮同步任务。
  • 每当所有线程到达屏障点时,都会执行一个可选的动作(如回调函数)。

使用示例:

    public static void main(String[] args) throws InterruptedException {int totalThreads = 3;CyclicBarrier barrier = new CyclicBarrier(totalThreads, () -> {System.out.println("All threads reached the barrier point, proceeding...");});Runnable task = () -> {try {Thread.sleep(1000);System.out.println(Thread.currentThread().getName() + " reached the barrier.");barrier.await();  // 等待其他线程到达屏障点} catch (Exception e) {e.printStackTrace();}};// 启动多个线程for (int i = 0; i < totalThreads; i++) {new Thread(task).start();}}

- ForkJoinPool

特点:

  • ForkJoinPool 是专门用于执行递归任务的线程池,特别适合大规模并行计算。
  • 它将任务分割成多个子任务并通过递归的方式处理(“fork”),然后合并子任务的结果(“join”)。
  • 在 ForkJoinPool 中,任务拆分采用工作窃取算法,尽量平衡工作负载,提升性能。

使用示例:

import java.util.concurrent.*;public class ForkJoinPoolExample {public static void main(String[] args) {ForkJoinPool pool = new ForkJoinPool();  // 创建 ForkJoinPoolint[] array = {1, 2, 3, 4, 5, 6, 7, 8};RecursiveTask<Integer> task = new SumTask(array, 0, array.length);int result = pool.invoke(task);  // 执行任务并获取结果System.out.println("Sum is: " + result);}
}class SumTask extends RecursiveTask<Integer> {private int[] array;private int start, end;public SumTask(int[] array, int start, int end) {this.array = array;this.start = start;this.end = end;}@Overrideprotected Integer compute() {if (end - start <= 2) {  // 基础情况int sum = 0;for (int i = start; i < end; i++) {sum += array[i];}return sum;} else {int mid = (start + end) / 2;SumTask task1 = new SumTask(array, start, mid);SumTask task2 = new SumTask(array, mid, end);task1.fork();  // 异步执行task2.fork();return task1.join() + task2.join();  // 合并结果}}
}

- CompletableFuture

特点:

  • CompletableFuture 是 Java 8 引入的异步编程框架,允许你以非阻塞的方式处理任务。
  • 它支持任务的组合、回调、异常处理等,适合用于处理复杂的异步任务链。
  • 可以通过 supplyAsync()、thenApply() 等方法定义异步任务的执行流程。

使用示例:

    public static void main(String[] args) throws ExecutionException, InterruptedException {CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}return 42;});// 链式调用,处理结果CompletableFuture<Integer> result = future.thenApplyAsync(value -> value * 2);System.out.println("Result: " + result.get());  // 输出结果}

各种实现方案总结

并发方式特点优点缺点
Thread- 最基本的线程创建方式
- 通过继承Thread 或实现Runnable 接口创建任务
- 简单直观- 需要手动管理线程,容易资源浪费或死锁
- 无法直接返回任务结果
- 对复杂任务协调不便
ExecutorService- 通过线程池管理线程
- 提供任务的调度、执行、生命周期管理
- 提供线程池避免手动创建和销毁线程,减少资源浪费
- 支持任务的结果返回
- 任务间依赖和组合较复杂
-get() 方法阻塞线程,难以实现非阻塞
CountDownLatch- 用于等待多个任务完成后执行后续操作
- 使用计数器控制任务执行
- 可以控制任务同步,确保多个任务完成后继续执行- 只适用于等待任务完成,无法处理任务的依赖关系
- 只能使用一次
CyclicBarrier- 用于多个线程在某一点上等待
- 可重复使用,适合同步多任务
- 可重复使用,适合多次任务同步- 不如CompletableFuture 灵活
- 仅适合特定的同步场景
ForkJoinPool- 专为递归分治任务设计的线程池
- 支持任务拆分和合并
- 高效利用多核处理器,适合分治算法
- 支持任务拆分和合并
- 对于非递归任务不适合
- 异常处理不如CompletableFuture 灵活
CompletableFuture- 基于Future 设计的异步编程API
- 支持非阻塞的任务组合和回调处理
- 支持链式调用,异步任务组合,避免阻塞
- 可以处理异常,支持并行处理和同步等待
- 支持thenApply、thenAccept 等多种处理方式,简化代码
- 复杂任务时调试困难
- 异常处理仍较为复杂
- 比ExecutorService 稍显复杂
  • Thread:最基础的并发方式,直接通过线程控制执行,但缺乏高级功能。
  • ExecutorService:基于线程池的高层接口,能够有效管理线程资源和任务执行。
  • CountDownLatchCyclicBarrier:用于线程间的同步协调。CountDownLatch 等待特定任务完成,而 CyclicBarrier 可重复用于多次任务同步。
  • ForkJoinPool:适用于任务拆分和合并的场景,特别是递归分治任务。
  • CompletableFuture:提供更灵活的异步任务处理方式,支持链式调用、异步执行及异常处理,适合复杂的并发任务调度。

CompletableFuturede结构

在这里插入图片描述
CompletableFuture实现了Future接口和CompletionStage接口。

结构梳理

相关接口描述
Future是一个表示异步计算结果的接口。它提供了方法来检查异步计算是否完成、获取计算的结果以及取消计算。
CompletionStage是一个表示异步计算结果的接口,提供了处理计算结果的非阻塞操作。
Future 不同,CompletionStage 采用链式调用,可以更灵活地组合多个异步操作。

- Future接口

Future接口是JDK 5引入的,该接口属于java.util.concurrent包。

Future接口的目的是表示异步计算的结果,它允许你提交一个任务给一个 Executor(执行器),并在稍后获取任务的结果。

主要方法:

方法描述
get()阻塞当前线程,直到异步计算完成,并返回计算结果
get(long timeout, TimeUnit unit)阻塞当前线程,直到异步计算完成或超时,并返回计算结果
isDone()检查异步计算是否完成
cancel(boolean mayInterruptIfRunning)尝试取消异步计算
isCancelled()检查异步计算是否被取消。

- CompletionStage接口

CompletionStage 接口是 Java 8 引入的一个重要接口,用于描述异步计算的生命周期和结果。

CompletionStage 提供了一套方法,用于处理异步计算的结果、组合多个计算、处理异常等。

主要方法:

方法描述
thenApply在当前阶段完成后,应用给定的 Function,并返回一个新的 CompletionStage。
thenAcceptAsync异步地执行指定的 Consumer,并返回一个新的 CompletionStage,该阶段没有结果。
thenComposeAsync异步地将当前阶段的结果应用于一个返回 CompletionStage 的函数,并返回一个新的 CompletionStage。
thenCombine在两个 CompletionStage 都完成后,使用给定的 BiFunction 合并它们的结果,并返回一个新的 CompletionStage。
runAfterEitherAsync在任意一个给定的两个 CompletionStage 完成后,异步地执行指定的 Runnable。
thenAccept在当前阶段完成后,执行指定的 Consumer,并返回一个新的 CompletionStage,该阶段没有结果。
runAfterEither在任意一个给定的两个 CompletionStage 完成后,执行指定的 Runnable。
thenCombineAsync在两个 CompletionStage 都完成后,异步地使用给定的 BiFunction 合并它们的结果,并返回一个新的 CompletionStage。
thenAcceptBothAsync在两个 CompletionStage 都完成后,异步地执行指定的 BiConsumer,并返回一个新的 CompletionStage。
applyToEither在两个 CompletionStage 中任意一个完成后,应用给定的 Function,并返回一个新的 CompletionStage。
applyToEitherAsync在两个 CompletionStage 中任意一个完成后,异步地应用给定的 Function,并返回一个新的 CompletionStage。
runAfterBothAsync在两个 CompletionStage 都完成后,异步地执行指定的 Runnable,并返回一个新的 CompletionStage。
thenAcceptBothAsync在两个 CompletionStage 都完成后,异步地执行指定的 BiConsumer。
acceptEitherAsync在两个 CompletionStage 中任意一个完成后,异步地执行指定的 Consumer,并返回一个新的 CompletionStage。
handleAsync异步地处理当前阶段的结果或异常,应用给定的 BiFunction,并返回一个新的 CompletionStage。
thenComposeAsync同 thenCompose,但异步地应用给定的函数,并返回一个新的 CompletionStage。
thenCombineAsync同 thenCombine,但异步地使用给定的 BiFunction 合并两个 CompletionStage 的结果。
exceptionally如果当前阶段以异常完成,则应用指定的 Function 处理该异常,并返回一个新的 CompletionStage。
acceptEither在两个 CompletionStage 中任意一个完成后,执行指定的 Consumer。
thenCompose将当前阶段的结果应用于一个返回 CompletionStage 的函数,并返回一个新的 CompletionStage。
handle处理当前阶段的结果或异常,应用给定的 BiFunction,并返回一个新的 CompletionStage。
thenAcceptBoth在两个 CompletionStage 都完成后,执行指定的 BiConsumer。
thenApplyAsync异步地应用给定的 Function,并返回一个新的 CompletionStage。
whenCompleteAsync异步地执行指定的 BiConsumer,无论结果如何,并返回一个新的 CompletionStage。
applyToEitherAsync同 applyToEither,但异步地应用给定的 Function,并返回一个新的 CompletionStage。
acceptEitherAsync同 acceptEither,但异步地执行指定的 Consumer,并返回一个新的 CompletionStage。
runAfterEitherAsync同 runAfterEither,但异步地执行指定的 Runnable,并返回一个新的 CompletionStage。
thenRunAsync异步地执行指定的 Runnable,并返回一个新的 CompletionStage,该阶段没有结果。
runAfterBoth在两个 CompletionStage 都完成后,执行指定的 Runnable。
whenComplete在当前阶段完成后,无论结果如何,执行指定的 BiConsumer,并返回一个新的 CompletionStage。
thenRunAsync异步地执行指定的 Runnable,并返回一个新的 CompletionStage,该阶段没有结果。

常用方法

方法描述
supplyAsync()异步地运行一个带返回值的任务。
runAsync()异步地运行一个无返回值的任务。
thenApply()CompletableFuture 任务完成时执行某个操作,并返回新的结果。
thenAccept()当任务完成时执行某个操作,但不返回结果。
thenRun()当任务完成时执行某个操作,无需返回结果。
exceptionally()用于处理任务执行中发生的异常。
handle()处理任务执行中的正常结果或异常结果。
allOf()等待多个 CompletableFuture 全部完成,返回一个新的 CompletableFuture
anyOf()等待多个 CompletableFuture 中的任意一个完成。

CompletableFuture使用示例

1. 基本异步操作

CompletableFuture.supplyAsync() 和 CompletableFuture.runAsync() 是最常用的启动异步任务的方法。

  • supplyAsync() 用于执行带返回值的异步任务。
  • runAsync() 用于执行不带返回值的异步任务。
    public static void main(String[] args) throws ExecutionException, InterruptedException {// 带返回值的异步任务CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {try {Thread.sleep(1000);  // 模拟耗时任务} catch (InterruptedException e) {e.printStackTrace();}return 42;  // 返回结果});// 获取异步任务的结果Integer result = future.get();  // 阻塞,直到任务完成System.out.println("Result: " + result);}

2. 任务链式调用

通过 thenApply(), thenAccept(), thenRun() 等方法,可以将多个异步任务串联在一起。

  • thenApply() 用于处理任务的返回值。
  • thenAccept() 用于消费返回值,但不返回结果。
  • thenRun() 用于执行没有返回值的操作。
    public static void main(String[] args) throws ExecutionException, InterruptedException {CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {return 42;  // 返回结果});// 链式调用,先处理结果,再转换CompletableFuture<Integer> resultFuture = future.thenApply(value -> value * 2)  // 将值乘以2.thenApply(value -> value + 10);  // 再加10Integer result = resultFuture.get();  // 获取最终结果System.out.println("Final Result: " + result);  // 输出 94}

3. 多个异步任务组合

使用 thenCombine()、thenCompose()、allOf() 和 anyOf() 等方法可以组合多个异步任务,执行复杂的操作。

  • thenCombine() 用于将两个独立的异步任务的结果合并。
  • thenCompose() 用于将第一个异步任务的结果作为参数传递给下一个异步任务。
  • allOf() 用于等待多个异步任务完成,并且不关心每个任务的结果。
  • anyOf() 用于等待多个异步任务中的任意一个完成。

示例1:组合两个异步任务

    public static void main(String[] args) throws ExecutionException, InterruptedException {CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> {return 10;});CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> {return 20;});// 合并两个任务的结果CompletableFuture<Integer> combinedFuture = future1.thenCombine(future2, (result1, result2) -> result1 + result2);  // 将两个结果相加Integer result = combinedFuture.get();  // 获取最终结果System.out.println("Combined Result: " + result);  // 输出 30}

示例2:使用 allOf() 等待多个任务完成

    public static void main(String[] args) throws ExecutionException, InterruptedException {CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> {try {Thread.sleep(1000);System.out.println("Task 1 completed");} catch (InterruptedException e) {e.printStackTrace();}});CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> {try {Thread.sleep(1500);System.out.println("Task 2 completed");} catch (InterruptedException e) {e.printStackTrace();}});// 等待多个任务全部完成CompletableFuture.allOf(future1, future2).join();System.out.println("All tasks are completed.");}

4. 异常处理

在异步任务中,异常可能会发生。CompletableFuture 提供了 exceptionally() 和 handle() 方法来处理异常。

  • exceptionally() 用于捕获异常并提供替代值。
  • handle() 可以处理正常结果和异常。
    public static void main(String[] args) throws ExecutionException, InterruptedException {CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {if (true) {throw new RuntimeException("Something went wrong!");}return 42;});// 使用 exceptionally 处理异常并提供默认值CompletableFuture<Integer> resultFuture = future.exceptionally(ex -> {System.out.println("Exception occurred: " + ex.getMessage());return -1;  // 返回默认值});Integer result = resultFuture.get();  // 获取结果System.out.println("Result: " + result);  // 输出 -1}

5. 并行执行多个任务

使用 CompletableFuture.supplyAsync() 或 runAsync() 来并行执行多个任务,然后使用 allOf() 或 anyOf() 等方法等待这些任务的完成。

    public static void main(String[] args) throws ExecutionException, InterruptedException {CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> {try {Thread.sleep(1000);return 1;} catch (InterruptedException e) {return 0;}});CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> {try {Thread.sleep(500);return 2;} catch (InterruptedException e) {return 0;}});// 等待所有任务完成并合并结果CompletableFuture<Integer> result = future1.thenCombine(future2, (res1, res2) -> res1 + res2);  // 将两个结果相加System.out.println("Combined result: " + result.get());  // 输出 3}

6. 处理返回值的转换

通过 thenApply() 等方法可以对异步任务的结果进行转换处理。

    public static void main(String[] args) throws ExecutionException, InterruptedException {CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 10);// 转换结果:将值乘以2CompletableFuture<Integer> transformedFuture = future.thenApply(value -> value * 2);System.out.println("Transformed Result: " + transformedFuture.get());  // 输出 20}

参考文章:
https://blog.csdn.net/weixin_40719914/article/details/108818121

相关文章:

Java8 CompletableFuture异步编程

文章目录 CompletableFuturede介绍CompletableFuturede使用场景常用异步编程实现方案- Thread- ExecutorService- CountDownLatch- CyclicBarrier- ForkJoinPool- CompletableFuture各种实现方案总结 CompletableFuturede结构结构梳理- Future接口- CompletionStage接口常用方法…...

Java的Mvc整合Swagger的knife4框架

Swagger的介绍 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。使用Swagger&#xff0c;就是把相关的信息存储在它定义的描述文件里面&#xff08;yml或json格式&#xff09;&#xff0c;再通过维护这个描述 文件可以去更…...

分阶段构建在复杂系统中的应用:以推荐系统为例

引言 在信息技术飞速发展的今天&#xff0c;复杂系统的构建已经成为许多企业和组织面临的重要挑战。复杂系统通常由多个相互依赖、相互作用的组件构成&#xff0c;这些组件在功能上相互关联&#xff0c;形成了一个高度耦合的整体。对于这样的系统&#xff0c;采用分阶段构建的…...

2024年12月9日历史上的今天大事件早读

1447年12月9日 中国明朝皇帝明宪宗出生 1824年12月9日 西属美洲独立战争的阿亚库乔之战爆发 1882年12月9日 中国清代数学家李善兰逝世 1917年12月9日 葡萄牙共和政府垮台 1935年12月9日 红军表示与东北抗联军一致抗日 1935年12月9日 “一二九”运动爆发 1941年12月9日 中…...

快捷构建AI大模型,源码自取可直接运行

Node.js 和 WebSocket 实现一个基于kimi&#xff08;Moonshot 月之暗大模型&#xff09;的AI工具 前端&#xff1a;前端界面比较容易&#xff0c;只需要简单的额css js即可&#xff0c;本文使用vue作为作为demo。 后端&#xff1a;我java很垃圾&#xff0c;写不出好的代码&am…...

怎么为开源项目做贡献提PR?

GitHub 慢的话&#xff0c;https://ask.csdn.net/questions/8166374 复刻项目 以 https://github.com/open-frame/uniapp-init 项目为例 复刻完就会在你的仓库里有个同样的项目 拉取复刻下来的项目 然后常规的改动项目、git推送。比如我改了一个忽略文件&#xff1a; 提交…...

如何在 JavaScript 中设置定时器?

在 JavaScript 中&#xff0c;设置定时器通常使用两个内置的函数&#xff1a;setTimeout() 和 setInterval()。它们允许你在指定的时间延迟后执行某个函数或者以某个间隔反复执行某个函数。下面&#xff0c;我将结合实际项目代码示例讲解如何使用它们。 1. setTimeout() — 延…...

【学习路线】Java

Java基础 基础 基础语法 面向对象 集合框架 JCF 进阶 并发编程 JVM 企业级开发 框架 Spring Boot Spring Cloud 分布式 高性能 高可用 安全 基建 Docker 实战 数据库 MySQL Redis 计算机基础 计算机组成原理 操作系统 计算机网络 数据结构与算法 设计模式 参考&#xff1a;…...

[GYCTF2020]Easyphp

[GYCTF2020]Easyphp 知识点 反序列化 、字符逃逸 解题 审代码 <?php error_reporting(0); session_start(); function safe($parm){$array array(union,regexp,load,into,flag,file,insert,"",\\,"*","alter");return str_replace($arr…...

JavaScript 数组的高级用法与最佳实践

在前端开发中&#xff0c;JavaScript 数组是不可或缺的工具。它们不仅用于存储数据&#xff0c;还提供了丰富的方法来操作和处理这些数据。掌握 JavaScript 数组的高级用法和最佳实践对于编写高效、可维护的代码至关重要。本文将深入探讨 JavaScript 数组的高级用法&#xff0c…...

通信协议 http、tcp、udp

目录 1. 五层网络协议 2. http 3. tcp、udp 4. tcp 3次握手、4次挥手 5. socket 6. httpclient 遇到的问题 1. Q: 使用 EntityUtils.toString(responseEntity, "UTF-8") 中文乱码 2. Q: org.apache.http.NoHttpResponseException: 221.6.16.203:8890 failed …...

Scala的隐式对象和隐式类

1.隐式对象 object Test1 {case class DatabaseConfig(drive:String,url:String)//隐式对象//格式:就是在对象前面加一个 implicit//作用:给函数当默认值implicit object MySqlConfig extends DatabaseConfig("sqlserver.jdbc","localhost:3306")//定义一…...

【AIGC】2016-ACCV-即时追捕:自然环境下的自动唇音同步

2016-ACCV-Out of time: automated lip sync in the wild 摘要1. 引言1.1 相关作品 2. 表示和架构2.1 音频流2.2 视觉流2.3 损失函数2.4 训练 3. 数据集3.1 编制训练数据 4. 实验4.1 确定口型同步误差4.2 应用&#xff1a;主动说话人检测4.3 应用&#xff1a;唇读 5. 结论参考文…...

启智畅想集装箱箱号识别算法,2台相机即可实现较高识别率

启智畅想集装箱箱号识别算法&#xff0c;在货车通道中使用时&#xff0c;一般配备2台相机即可。启智畅想集装箱箱号识别算法&#xff0c;在货车通道中使用时&#xff0c;一般配备2台相机即可实现对集装箱箱号的精准捕捉与识别。这两台相机分别安装在货车通道的后侧和随意侧面&a…...

让IIS支持PUT请求解决IIS里不支持PUT请求的问题405 Method Not Allowed

文章目录 一、问题描述二、解决方案1.删除WebDav模块2.修改Web.config&#xff08;可选&#xff09; 一、问题描述 好不容易系统开发好了&#xff0c;兴高采烈地上线&#xff0c;部署好了网站&#xff0c;访问正常&#xff0c;打开方式正确&#xff01; 但当我修改某些数据时&…...

入门级捡垃圾工作站记录

入门级捡垃圾工作站记录 想法 一直想着拥有有一台自己的多功能机子&#xff0c;一个笔记本很难事事包办&#xff0c;本来打算配一个台式机&#xff0c;后来研究了一下&#xff0c;索性捡垃圾拼装的工作站&#xff0c;性价比更高&#xff0c;稳定性也更强&#xff0c;而且还可…...

2024.12.9——攻防世界ics-06

知识点&#xff1a;index文件 ics 文件&#xff08;iCalendar 格式文件&#xff09; bp抓包 密码爆破 题目&#xff1a;云平台报表中心收集了设备管理基础服务的数据&#xff0c;但是数据被删除了&#xff0c;只有一处留下了入侵者的痕迹。 一、解题思路 step 1 打开靶机审题…...

微信小程序介绍-以及写项目流程(重要)

前言&#xff1a;本篇文章介绍微信小程序以及项目介绍&#xff1a; 文章介绍&#xff1a;介绍了微信小程序常用的指令、组件、api。tips&#xff1a;最好按照官方文档来进行学习&#xff0c;大致可以我的目录来学习&#xff0c;对于写项目是没有问题的 微信小程序官方文档https…...

国内国际标准!羊毛衫检测项目、检测要求及标准

本文整理了羊毛衫检测项目、检测要求及标准有关内容 一、羊毛衫检测项目 羊毛衫的检测项目主要包括以下几个方面&#xff1a; 纤维含量检测&#xff1a;检测羊毛衫中羊毛及其他纤维的比例&#xff0c;确保纤维质量符合产品标识或相关标准要求。 甲醛含量检测&#xff1a;测…...

MySQL知识大总结(进阶)

一&#xff0c;数据库的约束 1&#xff0c;约束类型 1not null非空约束&#xff0c;标记这个字段不可以为空2unique唯一约束&#xff0c;标记这个字段的值是该列唯一的值&#xff0c;在这一列的其他行&#xff0c;不可以与该字段相等3default 默认约束&#xff0c;在该字段没…...

【C语言】库函数常见的陷阱与缺陷(2):字符串转化函数

目录 一、atoi 函数 1.1. 功能与用法 1.2. 陷阱与缺陷 1.2.1. 输入验证不足 1.2.2. 溢出问题 1.3 安全替代 1.4. 代码示例 二、atof 函数 2.1. 功能与用法 2.2. 陷阱与缺陷 2.3. 安全使用建议 2.4. 代码示例 三、strtol 函数 3.1. 功能与用法 3.2. 陷阱与缺陷 …...

渗透测试基础

渗透测试基础是指对计算机系统、网络或应用程序进行模拟攻击&#xff0c;以发现其安全漏洞和潜在威胁的一种安全评估技术。通过模拟真实的攻击场景&#xff0c;渗透测试帮助组织了解其系统的安全弱点、验证防护措施的有效性&#xff0c;并提供改进建议。 渗透测试的核心概念 1…...

传奇996_53——后端ui窗口局部刷新

描述&#xff1a;一个大窗口&#xff0c;点击某个键&#xff0c;弹出小窗口。 小窗口中将msg存进变量中 大窗口中判断一个参数是否为null&#xff0c;如果不为null&#xff0c;说明界面不是第一次打开&#xff0c;而是被刷新了。就加上小窗口的那个变量 有时小窗口中还有其他…...

C++ constexpr vs const

笼统的讲 constexpr 主要用于编译时期&#xff0c;const用于运行时&#xff0c;但实际上两者都可以同时用于编译时期和运行时。 const const可以修饰全局变量&#xff0c;局部变量&#xff0c;函数参数&#xff0c;指针&#xff0c;引用&#xff0c;也可以修饰类成员函数&…...

【达梦数据库】存储过程调用实践案例-select

目录 前言创建表插入数据查询表中数据创建存储过程打开dbms_output包输出开关调用存储过程 前言 如果要在存储过程中执行一个SELECT语句并处理其结果&#xff0c;你不能直接使用EXECUTE IMMEDIATE&#xff0c;因为EXECUTE IMMEDIATE主要用于执行那些不返回行的语句&#xff08;…...

041_Compare_Matrix_Squre_Sum_in_MATLAB中矩阵平方和的比较

矩阵平方和的计算 矩阵平方和的定义 矩阵平方和的定义是对矩阵中的每一个元素进行平方&#xff0c;然后求和。 对于一个矩阵 A A A&#xff0c;其平方和定义为&#xff1a; sum ∑ i 1 m ∑ j 1 n A ( i , j ) 2 \text{sum} \sum_{i1}^{m}\sum_{j1}^{n} A(i,j)^2 sumi1∑…...

TimeXplusplus——提高时间序列数据的可解释性,避免琐解和分布偏移问题的深度学习可解释性的框架

摘要 论文地址&#xff1a;https://arxiv.org/abs/2405.09308 源码地址&#xff1a;https://github.com/zichuan-liu/timexplusplus 信号传输技术的优化对于推动光通信的发展至关重要。本文将详细探讨线路编码技术的目标及其实现方式。线路编码旨在提高带宽和功率效率&#xf…...

批处理读取文本第n行并赋值给变量?--遍历所有行并赋值给变量数组

::TraceLines.bat goto :test1http://www.bathome.net/thread-27229-1-1.html#批处理如何获取txt文本中某行某列的内容/指定行指定列的内容 http://www.bathome.net/thread-47304-1-1.html#如何用批处理读取文本第二行并赋值给变量&#xff1f; https://github.com/npocmaka/ba…...

嵌入式入门Day26

IO Day2 IO相关函数标准文件流指针缓冲区刷新时机作业 IO相关函数 time #include <time.h>time_t time(time_t *tloc);功能&#xff1a;返回1970年到现在的秒数参数&#xff1a;计算出来的秒数&#xff1b;返回值&#xff1b;成功返回1970年到现在的秒数&#xff0c;失…...

【Vue3项目实战系列一】—— 从零开始一个vue3项目 vue3+javascript+vite 非常详细 手把手教学

&#x1f609; 你好呀&#xff0c;我是爱编程的Sherry&#xff0c;很高兴在这里遇见你&#xff01;我是一名拥有十多年开发经验的前端工程师。这一路走来&#xff0c;面对困难时也曾感到迷茫&#xff0c;凭借不懈的努力和坚持&#xff0c;重新找到了前进的方向。我的人生格言是…...