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

「豆包Marscode体验官」AI加持的云端IDE——三种方法高效开发前后端聊天交互功能

豆包 MarsCode 是一个集成了AI功能的编程助手和云端IDE,旨在提高开发效率和质量。它支持多种编程语言和IDE,提供智能代码补全、代码解释、单元测试生成和问题修复等功能,同时具备AI对话视图和开发工具。

豆包 MarsCode

豆包 MarsCode 编程助手支持的 IDE: 支持Visual Studio Code 1.67.0及以上版本,以及JetBrains系列IDE,如IntelliJ IDEA、Pycharm等,版本要求为221.5080.210及以上。

豆包 MarsCode IDE 是一个云端 AI 集成开发环境(IDE),具备原生 AI 编程助手,提供代码补全、生成、优化等功能,支持多种编程语言和框架,无需本地资源,实现随时随地的开发。

豆包 MarsCode官方文档地址:https://docs.marscode.cn/introduction

故事起源

故事要从上周六说起。周五下班时大家都兴致勃勃,冲动之下,我也顾不上带电脑,径直开车上高速回家,急着与家里的丫头玩耍。但一到家才发现,书包居然没带。但我手头上还有一些未完成的开源项目工作,以及一个即将截止的征文活动,这些都需要我尽快完成。面对家中没有集成开发环境(IDE)的电脑,可愁死我了,正好当时我在浏览技术社区掘金时,偶然发现了豆包 MarsCode IDE,便立即开始使用这款在线IDE。

用的很不错,正好把我使用的体验感受写一下分享给大家。

先说体验

时间效率

在整个流程中,毫无疑问,使用豆包 IDE 比起先装环境要快得多。程序员们最头疼的就是环境安装,特别是在老式电脑上,我甚至担心会浪费时间。因此,使用豆包 IDE 的直观感受是它快速而稳定。整个环境安装再加上熟悉豆包 IDE,总共花了不到一个小时就可以正常启动项目,其中大约30分钟用在了配置mvn依赖上。这个过程有点坑,难怪会耽误时间。但如果是一个正常的项目,我相信在30分钟内就能搞定。

代码质量

其次,再谈谈我对AI功能的使用体验。实际上,最常用的是代码注释,因为大多数程序员包括我在内,不太喜欢写注释。使用云端IDE平台带来的便利在于,首先无需安装额外的编程助手;其次,通过AI悬挂图标直接选中问题或代码段,能快速解决困扰。这样做非常方便,而且最重要的是可以提升代码质量:一方面减少了对变量名的纠结,另一方面也让代码注释变得更为到位。

深度体验豆包 MarsCode IDE

以下是整体流程的详细描述,以确保信息清晰和逻辑连贯,防止大家头脑混乱:

登录豆包 MarsCode IDE 工作台 ——> 导入 GitHub 仓库 ——> 选择开发环境模板 ——> 配置项目 ——> 运行项目 ——> 体验项目 ——> 代码提交

spring-ai

使用云端 IDE 的主要优势之一是其适用于个人开发者,而大公司通常有自己的代码仓库。对于个人开发者而言,选择云端 IDE 编写开源项目再合适不过,特别是豆包 IDE 提供的资源分配非常充足。这意味着不必担心本地环境可能导致的宕机、电脑死机或磁盘损坏等问题。

然而,对我来说,稳定的网络连接是最关键的因素。在家里,访问 Github 时经常面临网络连接问题或速度极慢的情况,这对开发效率有显著影响。因此,我决定通过编写我的开源项目【spring-ai-demo】来深入体验豆包 IDE 的功能和性能。

快速导入GitHub 仓库

请访问豆包 MarsCode AI IDE 的官方网站:https://www.marscode.cn/dashboard

在开始之前,请登录豆包 MarsCode IDE 工作台,并导入我们的GitHub仓库项目,操作步骤如下所示:

image

在进行 GitHub 授权后,你可以访问自己的仓库项目列表。在选择要开发的项目时,系统会自动识别适用的语言模板,例如,如果你选择的项目是 Java 的话,它会自动识别为 Java 模板。

tips:单个账号在豆包 MarsCode IDE 上创建的项目数量不得超过 10 个

image

当你导入创建项目时,速度非常快,基本可以在几秒钟内完成,而且还会自动识别为 Maven 项目。

image

依赖环境

拿到新项目后,我们的操作步骤与通常一样,唯一的不同是无需搭建运行环境,只需下载依赖即可。更方便的是,我们可以直接从阿里云仓库下载依赖,无需单独配置mvn的setting文件,这一点特别贴心。

这一步直接报错了。按照官方的依赖包下载的话,在阿里云镜像中是找不到的,具体如下所示:

image

tips:在pom中指定了repositories仓库地址,也不会生效,可以认为只能去阿里云仓库

image

当即使指定了下载包仓库,仍然无法成功时,我出于好奇查看了阿里的镜像,发现其不存在。进一步调查后发现,阿里云的镜像groupid已经更改。因此,我也需要相应地进行修改:

image

修改后,终于成功实现了正常的下载功能,但我仍不清楚是否损失了哪些功能。这可能被视为一个缺陷,因为我的项目是开源的。如果某些小公司内部依赖于私有仓库的包,那么他们可能会遇到问题。

