A brief taste of JIFA

news2024/11/16 7:50:37

JIFA 是阿里贡献给 Eclipse 的一个适用于 Java 应用的问题诊断应用。

它以图形化的方式展示

  • Heap Dump Analysis
  • GC Log Analysis
  • Thread Dump Analysis

因为云环境/生产环境的一些限制,应用的问题可能不能被就地分析,所以Jifa provides a web solution, allowing developers to use the browser to troubleshoot.

Start with Docker

在这里插入图片描述

Heap Dump Analysis

这是一份不断申请内存导致MLE内存泄漏的代码,我们用它来生成Heap Dump这个hprof格式的二进制文件:
在这里插入图片描述
可以看到内存占用一路走高
在这里插入图片描述
上传到JIFA
在这里插入图片描述
打出来了一个内存泄漏的点
在这里插入图片描述
在支配树里面可以看到主要的内存泄露发生在MemoryLeak这个类里面
在这里插入图片描述
系统属性也全打出来了
在这里插入图片描述

GC Log

/opt/adopt_jdk8/bin/java -Xloggc:gc.log -XX:+PrintGCDetails  -jar SPECjvm2008.jar -ikv compress

在这里插入图片描述

Thread Dump

简单的生成Thread Dump的代码

import java.util.Map;

public class ThreadDump {
    public static void main(String[] args) {
        // 在主线程中执行一些任务
        for (int i = 0; i < 5; i++) {
            new Thread(() -> {
                while (true) {
                    // 无限循环,模拟长时间运行的线程
                }
            }).start();
        }

        // 让主线程休眠一段时间
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 输出Thread Dump
        System.out.println(generateThreadDump());
    }

    // 生成Thread Dump
    private static String generateThreadDump() {
        StringBuilder threadDump = new StringBuilder();
        Map<Thread, StackTraceElement[]> threadMap = Thread.getAllStackTraces();
        for (Map.Entry<Thread, StackTraceElement[]> entry : threadMap.entrySet()) {
            Thread thread = entry.getKey();
            StackTraceElement[] stackTraceElements = entry.getValue();
            threadDump.append("Thread: ").append(thread.getName()).append("\n");
            for (StackTraceElement element : stackTraceElements) {
                threadDump.append("\t").append(element.toString()).append("\n");
            }
            threadDump.append("\n");
        }
        return threadDump.toString();
    }
}

它的输出如下

Thread: Notification Thread

Thread: Thread-4
        app//ThreadDump.lambda$0(ThreadDump.java:8)
        app//ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
        java.base@17.0.8/java.lang.Thread.run(Thread.java:833)

Thread: Signal Dispatcher

Thread: Finalizer
        java.base@17.0.8/java.lang.Object.wait(Native Method)
        java.base@17.0.8/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)
        java.base@17.0.8/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:176)
        java.base@17.0.8/java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:172)

Thread: Thread-3
        app//ThreadDump.lambda$0(ThreadDump.java:8)
        app//ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
        java.base@17.0.8/java.lang.Thread.run(Thread.java:833)

Thread: Common-Cleaner
        java.base@17.0.8/java.lang.Object.wait(Native Method)
        java.base@17.0.8/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)
        java.base@17.0.8/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140)
        java.base@17.0.8/java.lang.Thread.run(Thread.java:833)
        java.base@17.0.8/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:162)

Thread: Thread-0
        app//ThreadDump.lambda$0(ThreadDump.java:8)
        app//ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
        java.base@17.0.8/java.lang.Thread.run(Thread.java:833)

Thread: Thread-1
        app//ThreadDump.lambda$0(ThreadDump.java:8)
        app//ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
        java.base@17.0.8/java.lang.Thread.run(Thread.java:833)

Thread: main
        java.base@17.0.8/java.lang.Thread.dumpThreads(Native Method)
        java.base@17.0.8/java.lang.Thread.getAllStackTraces(Thread.java:1662)
        app//ThreadDump.generateThreadDump(ThreadDump.java:28)
        app//ThreadDump.main(ThreadDump.java:22)

Thread: Thread-2
        app//ThreadDump.lambda$0(ThreadDump.java:8)
        app//ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
        java.base@17.0.8/java.lang.Thread.run(Thread.java:833)

Thread: Reference Handler
        java.base@17.0.8/java.lang.ref.Reference.waitForReferencePendingList(Native Method)
        java.base@17.0.8/java.lang.ref.Reference.processPendingReferences(Reference.java:253)
        java.base@17.0.8/java.lang.ref.Reference$ReferenceHandler.run(Reference.java:215)


2023-06-23 15:56:47
Full thread dump OpenJDK 64-Bit Server VM (17.0.8+7 mixed mode, sharing):

Threads class SMR info:
_java_thread_list=0x00007f7404157ca0, length=16, elements={
0x00007f740412c120, 0x00007f740412d500, 0x00007f7404132aa0, 0x00007f7404133e50,
0x00007f7404135260, 0x00007f7404136c10, 0x00007f7404138140, 0x00007f74041395b0,
0x00007f7404140ce0, 0x00007f740414cd70, 0x00007f7404152d60, 0x00007f7404153d10,
0x00007f7404154d10, 0x00007f7404155d10, 0x00007f7404156d00, 0x00007f7404025430
}

