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

使用豆包MarsCode 编写 Node.js 全栈应用开发实践

以下是「豆包MarsCode 体验官」优秀文章,作者狼叔。

欢迎更多用户使用豆包MarsCode 并分享您的产品使用心得及反馈、创意项目开发等,【有奖征集|人人都是豆包MarsCode 测评官!】活动正在火热进行中,欢迎大家投稿参加,惊喜大礼等着大家!

我基本上经历 Node.js 的几个部署阶段,从原始云服务,到 K8S 容器化,到无服务的 FaaS 云函数,也做过一些科普工作。2017年之后做过很多年 SSR ,也是从基本 Web 框架到 FaaS ,最多做个降级容灾等大流量下稳定性相关的工作,其他就是全栈场景了。现在基本上也就 TRPC 能够让我觉得眼前一亮,仔细想想,也不过是 SDK 一样的思路,至于 AI 和 Node.js 开发有什么好的实践,我还没看到,都是常规思路,当我试过 MarsCode 之后,还是有些激动的。

在豆包MarsCode 发布之前,我就是第一波邀测用户,发布会当天我也去了现场。这个项目的核心开发主要是天猪、死月、老雷、段鹏飞等 Node.js 中坚力量,无论出于何种想法,我都是应该是去支持的。下面结合我了解的一些信息和动手实践内容,简单介绍一下我理解的 MarsCode。

豆包MarsCode是什么?

官方说法:豆包MarsCode 是字节跳动推出的免费 AI 编程助手,提供了 AI 驱动的云端 IDE 版和支持 VSCode 和 JetBrains 等的扩展版。豆包MarsCode IDE 具备代码补全、生成、解释功能,支持 AI 问答和 BUG 修复功能。豆包MarsCode 还提供 AI 插件开发与部署工具,简化了 API 测试、存储管理和 Schema 管理。此外,它拥有一键部署功能,提供安全可靠的云开发环境,支持多种项目创建方式,无需配置即可开始开发,确保了快速稳定的开发体验。

官方说豆包MarsCode 主要包含了 AI 功能的编程助手和 Cloud IDE,我认为不全面。我理解豆包MarsCode 是 AI + WebIDE + 自动化部署平台。

  • 深度集成AI 功能,从 Chat 到选中到流程集成。
  • WebIDE,以前我们开玩笑说它最大的作用是为外包用,代码不落地。那时候是因为性能不够,加载市场较慢。现在 Chrome 和电脑硬件变强,加载速度已经很好了,甚至有人直接用 iPad 写代码。这是个趋势的,比如 Codespaces ,就是 Github 提供的 WebIDE。
  • 自动化部署平台,它有部署服务,做了非常多的简化工作。

发布会当天通过需求开发、修复 Bug、开源项目学习三个实际场景,详细演示了豆包MarsCode 的项目问答、代码补全、单测生成、Bug Fix 等功能。确实没翻车,演示的还算比较流程。

> 官方说:通过完整场景演示串联各功能的使用配合,展示出豆包MarsCode 在日常工作中的优秀落地能力,无论是新手程序员还是经验丰富的开发者,都能体验到豆包MarsCode 带来的助力和效率提升。

这句话我不敢说,通过下面一系列实践,让大家来真实感受,可能更靠谱。下面通过场景一个具体的项目来讲讲我对豆包MarsCode 的理解。

创建项目,WebIDE 速度非常快

首先,在官网场景一个 Node.js 项目。注意这里选择的是 Node.js for AI Plugin,这是官方推荐的模版。

从项目创建到加载非常快,体感上 2-5 秒左右,体感速度应该跟 replit 差不多持平,如下图。

安装 tree 命令,英语查看文件目录结构。备注:apt-get下个版本可能会干掉或局部支持。

通过 tree 和 du 查看文件数和存储大小。

18个文件,加上 npm 安装,总大小72M,加上 os,大约300多M。

我是第一批豆包MarsCode 邀测用户,大约是4月底。那个时候一个项目从创建到启动大约1-2分钟,现在基本上能够做到2-5s左右启动,同为 VSCode 的谷歌 idx,现在启动还是大概按分钟计算的,Codespace大约30s左右([opulent-garbanzo-6vw4gx9xjv9h5qrq.github.dev/\](opulent-garbanzo-6vw4gx9xjv9h5qrq.github.dev/))目前豆包MarsCode 这个性能,可以说是行业里是领先的,应该是 Top 3。我和天猪简单的聊聊几句,此处是有高级技巧的,他们连着加班搞了1个月,在 K8S 上优化了很多细节,具体还处于保密阶段。

