Springboot 整合 Java DL4J 搭建智能问答系统

news2024/11/22 6:50:18

🧑 博主简介:CSDN博客专家历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程高并发设计Springboot和微服务,熟悉LinuxESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。

在这里插入图片描述


在这里插入图片描述

Springboot 整合 Java DL4J 搭建智能问答系统

引言

在当今数字化时代,智能问答系统变得越来越重要。无论是在客户服务、在线教育还是知识获取等领域,能够准确回答用户各种问题的系统都有着巨大的价值。

智能问答系统的核心在于利用知识图谱和语言模型来处理用户输入的自然语言,并提供准确的答案。知识图谱是一种语义网络,它以图的形式存储知识,节点表示实体,边表示实体之间的关系。通过查询知识图谱,可以获取与问题相关的知识。而语言模型则是对自然语言的概率分布建模,有助于理解问题的语义。

构建这样一个智能问答系统面临着诸多挑战。首先,自然语言处理本身就具有高度的复杂性,包括词汇歧义语法结构多变等问题。其次,要有效地整合知识图谱和语言模型,使它们协同工作,以提供最佳答案。

自然语言处理是一门涉及计算机科学、语言学和人工智能的交叉学科,旨在让计算机能够理解、生成和处理人类语言。智能问答系统是自然语言处理的一个重要应用领域,它可以通过对用户问题的理解和分析,从知识库中检索出最相关的答案并返回给用户。在构建智能问答系统时,需要用到多种自然语言处理技术,如词法分析句法分析语义理解知识图谱构建等。

Spring Boot 是一个基于 Spring 框架的快速开发框架,它简化了 Spring 应用的开发过程,提供了自动配置、快速启动和部署等功能。Java Deeplearning4j 是一个基于 Java 的深度学习库,它支持多种深度学习算法和模型,如卷积神经网络循环神经网络等。将 Spring BootJava Deeplearning4j 整合起来,可以快速构建一个高效可靠的智能问答系统。

本文将详细介绍如何使用 Spring Boot 整合 Java Deeplearning4j 来构建智能问答系统,包括系统的架构设计技术选型数据集准备模型训练系统实现测试等方面。通过本文的介绍,可以了解到智能问答系统的构建过程和关键技术,方便在自己的项目开发提供参考。

一、技术选型

(一)神经网络选择

在本智能问答系统中,我们选择使用循环神经网络Recurrent Neural NetworkRNN)来实现语言模型。RNN 是一种专门处理序列数据的神经网络,它可以对输入的序列数据进行建模,捕捉序列中的上下文信息。在自然语言处理中,文本数据通常是一种序列数据,因此 RNN 非常适合用于自然语言处理任务。

具体来说,我们选择使用长短期记忆网络Long Short-Term MemoryLSTM)作为 RNN 的一种变体。LSTM 可以有效地解决传统 RNN 存在的长期依赖问题,能够更好地捕捉文本中的长期依赖关系。此外,LSTM 还具有记忆单元门控机制,可以控制信息的流动和遗忘,提高模型的性能和稳定性。

(二)选择理由

  1. 处理序列数据的能力
    • RNN 及其变体 LSTM 专门设计用于处理序列数据,自然语言文本正是一种典型的序列数据,其中单词的顺序对于理解语义至关重要。
    • LSTM 能够记住长期的上下文信息,这对于理解复杂的句子结构和语义关系非常有帮助。例如,在回答问题时,系统需要考虑问题的整个上下文,而不仅仅是当前的单词或短语。
  2. 解决长期依赖问题
    • 传统的 RNN 在处理长序列数据时会遇到长期依赖问题,即难以捕捉远距离的依赖关系。LSTM 通过引入记忆单元和门控机制,有效地解决了这个问题。
    • 这使得智能问答系统能够更好地理解长句子和复杂的问题,提高回答的准确性。
  3. 性能和稳定性
    • LSTM 具有较高的性能稳定性,能够在大规模数据集上进行训练,并且不容易出现过拟合现象。
    • 这对于构建一个可靠的智能问答系统非常重要,因为系统需要处理大量的用户问题和知识库中的数据。
  4. 广泛的应用和研究基础
    • LSTM 在自然语言处理领域得到了广泛的应用和研究,有很多成熟的算法和技术可以借鉴。
    • 这使得我们在构建智能问答系统时可以更加高效地进行开发和优化。

二、数据集准备

(一)数据集格式