"Reference Handler" #2 daemon prio=10 os_prio=0 cpu=0.13ms elapsed=309.58s tid=0x00007f740412c120 nid=0x34a waiting on condition  [0x00007f73e85f6000]
   java.lang.Thread.State: RUNNABLE
        at java.lang.ref.Reference.waitForReferencePendingList(java.base@17.0.8/Native Method)
        at java.lang.ref.Reference.processPendingReferences(java.base@17.0.8/Reference.java:253)
        at java.lang.ref.Reference$ReferenceHandler.run(java.base@17.0.8/Reference.java:215)

"Finalizer" #3 daemon prio=8 os_prio=0 cpu=0.23ms elapsed=309.58s tid=0x00007f740412d500 nid=0x34b in Object.wait()  [0x00007f73e84f5000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(java.base@17.0.8/Native Method)
        - waiting on <0x000000009b302f40> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(java.base@17.0.8/ReferenceQueue.java:155)
        - locked <0x000000009b302f40> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(java.base@17.0.8/ReferenceQueue.java:176)
        at java.lang.ref.Finalizer$FinalizerThread.run(java.base@17.0.8/Finalizer.java:172)

"Signal Dispatcher" #4 daemon prio=9 os_prio=0 cpu=0.11ms elapsed=309.57s tid=0x00007f7404132aa0 nid=0x34c waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Service Thread" #5 daemon prio=9 os_prio=0 cpu=0.08ms elapsed=309.57s tid=0x00007f7404133e50 nid=0x34d runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Monitor Deflation Thread" #6 daemon prio=9 os_prio=0 cpu=17.19ms elapsed=309.57s tid=0x00007f7404135260 nid=0x34e runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" #7 daemon prio=9 os_prio=0 cpu=2.99ms elapsed=309.57s tid=0x00007f7404136c10 nid=0x34f waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   No compile task

"C1 CompilerThread0" #10 daemon prio=9 os_prio=0 cpu=3.77ms elapsed=309.57s tid=0x00007f7404138140 nid=0x350 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   No compile task

"Sweeper thread" #11 daemon prio=9 os_prio=0 cpu=0.07ms elapsed=309.57s tid=0x00007f74041395b0 nid=0x351 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Notification Thread" #12 daemon prio=9 os_prio=0 cpu=0.07ms elapsed=309.57s tid=0x00007f7404140ce0 nid=0x352 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Common-Cleaner" #13 daemon prio=8 os_prio=0 cpu=0.28ms elapsed=309.56s tid=0x00007f740414cd70 nid=0x354 in Object.wait()  [0x00007f73d98f6000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(java.base@17.0.8/Native Method)
        - waiting on <0x000000009b3180b8> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(java.base@17.0.8/ReferenceQueue.java:155)
        - locked <0x000000009b3180b8> (a java.lang.ref.ReferenceQueue$Lock)
        at jdk.internal.ref.CleanerImpl.run(java.base@17.0.8/CleanerImpl.java:140)
        at java.lang.Thread.run(java.base@17.0.8/Thread.java:833)
        at jdk.internal.misc.InnocuousThread.run(java.base@17.0.8/InnocuousThread.java:162)

"Thread-0" #14 prio=5 os_prio=0 cpu=309573.04ms elapsed=309.56s tid=0x00007f7404152d60 nid=0x355 runnable  [0x00007f73d97f5000]
   java.lang.Thread.State: RUNNABLE
        at ThreadDump.lambda$0(ThreadDump.java:8)
        at ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
        at java.lang.Thread.run(java.base@17.0.8/Thread.java:833)

"Thread-1" #15 prio=5 os_prio=0 cpu=309571.34ms elapsed=309.56s tid=0x00007f7404153d10 nid=0x356 runnable  [0x00007f73d96f4000]
   java.lang.Thread.State: RUNNABLE
        at ThreadDump.lambda$0(ThreadDump.java:8)
        at ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
        at java.lang.Thread.run(java.base@17.0.8/Thread.java:833)

"Thread-2" #16 prio=5 os_prio=0 cpu=309574.32ms elapsed=309.56s tid=0x00007f7404154d10 nid=0x357 runnable  [0x00007f73d95f3000]
   java.lang.Thread.State: RUNNABLE
        at ThreadDump.lambda$0(ThreadDump.java:8)
        at ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
        at java.lang.Thread.run(java.base@17.0.8/Thread.java:833)

"Thread-3" #17 prio=5 os_prio=0 cpu=309574.32ms elapsed=309.56s tid=0x00007f7404155d10 nid=0x358 runnable  [0x00007f73d94f2000]
   java.lang.Thread.State: RUNNABLE
        at ThreadDump.lambda$0(ThreadDump.java:8)
        at ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
        at java.lang.Thread.run(java.base@17.0.8/Thread.java:833)

"Thread-4" #18 prio=5 os_prio=0 cpu=309574.21ms elapsed=309.56s tid=0x00007f7404156d00 nid=0x359 runnable  [0x00007f73d93f1000]
   java.lang.Thread.State: RUNNABLE
        at ThreadDump.lambda$0(ThreadDump.java:8)
        at ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
        at java.lang.Thread.run(java.base@17.0.8/Thread.java:833)

"DestroyJavaVM" #19 prio=5 os_prio=0 cpu=24.68ms elapsed=304.55s tid=0x00007f7404025430 nid=0x343 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"VM Thread" os_prio=0 cpu=5.65ms elapsed=309.59s tid=0x00007f74041281a0 nid=0x349 runnable  