项目实战

我个人对 Node.js 比较熟悉,就以这个角度来做分析是比较容易的。这里我选了 Node.js for AI Plugin 这个模版,它是专门服务 Chatgpt 插件场景的,豆包MarsCode 还有非常多的其他模版,支持社区绝大部分框架(比如 React、Vue、Python、Go、Rust 等),也支持从 Git Repo 导入,理论上支持所有语言和框架。

本小节从项目目录结构到写法,到和 Vercel 对比,希望深入浅出的剖析一下豆包MarsCode 实现的一些细节。

项目结构

直接看一下忽略 node_modules,只显示3层的结构,这样更便于理解。

$ tree -I node_modules -L 3
.
├── api
│   ├── metadata.json
│   ├── sayhi
│   │   └── hello.ts
│   └── todo
│       ├── consts.ts
│       ├── create.ts
│       ├── delete.ts
│       ├── edit.ts
│       ├── search.ts
│       └── types.ts
├── package.json
├── pnpm-lock.yaml
├── README.md
├── runtime
│   ├── cli
│   ├── current_revision
│   ├── package.json
│   ├── pnpm-lock.yaml
│   ├── src
│   │   ├── cli.js
│   │   ├── core
│   │   ├── proxy
│   │   ├── schema
│   │   ├── types
│   │   └── wrapper
│   └── united_manager_version
└── tsconfig.json10 directories, 18 files

分析如下:

  • 使用 pnpm 做包管理器,行业内最佳选择。
  • 采用 ts 编写,代码非常规范,可圈可点。
  • 核心分 api 和 runtime 2个文件夹
  • api 是业务代码
  • runtime 是 SDK,把函数写法,cli 等工具放进去的。后面会隐藏。当前是不错的学习材料。

请求分析

api 目录结构,这是开发者平时改动最多的地方。

$ tree api
api
├── metadata.json
├── sayhi
│   └── hello.ts
└── todo├── consts.ts├── create.ts├── delete.ts├── edit.ts├── search.ts└── types.ts2 directories, 8 files

它的服务详情藏的略深。需要点击项目名,然后才能显示项目详情,里面才有 Service Detail。它会显示当前项目的域名和路由,对理解项目至关重要。

看了 Service Detail 和目录结构,这里面的原理就比较容易理解了。

首先它是一个 Server 容器,简单理解是 Docker。配置如上图,2核,4G内存,10G硬盘。实话说,这个配置给的很大方了。

有了 Server,自然就有 IP 和端口,这里 Functions 下面的 HOST 就是默认给的域名。

https://37iyzcv1c9g9m.ahost.marscode.site

 那个API Key 其实是 JWT 类似的机制来实现的。复制一个 curl 请求,大致原理就能扒出来了。

$ curl --location --request POST 'https://37iyzcv1c9g9m.ahost.marscode.site/sayhi/hello' --header 'Content-Type: application/json' --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmdW5jdGlvbmlkIjoiMzdpeXpjdjFjOWc5bSIsImlhdCI6MTcyMDA5NjgwOCwianRpIjoiNjY4Njk4MjgwZWQ2ZDRiZmQ1MTQ0ODgyIiwidHlwZSI6ImZ1bmN0aW9uIiwidXNlcmlkIjoiQ0xPVURJREVfMWRrbnc5NTFuNXA1dm5fNzM4Nzc1NzM0ODkyMjcwNDkxMyIsInZlcnNpb24iOjJ9.qZuzik_o-lg4Qpo4XdQC2FjpaRpaZEL5fRebCV9PI0M' --data '{}'
{"message":"hello world"}%  

从这个请求可以看出

  • POST 请求
  • 文件即路由。sayhi/hello.ts对应sayhi/hello请求。
  • 默认返回 JSON 格式
  • 默认做了 Authorization 鉴权,我搜了一下 jwt 或 jsonwebtoken 都没有搜到,可能是只实现了机制,没用过对应的包。

函数写法

看一下函数

import { Args } from '@/runtime';export interface Input {// name of username?: string;
}export interface Output {// reply to greet the usermessage: string;
}/*** Say hello to the user when he introduces himself*/
export async function handler({ input, logger }: Args<Input>): Promise<Output> {const name = input.name || 'world';logger.info(`user name is ${name}`);return {message: `hello ${name}`};
}