启动项目

在启动项目时,这里会持续提示各种配置项,只需直接启用它们,即可顺利完成启动操作。

image

确保在启动任何maven项目之前,务必确保项目已成功编译完成,否则可能会导致出现各种文件找不到的错误。

image

同样地,你也可以在这里配置适合自己习惯的操作方式:如clean install -DskipTests=true

image

体验项目

启动成功后,将会显示相应的路径及其所监听的端口信息,让我们来查看一下吧。

image

这里是我们项目真正使用的端口监听。如果需要详细了解,请查看项目配置文件中的相关信息。好的,让我们进行访问。

image

当我们查看 web-view 时,请将输入的路径转换成对应的路径。举例来说,如果我直接访问 swagger-ui,那么输入的路径就是 doc.html。

image

此外,除了这些路径,我只需在此页面上点击即可查看和操作剩余的所有路径。

image

当然,如果你不希望在这里使用webview,也可以复制路径并在浏览器中打开以访问。总体而言,项目启动的基本环境依赖操作通常可以在30分钟内完成。

image

在这里,不仅可以根据相应的路径找到对应的控制器,还可以观察到垃圾回收器的工作状态,这使得这个视图变得非常有用和优秀。

image

当鼠标悬停在注解上时,甚至可以显示出本类中的对象是如何被注入的。这对于研究源码来说也是非常有用的功能。

image

小操作的一项优化是支持文件重命名时,同时修改其中的类名。

image

编辑项目

完成了上述基本操作后,接下来我们将开始今天的主题:继续维护我的开源项目spring-ai-demo。今天我们将深入探讨函数调用。

大型语言模型(LLM)在训练完成后被冻结,导致其知识陈旧,并限制了其访问和修改外部数据的能力。

为了解决这些问题,函数调用机制应运而生。这种机制允许你注册自定义函数,将大型语言模型连接到外部系统的API。这些外部系统能够为LLM提供实时数据,并代表它执行数据处理操作。

Spring AI简化了支持函数调用所需的代码编写。它处理了函数调用的对话流程,使你能够轻松地注册函数。你只需提供函数的Bean名称作为a,然后在提示选项中选择该名称以激活该函数。此外,您还可以在单个提示中定义和引用多个函数。

image

  1. 执行聊天请求及函数定义信息的处理,例如解释模型何时应该调用函数以及函数的输入参数模式。
  2. 模型决定调用函数时,会传递输入参数给相应的函数,并将输出结果返回给模型。
  3. Spring AI 管理此对话流程,将函数调用分发给适当的函数,并将结果传送回模型。
  4. 模型可以执行多个函数调用以获取所需的所有信息。
  5. 一旦收集到所有必要信息,模型将生成响应。

补全代码

这里先快速写一个入口,tab补全代码

image

报错修复

在复制粘贴过程中,IDE并不会自动添加相关的依赖包。因此,每当遇到类报错时,如果IDE提供了快速修复选项,请优先点击执行修复操作;如果没有快速修复选项,则建议参考AI fix的建议进行手动修复。

image

代码注释

这个功能简直是太赞了,我真的很喜欢它。因为有时候实在懒得打字,但在线IDE可以根据我的输入自动理解代码的意图,并且根据我的简短提示自动生成后续的注释。这对于我这种懒人来说简直是福音啊!就看看它的效果吧。

image

AI 问答

有任何报错,无论是来自控制台还是其他地方,他都能够利用智能问答进行优化和解决。

image

同样也有历史记录进行维护,这样可以方便回顾和查看之前的错误记录。在记录问题时,根据解决方法详细描述,以确保下次不会再犯同样的错误。

image

最后重新启动项目即可。尽管已经进行了函数回调,但由于地址传错,无法避免。毕竟这些API都由开发者自行管理,最初我以为是官方的问题,但询问后发现与官方无关。

image

tips:这里注意下每个路径都是有时间限制的,所以如果长时间不刷新,路径也将会失效,点击刷新即可。url路径是不会改变的

image

提交变更

当你完成开发并维护相关代码之后,可以直接使用此接口进行Git提交,从而实现一站式的服务。

image

前端UI聊天交互页面

前几天有粉丝在评论区建议增加一个前端交互页面,认为这会使体验更加丰富,于是我们便安排了这个任务。我们主要探索了两种不同的前端页面设计:一种是采用豆包的React模版,另一种是直接使用HTML模版,还有一种特殊的Python模版。好的,言归正传,让我们首先来探索React模版。

React

项目模版创建

我掌握了一些HTML、JavaScript和CSS的基本操作,对React框架几乎没有经验。因此,我会使用IDE提供的模板来创建项目,而不必过多关注环境依赖,直接启动即可成功。好的,那么让我们开始吧。

image

当你进入这个页面时,你会发现官方提供了一份贴心的README文件,可以帮助你快速了解如何启动这个程序。

image

UI交互

启动结束后,我浏览了一下页面,但我对这个东西基本上一头雾水,页面上的元素我都不认识。好的,我想通过AI来了解一下,看看它是否能够满足我的需求。

tips:这里注意下,问问题的时候,一定要选择修改的页面,如果选的不对,AI也是无法直接回答问题的。

