Spring AI:Java开发者的AI开发新利器

news2025/6/8 21:48:50

目录

一、引言

二、Spring AI 是什么

三、核心功能与特性

3.1 统一的 API 抽象

3.2 丰富的模型支持

3.3 低代码集成

3.4 结构化数据输出

3.5 流式数据响应

四、应用场景

4.1 智能客服系统

4.2 图像识别应用

4.3 数据分析与预测

五、快速上手

5.1 环境搭建

5.2 创建 Spring AI 项目

5.3 配置 AI 服务

5.4 编写代码实现 AI 功能

六、优势与展望

6.1 优势总结

6.2 未来展望

七、结语


一、引言

在当今数字化时代,人工智能(AI)已成为推动各行业创新与发展的核心驱动力。从智能语音助手 Siri 到图像识别技术在安防领域的广泛应用,从推荐系统助力电商精准营销到医疗领域利用 AI 进行疾病诊断,AI 的身影无处不在。随着 AI 技术的飞速发展,如何高效地开发和集成 AI 应用成为了开发者们关注的焦点。

Java 作为一种广泛应用于企业级开发的编程语言,以其稳定性、跨平台性和丰富的类库而闻名。在 AI 开发领域,虽然 Python 凭借其丰富的 AI 库和简洁的语法成为了热门选择,但 Java 也在不断拓展其在 AI 领域的应用版图。Spring AI 的出现,为 Java 开发者在 AI 开发领域带来了新的契机 。它基于强大的 Spring 框架,旨在简化 Java 开发人员创建 AI 应用程序的过程,使得 Java 开发者能够充分利用 Spring 生态系统的优势,快速构建和部署 AI 驱动的应用程序。接下来,让我们深入探索 Spring AI 的奥秘。

二、Spring AI 是什么

Spring AI 是一个面向 Java 开发者的 AI 应用开发框架,它将 Spring 生态系统的设计原则和便利性引入人工智能领域,旨在简化包含人工智能功能的应用程序的开发,避免不必要的复杂性 。它借鉴了 Spring 生态系统的可移植性、模块化设计原则,并提倡使用 Plain Old Java Objects (POJO) 来构建人工智能领域的应用程序。

从本质上讲,Spring AI 解决了 AI 集成的基本挑战:将企业数据和应用程序编程接口(APIs)与人工智能模型相连接。它支持多种 AI 模型,包括聊天、文生图、嵌入式模型等,并提供了同步和流式 API。通过 Spring AI,开发者可以轻松调用 AI 模型的聊天、图像生成、语音处理等功能,而无需关心底层 API 的细节,让开发者能够更容易地定义自己的 POJO 来调用 AI 接口,进行训练和调用。

举个例子,假设我们要开发一个智能客服系统,使用传统的方式,我们需要处理与不同 AI 模型提供商(如 OpenAI、百度文心一言等)的 API 对接细节,包括了解其接口规范、参数要求、认证方式等,还要处理网络请求、错误处理等复杂逻辑。而使用 Spring AI,我们只需要通过其统一的抽象接口,按照 Spring 的开发方式进行配置和编码,就可以轻松实现与不同 AI 模型的交互,专注于业务逻辑的实现,大大降低了开发的难度和工作量。

三、核心功能与特性

3.1 统一的 API 抽象

Spring AI 提供了统一的 API 抽象,支持多种主流 AI 服务,如 OpenAI、Anthropic、Hugging Face、DeepSeek、Google、Microsoft、Amazon 等 。无论使用哪种 AI 服务,开发者都可以通过标准化的接口进行调用,无需关注不同服务之间的差异。例如,在调用不同模型的聊天功能时,只需使用 Spring AI 提供的统一的ChatClient接口,而无需针对每个模型的 API 进行单独的适配和调用。这大大降低了代码的复杂性,提高了代码的可维护性和可移植性,使得开发者能够更轻松地在不同的 AI 服务之间进行切换。

3.2 丰富的模型支持