"GC Thread#0" os_prio=0 cpu=0.15ms elapsed=309.68s tid=0x00007f7404078190 nid=0x344 runnable  

"G1 Main Marker" os_prio=0 cpu=0.08ms elapsed=309.68s tid=0x00007f7404086ea0 nid=0x345 runnable  

"G1 Conc#0" os_prio=0 cpu=0.06ms elapsed=309.68s tid=0x00007f7404087e00 nid=0x346 runnable  

"G1 Refine#0" os_prio=0 cpu=0.06ms elapsed=309.68s tid=0x00007f74040fb6e0 nid=0x347 runnable  

"G1 Service" os_prio=0 cpu=34.92ms elapsed=309.68s tid=0x00007f74040fc5d0 nid=0x348 runnable  

"VM Periodic Task Thread" os_prio=0 cpu=107.07ms elapsed=309.57s tid=0x00007f7404142a10 nid=0x353 waiting on condition  

JNI global refs: 6, weak refs: 0

Heap
 garbage-first heap   total 112640K, used 2016K [0x0000000094800000, 0x0000000100000000)
  region size 1024K, 1 young (1024K), 0 survivors (0K)
 Metaspace       used 142K, committed 384K, reserved 1114112K
  class space    used 5K, committed 128K, reserved 1048576K

在输出的信息中,JNI global refs: 6, weak refs: 0 指的是JNI(Java Native
Interface)全局引用和弱引用的数量。

JNI允许Java程序与本地代码进行交互,通过调用本地方法来执行一些底层的操作。在这个过程中,Java对象可能会被传递给本地代码,并且本地代码可以持有对这些Java对象的引用。这些引用可以是全局引用或者弱引用。

JNI全局引用:全局引用是一个持久的Java对象引用,它在整个应用程序的生命周期中有效,不会因为方法调用结束而销毁。这些全局引用需要手动释放,否则可能会导致内存泄漏。在输出信息中,JNI
global refs: 6表示当前存在的全局引用数量为6。

JNI弱引用:弱引用是一种不会阻止垃圾回收的引用类型,当被引用的Java对象不再有强引用时,它可能被垃圾回收器回收。在输出信息中,weak
refs: 0表示当前不存在弱引用。

接下来是Heap(堆)部分的信息,它提供了关于Java堆内存的详细信息:

garbage-first heap total 112640K, used
2016K:表明整个Java堆的总大小为112640K,已使用的内存为2016K。

[0x0000000094800000, 0x0000000100000000):表示Java堆的内存地址范围。

region size 1024K, 1 young (1024K), 0 survivors
(0K):说明堆被划分为不同的区域,这里有一个年轻代(young
generation)的区域,大小为1024K,并且没有survivor区域用于存放幸存对象。

然后是关于Metaspace(元空间)的信息:

used 142K, committed 384K, reserved
1114112K:表示当前元空间已使用142K的内存,已分配的内存为384K,保留内存为1114112K。 最后是有关Class
space(类空间)的信息:

used 5K, committed 128K, reserved
1048576K:表示当前类空间已使用5K的内存,已分配的内存为128K,保留内存为1048576K。
这些信息提供了对Java堆和元空间的内存使用情况的统计和分析。

 "Common-Cleaner" #13 daemon prio=8 os_prio=0 cpu=0.28ms elapsed=309.56s tid=0x00007f740414cd70 nid=0x354 in Object.wait()  [0x00007f73d98f6000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(java.base@17.0.8/Native Method)
        - waiting on <0x000000009b3180b8> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(java.base@17.0.8/ReferenceQueue.java:155)
        - locked <0x000000009b3180b8> (a java.lang.ref.ReferenceQueue$Lock)
        at jdk.internal.ref.CleanerImpl.run(java.base@17.0.8/CleanerImpl.java:140)
        at java.lang.Thread.run(java.base@17.0.8/Thread.java:833)
        at jdk.internal.misc.InnocuousThread.run(java.base@17.0.8/InnocuousThread.java:162)

这段输出是有关线程信息的,提供了关于名为 “Common-Cleaner” 的线程的详细信息。下面是对输出信息的逐行解释:

“Common-Cleaner” #13 daemon prio=8 os_prio=0 cpu=0.28ms
elapsed=309.56s tid=0x00007f740414cd70 nid=0x354 in
Object.wait():这是线程的基本描述信息,指示线程名称为
“Common-Cleaner”,线程优先级为8,并且是一个守护线程(daemon)。其他信息包括操作系统优先级、CPU时间以及已经过的时间。

[0x00007f73d98f6000]:这是线程堆栈的起始内存地址。

java.lang.Thread.State: TIMED_WAITING (on object
monitor):这表示线程的状态为TIMED_WAITING,即线程正在等待一段时间。

at java.lang.Object.wait(java.base@17.0.8/Native Method):这行代码表明线程调用了
Object.wait() 方法进行等待。wait() 方法是Java中的一个同步方法,用于使线程进入等待状态,直到其他线程唤醒它。

waiting on <0x000000009b3180b8> (a
java.lang.ref.ReferenceQueue$Lock):这是线程正在等待的对象,在这里是一个锁对象,它的内存地址为
<0x000000009b3180b8>。 at
java.lang.ref.ReferenceQueue.remove(java.base@17.0.8/ReferenceQueue.java:155):这表示线程正在执行
ReferenceQueue.remove() 方法,该方法用于从引用队列中移除对象。