image

生成的结果看起来确实不错,但幸好我有一些前端基础知识,因此能够发现生成的属性有问题。经过修改后,问题得以解决。

image

接着立即观察生成的结果。

tips:这里发现个问题,webview无法显示alter弹窗信息,不过复制出来在浏览器中使用即可,无伤大雅

image

好的,我们已经确定了基本组件。剩下的优化工作我们稍后再进行,先完成后优化师我开发的原则。接下来要做的是生成按钮点击后要跳转的页面。让AI来帮我整理一下吧。

image

好吧,生成的内容一直报错,而且他们还不给修复。

image

那么我们可以考虑另一种解决方案。考虑到这是一个框架,应该有专门的组件可以直接完成这项任务,特别是在当今LLM流行的环境下,聊天页面也正迎来了蓬勃发展。

image

ChatSDK

找了半天,确实没找到满意的解决方案。于是我向各位前端大佬请教了一下,毕竟我在前端框架方面几乎没有经验。他们根据我的需求推荐了一个非常强大的一站式UI解决方案——阿里的chatSDK,你可以在以下地址找到它:

https://chatbot.console.aliyun.com/ChatSDK#/sdk

image

这就是我想要的结果,不过在配置的过程中遇到了很多问题,因为我对此一无所知。尽管如此,我仍然坚持学习并逐步掌握。幸运的是,通过查阅官方文档,我得以解决了这些困惑,即便我的AI助手也跟我一样陷入了困境。

image

Rsbuild

没错,就是指的rsbuild。虽然文档写得很详细,但我还是去看了如何设置index.html。结果发现操作很简单,只需要简单配置一下就行。可能是因为rsbuild并不像webpack那样流行,所以网上关于它的配置信息不多,我一直找不到相关的资料。

image

这里来详细介绍一下rsbuild。为什么在React项目中选择自动集成rsbuild,而不是像市面上流行的webpack等其他工具呢?

Rsbuild是一个基于Rspack的高性能构建工具,它不仅提供丰富的构建功能和优化的配置选项,还支持多种前端UI框架。Rsbuild的特点包括出色的性能表现、简便的配置方式、丰富的插件生态系统、稳定可靠的构建产物以及与各种前端框架的无缝兼容性。与类似的工具如Vite、Create React App和Vue CLI相比,Rsbuild不仅能够实现更高效的构建过程,而且能够更好地融入复杂的生态系统中。

image

Rsbuild,由字节跳动推出,旨在构建一个开放的技术生态系统,以积极推动前端技术的进步和发展。

因此,首先,Rsbuild 拥有更高的构建性能,能够提供比基于 Webpack 的 Create React App 和 Vue CLI 等工具高达 5 到 10 倍的效率,同时还具备更为轻量的依赖体积。其次,Rsbuild 与豆包一样是属于一家公司的产品,所以成为了一个优选的选择。

这里唯一的不足是社区问题太少,当我遇到错误时,很难找到解决方法,只能自己苦苦探索,甚至要通过Google搜索来解决。有时甚至连关键字【Rsbuild+问题】都无法搜索到相关信息。这方面值得进一步优化。

其实一句话即可。我们去看下去

image

设置成功后,我们将按照阿里提供的SDK快速开发文档进行配置,然后启动应用程序进行测试。

image

可以看到,所有必要的内容已经成功添加到系统中。接下来,我们将继续开发以实现跳转到聊天页面的功能。首先,我们需要完善各种路由的配置,确保一切就绪后再继续进行跳转功能的开发。这一步骤只需要完成一个小组件即可。

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import ChatHome from '../components/chat';
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'
const root = ReactDOM.createRoot(document.getElementById('root')!);
root.render(<React.StrictMode> <Router><Routes><Route path='/talk' element={<ChatHome />}></Route><Route path='/' element={<App />}></Route></Routes></Router></React.StrictMode>,
);

当需要添加链接时,剩下的任务就是在合适的位置插入超链接。可以简单地使用代码自动补全完成这个任务。

image

当最后成功集成进来时,所带来的效果如下所示:

image

优化后端

接下来,我们将继续对接之前我们开发的spring-ai项目,以实现一个真正交互式的界面。

image

那么为什么不能直接使用record返回呢?因为前端不仅仅支持文本,还有其他方案。所以还是自己写吧。总之,目前即便是AI也可能会出错,即使指定返回特定格式,也不一定正确。

具体修改后如下:

@PostMapping("/ai")
ChatDataPO generationByText(@RequestParam("userInput")  String userInput) {String content = this.myChatClientWithSystem.prompt().user(userInput).call().content();log.info("content: {}", content);ChatDataPO chatDataPO = ChatDataPO.builder().code("text").data(ChildData.builder().text(content).build()).build();;return chatDataPO;
}

在启动后端的spring-ai-demo项目后,我们可以复制networking目录下的URL路径。这样做是为了确保前后端项目能够同时成功启动。

image

接下来需要对前端发送的 API 接口信息进行修改和优化。