Spring AI 支持多种类型的 AI 模型,涵盖了当前主流的模型类别 。在聊天模型方面,支持如 OpenAI 的 ChatGPT 系列、Anthropic 的 Claude 等,这些模型能够实现智能对话、文本生成等功能,广泛应用于智能客服、内容创作等领域。在文本到图像模型中,支持 OpenAI 的 DALL-E、Stability AI 等,可用于生成各种创意图像,满足设计、广告等行业的需求。在音频转录和文本到语音模型方面,也提供了相应的支持,方便实现语音识别和语音合成功能,应用于语音助手、有声读物生成等场景。此外,还支持嵌入模型,用于将文本或多模态内容转换为向量表示,为语义搜索、推荐系统等提供基础支持 。丰富的模型支持使得 Spring AI 能够满足不同领域和场景的应用需求。

3.3 低代码集成

借助 Spring Boot Starter 依赖,Spring AI 实现了低代码集成 AI 服务 。开发者只需在项目中添加相应的 Spring Boot Starter 依赖,并在配置文件中配置好 AI 服务的相关参数,如 API Key、基础 URL 等,即可快速接入 AI 服务。以接入 OpenAI 服务为例,在 Maven 项目中,只需添加spring-ai-openai-spring-boot-starter依赖,然后在application.yml文件中配置 OpenAI 的 API Key 和基础 URL,就可以在代码中直接使用 OpenAI 的模型服务。这种低代码集成的方式,大大缩短了 AI 服务的接入时间,提高了开发效率,使得开发者能够更快地将 AI 功能集成到自己的应用程序中。

3.4 结构化数据输出

Spring AI 能够将模型的响应直接映射为 Java 对象,实现结构化数据输出 。通过提供OutputParser接口,Spring AI 可以根据预定义的规则将 AI 模型返回的自然语言响应解析为结构化的 Java 对象,如 POJO(Plain Old Java Objects)。例如,在一个诗歌生成的应用中,AI 模型返回的诗歌文本可以通过OutputParser解析为包含作者、朝代、标题、内容等字段的 Java 对象,方便后续的数据处理和存储。这种结构化输出的方式,简化了数据处理的流程,提高了数据的可读性和可操作性,使得开发者能够更方便地对 AI 模型的输出进行进一步的处理和分析。

3.5 流式数据响应

Spring AI 支持 Flux 流式输出,适用于实时对话等高并发场景 。在实时对话系统中,用户与聊天机器人交互时,希望能够尽快看到部分回复内容,而不是等待整个回答生成完毕。Spring AI 的流式数据响应功能允许系统在数据生成的过程中就开始将部分数据返回给客户端,显著降低了响应时间,增强了交互性。例如,当用户向聊天机器人发送一个问题后,聊天机器人可以通过流式响应,一边生成回答内容,一边将已生成的部分内容实时返回给用户,让用户能够实时感知到机器人的响应,提升了用户体验。同时,流式处理还避免了一次性加载所有数据到内存中,节省了内存资源,使得系统能够处理大量数据和高并发请求。

四、应用场景

4.1 智能客服系统

在智能客服系统中,Spring AI 发挥着重要作用。它能够集成先进的自然语言处理模型,快速准确地理解用户输入的文本内容。当用户提出问题时,Spring AI 通过统一的 API 抽象调用相应的 AI 模型,对问题进行语义分析,判断用户的意图。例如,当用户询问 “我购买的商品如何退货?”,Spring AI 借助其强大的模型理解能力,识别出关键词 “商品”“退货”,准确判断用户的需求是咨询退货流程。

在回答用户问题时,Spring AI 可以结合企业的知识库和业务逻辑,生成针对性的回复 。如果企业的知识库中已经存在关于退货流程的详细说明,Spring AI 能够快速检索并提取相关信息,以清晰、易懂的语言组织成回复内容返回给用户。同时,对于一些复杂问题,Spring AI 还可以通过多轮对话,进一步获取用户的详细需求,确保提供准确、完整的解决方案。而且,Spring AI 的流式数据响应功能使得客服系统能够实时将部分回复内容呈现给用户,大大提升了用户体验,减少了用户等待的焦虑感。

4.2 图像识别应用

