欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot整合Java DL4J實(shí)現(xiàn)文本分類(lèi)系統(tǒng)

 更新時(shí)間:2024年10月29日 08:36:44   作者:月下獨(dú)碼  
在當(dāng)今信息爆炸的時(shí)代,自然語(yǔ)言處理領(lǐng)域中的文本分類(lèi)顯得尤為重要,文本分類(lèi)能夠高效地組織和管理海量的文本數(shù)據(jù),隨著互聯(lián)網(wǎng)的飛速發(fā)展,我們每天都被大量的文本信息所包圍,本文將介紹如何使用 Spring Boot 整合 Java Deeplearning4j 來(lái)構(gòu)建一個(gè)文本分類(lèi)系統(tǒng)

在當(dāng)今信息爆炸的時(shí)代,自然語(yǔ)言處理領(lǐng)域中的文本分類(lèi)顯得尤為重要。

文本分類(lèi)能夠高效地組織和管理海量的文本數(shù)據(jù)。隨著互聯(lián)網(wǎng)的飛速發(fā)展,我們每天都被大量的文本信息所包圍,從新聞報(bào)道、社交媒體動(dòng)態(tài)到學(xué)術(shù)文獻(xiàn)、商業(yè)文檔等。如果沒(méi)有文本分類(lèi),這些數(shù)據(jù)將如同雜亂無(wú)章的海洋,難以從中快速獲取有價(jià)值的信息。通過(guò)文本分類(lèi),可以將不同主題、類(lèi)型的文本進(jìn)行準(zhǔn)確劃分,使得用戶(hù)能夠在特定的類(lèi)別中迅速找到所需內(nèi)容,極大地提高了信息檢索的效率。

對(duì)于企業(yè)來(lái)說(shuō),文本分類(lèi)有助于精準(zhǔn)營(yíng)銷(xiāo)和客戶(hù)服務(wù)。企業(yè)可以對(duì)客戶(hù)的反饋、評(píng)價(jià)等文本進(jìn)行分類(lèi),了解客戶(hù)的需求、滿(mǎn)意度以及潛在問(wèn)題。這不僅能夠及時(shí)調(diào)整產(chǎn)品和服務(wù)策略,還能提升客戶(hù)體驗(yàn),增強(qiáng)企業(yè)的競(jìng)爭(zhēng)力。

在學(xué)術(shù)研究領(lǐng)域,文本分類(lèi)可以幫助研究者快速篩選相關(guān)文獻(xiàn),聚焦特定主題的研究,節(jié)省大量的時(shí)間和精力。同時(shí),對(duì)于不同學(xué)科領(lǐng)域的文獻(xiàn)分類(lèi),也有助于推動(dòng)跨學(xué)科研究的發(fā)展。

此外,文本分類(lèi)在輿情監(jiān)測(cè)、信息安全等方面也發(fā)揮著重要作用??梢约皶r(shí)發(fā)現(xiàn)和分類(lèi)負(fù)面輿情,以便采取相應(yīng)的應(yīng)對(duì)措施。在信息安全領(lǐng)域,對(duì)可疑文本進(jìn)行分類(lèi)有助于識(shí)別潛在的安全威脅。

本文將介紹如何使用 Spring Boot 整合 Java Deeplearning4j 來(lái)構(gòu)建一個(gè)文本分類(lèi)系統(tǒng),以新聞分類(lèi)和郵件分類(lèi)為例進(jìn)行說(shuō)明。

一、引言

隨著信息技術(shù)的飛速發(fā)展,我們每天都會(huì)接觸到大量的文本數(shù)據(jù),如新聞文章、電子郵件、社交媒體帖子等。對(duì)這些文本數(shù)據(jù)進(jìn)行分類(lèi),可以幫助我們更好地理解和處理它們,提高信息檢索和管理的效率。文本分類(lèi)系統(tǒng)可以應(yīng)用于多個(gè)領(lǐng)域,如新聞媒體、電子商務(wù)、金融服務(wù)等。

二、技術(shù)概述

1. 神經(jīng)網(wǎng)絡(luò)選擇