send: function send(msg) {let sessionId = 'M9u913BFyxIuTdRv7O73nx9SfkWgerhk';return {url: 'https://jtdedyc1-kbb5pits-q02qbpq08o1p.c1.mcprev.cn/ai',data: {userInput: msg.content.text,// sessionId: sessionId,},method: 'POST'};}

效果演示

前端项目启动完成后,我们可以继续前往演示其效果。

image

Python

我们再创建一个新的项目,这次以Python为模板,为了确保项目从一开始就符合我们的需求,我们需要对初始模板进行一些调整。首先,我们将删除原有的代码,因为它们仅是构建一个基础的Python HTTP服务项目的基础,而并非我们项目所需的具体功能。

我们要以Streamlit这一强大的工具为主,Streamlit不仅以其强大的功能和易用性著称,还能让我们以前所未有的速度构建出具有流式打字机效果的聊天应用。、

对于那些像我一样对复杂的前端代码感到畏惧的开发者来说,Streamlit无疑是一个巨大的福音。它简化了开发流程,让我们能够专注于应用的核心功能和逻辑,而无需深陷前端开发。

streamlit

在这次实操中,我们将跳过那些深奥的理论知识,将全部的注意力集中在实际的操作和应用上。

首先,我们需要确保基础环境已经搭建好。幸运的是,基础环境的搭建工作已经顺利完成,我们不需要再为此花费额外的时间和精力。接下来,我们需要做的就是安装一些必要的开发环境即可:

pip install streamlit

在进行项目开发的过程中,我们常常会遇到需要从外部获取各种资源和依赖的情况。豆包IDE默认已经不再是官方源了,而是国内的仓库。、

接下来,我们将进行一个简单的测试,以验证我们的环境配置是否正确。首先,我们需要将示例代码复制到我们的开发环境中。启动后,检查是否能够正常访问,页面是否显示预期的内容。

import streamlit as st
import random
import time# Streamed response emulator
def response_generator():response = random.choice(["Hello there! How can I assist you today?","Hi, human! Is there anything I can help you with?","Do you need help?",])for word in response.split():yield word + " "time.sleep(0.05)st.title("Simple chat")# Initialize chat history
if "messages" not in st.session_state:st.session_state.messages = []# Display chat messages from history on app rerun
for message in st.session_state.messages:with st.chat_message(message["role"]):st.markdown(message["content"])# Accept user input
if prompt := st.chat_input("What is up?"):# Add user message to chat historyst.session_state.messages.append({"role": "user", "content": prompt})# Display user message in chat message containerwith st.chat_message("user"):st.markdown(prompt)# Display assistant response in chat message containerwith st.chat_message("assistant"):response = st.write_stream(response_generator())# Add assistant response to chat historyst.session_state.messages.append({"role": "assistant", "content": response})

streamlit run main.py

在启动Streamlit项目的过程中,我们直接选择使用命令行工具来执行,而不是依赖于图形界面的“运行”按钮。

后端优化

我们之前的文章开发过程基于对接大模型的。而这一次,我们计划采用Spring-AI后台进行对接,以开发实时交互聊天功能。

首先,我们需要对代码进行相应的修改。

@PostMapping("/ai-stream")
Flux<String> generationByStream(@RequestParam("userInput") String userInput) {Flux<String> output = chatClient.prompt().user(userInput).stream().content();return output;
}

代码生成

启动成功后,我们要求AI协助生成请求代码。

image

这段代码拿过来后需要简单修改一下,因为我们需要走流式回答,并不是阻塞式的调用。最后代码如下:

def response_generator(prompt):url = 'https://fq5jh3sk-kr95txxo-prhof0hgd4fs.c1.mcprev.cn/ai-stream'url += '?userInput=' + promptheaders = {'Accept': '*/*','Content-Type': 'application/x-www-form-urlencoded'}# 发送POST请求response = requests.get(url, headers=headers, stream=True)# print(response.text)# 处理流式响应if response.status_code == 200:# 获取可读流for chunk in response.iter_content(chunk_size=1024):if chunk:# 在这里处理你的业务逻辑,例如打印或者其他操作yield chunk.decode('utf-8')  # 假设服务器返回UTF-8编码的文本else:print(f"Error fetching data: {response.status_code}")

tips:这里需要注意的是,请不要在后端调用其他豆包启动的项目,因为这样可能会被系统拦截。不像前端页面那样可以直接跳转,后端如果直接调用 API 是行不通的。因此,我在本地启动了一次联调。

演示效果

Python的实现相当简单,我们现在来看一下它的调用结果:

image

总结

豆包 MarsCode 是现代开发者的利器,其集成了强大的AI功能和云端IDE,极大地提升了开发效率和代码质量。通过支持多种主流编程语言和IDE,豆包 MarsCode 不仅简化了环境配置过程,还提供了智能代码补全、单元测试生成、问题修复等多项AI驱动的功能,使开发者能够专注于创造性工作而非繁琐的设置。

在实际使用中,我深刻体验到豆包 MarsCode 的便利。无论是快速导入GitHub仓库、自动识别项目语言模板,还是轻松配置和启动项目,它都展现了出色的稳定性和高效性。与传统的本地IDE相比,豆包 MarsCode 的云端特性更加灵活,使我能够随时随地进行开发,无需担心硬件或网络环境的限制。

特别是在代码质量的提升方面,豆包 MarsCode 的AI功能展现了其独特优势。自动代码注释、智能问题解决建议,以及对话式AI视图的应用,不仅简化了日常开发中的繁琐任务,还显著提高了代码的可读性和可维护性。这些功能不仅让我在忙碌的开发过程中节省了大量时间,还使我的开发工作更加高效和愉悦。

总的来说,豆包 MarsCode 不仅是一个工具,更是现代软件开发中不可或缺的助手。它的出现不仅推动了开发工具的技术进步,更为开发者们带来了全新的开发体验和工作方式。期待未来豆包 MarsCode 在AI驱动开发领域继续创新,为全球开发者提供更多实用且强大的功能。


我是努力的小雨,一名 Java 服务端码农,潜心研究着 AI 技术的奥秘。我热爱技术交流与分享,对开源社区充满热情。身兼掘金优秀作者、腾讯云内容共创官、阿里云专家博主、华为云云享专家等多重身份。

🚀 目前,我的探索重点在于 AI Agent 智能体应用,我对其充满好奇,并不断探索着其潜力与可能性。如果你也对此领域充满热情,欢迎与我交流分享,让我们共同探索未知的领域!

💡 我将不吝分享我在技术道路上的个人探索与经验,希望能为你的学习与成长带来一些启发与帮助。

🌟 欢迎关注努力的小雨!🌟

相关文章:

「豆包Marscode体验官」AI加持的云端IDE——三种方法高效开发前后端聊天交互功能

豆包 MarsCode 是一个集成了AI功能的编程助手和云端IDE&#xff0c;旨在提高开发效率和质量。它支持多种编程语言和IDE&#xff0c;提供智能代码补全、代码解释、单元测试生成和问题修复等功能&#xff0c;同时具备AI对话视图和开发工具。 豆包 MarsCode 豆包 MarsCode 编程助…...

一文带你掌握C++虚函数·和多态

9. C虚函数与多态 虚函数 virtual修饰的成员函数就是虚函数 虚函数对类的内存影响:需要增加一个指针类型的内存大小无论多少虚函数&#xff0c;只会增加一个指针类型的内存大小虚函数表的概念: 指向虚函数的指针 我们自己也可以通过虚函数表指针去访问函数(一般做这样的操作…...

OpenCV 4.10 + OpenCV_contrib配置教程 仅供参考

参考&#xff1a;https://blog.csdn.net/qq_27278957/article/details/108224325 https://blog.csdn.net/weixin_43763292/article/details/130232863 OpenCV&#xff1a;https://github.com/opencv/opencv/releases/tag/4.10.0 OpcenCV_contrib: https://github.com/opencv/o…...

ClkLog:开源用户行为分析框架,让数据分析更轻松

ClkLog&#xff1a;开源用户行为分析框架&#xff0c;让数据分析更轻松 在数据驱动的时代&#xff0c;找到一个好用的用户行为分析工具真是难上加难。但是今天你有福了&#xff0c;开源免费的 ClkLog 就是你的不二选择&#xff01;本文将为你详细介绍 ClkLog 的功能特点、技术架…...

Spring源码学习笔记之@Async源码

文章目录 一、简介二、异步任务Async的使用方法2.1、第一步、配置类上加EnableAsync注解2.2、第二步、自定义线程池2.2.1、方法一、不配置自定义线程池使用默认线程池2.2.2、方法二、使用AsyncConfigurer指定线程池2.2.3、方法三、使用自定义的线程池Excutor2.2.4、方法四、使用…...

面试题:如何验证代码的可靠性

代码结构上的&#xff1a; 1 可扩展性 是否否和开闭原则 2 性能&#xff0c;数据结构用的是否合理&#xff0c;算法等是否效率高。 3 安全性 是否存在潜在的安全 整数溢出 SQL注入 等 4 代码复杂度 圈负杂度 if嵌套深度 函数长度等 5 函数变量的命名是否具有自解释性 1. …...

前端开发的十字路口,薪的出口会是AI吗?

前言 在数字化转型的浪潮中&#xff0c;前端开发一直扮演着至关重要的角色&#xff0c;它连接着用户与产品之间的桥梁。然而&#xff0c;随着技术的不断进步和社会经济环境的变化&#xff0c;前端开发领域也面临着前所未有的挑战和机遇。 前端开发的困境 前端开发领域的竞争…...

pdf太大怎么压缩大小?这几种压缩方法操作起来很简单!

pdf太大怎么压缩大小&#xff1f;在数字化洪流席卷的当下&#xff0c;PDF文件的“臃肿”难题如同巨石般横亘于高效办公之路&#xff0c;它们不仅贪婪地吞噬着宝贵的存储空间&#xff0c;更如沉重的枷锁&#xff0c;拖曳着我们的工作进度&#xff0c;步入迟缓之境&#xff0c;试…...

leetcode-148. 排序链表

题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4]示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5]示例 3&#x…...

16 html网页服务和nginx服务

第十六次7.29 1.静态页面 1安装httpd [rootweb ~]# yum -y install httpd 2.真机访问页面 [rootweb html]# echo "静态html文件" > index.html 传入照片再次访问 静态资源&#xff0c;根据开发着保存在项目资源目录中的路径访问静态页面的资源 2.Apache 1.安…...

C语言:扫雷游戏实现

一、扫雷游戏的分析和设计 扫雷游戏想必大家都玩过吧&#xff0c;初级的玩法是在一个9*9的棋盘上找到没有雷的格子&#xff0c;而今天我们就要做的就是9*9扫雷游戏的实现。 1、游戏功能和规则 使用控制台实现经典的扫雷游戏游戏可以通过菜单实现继续玩或者退出游戏扫雷的棋盘…...

算法入门:Java实现排序、查找算法

链接&#xff1a;算法入门&#xff1a;Java实现排序、查找算法 (qq.com) 冒泡/选择/插入/希尔排序代码 (qq.com) 快排/归并/堆排/基数排序代码 (qq.com)...

【初阶数据结构篇】顺序表的实现(赋源码)

文章目录 本篇代码位置顺序表和链表1.线性表2.顺序表2.1 概念与结构2.2分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现2.3.1动态顺序表的初始化和销毁及打印2.3.2动态顺序表的插入动态顺序表的尾插动态顺序表的头插动态顺序表的在指定位置插入数据 2.3.3动态顺序表…...

移动式气象站:便携科技的天气守望者

在科技日新月异的今天&#xff0c;我们身边的许多设备都在向着更加智能化、便携化的方向发展。而在气象观测领域&#xff0c;移动式气象站的出现&#xff0c;不仅改变了传统气象观测的固有模式&#xff0c;更以其灵活性和实时性&#xff0c;在气象监测、灾害预警等领域发挥着越…...

软件测试必备 - 14个接口与自动化测试练习网站

随着互联网和移动应用的快速发展,接口和自动化测试的重要性日益凸显。越来越多的企业开始重视API测试,因为它不仅能提升开发效率,还能确保系统的稳定性和安全性。这些练习网站为测试人员提供了宝贵的资源,帮助他们掌握必要的技能,应对日益复杂的测试需求。 在软件测试的世…...

基于 HTML+ECharts 实现的数据可视化大屏案例(含源码)

数据可视化大屏案例&#xff1a;基于 HTML 和 ECharts 的实现 数据可视化已成为企业决策和业务分析的重要工具。通过直观、动态的图表展示&#xff0c;数据可视化大屏能够帮助用户快速理解复杂的数据关系&#xff0c;发现潜在的业务趋势。本文将介绍如何利用 HTML 和 ECharts 实…...

vardaccico前端私有库

vardacico docker pull verdaccio/verdaccio:4 docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio Docker | Verdaccio 拷贝docker中的配置到宿主机 进入docker内部 docker exec -it verdaccio /bin/sh 进入到指定目录 cd /verdaccio 开始拷贝到指定目…...

先用先发!小样本故障诊断新思路!Transformer-SVM组合模型多特征分类预测/故障诊断(Matlab)

先用先发&#xff01;小样本故障诊断新思路&#xff01;Transformer-SVM组合模型多特征分类预测/故障诊断&#xff08;Matlab&#xff09; 目录 先用先发&#xff01;小样本故障诊断新思路&#xff01;Transformer-SVM组合模型多特征分类预测/故障诊断&#xff08;Matlab&#…...

学习大数据DAY26 简单数据清洗练习和 Shell 脚本中的数据库编程

目录 上机练习 14 mysql 命令 sql 语句实现步骤 shell 脚本导入 csv 格式文件到 mysql 数据库 secure-file-priv 特性 把文件拷贝到 mysql 指定目录下 上机练习 15 mysqldump 命令 上机练习 16 上机练习 14 运用上一节课学的 Shell 工具完成 1. 清洗数据《infotest.t…...

开发业务(3)——swoole和聊天室入门开发

在普通的PHP代码里面&#xff0c;我们不需要考虑性能和异步问题&#xff0c;包括不限于我们想要使用php搭建一个http服务器&#xff08;在node/python/go里面都有http模块&#xff0c;但是PHP没有这种功能&#xff09;。而同样的原因&#xff0c;很难实现php游戏的开发&#xf…...

Linux系统服务——【web,http协议,apache服务和nginx服务】(sixteen day)

一、web基础以及http协议 1、web基本概念和常识 前端开发一般用uniapp. 1、Web:为用户提供的一种在互联网上浏览信息的服务&#xff0c;Web 服务是动态的、可交互的、跨平台的和图形化的。 2、Web 服务为用户提供各种互联网服务&#xff0c;这些服务包括信息浏览服务&#xf…...

100、Python 关于时间日期的一些操作

在Python中&#xff0c;我们用于处理时间和日期相关的类型最常用的模块是datetime模块。该模块提供了很多与时间日期相关的类&#xff0c;对我们处理时间日期变得很方便。 以下是一些常见的关于时间日期的操作。 一、datetime类 1、获取当前日期和时间&#xff08;年、月、日…...

【精通Redis】Redis命令详解

引言 Redis是一个内存数据库&#xff0c;在学习它的内部原理与实现之前&#xff0c;我们首先要做到的就是学会使用&#xff0c;学会其丰富的命令操作。 一、字符串 Redis的字符串类型之前笔者的一篇入门介绍中曾经说过&#xff0c;不是简单的只存人可以阅读的字符串&#xf…...

项目经理的开源工具指南:优化您的选择过程

国内外主流的10款开源项目管理系统对比&#xff1a;PingCode、Worktile、禅道、Teambition、Gogs、码云 Gitee、Jira、Redmine、ProjectLibre、OpenProject。 在选择合适的开源项目管理系统时&#xff0c;很多团队面临诸多挑战&#xff1a;功能是否全面&#xff1f;易用性如何&…...

如何防御IP劫持

摘要 IP劫持是一种网络攻击方式&#xff0c;攻击者通过各种手段获取对某个IP地址的控制权&#xff0c;并将其用于恶意目的。这种攻击可能会导致数据泄露、服务中断等严重后果。本文将介绍IP劫持的基本概念、攻击方式以及防御策略&#xff0c;并提供一些实际的代码示例。 IP劫…...

C++绝对值

在C中&#xff0c;你可以使用标准库中的abs函数来获取一个整数的绝对值。对于浮点数&#xff0c;也有一个类似的函数叫做fabs。下面是如何使用这些函数的示例&#xff1a; 对于整数 对于整数&#xff0c;你可以使用std::abs函数&#xff0c;它存在于<cstdlib>头文件中。…...

C# dataGridView 去掉左边多出来空列

1.问题 在使用winform做界面程序时&#xff0c;dataGridView控件创建好后&#xff0c;左侧会多出一列为空&#xff0c;如何删除呢 2.解决方法 你可以在属性窗口中进行设置 如图&#xff1a; 将RowHeadersVisible 属性设置为False 或者代码设置 this.dataGridView1.RowHea…...

esp32

买了单片机模块&#xff0c;学8266...

IDEA 本地有jar包依赖文件,但是所有引用的jar包全部爆红

前端时间 看源码&#xff0c;下载源码额按钮不见了&#xff0c;折腾了很久&#xff0c;遂打算重新安装idea&#xff0c;但是重新安装后&#xff0c;发现代码全都爆红&#xff0c;按照晚上说的删除idea 文件夹&#xff0c;idea缓存删除&#xff0c;都不好使&#xff0c;但是看到…...

如何在调整节拍时间的过程中保持生产流程的稳定性?

在快节奏的工业生产领域&#xff0c;节拍时间&#xff08;Takt Time&#xff09;——即完成一个完整产品所需的标准时间&#xff0c;是维持生产效率和流程稳定性的关键指标。然而&#xff0c;市场需求的波动、技术升级或是生产线的微调&#xff0c;都可能要求我们对节拍时间进行…...

3. Docker的数据管理与持久化

在Docker容器化应用中&#xff0c;数据的持久化和管理是一个关键问题。容器的生命周期短暂&#xff0c;容器的停止和删除会导致数据丢失。因此&#xff0c;了解Docker的数据卷&#xff08;Volumes&#xff09;和挂载&#xff08;Mounts&#xff09;的管理方式&#xff0c;对保障…...

Logback原理及应用详解(九)

本系列文章简介&#xff1a; 在软件开发的过程中&#xff0c;日志记录是一项至关重要的功能。它不仅帮助开发者在开发阶段追踪代码的执行流程和调试问题&#xff0c;还在生产环境中扮演着监控应用运行状态、记录关键业务信息和排查故障的重要角色。随着软件系统的日益复杂和分布…...

SpringBoot 禁用RabbitMQ自启动

1.背景 在实际开发中,项目中使用了mq,但是在测试的时候用不到mq,或者测试环境的mq挂了, 希望能正常启动项目 2.步骤 这很简单在配置文件中增加一个配置就可以了 spring:autoconfigure:exclude: org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration 表示启…...

unity 实现图片的放大与缩小(根据鼠标位置拉伸放缩)

1创建UnityHelper.cs using UnityEngine.Events; using UnityEngine.EventSystems;public class UnityHelper {/// <summary>/// 简化向EventTrigger组件添加事件的操作。/// </summary>/// <param name"_eventTrigger">要添加事件监听的UI元素上…...

Scrapy 爬取旅游景点相关数据(五)

本期内容&#xff1a;&#xff08;1&#xff09;爬取日本其他城市数据存入数据库&#xff08;2&#xff09;爬取景点评论数据 1 爬取其他城市景点数据 只爬取一个城市的数据对于做数据可视化系统可能是不够的&#xff0c;因为数据样本量少嘛&#xff0c;本期来爬取其他城市的景…...

程序员纯粹八股文的危害有哪些,应该如何来解决?

“八股文”这个词在程序员面试的上下文中通常指的是那些被广泛讨论、反复练习的问题和答案&#xff0c;它们往往围绕着一些经典的技术知识点&#xff0c;例如算法、数据结构、设计模式等。这些知识在面试中被频繁提及&#xff0c;以至于应聘者经常会提前准备并背诵这些答案&…...

LabVIEW操作系列1

系列文章目录 我的记录&#xff1a; LabVIEW操作系列 文章目录 系列文章目录前言五、特殊用法5.1 取值范围表示5.2 对输入值取值范围进行限定5.3 控制多个While循环停止运行。5.4 获取按钮上的文本5.5 获取按钮上的文本【进阶】 六、使用步骤1.引入库2.读入数据 七、其余功能7.…...

【前端 09】JavaScript中的对象与JSON

JavaScript中的对象与JSON 在JavaScript中&#xff0c;对象和JSON&#xff08;JavaScript Object Notation&#xff09;是两个紧密相连但又有区别的概念。它们都在数据处理和交换中扮演着重要角色。本文将详细讲解JavaScript中的自定义对象以及JSON对象的基本概念、格式、用法…...

C# 字符串罗马数字123转汉字一二三

要将字符串 "123" 转换为 "一二三"&#xff0c;可以通过以下几种方法来实现。 1. 使用映射字典 可以创建一个映射字典&#xff0c;将数字字符映射到对应的中文数字&#xff0c;然后遍历原始字符串进行替换&#xff1a; using System; using System.Coll…...

红杉资本视角:大公司在AI领域的投资策略与市场影响

在人工智能&#xff08;AI&#xff09;的快速发展浪潮中&#xff0c;大型科技公司如谷歌、Meta等正在积极投资&#xff0c;以确保在未来技术竞争中占据有利地位。红杉资本等投资机构对此现象进行了深入分析&#xff0c;探讨了大公司在AI领域的投资策略及其对市场的影响。本文将…...

CI/CD学习之路

CI/CD之路 https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg4NDg0MjQ0MQ&actiongetalbum&album_id3433192036428447744&scene173&subscene&sessionidsvr_0b1e7fe1d6b&enterid1721879847&from_msgid2247485821&from_itemidx1&count3&am…...

IP 泄露: 原因与避免方法

始终关注您的IP信息&#xff01; 您的IP地址不仅显示您的位置&#xff0c;它包含几乎所有的互联网活动信息&#xff01; 如果出现IP泄漏&#xff0c;几乎所有的信息都会被捕获甚至非法利用&#xff01; 那么&#xff0c;网站究竟如何追踪您的IP地址&#xff1f;您又如何有效…...

深⼊理解指针(1)

1. 内存和地址 2. 指针变量和地址 3. 指针变量类型的意义 4. const修饰指针 5. 指针运算 6. 野指针 7. assert断⾔ 8. 指针的使⽤和传址调⽤ 1. 内存和地址 1.1 内存 计算机内存空间如何高效率的管理&#xff1f; 也是把内存划分为⼀个个的内存单元&#xff0c;每个…...

Photoshop 2023:创意无限的图像编辑神器

Photoshop 2023 是一款专为 Mac 和 Windows 系统设计的强大图像编辑软件&#xff0c;为专业设计师和业余爱好者提供了无与伦比的创作工具和功能。 一、强大的编辑工具 Photoshop 2023 拥有丰富的编辑工具&#xff0c;如选择工具、画笔工具、橡皮擦工具等。其选择工具能够精确…...

高校是需要AIGC 实验室还是大数据人工智能实验室呢

AIGC&#xff08;人工智能与图形计算&#xff09;实验室和大数据人工智能实验室虽然都隶属于人工智能的范畴&#xff0c;但它们的关注点、研究方向和具体应用领域有所不同。 我们分别从研发方向、技术侧重、应用领域、研究工具和方法等方面去分析两者的区别&#xff0c;希…...

Nginx系列-12 Nginx使用Lua脚本进行JWT校验

背景 本文介绍Nginx中Lua模块使用方式&#xff0c;并结合案例进行介绍。案例介绍通过lua脚本提取HTTP请求头中的token字段&#xff0c;经过JWT校验并提取id和name信息&#xff0c;设置到http请求头中发向后段服务器。 默认情况下&#xff0c;Nginx自身不携带lua模块&#xff0…...

数据库设计三范式

目录 第一范式 第二范式 第三范式 数据库的设计范式&#xff0c;即数据库设计的原则&#xff1b; 在设计数据库时尽量遵守这三个条件&#xff0c;因为在实际的设计中&#xff0c;根据要求是空间换时间还是时间换空间来遵守范式&#xff1b; 第一范式 每一张表都必须有主键…...

VirtualBox创建共享磁盘

VirtualBox创建共享磁盘 目录 VirtualBox创建共享磁盘1、划分共享磁盘1.1、【管理】->【工具】->【虚拟介质管理】1.2、【创建】->【VDI&#xff08;VirtualBox 磁盘映像&#xff09;】->【下一步】1.3、【预先分配全部空间】->【下一步】1.4、【分配大小】->…...

2024年中职云计算实验室建设及云计算实训平台整体解决方案

随着信息技术的飞速发展&#xff0c;云计算作为新一代信息技术的核心&#xff0c;正逐步渗透到各行各业&#xff0c;成为推动数字化转型的重要力量。为了适应这一趋势&#xff0c;中职教育作为技能型人才培养的重要阵地&#xff0c;亟需加强云计算实验室建设与云计算实训平台的…...

[C++] C++11新增

一、列表初始化 C98&#xff1a; 在C98中&#xff0c;标准允许使用花括号{}对数组元素进行统一的列表初始值设定。 struct Simple1 {int _a;int _b; };//C98 int main() {int a1[] { 1,2,3,4,5,6 };int a2[7] { 0 };//本质是类型转换&#xff08;构造拷贝构造 -> 优化 …...