locked <0x000000009b3180b8> (a
java.lang.ref.ReferenceQueue$Lock):这表示线程已经获取了 <0x000000009b3180b8>
对象的锁,因为它是在等待该锁被释放之前进行的。 at
jdk.internal.ref.CleanerImpl.run(java.base@17.0.8/CleanerImpl.java:140):这表示线程正在执行
CleanerImpl.run() 方法,在该方法中清理对象。

at java.lang.Thread.run(java.base@17.0.8/Thread.java:833):这表示线程正在执行
Thread.run() 方法,即线程的主要执行逻辑。

at
jdk.internal.misc.InnocuousThread.run(java.base@17.0.8/InnocuousThread.java:162):这表示线程正在执行的特殊线程
InnocuousThread.run() 方法。

总之,这些信息描述了一个名为 “Common-Cleaner”
的线程的状态、等待的锁对象以及正在执行的方法。该线程可能负责执行对象的清理操作,尤其是回收不再被引用的对象。

我用jstack -l PID > threaddump.txt命令生成了threaddump信息,并导入了JIFA

在这里插入图片描述

踩过的坑

WSL原生环境

Downloading https://services.gradle.org/distributions/gradle-7.3-bin.zip
...........10%...........20%...........30%...........40%...........50%...........60%...........70%...........80%...........90%...........100%

Welcome to Gradle 7.3!

Here are the highlights of this release:
 - Easily declare new test suites in Java projects
 - Support for Java 17
 - Support for Scala 3

For more details see https://docs.gradle.org/7.3/release-notes.html