在這個(gè)文本分類(lèi)系統(tǒng)中,我們選擇使用循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN),特別是長(zhǎng)短期記憶網(wǎng)絡(luò)(Long Short-Term Memory,LSTM)。選擇 LSTM 的理由如下:

  • 處理序列數(shù)據(jù):LSTM 非常適合處理文本這種序列數(shù)據(jù),它能夠捕捉文本中的長(zhǎng)期依賴(lài)關(guān)系,對(duì)于理解文本的上下文信息非常有幫助。
  • 記憶能力:LSTM 具有記憶單元,可以記住長(zhǎng)期的信息,避免了傳統(tǒng) RNN 中的梯度消失和梯度爆炸問(wèn)題。
  • 在自然語(yǔ)言處理中的廣泛應(yīng)用:LSTM 在自然語(yǔ)言處理領(lǐng)域取得了巨大的成功,被廣泛應(yīng)用于文本分類(lèi)、情感分析、機(jī)器翻譯等任務(wù)中。

2. 技術(shù)棧

  • Spring Boot:用于構(gòu)建企業(yè)級(jí)應(yīng)用程序的開(kāi)源框架,提供了快速開(kāi)發(fā)、自動(dòng)配置和易于部署的特性。
  • Deeplearning4j:一個(gè)基于 Java 的深度學(xué)習(xí)庫(kù),支持多種神經(jīng)網(wǎng)絡(luò)架構(gòu),包括 LSTM、卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)等。
  • Java:一種廣泛使用的編程語(yǔ)言,具有跨平臺(tái)性和強(qiáng)大的生態(tài)系統(tǒng)。

三、數(shù)據(jù)集格式

我們將使用兩個(gè)不同的數(shù)據(jù)集來(lái)訓(xùn)練和測(cè)試文本分類(lèi)系統(tǒng),一個(gè)是新聞數(shù)據(jù)集,另一個(gè)是郵件數(shù)據(jù)集。

1. 新聞數(shù)據(jù)集

新聞數(shù)據(jù)集的格式如下:

新聞標(biāo)題新聞內(nèi)容類(lèi)別
標(biāo)題 1內(nèi)容 1類(lèi)別 1
標(biāo)題 2內(nèi)容 2類(lèi)別 2

新聞數(shù)據(jù)集可以以 CSV 文件的形式存儲(chǔ),其中每一行代表一篇新聞,包含新聞標(biāo)題、新聞內(nèi)容和類(lèi)別三個(gè)字段。新聞的類(lèi)別可以根據(jù)具體的需求進(jìn)行定義,例如政治新聞、體育新聞、娛樂(lè)新聞等。

以下是一個(gè)示例新聞數(shù)據(jù)集:

新聞標(biāo)題新聞內(nèi)容類(lèi)別
美國(guó)總統(tǒng)拜登發(fā)表重要講話(huà)美國(guó)總統(tǒng)拜登在白宮發(fā)表了重要講話(huà),強(qiáng)調(diào)了氣候變化問(wèn)題的緊迫性。政治新聞
世界杯足球賽開(kāi)幕2026 年世界杯足球賽在加拿大、墨西哥和美國(guó)聯(lián)合舉辦,開(kāi)幕式盛大舉行。體育新聞
好萊塢明星新片上映好萊塢明星湯姆·克魯斯的新片《碟中諜 8》上映,票房火爆。娛樂(lè)新聞

2. 郵件數(shù)據(jù)集

郵件數(shù)據(jù)集的格式如下:

郵件主題郵件內(nèi)容類(lèi)別
主題 1內(nèi)容 1類(lèi)別 1
主題 2內(nèi)容 2類(lèi)別 2

郵件數(shù)據(jù)集可以以 CSV 文件的形式存儲(chǔ),其中每一行代表一封郵件,包含郵件主題、郵件內(nèi)容和類(lèi)別三個(gè)字段。郵件的類(lèi)別可以根據(jù)具體的需求進(jìn)行定義,例如工作郵件、私人郵件、垃圾郵件等。