要点说明

  • 输入 Args
  • 输出 Output
  • 对外导出 Async 函数

是不是发现这东西和 trpc 很像?

对比一下:

  • trpc 需要定义方法名,MarsCode 里的 Async 函数名,比如 handler。二者一模一样
  • trpc 显式 input,里面做了 zod 校验,MarsCode 是 ts 类型,也算异曲同工。
  • 图中的 trpc 是 query,即 GET 方法,然后是返回。而 MarsCode 全部是 POST,其实更简单。

很明显这种函数写法是行业里最佳实践,基于 FaaS,隐藏了 HTTP 协议细节,强类型,采用约定式路由。

豆包MarsCode 函数写法上要更简单,对于测试过程也能够做到极大的简化。在 MarsCode 里,Api测试过程是非常简单的,只需要4步,结合AI可以提效。

1. 点击 API Test 按钮,这时候会切换到 API Test panel

2. 点击 Auto Generate,这部分是 AI 根据 Input 类型进行生产 Mock 数据,看着还行

3. 点击 Send 按钮就可以发送了。 我猜测和上面的 curl 是一样的

4. 在 Output 区域输出 message 

都是POST有问题吗?

在豆包MarsCode 里,所有的函数都采用 Post http verb 提供服务。如下图。

我之前猜测,这是一个无心插柳的故事。和天猪求证,隐藏协议的一个考虑点是「云函数是没有协议概念的」,虽然一般会有个触发器的概念,但 AI Plugin 场景没必要的。其实在约定式路由里,表达 Verb 是件麻烦事,要么代码里加,要么加配置文件,很明显都是有不少工作量的。

对于 API 而言,都用 POST 有问题吗?专业后端可能会拿 Restful API 说事,为了语义表达等等,这曾经是很多年被奉为圭臬的标准。咱且不论它到底好不好,在落地上,严格遵守的并不多。

参考github.com/jshttp/meth…

'get','post','put','head','delete','options','trace','copy'
,'lock','mkcol','move','purge','propfind','proppatch','unlock',
'report','mkactivity','checkout','merge','m-search','notify',
'subscribe','unsubscribe','patch','search','connect'

如果再细分的话,可以按照是否有 Body 分成2类,典型的就是 GET 和 POST。GET 有一个 2048 字节的限制,所以一些超长的请求会被截断。一般查询类的用 GET,创建用 POST。

交代了上面这点背景之后,我们来讨论一下只用 POST 是否 OK?先说我的结论,我认为是 OK 的。POST 是万能的,它没有 GET 的限制,如果不在意语义完全是可以的。业内从 trpc 到 httpc.dev,都是有意的隐藏 HTTP 协议,只要知道函数名和参数就能够完成调用。

这里以 [httpc.dev](httpc.dev) 举例

// Server
function add(x: number, y: number) {return x + y;
};function greet(name: string) {return `Hello ${name}`;
};export default {add,greet
}// Client
import createClient from "@your-package/api-client";const client = createClient({endpoint: "http://api.domain.com"
});let result = await client.add(1, 2);
// result: 3let message = await client.greet("Edith");
// message: "Hello Edith"

很明显,这样的写法是极简的。它背后的实现原理也非常简单,就是约定了请求写法,如下图。

httpc 的写法所有的 Get 请求都把参数放到 $p 上,然后取到的数组传给函数的参数,这块就是call、apply 发挥的地方。处理 Post 请求更简单,只需要把 Body 内容作为函数参数,实现更简单。

这样`let result = await client.add(1, 2);`这样的写法,就抹去了 HTTP 细节。其实,这就是 RPC 的玩法,只是 HTTP2 流行了之后,RPC 结合 HTTP 协议,通过约定,简化了写法。

在 ChatGPT 之前,我其实也是 Restful 拥护者。但当我被问到一个问题,结合 AI 你能提效70%吗?问这话的是一个算法,每天处理数据,用 Python 写一写片汤代码。他确实可以,但我为什么不可以呢?是不是我对专业化放不开?结合豆包MarsCode 上的函数实现,一旦 Restful API 变成函数级调用,AI 出码一定是效率更高的。

我想,AI 发展必然会有现有技术栈对 AI 进行适配,甚至是类似于 Moonbit 这样的在设计之初就为 AI 出发做了语法语义准备的新事物。我们以前用的技术栈真的对吗?在2024年年中,我想我们都需要考虑一下。