我们的智能问答系统需要一个大规模的数据集来进行训练和测试。数据集的格式通常包括问题和答案对,每个问题和答案都用自然语言文本表示。以下是一个数据集的示例格式:

问题答案
什么是人工智能?人工智能是指计算机系统能够执行通常需要人类智能才能完成的任务,如学习、推理、解决问题等。
深度学习有哪些应用?深度学习在图像识别、语音识别、自然语言处理等领域有广泛的应用。
如何学习编程?学习编程可以通过在线课程、书籍、实践项目等方式进行。
自然语言处理的应用有哪些?自然语言处理的应用包括机器翻译、文本分类、情感分析、问答系统等。

在实际应用中,数据集的格式可能会根据具体的需求和数据源而有所不同。例如,如果我们使用知识图谱作为数据源,数据集的格式可能会包括实体、关系和属性等信息。

(二)样例目录格式

为了方便管理和使用数据集,我们可以将数据集按照一定的目录结构进行组织。以下是一个样例目录格式:

dataset/
├── train/
│   ├── questions.txt
│   └── answers.txt
├── test/
│   ├── questions.txt
│   └── answers.txt
└── validation/
    ├── questions.txt
    └── answers.txt

在这个目录结构中,dataset 是数据集的根目录,包含三个子目录:traintestvalidation。分别用于存储训练集测试集验证集。每个子目录下都有两个文件:questions.txtanswers.txt,分别存储问题和答案。

(三)数据预处理

在使用数据集进行训练之前,我们需要对数据进行预处理,以提高模型的性能和泛化能力。数据预处理的步骤通常包括以下几个方面:

  1. 文本清洗
    • 去除文本中的噪声和无用信息,如标点符号特殊字符HTML 标签等。
    • 进行文本规范化处理,如大小写转换词干提取词性标注等。
  2. 分词
    • 将文本分割成单词或词组,以便模型进行处理。
    • 可以使用现有的分词工具,如 JiebaHanLP 等。
  3. 建立词汇表
    • 统计数据集中出现的所有单词,并建立一个词汇表。
    • 词汇表可以用于将单词转换为数字表示,以便模型进行处理。
  4. 数据编码
    • 将问题和答案转换为数字序列,以便模型进行处理。
    • 可以使用词汇表将单词转换为数字表示,或者使用其他编码方式,如 One-Hot 编码、Word2Vec 等。

三、技术介绍

(一)Spring Boot 简介

Spring Boot 是一个基于 Spring 框架的快速开发框架,它简化了 Spring 应用的开发过程,提供了自动配置、快速启动和部署等功能。Spring Boot 具有以下特点:

  1. 简化配置
    • Spring Boot 采用约定大于配置的原则,自动配置了很多常用的组件和功能,减少了开发人员的配置工作量。
    • 开发人员只需要关注业务逻辑的实现,而不需要花费大量时间在配置文件上。
  2. 快速启动
    • Spring Boot 内置了 TomcatJetty 等 Web 容器,可以直接运行 Spring 应用,无需额外的服务器部署。
    • 启动速度非常快,可以大大提高开发效率。
  3. 微服务支持
    • Spring Boot 可以轻松地构建微服务架构,支持服务注册与发现、负载均衡、断路器等功能。
    • 可以方便地进行分布式系统的开发和部署。
  4. 易于集成
    • Spring Boot 可以与其他流行的框架和技术进行集成,如 MyBatisRedisRabbitMQ 等。
    • 可以根据项目的需求选择合适的组件和技术,提高开发效率和系统性能。

(二)Java Deeplearning4j 简介

Java Deeplearning4j 是一个基于 Java 的深度学习库,它支持多种深度学习算法和模型,如神经网络、卷积神经网络、循环神经网络等。Java Deeplearning4j 具有以下特点:

  1. 基于 Java 语言
    • Java Deeplearning4j 是一个完全用 Java 语言实现的深度学习库,无需依赖其他语言的运行环境。
    • 这使得它可以在 Java 应用中方便地进行集成和使用。
  2. 支持多种深度学习算法和模型
    • Java Deeplearning4j 支持多种深度学习算法和模型,如神经网络、卷积神经网络、循环神经网络等。
    • 可以根据不同的任务和需求选择合适的算法和模型。
  3. 易于使用
    • Java Deeplearning4j 提供了简单易用的 API,使得开发人员可以轻松地构建和训练深度学习模型。
    • 同时,它还提供了丰富的文档和示例代码,方便开发人员学习和使用。
  4. 高性能
    • Java Deeplearning4j 采用了分布式计算并行处理技术,可以在大规模数据集上进行高效的训练和推理。
    • 同时,它还支持 GPU 加速,可以进一步提高模型的训练速度。