以下是一個(gè)示例郵件數(shù)據(jù)集:

郵件主題郵件內(nèi)容類(lèi)別
項(xiàng)目進(jìn)度報(bào)告請(qǐng)各位同事查看本周的項(xiàng)目進(jìn)度報(bào)告,并在周五前回復(fù)。工作郵件
家庭聚會(huì)通知親愛(ài)的家人,我們將于下周舉辦家庭聚會(huì),具體時(shí)間和地點(diǎn)如下。私人郵件
促銷(xiāo)廣告限時(shí)優(yōu)惠!購(gòu)買(mǎi)我們的產(chǎn)品,即可享受 50%的折扣。垃圾郵件

四、Maven 依賴(lài)

在項(xiàng)目的 pom.xml 文件中,需要添加以下 Maven 依賴(lài):

<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.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

這些依賴(lài)將引入 Deeplearning4j 和 Spring Boot 的相關(guān)庫(kù),使我們能夠在項(xiàng)目中使用它們的功能。

五、代碼示例

1. 數(shù)據(jù)預(yù)處理

在進(jìn)行文本分類(lèi)之前,我們需要對(duì)數(shù)據(jù)集進(jìn)行預(yù)處理,將文本數(shù)據(jù)轉(zhuǎn)換為數(shù)字向量,以便神經(jīng)網(wǎng)絡(luò)能夠處理它們。以下是一個(gè)數(shù)據(jù)預(yù)處理的示例代碼:

import org.deeplearning4j.text.tokenization.tokenizerfactory.TokenizerFactory;
import org.deeplearning4j.text.tokenization.tokenizerfactory.UimaTokenizerFactory;
import org.nd4j.linalg.dataset.api.iterator.DataSetIterator;
import org.nd4j.linalg.dataset.api.preprocessor.DataNormalization;
import org.nd4j.linalg.dataset.api.preprocessor.NormalizerStandardize;

public class DataPreprocessor {

    public static DataSetIterator preprocessData(String filePath) {
        // 創(chuàng)建 TokenizerFactory
        TokenizerFactory tokenizerFactory = new UimaTokenizerFactory();

        // 創(chuàng)建文檔向量器
        DocumentVectorizer documentVectorizer = new DocumentVectorizer.Builder()
               .setTokenizerFactory(tokenizerFactory)
               .build();

        // 加載數(shù)據(jù)集
        InMemoryDataSetIterator dataSetIterator = new InMemoryDataSetIterator.Builder()
               .addSource(filePath, documentVectorizer)
               .build();

        // 數(shù)據(jù)標(biāo)準(zhǔn)化
        DataNormalization normalizer = new NormalizerStandardize();
        normalizer.fit(dataSetIterator);
        dataSetIterator.setPreProcessor(normalizer);

        return dataSetIterator;
    }
}

在上述代碼中,我們首先創(chuàng)建了一個(gè)TokenizerFactory,用于將文本數(shù)據(jù)轉(zhuǎn)換為詞向量。然后,我們使用DocumentVectorizer將詞向量轉(zhuǎn)換為文檔向量,并使用InMemoryDataSetIterator加載數(shù)據(jù)集。最后,我們使用NormalizerStandardize對(duì)數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理,使數(shù)據(jù)的均值為 0,標(biāo)準(zhǔn)差為 1。

2. 模型構(gòu)建

接下來(lái),我們需要構(gòu)建一個(gè) LSTM 模型來(lái)進(jìn)行文本分類(lèi)。以下是一個(gè)模型構(gòu)建的示例代碼:

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.OutputLayer;
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.deeplearning4j.nn.weights.WeightInit;
import org.nd4j.linalg.activations.Activation;
import org.nd4j.linalg.lossfunctions.LossFunctions;

public class TextClassificationModel {