在图像识别领域,Spring AI 同样有着广泛的应用。以电商平台的商品图片管理为例,商家上传大量的商品图片后,Spring AI 可以集成图像识别模型,对这些图片进行自动分类和标注 。它能够识别出图片中的商品类别,如服装、电子产品、食品等,并标注出商品的关键特征,如颜色、款式、品牌等信息。在安防监控场景中,Spring AI 可以支持目标检测任务。通过集成先进的目标检测模型,它能够实时监测监控画面中的人员、车辆等目标物体,一旦检测到异常行为,如人员闯入禁区、车辆逆行等,立即触发警报,通知相关人员采取措施。此外,在医疗影像分析领域,Spring AI 可以辅助医生对 X 光、CT 等影像进行分析,识别出潜在的病变区域,为医生提供诊断参考,提高诊断的准确性和效率 。

4.3 数据分析与预测

在企业的数据分析与预测场景中,Spring AI 能够提供有力的支持。以金融行业为例,银行需要对客户的信用风险进行评估,以决定是否给予贷款以及贷款额度。Spring AI 可以集成机器学习模型,对客户的大量数据进行分析,包括客户的收入情况、信用记录、负债情况等 。通过对这些数据的挖掘和分析,模型能够学习到客户信用风险的特征模式,从而对新客户的信用风险进行准确预测,帮助银行做出合理的贷款决策,降低贷款风险。在市场营销领域,企业希望根据用户的行为数据预测用户的购买倾向,以便进行精准营销。Spring AI 可以分析用户的浏览历史、购买记录、搜索关键词等数据,通过数据预处理和特征工程,将数据转化为适合模型输入的格式,然后利用机器学习模型进行训练和预测,找出潜在的高购买意向客户,为企业的市场营销策略提供数据支持,提高营销效果和投资回报率 。

五、快速上手

5.1 环境搭建

在开始使用 Spring AI 进行开发之前,首先需要搭建好开发环境。主要包括安装 Java 开发工具包(JDK)和构建工具 Maven。

  • 安装 Java:Spring AI 要求 Java 17 或更高版本 。可以从 Oracle 官方网站或 OpenJDK 项目网站下载并安装适合自己操作系统的 JDK 版本。安装完成后,打开命令行终端,输入java -version命令,如果能正确输出版本信息,说明 Java 安装成功。例如:
java -version
openjdk version "17.0.8" 2023-07-18
OpenJDK Runtime Environment (build 17.0.8+7)
OpenJDK 64-Bit Server VM (build 17.0.8+7, mixed mode, sharing)
  • 安装 Maven:Maven 是 Java 项目常用的构建工具,用于管理依赖和构建项目。可以从 Apache Maven 官方网站下载 Maven 的安装包,解压到指定目录后,配置环境变量MAVEN_HOME指向 Maven 的安装目录,并将%MAVEN_HOME%\bin添加到系统的PATH变量中 。安装完成后,在命令行终端输入mvn -v命令,若能输出版本等相关信息,说明 Maven 安装成功。例如:
mvn -v
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: D:\Program Files (x86)\apache-maven-3.8.8
Java version: 17.0.12, vendor: Oracle Corporation, runtime: D:\Program Files\jdk-17.0.12
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

5.2 创建 Spring AI 项目