(三)知识图谱简介

知识图谱是一种结构化的语义知识库,它以图形的方式表示实体之间的关系。知识图谱可以用于自然语言处理、智能问答、推荐系统等领域,为这些应用提供丰富的语义信息和知识支持。知识图谱具有以下特点:

  1. 结构化表示
    • 知识图谱以图形的方式表示实体之间的关系,具有结构化的特点。
    • 这使得知识图谱可以方便地进行存储、查询和推理。
  2. 语义丰富
    • 知识图谱中的实体和关系都具有明确的语义含义,可以为自然语言处理等应用提供丰富的语义信息。
    • 例如,在智能问答系统中,知识图谱可以帮助系统理解问题的语义,从而提供更准确的答案。
  3. 可扩展性
    • 知识图谱可以不断地扩展和更新,随着新的知识和数据的加入,知识图谱可以不断地完善和优化。
    • 这使得知识图谱可以适应不同的应用场景和需求。

四、Maven 依赖添加

我们需要在项目的 pom.xml 文件中添加以下 Maven 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.deeplearning4j</groupId>
    <artifactId>deeplearning4j-core</artifactId>
    <version>1.0.0-beta7</version>
</dependency>
<dependency>
    <groupId>org.deeplearning4j</groupId>
    <artifactId>deeplearning4j-nlp</artifactId>
    <version>1.0.0-beta7</version>
</dependency>
<dependency>
    <groupId>org.deeplearning4j</groupId>
    <artifactId>deeplearning4j-ui</artifactId>
    <version>1.0.0-beta7</version>
</dependency>

以上 Maven 依赖分别引入了 Spring Boot 的 Web 模块、Java Deeplearning4j 的核心库、自然语言处理库和用户界面库。这些依赖将为我们构建智能问答系统提供必要的功能和支持。

五、代码实现

(一)数据加载和预处理

首先,我们需要加载数据集,并对数据进行清洗和预处理。以下是一个数据加载和预处理的示例代码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class DataLoader {
    public static List<String[]> loadData(String filePath) {
        List<String[]> data = new ArrayList<>();
        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = br.readLine())!= null) {
                String[] parts = line.split("\\|");
                if (parts.length == 2) {
                    data.add(parts);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return data;
    }
}

在上面的代码中,我们定义了一个DataLoader类,其中包含一个静态方法loadData,用于加载数据集。该方法接受一个文件路径作为参数,读取文件中的每一行,并将问题和答案对分割成数组,添加到列表中。如果文件读取过程中出现错误,将打印错误信息。

(二)构建语言模型

接下来,我们需要构建语言模型,对用户的问题进行理解和回答。以下是一个使用 Deeplearning4j 构建语言模型的示例代码:

import org.deeplearning4j.nn.api.OptimizationAlgorithm;
import org.deeplearning4j.nn.conf.MultiLayerConfiguration;
import org.deeplearning4j.nn.conf.NeuralNetConfiguration;
import org.deeplearning4j.nn.conf.layers.LSTM;
import org.deeplearning4j.nn.conf.layers.RnnOutputLayer;
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.deeplearning4j.nn.weights.WeightInit;
import org.nd4j.linalg.activations.Activation;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.dataset.DataSet;
import org.nd4j.linalg.factory.Nd4j;
import org.nd4j.linalg.lossfunctions.LossFunctions;

public class LanguageModel {
    private MultiLayerNetwork model;
    private int vocabSize;
    private int embeddingSize;
    private int hiddenSize;
    private int numLayers;

    public LanguageModel(int vocabSize, int embeddingSize, int hiddenSize, int numLayers) {
        this.vocabSize = vocabSize;
        this.embeddingSize = embeddingSize;
        this.hiddenSize = hiddenSize;
        this.numLayers = numLayers;
        buildModel();
    }