    public static MultiLayerNetwork buildModel(int inputSize, int numClasses) {
        // 構(gòu)建神經(jīng)網(wǎng)絡(luò)配置
        MultiLayerConfiguration configuration = new NeuralNetConfiguration.Builder()
               .seed(12345)
               .weightInit(WeightInit.XAVIER)
               .updater(Updater.ADAGRAD)
               .list()
               .layer(0, new LSTM.Builder()
                       .nIn(inputSize)
                       .nOut(128)
                       .activation(Activation.TANH)
                       .build())
               .layer(1, new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
                       .activation(Activation.SOFTMAX)
                       .nOut(numClasses)
                       .build())
               .build();

        // 創(chuàng)建神經(jīng)網(wǎng)絡(luò)模型
        MultiLayerNetwork model = new MultiLayerNetwork(configuration);
        model.init();

        return model;
    }
}

在上述代碼中,我們使用NeuralNetConfiguration.Builder來(lái)構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò)配置。我們添加了一個(gè) LSTM 層和一個(gè)輸出層,并設(shè)置了相應(yīng)的參數(shù)。最后,我們使用MultiLayerNetwork創(chuàng)建一個(gè)神經(jīng)網(wǎng)絡(luò)模型,并初始化模型。

3. 訓(xùn)練模型

然后,我們需要使用預(yù)處理后的數(shù)據(jù)集來(lái)訓(xùn)練模型。以下是一個(gè)訓(xùn)練模型的示例代碼:

import org.deeplearning4j.nn.api.OptimizationAlgorithm;
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.deeplearning4j.optimize.listeners.ScoreIterationListener;
import org.nd4j.linalg.dataset.api.iterator.DataSetIterator;

public class ModelTrainer {

    public static void trainModel(MultiLayerNetwork model, DataSetIterator iterator, int numEpochs) {
        // 設(shè)置優(yōu)化算法和學(xué)習(xí)率
        model.setOptimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT);
        model.setLearningRate(0.01);

        // 添加訓(xùn)練監(jiān)聽(tīng)器
        model.setListeners(new ScoreIterationListener(100));

        // 訓(xùn)練模型
        for (int epoch = 0; epoch < numEpochs; epoch++) {
            model.fit(iterator);
            System.out.println("Epoch " + epoch + " completed.");
        }
    }
}

在上述代碼中,我們首先設(shè)置了模型的優(yōu)化算法和學(xué)習(xí)率。然后,我們添加了一個(gè)訓(xùn)練監(jiān)聽(tīng)器,用于輸出訓(xùn)練過(guò)程中的損失值。最后,我們使用model.fit()方法來(lái)訓(xùn)練模型,并輸出每個(gè) epoch 的完成信息。

4. 預(yù)測(cè)結(jié)果

最后,我們可以使用訓(xùn)練好的模型來(lái)預(yù)測(cè)新的文本數(shù)據(jù)的類(lèi)別。以下是一個(gè)預(yù)測(cè)結(jié)果的示例代碼:

import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.dataset.DataSet;

public class ModelPredictor {

    public static String predictCategory(MultiLayerNetwork model, String text) {
        // 預(yù)處理文本數(shù)據(jù)
        DataSet dataSet = DataPreprocessor.preprocessData(text);

        // 預(yù)測(cè)類(lèi)別
        INDArray output = model.output(dataSet.getFeatureMatrix());
        int predictedClass = argMax(output);

        // 返回類(lèi)別名稱(chēng)
        return getCategoryName(predictedClass);
    }

    private static int argMax(INDArray array) {
        double maxValue = Double.NEGATIVE_INFINITY;
        int maxIndex = -1;
        for (int i = 0; i < array.length(); i++) {
            if (array.getDouble(i) > maxValue) {
                maxValue = array.getDouble(i);
                maxIndex = i;
            }
        }
        return maxIndex;
    }

    private static String getCategoryName(int classIndex) {
        // 根據(jù)類(lèi)別索引返回類(lèi)別名稱(chēng)
        switch (classIndex) {
            case 0:
                return "政治新聞";
            case 1:
                return "體育新聞";
            case 2:
                return "娛樂(lè)新聞";
            default:
                return "未知類(lèi)別";
        }
    }
}