Starting a Gradle Daemon (subsequent builds will be faster)

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':backend:heap-dump-analyzer:eclipse-mat-deps'.
> java.lang.RuntimeException: java.net.SocketTimeoutException: timeout

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1m 45s
➜  jifa git:(master) java -version
openjdk version "11.0.18" 2023-01-17
OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
> Task :backend:master:runVertxCodeGen
Note: Loaded RxJava2 code generator
Note: Loaded service_proxy_handler code generator
Note: Loaded service_proxy code generator
Note: Loaded data_object_converters code generator
warning: Supported source version 'RELEASE_8' from annotation processor 'org.gradle.api.internal.tasks.compile.processing.TimeTrackingProcessor' less than -source '11'
Note: Non future method org.eclipse.jifa.master.service.AdminService: void isAdmin(java.lang.String userId, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Boolean>> handler)
Note: Non future method org.eclipse.jifa.master.service.AdminService: void add(java.lang.String userId, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.AdminService: void queryAll(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.util.List<org.eclipse.jifa.master.entity.Admin>>> handler)
Note: Non future method org.eclipse.jifa.master.service.SupportService: void isDBConnectivity(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Boolean>> handler)
Note: Non future method org.eclipse.jifa.master.service.SupportService: void startDummyWorker(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.SupportService: void stopDummyWorker(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.ConfigService: void getConfig(java.lang.String configName, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.String>> handler)
Note: Non future method org.eclipse.jifa.master.service.JobService: void findActive(org.eclipse.jifa.master.entity.enums.JobType jobType, java.lang.String target, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Job>> handler)
Note: Non future method org.eclipse.jifa.master.service.JobService: void pendingJobsInFrontOf(org.eclipse.jifa.master.entity.Job job, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.util.List<org.eclipse.jifa.master.entity.Job>>> handler)
Note: Non future method org.eclipse.jifa.master.service.JobService: void allocate(java.lang.String userId, java.lang.String hostIP, org.eclipse.jifa.master.entity.enums.JobType jobType, java.lang.String target, java.lang.String attachment, long estimatedLoad, boolean immediate, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Job>> handler)
Note: Non future method org.eclipse.jifa.master.service.JobService: void finish(org.eclipse.jifa.master.entity.enums.JobType type, java.lang.String target, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.WorkerService: void queryAll(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.util.List<org.eclipse.jifa.master.entity.Worker>>> handler)
Note: Non future method org.eclipse.jifa.master.service.WorkerService: void diskCleanup(java.lang.String hostIP, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.WorkerService: void selectMostIdleWorker(io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Worker>> handler)
Note: Non future method org.eclipse.jifa.master.service.WorkerService: void selectWorkerByIP(java.lang.String hostIp, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Worker>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void count(java.lang.String userId, org.eclipse.jifa.common.enums.FileType type, java.lang.String expectedFilename, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Integer>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void files(java.lang.String userId, org.eclipse.jifa.common.enums.FileType type, java.lang.String expectedFilename, int page, int pageSize, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.util.List<org.eclipse.jifa.master.entity.File>>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void file(java.lang.String name, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.File>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void deleteFile(java.lang.String name, org.eclipse.jifa.master.entity.enums.Deleter deleter, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void transfer(java.lang.String userId, org.eclipse.jifa.common.enums.FileType type, java.lang.String originalName, java.lang.String name, org.eclipse.jifa.master.model.TransferWay transferWay, java.util.Map<java.lang.String,java.lang.String> transferInfo, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Job>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void transferDone(java.lang.String name, org.eclipse.jifa.common.enums.FileTransferState transferState, long size, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void setShared(java.lang.String name, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void updateDisplayName(java.lang.String name, java.lang.String displayName, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.AdminService: void isAdmin(java.lang.String userId, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Boolean>> handler)
Note: Non future method org.eclipse.jifa.master.service.AdminService: void add(java.lang.String userId, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.AdminService: void queryAll(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.util.List<org.eclipse.jifa.master.entity.Admin>>> handler)
Note: Non future method org.eclipse.jifa.master.service.SupportService: void isDBConnectivity(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Boolean>> handler)
Note: Non future method org.eclipse.jifa.master.service.SupportService: void startDummyWorker(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.SupportService: void stopDummyWorker(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.ConfigService: void getConfig(java.lang.String configName, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.String>> handler)
Note: Non future method org.eclipse.jifa.master.service.JobService: void findActive(org.eclipse.jifa.master.entity.enums.JobType jobType, java.lang.String target, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Job>> handler)
Note: Non future method org.eclipse.jifa.master.service.JobService: void pendingJobsInFrontOf(org.eclipse.jifa.master.entity.Job job, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.util.List<org.eclipse.jifa.master.entity.Job>>> handler)
Note: Non future method org.eclipse.jifa.master.service.JobService: void allocate(java.lang.String userId, java.lang.String hostIP, org.eclipse.jifa.master.entity.enums.JobType jobType, java.lang.String target, java.lang.String attachment, long estimatedLoad, boolean immediate, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Job>> handler)
Note: Non future method org.eclipse.jifa.master.service.JobService: void finish(org.eclipse.jifa.master.entity.enums.JobType type, java.lang.String target, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.WorkerService: void queryAll(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.util.List<org.eclipse.jifa.master.entity.Worker>>> handler)
Note: Non future method org.eclipse.jifa.master.service.WorkerService: void diskCleanup(java.lang.String hostIP, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.WorkerService: void selectMostIdleWorker(io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Worker>> handler)
Note: Non future method org.eclipse.jifa.master.service.WorkerService: void selectWorkerByIP(java.lang.String hostIp, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Worker>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void count(java.lang.String userId, org.eclipse.jifa.common.enums.FileType type, java.lang.String expectedFilename, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Integer>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void files(java.lang.String userId, org.eclipse.jifa.common.enums.FileType type, java.lang.String expectedFilename, int page, int pageSize, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.util.List<org.eclipse.jifa.master.entity.File>>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void file(java.lang.String name, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.File>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void deleteFile(java.lang.String name, org.eclipse.jifa.master.entity.enums.Deleter deleter, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void transfer(java.lang.String userId, org.eclipse.jifa.common.enums.FileType type, java.lang.String originalName, java.lang.String name, org.eclipse.jifa.master.model.TransferWay transferWay, java.util.Map<java.lang.String,java.lang.String> transferInfo, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Job>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void transferDone(java.lang.String name, org.eclipse.jifa.common.enums.FileTransferState transferState, long size, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void setShared(java.lang.String name, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void updateDisplayName(java.lang.String name, java.lang.String displayName, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Generated model org.eclipse.jifa.master.entity.Admin: org.eclipse.jifa.master.entity.AdminConverter
Note: Generated model org.eclipse.jifa.master.service.AdminService: org.eclipse.jifa.master.service.AdminServiceVertxProxyHandler
Note: Generated model org.eclipse.jifa.master.service.FileService: org.eclipse.jifa.master.service.FileServiceVertxProxyHandler
Note: Generated model org.eclipse.jifa.master.service.ConfigService: org.eclipse.jifa.master.service.ConfigServiceVertxProxyHandler
Note: Generated model org.eclipse.jifa.master.service.FileService: org.eclipse.jifa.master.service.FileServiceVertxEBProxy
Note: Generated model org.eclipse.jifa.master.service.FileService: org.eclipse.jifa.master.service.reactivex.FileService
Note: Generated model org.eclipse.jifa.master.entity.Worker: org.eclipse.jifa.master.entity.WorkerConverter
Note: Generated model org.eclipse.jifa.master.entity.Master: org.eclipse.jifa.master.entity.MasterConverter
Note: Generated model org.eclipse.jifa.master.service.SupportService: org.eclipse.jifa.master.service.SupportServiceVertxEBProxy
Note: Generated model org.eclipse.jifa.master.service.SupportService: org.eclipse.jifa.master.service.SupportServiceVertxProxyHandler
Note: Generated model org.eclipse.jifa.master.entity.File: org.eclipse.jifa.master.entity.FileConverter
Note: Generated model org.eclipse.jifa.master.service.SupportService: org.eclipse.jifa.master.service.reactivex.SupportService
Note: Generated model org.eclipse.jifa.master.service.ConfigService: org.eclipse.jifa.master.service.ConfigServiceVertxEBProxy
Note: Generated model org.eclipse.jifa.master.service.WorkerService: org.eclipse.jifa.master.service.WorkerServiceVertxEBProxy
Note: Generated model org.eclipse.jifa.master.service.JobService: org.eclipse.jifa.master.service.JobServiceVertxProxyHandler
Note: Generated model org.eclipse.jifa.master.entity.Job: org.eclipse.jifa.master.entity.JobConverter
Note: Generated model org.eclipse.jifa.master.service.WorkerService: org.eclipse.jifa.master.service.WorkerServiceVertxProxyHandler
Note: Generated model org.eclipse.jifa.master.entity.Config: org.eclipse.jifa.master.entity.ConfigConverter
Note: Generated model org.eclipse.jifa.master.service.JobService: org.eclipse.jifa.master.service.reactivex.JobService
Note: Generated model org.eclipse.jifa.master.service.ConfigService: org.eclipse.jifa.master.service.reactivex.ConfigService
Note: Generated model org.eclipse.jifa.master.service.AdminService: org.eclipse.jifa.master.service.reactivex.AdminService
Note: Generated model org.eclipse.jifa.master.entity.GlobalLock: org.eclipse.jifa.master.entity.GlobalLockConverter
Note: Generated model org.eclipse.jifa.master.service.WorkerService: org.eclipse.jifa.master.service.reactivex.WorkerService
Note: Generated model org.eclipse.jifa.master.service.AdminService: org.eclipse.jifa.master.service.AdminServiceVertxEBProxy
Note: Generated model org.eclipse.jifa.master.service.JobService: org.eclipse.jifa.master.service.JobServiceVertxEBProxy
warning: Unclosed files for the types 'PathForCodeGenProcessor'; these types will not undergo annotation processing
2 warnings

> Task :backend:master:compileJava
Note: /home/bernard/project/jifa/backend/master/src/main/generated/org/eclipse/jifa/master/entity/FileConverter.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

> Task :generateSSHConfig
Enter passphrase (empty for no passphrase): Enter same passphrase again: 
> Task :backend:thread-dump-analyzer:compileJava
/home/bernard/project/jifa/backend/thread-dump-analyzer/src/main/java/org/eclipse/jifa/tda/model/Snapshot.java:30: warning: Not generating hashCode: One of equals or hashCode exists. You should either write both of these or none of these (in the latter case, lombok generates them).
@Data
^
1 warning

> Task :backend:heap-dump-analyzer:impl:compileJava
Note: /home/bernard/project/jifa/backend/heap-dump-analyzer/impl/src/main/java/org/eclipse/jifa/hda/impl/HeapDumpAnalyzerImpl.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

> Task :backend:worker:test
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.protobuf.UnsafeUtil (file:/home/bernard/project/jifa/backend/heap-dump-analyzer/mat-deps/configuration/org.eclipse.osgi/29/0/.cp/target/dependency/MatCalciteDependencies.jar) to field java.nio.Buffer.address
WARNING: Please consider reporting this to the maintainers of com.google.protobuf.UnsafeUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

> Task :frontend:npmInstall
npm WARN ERESOLVE overriding peer dependency
npm WARN While resolving: echarts-liquidfill@2.0.6
npm WARN Found: echarts@5.3.3
npm WARN node_modules/echarts
npm WARN   echarts@"^5.3.3" from the root project
npm WARN   1 more (v-charts)
npm WARN 
npm WARN Could not resolve dependency:
npm WARN peer echarts@"^4.8.0" from echarts-liquidfill@2.0.6
npm WARN node_modules/v-charts/node_modules/echarts-liquidfill
npm WARN   echarts-liquidfill@"^2.0.2" from v-charts@1.19.0
npm WARN   node_modules/v-charts
npm WARN 
npm WARN Conflicting peer dependency: echarts@4.9.0
npm WARN node_modules/echarts
npm WARN   peer echarts@"^4.8.0" from echarts-liquidfill@2.0.6
npm WARN   node_modules/v-charts/node_modules/echarts-liquidfill
npm WARN     echarts-liquidfill@"^2.0.2" from v-charts@1.19.0
npm WARN     node_modules/v-charts
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated stable@0.1.8: Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility
npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
npm WARN deprecated svgo@1.3.2: This SVGO version is no longer supported. Upgrade to v2.x.x.
npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated
npm WARN deprecated request-promise-native@1.0.9: request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated querystring@0.2.0: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
npm WARN deprecated popper.js@1.16.1: You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1
npm WARN deprecated html-webpack-plugin@3.2.0: 3.x is no longer supported
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated eslint-loader@2.2.1: This loader has been deprecated. Please use eslint-webpack-plugin
npm WARN deprecated circular-json@0.3.3: CircularJSON is in maintenance only, flatted is its successor.
npm WARN deprecated babel-eslint@10.1.0: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.
npm WARN deprecated @hapi/topo@3.1.6: This version has been deprecated and is no longer supported or maintained
npm WARN deprecated @hapi/hoek@8.5.1: This version has been deprecated and is no longer supported or maintained
npm WARN deprecated @hapi/joi@15.1.1: Switch to 'npm install joi'
npm WARN deprecated @hapi/address@2.1.4: Moved to 'npm install @sideway/address'
npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
npm WARN deprecated @hapi/bourne@1.3.2: This version has been deprecated and is no longer supported or maintained
npm WARN deprecated core-js@2.6.12: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.

added 1445 packages, and audited 1446 packages in 2m

93 packages are looking for funding
  run `npm fund` for details

50 vulnerabilities (1 low, 18 moderate, 26 high, 5 critical)

To address issues that do not require attention, run:
  npm audit fix

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.
npm notice 
npm notice New minor version of npm available! 9.5.0 -> 9.7.2
npm notice Changelog: <https://github.com/npm/cli/releases/tag/v9.7.2>
npm notice Run `npm install -g npm@9.7.2` to update!
npm notice 

> Task :frontend:build

> jifa@0.2.0-SNAPSHOT prod-build
> vue-cli-service build --mode production --dest build


-  Building for production...
Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:71:19)
    at Object.createHash (node:crypto:133:10)
    at module.exports (/home/bernard/project/jifa/frontend/node_modules/webpack/lib/util/createHash.js:135:53)
    at NormalModule._initBuildHash (/home/bernard/project/jifa/frontend/node_modules/webpack/lib/NormalModule.js:417:16)
    at handleParseError (/home/bernard/project/jifa/frontend/node_modules/webpack/lib/NormalModule.js:471:10)
    at /home/bernard/project/jifa/frontend/node_modules/webpack/lib/NormalModule.js:503:5
    at /home/bernard/project/jifa/frontend/node_modules/webpack/lib/NormalModule.js:358:12
    at /home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:373:3
    at iterateNormalLoaders (/home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
    at iterateNormalLoaders (/home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:221:10)
    at /home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:236:3
    at runSyncOrAsync (/home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:130:11)
    at iterateNormalLoaders (/home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:232:2)
    at Array.<anonymous> (/home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:205:4)
    at Storage.finished (/home/bernard/project/jifa/frontend/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:55:16)
    at /home/bernard/project/jifa/frontend/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:91:9
Browserslist: caniuse-lite is outdated. Please run:
  npx update-browserslist-db@latest
  Why you should do it regularly: https://github.com/browserslist/update-db#readme
/home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:114
                        throw e;
                        ^

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:71:19)
    at Object.createHash (node:crypto:133:10)
    at module.exports (/home/bernard/project/jifa/frontend/node_modules/webpack/lib/util/createHash.js:135:53)
    at NormalModule._initBuildHash (/home/bernard/project/jifa/frontend/node_modules/webpack/lib/NormalModule.js:417:16)
    at handleParseError (/home/bernard/project/jifa/frontend/node_modules/webpack/lib/NormalModule.js:471:10)
    at /home/bernard/project/jifa/frontend/node_modules/webpack/lib/NormalModule.js:503:5
    at /home/bernard/project/jifa/frontend/node_modules/webpack/lib/NormalModule.js:358:12
    at /home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:373:3
    at iterateNormalLoaders (/home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
    at iterateNormalLoaders (/home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:221:10)
    at /home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:236:3
    at context.callback (/home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:111:13)
    at /home/bernard/project/jifa/frontend/node_modules/cache-loader/dist/index.js:118:7
    at /home/bernard/project/jifa/frontend/node_modules/graceful-fs/graceful-fs.js:61:14
    at FSReqCallback.oncomplete (node:fs:198:23) {
  opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}

Node.js v18.15.0

> Task :frontend:build FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':frontend:build'.
> Process 'command 'npm'' finished with non-zero exit value 1

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.3/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 36m 45s
40 actionable tasks: 39 executed, 1 up-to-date

Ref

在这里插入图片描述

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

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

相关文章

关于运动模糊问题的分析及处理方法

1、问题背景 前段时间有做一个化妆镜项目&#xff0c;就是一面镜子上装有一个摄像头&#xff0c;用户对着镜子化妆时&#xff0c;可同时用来采集人脸信息&#xff0c;分析人脸用的。客户反馈抓拍静止的人脸图像时&#xff0c;画面正常&#xff0c;而当人脸稍微运动时&#xff…

java springboot整合MyBatis实现分页查询以及带条件的分页查询

之前的文章 java springboot整合MyBatis做数据库查询操作操作了springboot整合MyBatis&#xff0c;然后简单做了个按id查询的操作 那么 我们按上文搭建起的环境继续 我们直接在staffDao接口中声明一个分页函数 Select("select * from staff limit #{page},#{pageSize}&q…

【Vue】Vite 组件化开发

文章目录 组件化开发一、组件化开发思想二、Vue 组件的构成2.1 组件组成结构2.2 组件 template 节点2.2.1 在 template 中使用指令2.2.2 在 template 中定义根节点 2.3 组件的 script 模板 三、组件的基本使用3.1 组件的注册3.1.1 全局组件注册3.1.2 局部组件注册 3.2 组件样式…

ffmpeg命令参数

主要参数 -i 设定输入流 -f 设定输出格式&#xff08;format&#xff09; -ss 开始时间 -t 时间长度视频参数 -vframes 设置要输出的视频帧数 -b 设定视频码率 -b:v 视频码率 -r 设定帧率 -s 设定画面的宽与高 -vn 不处理视频 -aspect aspect 设置横纵比4:3 或16:9 或1.333或…

软件项目管理 第三章软件项目的启动过程课后习题参考答案——主编:李冰、张桥珍、刘玉娥

第三章 软件项目的启动过程 课后习题参考答案 1.选择题 &#xff08;1&#xff09;乙方在项目初始阶段的主要任务不包含以下哪一项&#xff08;D&#xff09;。 A. 项目分析 B. 竞标 C. 合同签署 D. 合同管理 &#xff08;2&#xff09;项目章程中不…

Spring Boot Configuration Annotation Processor not configured 问题解决

目录 问题抛出&#xff1a; ConfigurationProperties 问题抛出&#xff1a; 进行Spring Boot配置文件部署时&#xff0c;发出警告Spring Boot Configuration Annotation Processor not configured&#xff0c;但是不影响运行。 不过有时候springboot项目出错了并且排除了所有…

【裸机开发】中断系统 —— 中断向量表(设置中断向量偏移的原因)

之前的LED驱动不存在中断&#xff0c;也就不包含中断的初始化。如果程序包含了中断&#xff0c;我们应还需要初始化哪些内容&#xff1f;要解决这个问题&#xff0c;我们需要先了解一个中断系统包含了哪些内容。 ① 中断向量表&#xff1a;描述中断对应的中断服务函数&#xf…

C++笔记之stack、queue、priority_queue、deque

code review! C笔记之stack、queue、priority_queue、deque 文章目录 C笔记之stack、queue、priority_queue、deque一.cppreference介绍1.stack2.queue3.priority_queue4.deque 二.容器适配器三.stack详解1.创建一个不包含任何元素的 stack 适配器&#xff0c;并采用默认的 de…

Debian 12中再次安装R软件

上篇博客&#xff08;地址&#xff1a;https://blog.csdn.net/my1114/article/details/131347147?spm1001.2014.3001.5501&#xff09;中所述的&#xff0c;在Debian12中按默认方式编译安装R软件&#xff0c;有一定的局限性。 如下图所示&#xff1a; 因此&#xff0c;本…

Redis入门(2)-字符串

String是Redis最基础、最常见的类型&#xff0c;string类型的value中可存放任意数据&#xff0c;包括数值型、二进制的图片、音频、视频、序列化对象等。一个String类型的value最大是512M. 1.getset k v 若key存在返回之前的值&#xff0c;若不存在返回nil 2.strlen key 返…

【面试】标准库相关题型(三)

文章目录 1. unordered_map底层实现原理1.1 散列表1.2 STL 中的 unordered_map 的实现1.3 unordered_map 2. 迭代器底层实现原理及种类2.1 主要作用2.2 底层原理2.3 迭代器类型属性 3. 迭代器失效3.1 容器类别3.2 失效情况3.3 C11容器类别 4. STL容器的线程安全4.1 背景知识4.2…

Git分支使用方法

目录 前言 一、查看可用分支 二、创建新分支 三、切换到新分支 四、在新分支上进行工作 五、提交更改 六、切换回主分支 前言 分支是指在同一个代码仓库中的不同版本线。它们可以被用来同时开展不同的开发任务、修复bug或实现新功能&#xff0c;而不会影响到主要的代码…

【数据结构】栈和队列的应用

&#x1f387;[数据结构]栈和队列的应用&#x1f387; &#x1f31f; 正式开始学习数据结构啦~此专栏作为学习过程中的记录&#x1f31f; 文章目录 &#x1f387;[数据结构]栈和队列的应用&#x1f387;&#x1f370;一.栈在括号表达式中的应用&#x1f680;1.原理&#x1f680…

Linux1.基础指令(上)

1.Linux系统可创建多个用户。 2.创建用户:adduser 用户名 设置密码:passwd 用户名 (系统会提示再次输入密码&#xff0c;注意密码不回显)。 3.删除用户首先要在root权限下&#xff0c;输入指令:userdel -r 用户名。 4.ls指令 ls -a(显示所有文件&#xff0c;包括隐藏文件) :…

【软件设计师暴击考点】计算机组成原理与体系结构高频考点暴击系列【二】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件…

【P3】kali 最强渗透工具 - metasploit(安装配置及使用教程详解)

文章目录 一、metasploit 是什么&#xff1f;二、metasploit 攻击 windows 操作系统三、metasploit 攻击永恒之蓝全流程四、metasploit 攻击成功后能做什么4.1、操作步骤4.2、攻击示例 五、msfvenom 绕过杀毒软件技巧5.1、捆绑木马5.2、加壳&#xff1a;压缩壳、加密壳5.2.1、T…

分片和一致性哈希

在设计大规模分布式系统时&#xff0c;你可能会遇到两个概念——分片&#xff08;sharding&#xff09;和一致性哈希&#xff08;consistent hashing&#xff09;。虽然我在网上找到了很多关于这些术语的解释&#xff0c;但它们让我感到有些困惑。我觉得分片和一致性哈希本质上…

Web网页制作-知识点(2)——常用文本标签、列表标签、表格标签、Form表单、块元素与行内元素(内联元素)

目录 常用文本标签 列表标签 有序列表 无序列表 定义列表 表格标签 表格组成与特点 表格标签 表格属性 ​​​合并表格单元格 Form表单 属性说明 表单元素 文本框 密码框 提交按钮 块元素与行内元素&#xff08;内联元素&#xff09; 内联元素和块级元素…

Flink JdbcSink.sink源码解析及常见问题

文章目录 源码入口我们看下flush方法干了什么flush方法至此走完了&#xff0c;但是什么时机写入的数据呐&#xff1f;补充总结&#xff1a; 常见问题1. 为什么会出现JdbcSink.sink方法插入Mysql无数据的情况&#xff1f;2. JdbcSink.sink写Phoenix无数据问题 参考 基于Flink 1.…

设计模式之组合模式笔记

设计模式之组合模式笔记 说明Composite(组合)目录组合模式示例类图菜单组件抽象类菜单类菜单项类测试类 说明 记录下学习设计模式-组合模式的写法。JDK使用版本为1.8版本。 Composite(组合) 意图:将对象组合成树型结构以表示“部分-整体”的层次结构。Composite使得用户对单…