    private void buildModel() {
        MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
               .seed(12345)
               .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
               .updater(0.01)
               .list()
               .layer(0, new LSTM.Builder()
                       .nIn(embeddingSize)
                       .nOut(hiddenSize)
                       .activation(Activation.TANH)
                       .weightInit(WeightInit.XAVIER)
                       .build())
               .layer(1, new LSTM.Builder()
                       .nIn(hiddenSize)
                       .nOut(hiddenSize)
                       .activation(Activation.TANH)
                       .weightInit(WeightInit.XAVIER)
                       .build())
               .layer(2, new RnnOutputLayer.Builder(LossFunctions.LossFunction.MCXENT)
                       .activation(Activation.SOFTMAX)
                       .nIn(hiddenSize)
                       .nOut(vocabSize)
                       .weightInit(WeightInit.XAVIER)
                       .build())
               .pretrain(false).backprop(true)
               .build();
        model = new MultiLayerNetwork(conf);
        model.init();
    }

    public void train(DataSet dataSet) {
        model.fit(dataSet);
    }

    public INDArray predict(INDArray input) {
        return model.output(input);
    }
}

在上面的代码中,我们定义了一个LanguageModel类,用于构建语言模型。该类包含一个MultiLayerNetwork对象,表示语言模型的神经网络,以及一些参数,如词汇表大小、嵌入维度、隐藏层大小和层数。在构造函数中,我们调用buildModel方法构建语言模型的神经网络。在buildModel方法中,我们使用NeuralNetConfiguration.Builder构建神经网络的配置,包括随机种子、优化算法、学习率等。然后,我们使用MultiLayerNetwork的构造函数创建神经网络对象,并调用init方法初始化神经网络。在train方法中,我们使用fit方法训练语言模型,接受一个DataSet对象作为参数,表示训练数据。在predict方法中,我们使用output方法预测下一个单词的概率分布,接受一个INDArray对象作为参数,表示输入序列。

(三)智能问答系统服务

最后,我们需要构建智能问答系统的服务,处理用户的请求,并返回答案。以下是一个使用 Spring Boot 构建智能问答系统服务的示例代码:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

@SpringBootApplication
@RestController
public class QuestionAnsweringSystemApplication {
    private LanguageModel languageModel;
    private List<String[]> data;

    public QuestionAnsweringSystemApplication(LanguageModel languageModel, List<String[]> data) {
        this.languageModel = languageModel;
        this.data = data;
    }

    @PostMapping("/answer")
    public String answerQuestion(@RequestBody Map<String, String> question) {
        String inputQuestion = question.get("question");
        for (String[] pair : data) {
            if (pair[0].equals(inputQuestion)) {
                return pair[1];
            }
        }
        return "Sorry, I don't know the answer.";
    }

    public static void main(String[] args) {
        SpringApplication.run(QuestionAnsweringSystemApplication.class, args);
    }
}

在上面的代码中,我们定义了一个QuestionAnsweringSystemApplication类,作为智能问答系统的服务。该类使用@SpringBootApplication注解标记为 Spring Boot 应用程序的入口点,并使用@RestController注解标记为 RESTful API 的控制器。在构造函数中,我们接受一个LanguageModel对象和一个数据集作为参数,并将它们存储在成员变量中。在answerQuestion方法中,我们接受一个包含问题的 JSON 对象作为请求体,并返回答案。如果问题在数据集中存在,我们直接返回对应的答案;否则,我们返回一个默认的回答。最后,在main方法中,我们启动 Spring Boot 应用程序。

六、单元测试

为了确保智能问答系统的正确性和稳定性,我们需要进行单元测试。以下是一个单元测试的示例代码:

import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.factory.Nd4j;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class LanguageModelTest {
    private LanguageModel languageModel;

    @BeforeEach
    public void setUp() {
        int vocabSize = 10;
        int embeddingSize = 5;
        int hiddenSize = 10;
        int numLayers = 2;
        languageModel = new LanguageModel(vocabSize, embeddingSize, hiddenSize, numLayers);
    }

    @Test
    public void testPredict() {
        INDArray input = Nd4j.create(new int[]{1, 2, 3}, new int[]{1, 3});
        INDArray output = languageModel.predict(input);
        assertEquals(output.shape()[0], 1);
        assertEquals(output.shape()[1], vocabSize);
    }
}

在上面的代码中,我们定义了一个LanguageModelTest类,用于测试LanguageModel类。在setUp方法中,我们创建一个LanguageModel对象,并设置一些参数。在testPredict方法中,我们创建一个输入序列,并调用predict方法预测下一个单词的概率分布。然后,我们检查输出的形状是否正确。

七、预期输出