在上述代碼中,我們首先使用DataPreprocessor.preprocessData()方法對(duì)輸入的文本數(shù)據(jù)進(jìn)行預(yù)處理。然后,我們使用model.output()方法來(lái)預(yù)測(cè)文本數(shù)據(jù)的類(lèi)別。最后,我們根據(jù)預(yù)測(cè)結(jié)果返回相應(yīng)的類(lèi)別名稱(chēng)。

六、單元測(cè)試

為了確保代碼的正確性,我們可以編寫(xiě)單元測(cè)試來(lái)測(cè)試文本分類(lèi)系統(tǒng)的各個(gè)部分。以下是一個(gè)單元測(cè)試的示例代碼:

import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.nd4j.linalg.dataset.api.iterator.DataSetIterator;

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

public class TextClassificationSystemTest {

    private MultiLayerNetwork model;
    private DataSetIterator iterator;

    @BeforeEach
    public void setUp() {
        // 加載數(shù)據(jù)集并預(yù)處理
        iterator = DataPreprocessor.preprocessData("path/to/dataset.csv");

        // 構(gòu)建模型
        model = TextClassificationModel.buildModel(iterator.inputColumns(), iterator.totalOutcomes());
    }

    @Test
    public void testModelTraining() {
        // 訓(xùn)練模型
        ModelTrainer.trainModel(model, iterator, 10);

        // 預(yù)測(cè)結(jié)果
        String text = "美國(guó)總統(tǒng)拜登發(fā)表重要講話(huà)";
        String predictedCategory = ModelPredictor.predictCategory(model, text);

        // 驗(yàn)證預(yù)測(cè)結(jié)果
        assertEquals("政治新聞", predictedCategory);
    }
}

在上述代碼中,我們首先在setUp()方法中加載數(shù)據(jù)集、預(yù)處理數(shù)據(jù)、構(gòu)建模型。然后,在testModelTraining()方法中訓(xùn)練模型,并使用一個(gè)新的文本數(shù)據(jù)進(jìn)行預(yù)測(cè),最后驗(yàn)證預(yù)測(cè)結(jié)果是否正確。

七、預(yù)期輸出

在運(yùn)行單元測(cè)試時(shí),預(yù)期輸出如下:

Epoch 0 completed.
Epoch 1 completed.
...
Epoch 9 completed.

如果預(yù)測(cè)結(jié)果正確,單元測(cè)試將通過(guò),不會(huì)輸出任何錯(cuò)誤信息。

八、結(jié)論

本文介紹了如何使用 Spring Boot 整合 Deeplearning4j 來(lái)構(gòu)建一個(gè)文本分類(lèi)系統(tǒng)。我們選擇了 LSTM 作為神經(jīng)網(wǎng)絡(luò)架構(gòu),因?yàn)樗軌蛴行У靥幚砦谋具@種序列數(shù)據(jù),捕捉文本中的長(zhǎng)期依賴(lài)關(guān)系。我們還介紹了數(shù)據(jù)集的格式、Maven 依賴(lài)、代碼示例、單元測(cè)試和預(yù)期輸出等內(nèi)容。通過(guò)這個(gè)文本分類(lèi)系統(tǒng),我們可以將文本數(shù)據(jù)分為不同的類(lèi)別,方便管理和檢索。