BaaS决定它的应用场景

在 create.ts 里,有这样的代码。

 const result = await baas.redis.hset(TODOListKey,input.name,JSON.stringify({ name: input.name, state: TODOState.Active }));

很明显就是一个 BaaS SDK 里有 Redis。在云函数里,FaaS 是function as service。BaaS 是backend as service。BaaS SDK 就是和后端服务相关的 SDK,也可以叫中间件。

在豆包MarsCode 函数项目里,内置了 Redis 和文件存储。比如我通过 hgetall 来查一下我刚才创建的数据,结果如下图。

它的文件用法也是非常简单的。参考[docs.marscode.com/reference/f…]

(docs.marscode.com/reference/f…

import { baas } from '@marscode/baas-sdk';// upload
const fileInfo = await baas.file.upload('hello world', "hello.txt");// download
const content = await baas.file.download(fileInfo.url);

从这个实现看,大概率是本地文件。如果想利用免费服务器做点啥也是可行的。

至此,我们基本就可以有一个结论,从目前的文档和前面的总结来看,豆包MarsCode 对 Node.js 和Python 支持是最好的。从 Node.js 实现上分析,它对 BFF 支持极好,如果要接云数据库(比如supabase\planetscale),也是极其简单的,可以覆盖目前 Web 开发的所有场景。

豆包MarsCode 同时支持从模版创建项目和从 Git Repo 导入,也就是说,你可以使用任意技术栈任意框架,它是一个通用的 WebIDE + 运行环境。我个人最喜欢它的 Node.js 云函数项目模版,简单实用,结合 AI 代码提示,写起来非常高效。

结合部署看一下全链路提效

在豆包MarsCode WebIDE 里是有终端的,但你不需要自己启动服务,它会自动帮你运行。API Test 前面大家都看到了,下面我们再看看它的一键部署过程。

你只需要点击上面的 Deploy 按钮即可,然后 MarsCode 就会帮你自动完成发布。

绑定域名

取到你的域名里,把 cname 映射上就可以生效了。

对比 Vercel 和 MarsCode

  • Vercel 是一个自动化部署环境。结合 Github,对于 CI/CD 支持极好。

  • MarsCode 是 WebIDE,提供了 AI 和自动化部署能力,WebIDE 里内建的 CI/CD 更简单。

再看一下价格

Vercel价格参考[vercel.com/docs/pricin…](vercel.com/docs/pricin…

MarsCode免费额度(WebIDE运行环境和Server),参考[docs.marscode.com/get-started…](docs.marscode.com/get-started…

最佳实践

先来看看我的几个尝试。

1.使用 React 项目,我试了2个模版,CRA 和Nextjs,支持的都非常不错。想怀旧,用 Koa 写 EJS 也是可以的。

2.API推荐采用云函数(**Node.js for AI Plugin**)

除了 Node.js 外,还有 Python AI 插件,当然你也可以选择 Go、Java,Rust 等。前面已经讲了,这里就不再重复了。

3.更多模版

从语言到模版,已经非常全面了。其中对国产第一语言 Moonbit 的支持是行业里第一个,支持断点调试了哦。

有了上面这些信息,我们就可以给出最佳实践了。

  • 前后端分离,前端选 React,后端选 Node.js 云函数,这是一个常规技术选型。
  • 前后端分离 + BFF
  • 前端选 React,BFF 选 Node.js 云函数,后端选 Node.js 云函数 + 云数据库。
  • 前端选 React,BFF 选 Node.js 云函数,后端选其他语言云函数+ 云数据库。

由于豆包MarsCode 目前是免费的,且云函数是按需付费,可以在很大范围内享受免费的红利。对于独立开发者或者小公司小团队是非常适合的。这里需要提醒一下,自动发布仅限海外服务器,对于出海的开发者来说会更友好。

这种组合的方式,可以最大范围的使用免费额度。当然,还可以有很多骚操作,比如讲一个站点拆成多个页面,然后通过微前端或者微模块的方式嵌入。只要你想省钱,办法总比困难多,哈哈哈哈。

AI

关于AI部分,建议大家去看看阮一峰老师写的测评,参考www.ruanyifeng.com/blog/2024/0…

这是他给的结论,豆包MarsCode 完全可以替代Github Copilot。我一般都是眼见为实,自己折腾了一些内容。

分析项目

豆包MarsCode IDE 通过提供开发模版,让开发者能够快速进入项目而无需运维本地环境。借助原生集成的 AI 能力,开发者不再需要自己去理解代码,从而更高效地上手项目。发布会的时候,现场演示了 Langchain 项目的导入和分析,效果还是非常不错的。

我在 Node.js 云函数项目里也做了简单提问,效果还可以。

截图下面还有一段,如下。

项目使用PNPM来管理依赖项。您可以使用PNPM命令来安装依赖项,例如pnpm add axios。项目还提供了OpenAPI Schema的生成工具,
它可以根据Input和Output接口的类型描述和注释生成相应的Schema描述。
在构建和部署过程中,将生成metadata.json文件,并将其解析为最终的OpenAPI Schema。此外,项目还提供了API测试工具,可以帮助您测试API。
您可以在MarsCode中点击顶部的"API Test"按钮打开API测试面板,并发送请求进行测试。最后,项目还提供了集成的云函数托管功能,您可以通过点击顶部的"Deploy"按钮快速部署云函数。如果您需要更详细的信息,可以参考项目中的README.md文件或查阅MarsCode的文档。如果您有任何问题或反馈,可以在MarsCode的Discord社区中提问或反馈。希望这些信息对您有所帮助!如果您有任何与编程相关的问题,我将很乐意帮助您。

它描述的准确程度是非常棒的,通过项目实战章节的内容相信大家都能有一个比较好的判断了。

  • OpenAPI Schema,我是没提到的。
  • 内置的也确实是 pnpm,执行 pnpm add axios,这个确实是可行的。
  • 根据 Input 和 Output 接口的类型描述和注释生成相应的 Schema 描述,上面我有讲到。
  • 在构建和部署过程中,将生成 metadata.json 文件,并将其解析为最终的 OpenAPI Schema,我没写,原因是我没看懂,他就是一个空文件。
  • API Test 和 Deploy 也是对的。

这块生成的还不错的,甚至我觉得可能是项目组给 LLM 喂了很好的饲料。无论如何,我自己的这个体验还是不错的。

问答

我日常用问答式的应用还是比较多的,这里面我选了一个我最近常用的 AST Vistor 的写法,分别测试一下。

豆包MarsCode 的返回结果如下图。

下面是 Chatgpt 3.5 返回的结果。

不清楚什么原因,可以看出来的是,豆包MarsCode 的回答很明显是更偏向于代码的。

其实自己买 Chatgpt 或者套壳服务还是需要一年 500 元以上的。开一个豆包MarsCode 去蹭他的免费额度还是很不错的。

创建User接口

AIGC 出现后,我们都想着如何让 AI 帮我们自动化,比如一句话,让他帮我们打开车机功能,智能家具功能,很明显这已经比之前的人工智障的音箱好多了。还有很多人尝试过通过语音控制浏览器,和Siri 类似,但比 Siri 好用的多。我个人很喜欢 Vimium,结合语音转文字,文字通过 LLM 解释下,找对最匹配的行为。甚至很多基于这种形式的硬件,曾经我都很关注。

所以,我想按照这个方式嚯嚯一下豆包MarsCode。于是向它提问:帮我在 api 目录下新建 user 的 crud 接口。

豆包MarsCode 确实能够生成正确的基于它云函数的代码。但没有帮我创建目录和文件。

豆包MarsCode 生成的代码区块有3个操作

  • 复制
  • 插入,插入到当前选中文件,会根据光标进行
  • 新建文件,是 VSCode 的那种 cmd+n,不是真的新建文件。保存是需要自己进行的。

如下图。

还是比较保守,按照当前的能力来说,直接写入文件也可以的,可能对算法还不是特别有信心,毕竟现阶段AI还是不能替代程序员。当前AI能力局部上已经很强了,但完整流程可控还有一些距离,即时 MoA(Mixture-Of-Agents) 也没法做的效果很好。

无论如何,豆包MarsCode 在云函数这块能够出码准确,还是不错的。

部分选中

Copilot 也有类似的功能,这个就不多讲了。

生成文档

选中代码之后,直接生成文档,这个功能还是非常方便的。尤其是云函数这个模版里,它的准确度是非常棒的。

生成测试

AI 上来之后,最先折腾的就是测试,然后设计,然后前端。事实上,局部代码,生成测试用例是可行的,这种就是能帮忙多少生成多少,集成测试不行,单元测试能生成也行。

看一下它生成的代码。

import { Args } from '@/runtime';
import { handler, Input, Output } from '@/api/sayhi/hello';async function testSayHi(): Promise<void> {const input: Input = {name: 'John',};const args: Args<Input> = {input,logger: console, // 使用控制台作为日志记录器};try {const result: Output = await handler(args);console.log(result.message); // 打印返回的消息} catch (error) {console.error('Error:', error); // 打印错误信息}
}testSayHi();

逻辑上没有问题,只是没有套用任何测试框架而已,直接用 node 命令执行更快。如果想换成 xv 测试框架,只需要把 Node.js 断言加进来,简单处理断言即可。

总结

豆包MarsCode 适用于通用 Web 开发的所有场景,其 WebIDE 和全场景 AI 智能是特色,在云函数基础服务上打造一站式智能开发平台。

豆包MarsCode 是可用的,有创新的,先进的,基于 WebIDE 做 AI 是我非常欣赏的方向。我是坚定的 Web OS 信仰者,未来浏览器可以搞定所有事情,结合 AI 提效,不管我们喜不喜欢,它都一定会存在且演进,至于能不能替代程序员还需要观察,但善于用 AI 的程序员肯定是更抢手的。从豆包MarsCode 开始,展望一下未来软件开发场景,是一件很不错的事儿,推荐大家试一试。

相关文章:

使用豆包MarsCode 编写 Node.js 全栈应用开发实践

以下是「豆包MarsCode 体验官」优秀文章&#xff0c;作者狼叔。 欢迎更多用户使用豆包MarsCode 并分享您的产品使用心得及反馈、创意项目开发等&#xff0c;【有奖征集&#xff5c;人人都是豆包MarsCode 测评官&#xff01;】活动正在火热进行中&#xff0c;欢迎大家投稿参加&a…...

Spring Cloud全解析:熔断之Hystrix执行流程

Hystrix执行流程 每次调用创建一个新的HystrixCommand&#xff0c;把依赖调用封装在run()方法中执行execute()/queue做同步或异步调用判断熔断器(circuit-breaker)是否打开&#xff0c;如果打开则执行fallback进行降级策略&#xff0c;如果关闭继续执行判断线程池/队列/信号量…...

大模型算法岗,面试百问百答,7天3个offer拿到手!

导读 大模型时代很多企业都在开发自己的大模型&#xff0c;这直接刺激了大模型岗位的需求。本文为大家整理了大模型面试相关的知识点&#xff0c;希望对大家面试求职有所帮助。 今天分享大模型面试相关知识点&#xff0c;持续更新。 1. RAG技术体系的总体思路 数据预处理->…...

代码随想录算法day32 | 动态规划算法part05 | 完全背包,518. 零钱兑换 II, 377. 组合总和 Ⅳ,70. 爬楼梯 (进阶)

完全背包理论基础 本题力扣上没有原题&#xff0c;大家可以去卡码网第52题 (opens new window)去练习&#xff0c;题意是一样的。 完全背包 有N件物品和一个最多能背重量为W的背包。第 i 件物品的重量是 weight[i]&#xff0c;得到的价值是 value[i] 。每件物品都有无限个&…...

【Linux 从基础到进阶】自动化备份与恢复策略

自动化备份与恢复策略 在 Linux 运维中,数据的安全性至关重要,自动化备份与恢复策略是保障系统和数据安全的核心环节。无论是系统配置文件、用户数据、数据库还是应用程序日志,备份和恢复都能为系统灾难恢复、数据丢失等突发情况提供可靠的解决方案。 本文将介绍如何在 Ce…...

前端打包装包——设置镜像

1、打包失败&#xff0c;因为没装包&#xff0c;装包失败&#xff0c;因为装包的源错误 npm config get registry npm config set registry https://registry.npmmirror.com/npm install npm run build还是失败&#xff0c;因为缺少了包&#xff0c;在package.json文件中没有包…...

volatile 的作用?是否具有原子性,对编译器有什么影响?什么情况下一定要用 volatile, 能否和 const 一起使用?

目录 1. volatile 的作用 2. 是否具有原子性 3. 对编译器的影响 4.volatile 的使用场景 5.volatile 和 const 的组合 1. volatile 的作用 防止编译器优化&#xff1a;volatile 告诉编译器&#xff0c;变量的值可能会在程序的其他地方&#xff08;如硬件中断、其他线程等&…...

iPhone 16分辨率,屏幕尺寸,PPI 详细数据对比 iPhone 16 Plus、iPhone 16 Pro、iPhone 16 Pro Max

史上最全iPhone 机型分辨率&#xff0c;屏幕尺寸&#xff0c;PPI详细数据&#xff01;已更新到iPhone 16系列&#xff01; 点击放大查看高清图 &#xff01;...

FunASR搭建语音识别服务和VAD检测

搭建ASR语音识别服务&#xff08;含VAD检测&#xff09;教程 在本文中&#xff0c;我将为大家详细介绍如何搭建一套基于FunASR的ASR&#xff08;语音识别&#xff09;服务&#xff0c;并集成VAD&#xff08;语音活动检测&#xff09;。该服务使用阿里达摩院的模型&#xff0c;…...

设计一个支持多线程写入的并发日志记录系统:C++实战指南

设计一个支持多线程写入的并发日志记录系统&#xff1a;C实战指南 在现代软件开发中&#xff0c;日志记录是一个至关重要的功能&#xff0c;它帮助开发者调试、监控和维护系统。然而&#xff0c;在多线程环境中&#xff0c;日志记录系统需要处理多个线程同时写入日志的问题&am…...

使用LSTM(长短期记忆网络)模型预测股票价格的实例分析

一&#xff1a;LSTM与RNN的区别 LSTM&#xff08;Long Short-Term Memory&#xff09;是一种特殊的循环神经网络&#xff08;RNN&#xff09;架构。LSTM是为了解决传统RNN在处理长序列数据时遇到的梯度消失或梯度爆炸问题而设计的。 在传统的RNN中&#xff0c;信息通过隐藏状…...

开源的 Windows 12 网页体验版!精美的 UI 设计、丰富流畅的动画

大家周二好呀&#xff01;博主今天给小伙伴们分享一款炫酷的 Windows 12 体验版&#xff0c;网页效果拉满&#xff0c;非常值得我们去尝试&#xff01; 如果你对未来的Windows操作系统充满期待&#xff0c;那么这款开源的Windows 12 网页体验版绝对不容错过&#xff01;这不仅…...

chapter14-集合——(List)——day18

目录 518-Set接口方法 518-Set接口方法...

Frida 脚本抓取 HttpURLConnection 请求和响应

引入 Java 类&#xff1a; 引入 okhttp3.OkHttpClient、okhttp3.OkHttpClient$Builder、okhttp3.Interceptor、okhttp3.ResponseBody 等类。 创建自定义拦截器&#xff1a; 通过 Java.registerClass 创建自定义拦截器 MyInterceptor。拦截器中重写 intercept 方法&#xff0…...

Java实现建造者模式和源码中的应用

Java实现建造者模式&#xff08;Builder Pattern&#xff09; 文章目录 Java实现建造者模式&#xff08;Builder Pattern&#xff09;案例&#xff1a;汉堡制作建造者模式的核心角色代码实现&#xff1a;汉堡制作 &#x1f354;内部类实现&#xff1a;Step 1&#xff1a;产品类…...

Windows安装docker

Windows有两种虚拟号技术&#xff0c;WLS和Hyper-V&#xff0c;因为我的win10是家庭版&#xff0c;所以只能采用WLS来安装docker。 在Windows 10家庭版中&#xff0c;由于默认不包含Hyper-V功能&#xff0c;因此容器功能也不可用。即使启用了Hyper-V&#xff0c;由于Docker De…...

SprinBoot+Vue校园车辆管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…...

【C语言进阶】C语言动态内存管理:深入理解malloc、calloc与realloc

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C语言 “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C语言自定义类型 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀C语言动态内存管理 &#…...

Java+控制台 图书管理系统

Java控制台 图书管理系统 一、系统介绍二、功能展示1.用户登陆2.普通用户&#xff1a;图书查询、图书借阅、图书归还 、图书列表3.管理员:图书整理、图书添加、图书删除 四、其它1.其他系统实现 一、系统介绍 系统实现了普通用户&#xff1a;图书查询、图书借阅、图书归还 、图…...

gi清除无用缓存

使用 git pull --rebase 的确会对 Git 仓库的大小产生影响&#xff0c;主要是因为每次重新基于最新的代码进行 rebase&#xff0c;Git 会保存历史提交的变动。即使你的实际代码量不多&#xff0c;Git 依然需要存储所有这些历史变更记录&#xff0c;因此可能会导致仓库的大小逐渐…...

云PLM系统对企业影响有哪些?解析云PLM系统的作用

随着企业数字化转型的加速&#xff0c;云PLM产品生命周期管理系统逐渐成为企业提升竞争力、优化资源配置、加速产品上市的重要工具。云PLM系统通过云计算技术&#xff0c;不仅解决了传统PLM系统面临的高昂部署成本、复杂维护、数据共享效率低等问题&#xff0c;还为企业带来了更…...

四、查找算法

文章目录 一、查找算法介绍二、线性查找算法2.1 顺序查找2.2 二分查找&#xff08;折半查找&#xff09;2.3 插值查找2.4 斐波拉契&#xff08;黄金分割法&#xff09;查找算法 三、树表的查找3.1 二叉排序树3.1.1 引入3.1.2 基本介绍3.1.3 二叉树的遍历3.1.4 二叉树的删除 3.2…...

果蔬识别系统性能优化之路(三)

目录 前情提要遗留问题 解决方案优化查询速度优化ivf初始化的速度 下一步 前情提要 果蔬识别系统性能优化之路&#xff08;二&#xff09; 遗留问题 优化同步速度&#xff0c;目前大约30秒&#xff0c;不是一个生产速度 这次来解决遗留问题 通过console&#xff0c;发现两个…...

时序预测|基于小龙虾优化高斯过程GPR数据回归预测Matlab程序COA-GPR 多特征输入单输出 附赠基础GPR

时序预测|基于小龙虾优化高斯过程GPR数据回归预测Matlab程序COA-GPR 多特征输入单输出 附赠基础GPR 文章目录 一、基本原理二、实验结果三、核心代码四、代码获取五、总结 时序预测|基于小龙虾优化高斯过程GPR数据回归预测Matlab程序COA-GPR 多特征输入单输出 附赠基础GPR 一、…...

C#进阶-快速了解IOC控制反转及相关框架的使用

目录 一、了解IOC 1、概念 2、生命周期 二、IOC服务示例 1、定义服务接口 2、实现服务 三、扩展-CommunityToolkit.Mvvm工具包 Messenger信使 方式一&#xff08;收发消息&#xff09; 方式二&#xff08;收发消息&#xff09; 方式三&#xff08;请求消息&#xf…...

C++内存布局

文章目录 C内存布局1.文字介绍2.图片介绍3.代码介绍 C内存布局 1.文字介绍 1.内核态空间 2.用户态空间 (1)栈区&#xff1a;存储局部变量和函数调用的相关信息&#xff0c;栈的特点是自动分配和释放&#xff0c;由操作系统管理。栈由高地址向低地址生长&#xff0c;通常为0x…...

【Linux 19】线程概念

文章目录 &#x1f308; 一、线程的概念⭐ 1. 线程是什么⭐ 2. 线程的优点⭐ 3. 线程的缺点⭐ 4. 线程的异常⭐ 5. 线程的用途 &#x1f308; 二、进程和线程⭐ 1. 进程和线程的区别⭐ 2. 进程的多线程共享⭐ 3. 进程和线程的关系⭐ 3. 进程和线程的关系 &#x1f308; 一、线程…...

[区间dp]添加括号

题目描述 有一个 n n n 个元素的数组 a a a。不改变序列中每个元素在序列中的位置&#xff0c;把它们相加&#xff0c;并用括号记每次加法所得的和&#xff0c;称为中间和。现在要添上 n − 1 n - 1 n−1 对括号&#xff0c;加法运算依括号顺序进行&#xff0c;得到 n − …...

jenkins流水线+k8s部署springcloud微服务架构项目

文章目录 1.k8s安装2.jenkins安装3.k8s重要知识1.简介2.核心概念3.重要命令1.查看集群消息2.命名空间3.资源创建/更新4.资源查看5.描述某个资源的详细信息6.资源编辑7.资源删除8.资源重启9.查看资源日志10.资源标签 4.k8s控制台1.登录2.界面基本操作1.选择命名空间2.查看命名空…...

安卓开发板_联发科MTK开发评估套件串口调试

串口调试 如果正在进行lk(little kernel ) 或内核开发&#xff0c;USB 串口适配器&#xff08; USB 转串口 TTL 适配器的简称&#xff09;对于检查系统启动日志非常有用&#xff0c;特别是在没有图形桌面显示的情况下。 1.选购适配器 常用的许多 USB 转串口的适配器&#xf…...