当我们运行智能问答系统时,我们可以通过发送 POST 请求到/answer接口来获取答案。以下是一个预期的输出示例:

{
    "question": "什么是人工智能?",
    "answer": "人工智能是指计算机系统能够执行通常需要人类智能才能完成的任务,如学习、推理、解决问题等。"
}

如果问题在数据集中不存在,我们将得到以下输出:

{
    "question": "什么是深度学习?",
    "answer": "Sorry, I don't know the answer."
}

八、参考资料文献

  1. Spring Boot 官方文档
  2. Deeplearning4j 官方文档
  3. 知识图谱介绍
  4. 循环神经网络介绍

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

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

相关文章

Android kotlin之配置kapt编译器插件

配置项目目录下的gradle/libs.versions.toml文件&#xff0c;添加kapt配置项&#xff1a; 在模块目录下build.gradle.kt中增加 plugins {alias(libs.plugins.android.application)alias(libs.plugins.jetbrains.kotlin.android)// 增加该行alias(libs.plugins.jetbrains.kotl…

设计模式:4、命令模式(双重委托)

目录 0、定义 1、命令模式包括四种角色 2、命令模式的UML类图 3、代码示例 0、定义 将一个请求封装为一个对象&#xff0c;从而使用户可用不同的请求对客户进行参数化&#xff1b;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 1、命令模式包括四种角色 接…

详细教程-Linux上安装单机版的Hadoop

1、上传Hadoop安装包至linux并解压 tar -zxvf hadoop-2.6.0-cdh5.15.2.tar.gz 安装包&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1u59OLTJctKmm9YVWr_F-Cg 提取码&#xff1a;0pfj 2、配置免密码登录 生成秘钥&#xff1a; ssh-keygen -t rsa -P 将秘钥写入认…

短剧系统小程序开发产品设计实例解析

短剧系统小程序开发架构深度解析引言 随着数字娱乐市场的蓬勃发展&#xff0c;短剧因其紧凑的情节、创新的表现形式和便捷的观看体验&#xff0c;迅速吸引了大量观众的关注。作为承载短剧内容的重要平台&#xff0c;短剧系统小程序不仅需要在用户体验、内容管理等方面做到极致&…

STM32--JLINK下载问题记录

1.下载提示&#xff1a; 现象&#xff1a;keil下载&#xff0c;会提示如上信息&#xff1b; 使用segger jflash可以连接成功&#xff0c;但是下载程序会失败&#xff1b; 解决过程&#xff1a;尝试一边复位一边下载程序&#xff0c;一直失败&#xff1b;STM32CubeProgrammer也…

推荐算法(基于用户/物品的协同过滤算法)

1.1 推荐算法概述 信息过载的时代。信息消费者面临的问题是如何收集到自己感兴趣的信息。对于信息生产者来说&#xff0c;高效地把信息推送给感兴趣的信息消费者&#xff0c;而不是淹没在信息互联网的海洋之中&#xff0c;也非常困难。 如何从大量的数据信息中获取有价值的信息…

【PCIE常见面试问题-1】

PCIE常见面试问题-1 1 PCIE概述1.1 PCI为何发展开PCIE&#xff1f;1.2 什么是Root Complex(RC)1.3 什么是EP&#xff1f;1.4 什么是Swith1.5 PCIE协议如何组织通信的&#xff1f;1.6 简要介绍一下PCIE的分层结构&#xff0c;为什么需要分层&#xff1f;1.7 PCIE的事务类型有哪些…

Easyexcel(5-自定义列宽)

相关文章链接 Easyexcel&#xff08;1-注解使用&#xff09;Easyexcel&#xff08;2-文件读取&#xff09;Easyexcel&#xff08;3-文件导出&#xff09;Easyexcel&#xff08;4-模板文件&#xff09;Easyexcel&#xff08;5-自定义列宽&#xff09; 注解 ColumnWidth Data…

C++进阶:哈希表实现

目录 一:哈希表的概念 1.1直接定址法 1.2哈希冲突 1.3负载因子 1.4实现哈希函数的方法 1.4.1除法散列法/除留余数法 1.4.2乘法散列法 1.4.3全域散列法 1.5处理哈希冲突 1.5.1开放地址法 线性探测 二次探测 ​编辑 双重散列 1.5.2链地址法 二.代码实现 2.1开放地址…

汽车资讯新趋势:Spring Boot技术解读