创建 Spring AI 项目可以借助 Spring Initializr 这个基于 Web 的工具,它能快速生成 Spring Boot 项目的基础结构 。

  1. 打开浏览器,访问 Spring Initializr 网站(https://start.spring.io/)。
  2. 在 Spring Initializr 页面进行如下配置:
  • Project:选择项目构建工具,如 Maven Project 或 Gradle Project,这里以 Maven 为例。
  • Language:选择 Java。
  • Spring Boot:选择合适的 Spring Boot 版本,建议选择 3.x 或更高版本,以获得更好的兼容性和功能支持。
  • Group:填写项目的组 ID,通常是公司或组织的域名倒序,例如com.example。
  • Artifact:填写项目的工件 ID,即项目名称,例如spring-ai-demo。
  • Name:项目名称,默认与 Artifact 相同。
  • Description:项目描述,可根据实际情况填写。
  • Package Name:项目的包名,默认是Group + Artifact,也可以根据需要修改。
  • Dependencies:添加项目所需的依赖。在搜索框中搜索并添加Spring Web依赖,用于创建 Web 应用;然后搜索并添加与 Spring AI 相关的依赖,如要使用 OpenAI 服务,添加spring-ai-openai-spring-boot-starter依赖 。如果使用其他 AI 服务,添加相应的 Starter 依赖。

配置完成后,点击页面下方的 “Generate” 按钮,会下载一个压缩包,解压后即可得到一个完整的 Spring Boot 项目结构。项目的pom.xml文件中会自动添加刚才选择的依赖,例如添加 OpenAI 依赖后的pom.xml片段如下:

<dependencies>
    <!-- Spring Web 依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Spring AI OpenAI 依赖 -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    </dependency>
</dependencies>

5.3 配置 AI 服务

以使用 OpenAI 服务为例,在项目的配置文件中设置 API 密钥和相关参数。在src/main/resources目录下找到application.yml文件(如果是application.properties文件,配置方式类似),添加如下配置:

spring:
  ai:
    openai:
      api-key: sk-xxxxxxx # 将这里替换为你自己的OpenAI API Key
      base-url: https://api.openai.com/v1 # OpenAI API的基础URL
      chat:
        options:
          model: gpt-3.5-turbo # 使用的模型,可根据需求更换
          temperature: 0.7 # 控制生成文本的随机性,取值范围0 - 1,值越大越随机

其中,api-key是在 OpenAI 官网注册账号后获取的密钥,务必妥善保管,不要泄露;base-url是 OpenAI API 的基础地址;model指定使用的 OpenAI 模型,gpt-3.5-turbo是常用的模型之一;temperature参数用于控制生成文本的随机性,值越接近 0,生成的文本越确定性和保守,值越接近 1,生成的文本越具有创造性和多样性 。

5.4 编写代码实现 AI 功能

在创建好项目并配置好 AI 服务后,就可以编写代码来实现 AI 功能了。这里以调用 OpenAI 模型实现文本生成功能为例,创建一个 Spring MVC 的 Controller 类,用于处理用户请求并调用 AI 模型生成文本 。

  • 在src/main/java/com/example/springaidemo(根据实际的包名路径)目录下创建一个新的 Java 类,命名为AiController.java,代码如下:
 
package com.example.springaidemo;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AiController {

    private final ChatClient chatClient;

    @Autowired
    public AiController(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    @PostMapping("/ai/chat")
    public String chat(@RequestBody String prompt) {
        UserMessage userMessage = new UserMessage(prompt);
        return chatClient.prompt()
               .user(userMessage)
               .call()
               .content();
    }
}

上述代码中,AiController被@RestController注解标记,表示这是一个 RESTful 风格的控制器,用于处理 HTTP 请求。通过构造函数注入ChatClient,ChatClient是 Spring AI 提供的用于与聊天模型交互的客户端 。chat方法处理/ai/chat路径的 POST 请求,接收前端传来的用户输入prompt,创建UserMessage对象,然后通过ChatClient的prompt方法构建请求,设置用户消息,调用call方法调用 OpenAI 模型生成响应,最后返回响应内容 。

启动 Spring Boot 应用,在命令行终端进入项目根目录,执行mvn spring-boot:run命令,或者在 IDE 中直接运行启动类。应用启动成功后,可以使用工具(如 Postman)发送 POST 请求到http://localhost:8080/ai/chat(默认端口是 8080,如果在配置文件中修改了端口,需使用修改后的端口),请求体中填写要生成文本的提示信息,即可获取 OpenAI 模型生成的文本 。例如,发送请求体为 “写一首关于春天的诗”,会返回 AI 生成的关于春天的诗。

六、优势与展望

6.1 优势总结

Spring AI 在 AI 应用开发领域展现出了诸多显著优势。

从集成便利性来看,它提供的统一 API 抽象极大地简化了与不同 AI 服务的集成过程。开发人员无需花费大量时间和精力去研究各个 AI 服务的复杂 API,只需通过 Spring AI 的标准化接口,就能轻松实现与 OpenAI、Anthropic、Hugging Face 等多种主流 AI 服务的对接。这使得在不同 AI 服务之间进行切换变得轻而易举,降低了因服务变更带来的开发成本和风险。同时,低代码集成的特性,借助 Spring Boot Starter 依赖,进一步减少了集成过程中的代码编写量,通过简单的配置即可完成 AI 服务的接入,大大提高了开发效率。

在开发效率方面,Spring AI 丰富的功能和工具为开发者提供了强大的支持。它支持多种类型的 AI 模型,涵盖聊天、文生图、音频转录等多个领域,开发者可以根据项目需求快速选择合适的模型进行集成,无需从头开始构建复杂的模型。而且,Spring AI 对 Spring 生态系统的深度融合,使得开发者能够充分利用 Spring Boot、Spring Web、Spring Data 等现有组件,快速构建 AI 驱动的应用程序。这种基于熟悉的 Spring 框架进行开发的方式,减少了学习新框架和工具的成本,提高了开发速度,能够更快地将产品推向市场。

在增强应用智能性上,Spring AI 的作用也十分突出。通过集成先进的 AI 模型,它能够为应用程序赋予强大的自然语言处理、图像识别、数据分析等能力。以智能客服系统为例,Spring AI 能够使客服系统准确理解用户的问题,并快速给出智能回复,大大提升了用户体验。在图像识别应用中,能够帮助应用快速准确地识别图像中的内容,实现自动化的图像分类和标注。在数据分析与预测场景中,利用机器学习模型对大量数据进行分析和预测,为企业决策提供有力支持,增强了应用程序的实用性和竞争力。

6.2 未来展望

展望未来,Spring AI 有着广阔的发展空间和应用前景。

在技术发展方向上,随着人工智能技术的不断进步,Spring AI 有望支持更多先进的 AI 模型和算法。例如,未来可能会集成更加智能的大语言模型,这些模型在自然语言理解和生成方面将具备更强大的能力,使得基于 Spring AI 开发的智能客服、内容创作等应用能够提供更优质、更个性化的服务。在模型训练和优化方面,Spring AI 可能会引入更高效的训练算法和工具,支持分布式训练,提高模型的训练速度和质量,降低训练成本。同时,对于多模态融合的支持也将进一步加强,使得 AI 应用能够更好地处理文本、图像、音频等多种类型的数据,实现更丰富的功能。

在应用领域拓展方面,Spring AI 将在更多行业得到广泛应用。在医疗领域,它可以助力医疗影像分析、疾病预测和诊断辅助等应用的开发。通过集成图像识别和数据分析模型,Spring AI 能够帮助医生更准确地识别医疗影像中的病变,结合患者的病历数据进行疾病预测和诊断,提高医疗效率和准确性。在金融领域,可用于风险评估、智能投资顾问等场景。利用机器学习模型对金融数据进行分析,评估投资风险,为用户提供个性化的投资建议。在教育领域,能够开发智能辅导系统、个性化学习平台等。通过对学生学习数据的分析,了解学生的学习情况和需求,提供个性化的学习资源和辅导,提高教育质量。

七、结语

Spring AI 为 Java 开发者打开了通往人工智能开发领域的便捷之门。它以其独特的设计理念和丰富的功能特性,简化了 AI 应用开发流程,降低了开发门槛,让 Java 开发者能够充分发挥自身优势,快速构建智能应用。无论是在智能客服、图像识别还是数据分析预测等领域,Spring AI 都展现出了强大的应用潜力和价值。

对于广大 Java 开发者而言,Spring AI 无疑是一个值得深入学习和尝试的工具。它不仅能帮助我们提升技术能力,拓宽技术视野,还能为我们的项目开发带来更多的创新和可能性。希望大家通过本文的介绍,对 Spring AI 有了更全面的了解,并能在实际项目中积极探索和应用,共同开启 Java 开发与人工智能融合的新篇章 。

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

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

相关文章

Spring Cloud Sleuth与Zipkin深度整合指南:微服务链路追踪实战

上篇文章简单介绍了SpringCloud系列熔断器&#xff1a;Sentinel的搭建及基本用法&#xff0c;今天继续讲解下SpringCloud的微服务链路追踪&#xff1a;Zipkin的使用&#xff01;在分享之前继续回顾下本次SpringCloud的专题要讲的内容&#xff1a; 前置知识说明 在开始本教程前…

spring-ai 集成 mcp 之投机取巧

主旨 这篇文章主旨就一点&#xff0c;罗列spring-ai对mcp集成导致出现的一系列问题 分析 由于mcp未问世之前&#xff0c;就早就已经有了工具调用&#xff0c;源码如下&#xff1a; public interface ToolCallback {/*** Definition used by the AI model to determine when a…

大语言模型的完整训练周期从0到1的体系化拆解

以下部分内容参考了AI。 要真正理解大语言模型&#xff08;LLM&#xff09;的创生过程&#xff0c;我们需要将其拆解为一个完整的生命周期&#xff0c;每个阶段的关键技术相互关联&#xff0c;共同支撑最终模型的涌现能力。以下是体系化的训练流程框架&#xff1a; 阶段一&am…

历年北京邮电大学保研上机真题

2025北京邮电大学保研上机真题 2024北京邮电大学保研上机真题 2023北京邮电大学保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/problem?classification1 32位二进制串加法 题目描述 输入一个32位的二进制01串&#xff0c;输出这个数1和3后的32位二进制串。 输入…

《仿盒马》app开发技术分享-- 定位获取(端云一体)

开发准备 上一节我们实现了地址管理页面的数据查询和展示&#xff0c;接下来我们要实现的功能是地址添加相关的&#xff0c;我们想实现的功能是地图选点&#xff0c;那么在地图选点之前我们要做的就是先获取用户当前的定位。获取定位后我们拿到经纬度和其他信息&#xff0c;然…

黑马点评--基于Redis实现共享session登录

集群的session共享问题分析 session共享问题&#xff1a;多台Tomcat无法共享session存储空间&#xff0c;当请求切换到不同Tomcat服务时&#xff0c;原来存储在一台Tomcat服务中的数据&#xff0c;在其他Tomcat中是看不到的&#xff0c;这就导致了导致数据丢失的问题。 虽然系…

Mujoco 学习系列(二)基础功能与xml使用

这篇文章是 Mujoco 学习系列第二篇&#xff0c;主要介绍一些基础功能与 xmI 使用&#xff0c;重点在于如何编写与读懂 xml 文件。 运行这篇博客前请先确保正确安装 Mujoco 并通过了基本功能与GUI的验证&#xff0c;即至少完整下面这个博客的 第二章节 内容&#xff1a; Mujoc…

比特授权云外壳加密支持Android 15!

在信息化时代&#xff0c;多数软件供应商需要适配安卓系统&#xff0c;以扩大市场、满足用户需求并提升竞争力。APK作为Android应用的安装包&#xff0c;包含代码、资源、配置文件等运行所需组件&#xff0c;用于在设备端分发和安装应用。企业在分发软件时&#xff0c;需要通过…

uniapp使用sse连接后端,接收后端推过来的消息(app不支持!!)

小白终成大白 文章目录 小白终成大白前言一、什么是SSE呢&#xff1f;和websocket的异同点有什么&#xff1f;相同点不同点 二、直接上实现代码总结 前言 一般的请求就是前端发 后端回复 你一下我一下 如果需要有什么实时性的 后端可以主动告诉前端的技术 我首先会想到 webso…

历年复旦大学保研上机真题

2025复旦大学保研上机真题 2024复旦大学保研上机真题 2023复旦大学保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/problem?classification1 最大公共子串 题目描述 输入 3 个子串&#xff0c;输出这 3 个子串的最大公共子串。 输入格式 输入包含 3 个子串&…

黑马点评-实现安全秒杀优惠券(使并发一人一单,防止并发超卖)

一.实现优惠券秒杀 1.最原始代码&#xff1a; Service public class VoucherOrderServiceImpl extends ServiceImpl<VoucherOrderMapper, VoucherOrder> implements IVoucherOrderService {Resourceprivate ISeckillVoucherService seckillVoucherService;Resourcepriv…

解决论文中字体未嵌入的问题

文章总览&#xff1a;YuanDaiMa2048博客文章总览 解决论文中字体未嵌入的问题 问题描述解决方案&#xff1a;使用 Adobe PDF 打印机嵌入字体&#xff08;WPS版&#xff09;步骤一&#xff1a;打开 PDF 文件步骤二&#xff1a;选择打印到 Adobe PDF步骤三&#xff1a;修改 Adobe…

leetcode 131. Palindrome Partitioning

目录 一、题目描述 二、方法1、回溯法每次暴力判断回文子串 三、方法2、动态规划回溯法 一、题目描述 分割回文子串 131. Palindrome Partitioning 二、方法1、回溯法每次暴力判断回文子串 class Solution {vector<vector<string>> res;vector<string>…

审计报告附注救星!实现Word表格纵向求和+横向计算及其对应的智能校验

在审计工作中&#xff0c;Word附注通常包含很多表格。为了确保附注数字的准确性&#xff0c;我们需要对这些表格进行数字逻辑校验&#xff0c;主要包含两个维度&#xff1a;在纵向上验证合计项金额是否正确&#xff1b;在横向上检查“年末金额年初金额本期增加-本期减少”的勾稽…

人工智能数学基础实验(四):最大似然估计的-AI 模型训练与参数优化

一、实验目的 理解最大似然估计&#xff08;MLE&#xff09;原理&#xff1a;掌握通过最大化数据出现概率估计模型参数的核心思想。实现 MLE 与 AI 模型结合&#xff1a;使用 MLE 手动估计朴素贝叶斯模型参数&#xff0c;并与 Scikit-learn 内置模型对比&#xff0c;深入理解参…

告别延迟!Ethernetip转modbustcp网关在熔炼车间监控的极速时代

熔炼车间热火朝天&#xff0c;巨大的热风炉发出隆隆的轰鸣声&#xff0c;我作为一名技术操控工&#xff0c;正密切关注着监控系统上跳动的各项参数。这套基于EtherNET/ip的监控系统&#xff0c;是我们车间数字化改造的核心&#xff0c;它将原本分散的控制单元整合在一起&#x…

Visual Studio Code插件离线安装指南:从市场获取并手动部署

Visual Studio Code插件离线安装指南&#xff1a;从市场获取并手动部署 一、场景背景二、操作步骤详解步骤1&#xff1a;访问官方插件市场步骤2&#xff1a;定位目标版本步骤3&#xff1a;提取关键参数步骤4&#xff1a;构造下载链接步骤5&#xff1a;下载与安装 三、注意事项 …

计算机视觉---YOLOv1

YOLOv1深度解析&#xff1a;单阶段目标检测的开山之作 一、YOLOv1概述 提出背景&#xff1a; 2016年由Joseph Redmon等人提出&#xff0c;全称"You Only Look Once"&#xff0c;首次将目标检测视为回归问题&#xff0c;开创单阶段&#xff08;One-Stage&#xff09…

爬虫核心概念与工作原理详解

爬虫核心概念与工作原理详解 1. 什么是网络爬虫&#xff1f; 网络爬虫&#xff08;Web Crawler&#xff09;是一种按照特定规则自动抓取互联网信息的程序或脚本&#xff0c;本质是模拟人类浏览器行为&#xff0c;通过HTTP请求获取网页数据并解析处理。 形象比喻&#xff1a;如…

vue3前端后端地址可配置方案

在开发vue3项目过程中&#xff0c;需要切换不同的服务器部署&#xff0c;代码中配置的服务需要可灵活配置&#xff0c;不随着run npm build把网址打包到代码资源中&#xff0c;不然每次切换都需要重新run npm build。需要一个配置文件可以修改服务地址&#xff0c;而打包的代码…