以上就是SpringBoot整合Java DL4J實(shí)現(xiàn)文本分類(lèi)系統(tǒng)的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Java DL4J文本分類(lèi)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解如何在Java中實(shí)現(xiàn)懶加載

    詳解如何在Java中實(shí)現(xiàn)懶加載

    懶加載是一種常見(jiàn)的優(yōu)化技術(shù),它可以延遲對(duì)象的創(chuàng)建或初始化,直到對(duì)象第一次被使用時(shí)才進(jìn)行。在本文中,我們將介紹如何使用?Java?中的?Supplier?接口和雙重檢查鎖定模式來(lái)實(shí)現(xiàn)懶加載,并保證只初始化一次,希望對(duì)大家有所幫助
    2023-03-03
  • Mybatis Plus LambdaQueryWrapper的具體用法

    Mybatis Plus LambdaQueryWrapper的具體用法

    Mybatis Plus 在其基礎(chǔ)上擴(kuò)展了 LambdaQueryWrapper,LambdaQueryWrapper 提供了更加簡(jiǎn)便的查詢(xún)語(yǔ)法,同時(shí)也避免了SQL注入的風(fēng)險(xiǎn),感興趣的可以了解一下
    2023-11-11
  • springboot做代理分發(fā)服務(wù)+代理鑒權(quán)的實(shí)現(xiàn)過(guò)程

    springboot做代理分發(fā)服務(wù)+代理鑒權(quán)的實(shí)現(xiàn)過(guò)程

    這篇文章主要介紹了springboot做代理分發(fā)服務(wù)+代理鑒權(quán)的實(shí)現(xiàn)過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 存儲(chǔ)過(guò)程創(chuàng)建及springboot代碼調(diào)用存儲(chǔ)過(guò)程方式

    存儲(chǔ)過(guò)程創(chuàng)建及springboot代碼調(diào)用存儲(chǔ)過(guò)程方式

    文章介紹了如何在Navicat中創(chuàng)建存儲(chǔ)過(guò)程,并在Spring Boot項(xiàng)目中調(diào)用存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程創(chuàng)建步驟包括選擇函數(shù)類(lèi)型、自定義函數(shù)名、添加參數(shù)等,在Spring Boot中調(diào)用存儲(chǔ)過(guò)程時(shí),可以通過(guò)JdbcTemplate或MyBatis等工具進(jìn)行
    2024-11-11
  • Java Socket編程實(shí)例(四)- NIO TCP實(shí)踐

    Java Socket編程實(shí)例(四)- NIO TCP實(shí)踐

    這篇文章主要講解Java Socket編程中NIO TCP的實(shí)例,希望能給大家做一個(gè)參考。
    2016-06-06
  • 詳解Java8如何使用Lambda表達(dá)式進(jìn)行比較

    詳解Java8如何使用Lambda表達(dá)式進(jìn)行比較

    Lambda表達(dá)式,也可稱(chēng)為閉包,是java8的新特性,作用是取代大部分內(nèi)部類(lèi),優(yōu)化java代碼結(jié)構(gòu),讓代碼變得更加簡(jiǎn)潔緊湊。本文將利用Lambda表達(dá)式進(jìn)行排序比較,需要的可以參考一下
    2022-01-01
  • 手把手教你如何在Idea中下載jar包

    手把手教你如何在Idea中下載jar包

    maven依賴(lài)的jar包,很多時(shí)候同一個(gè)jar包會(huì)存在多個(gè)版本,刪除其中一個(gè)后,重新編譯,會(huì)把舊jar由加載回來(lái)了,下面這篇文章主要給大家介紹了關(guān)于如何在Idea中下載jar包的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • controller層如何同時(shí)接收兩個(gè)實(shí)體類(lèi)

    controller層如何同時(shí)接收兩個(gè)實(shí)體類(lèi)

    這篇文章主要介紹了controller層如何同時(shí)接收兩個(gè)實(shí)體類(lèi)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • RabbitMQ的ACK確認(rèn)機(jī)制保障消費(fèi)端消息的可靠性詳解

    RabbitMQ的ACK確認(rèn)機(jī)制保障消費(fèi)端消息的可靠性詳解

    這篇文章主要介紹了RabbitMQ的ACK確認(rèn)機(jī)制保障消費(fèi)端消息的可靠性詳解,簡(jiǎn)單來(lái)說(shuō),就是你必須關(guān)閉 RabbitMQ 的自動(dòng)ack ,可以通過(guò)一個(gè) api 來(lái)調(diào)用就行,然后每次你自己代碼里確保處理完的時(shí)候,再在程序里 ack 一把,需要的朋友可以參考下
    2023-12-12
  • java 排序算法之選擇排序

    java 排序算法之選擇排序

    本文主要講解了java 排序算法之選擇排序,選擇排序是最簡(jiǎn)單直觀的一種算法,想要了解相關(guān)知識(shí)的朋友快來(lái)看一看這篇文章吧
    2021-09-09

最新評(píng)論