5系统详细实现 5.1 管理员模块的实现 5.1.1 用户信息管理 汽车资讯网站的系统管理员可以管理用户&#xff0c;可以对用户信息修改删除审核以及查询操作。具体界面的展示如图5.1所示。 图5.1 用户信息管理界面 5.1.2 汽车品牌管理 系统管理员可以汽车品牌信息进行添加&#xf…

EdgeNeXt:面向移动视觉应用的高效融合CNN-Transformer架构

摘要 https://arxiv.org/pdf/2206.10589 为了追求更高的准确性&#xff0c;通常会开发大型且复杂的神经网络。这些模型需要高计算资源&#xff0c;因此无法部署在边缘设备上。构建资源高效通用网络在多个应用领域都非常有用&#xff0c;因此备受关注。在本研究中&#xff0c;我…

udp_socket

文章目录 UDP服务器封装系统调用socketbind系统调用bzero结构体清0sin_family端口号ip地址inet_addrrecvfromsendto 新指令 netstat -naup (-nlup)包装器 的两种类型重命名方式包装器使用统一可调用类型 关键字 typedef 类型重命名系统调用popen UDP服务器封装 系统调用socket …

Spring Boot教程之五:在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序

在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序 IntelliJ IDEA 是一个用 Java 编写的集成开发环境 (IDE)。它用于开发计算机软件。此 IDE 由 Jetbrains 开发&#xff0c;提供 Apache 2 许可社区版和商业版。它是一种智能的上下文感知 IDE&#xff0c;可用于在各种应用程序…

高效高质量SCI论文撰写及投稿流程及策略丨从论文选题、文献调研、实验设计、数据分析、论文结构及语言规范等重要环节

科学研究的核心在于将复杂的思想和实验成果通过严谨的写作有效地传递给学术界和工业界。对于研究生、青年学者及科研人员&#xff0c;如何高效撰写和发表SCI论文&#xff0c;成为提升学术水平和科研成果的重要环节。本教程旨在帮助学员系统掌握从选题到投稿的全过程&#xff0c…

Mac下的vscode远程ssh免密码登录

Mac下的vscode远程ssh免密码登录&#xff08;同理可迁移至windows及linux系统&#xff09; 在日常开发中&#xff0c;使用远程服务器进行开发是非常常见的&#xff0c;而通过 SSH 免密码登录可以显著提高效率&#xff0c;避免每次连接时都需要输入密码。本文将介绍如何在 macOS…

记录eslint报错的情况

这几天在调试vue的eslint&#xff0c;害&#xff0c;我领导说eslint要打开规范代码&#xff0c;顺带看了一下eslint的规则&#xff0c;并且研究一下报错。切记每次修改了.eslintrc配置文件&#xff0c;需要重启项目再查看控制台&#xff0c;否则之前的报错会一直存在。 第一个…

汽车软件DevOps解决方案

汽车软件DevOps解决方案是专为现代汽车行业设计的一套集成化需求、开发、测试、部署、OTA与监控&#xff0c;旨在加速软件开发流程&#xff0c;提高软件质量和安全性&#xff0c;同时确保整个生命周期的高效性和灵活性。以下是经纬恒润汽车软件DevOps解决方案的关键组成部分和优…

openCV与eigen两种方法---旋转向量转旋转矩阵

#include <Eigen/Dense> #include <opencv2/core/eigen.hpp> #include <opencv2/opencv.hpp> using namespace cv; using namespace std; int main() {// opencv 旋转向量cv::Vec3d rvec(1.0, 2.0, 3.0);cv::Mat rotation_matrix;cv::Rodrigues(rvec, rotati…

Vue项目搭建-2-组合式API

入口-setup 在组件渲染时会优先执行 setup 中代码&#xff0c;执行时机为 beforeCreate 之前 setup 方法中的对象若想要在 template 中使用&#xff0c;需要将方法 return 出去: <script> export default {setup() {console.log(setup had run)const msg "hello…

国产linux系统(银河麒麟,统信uos)使用 PageOffice 动态生成word文件

PageOffice 国产版 &#xff1a;支持信创系统&#xff0c;支持银河麒麟V10和统信UOS&#xff0c;支持X86&#xff08;intel、兆芯、海光等&#xff09;、ARM&#xff08;飞腾、鲲鹏、麒麟等&#xff09;、龙芯&#xff08;LoogArch&#xff09;芯片架构。 数据区域填充文本 数…