使用Node编写轻量级后端快速入门
使用Node编写轻量级后端快速入门
node 要作为轻量级后端需要下载一些对应模块可以参考下面命令。你可以借助 npm
(Node Package Manager)来下载它们。
模块下载
express
:这是一个广受欢迎的 Node.js Web 应用框架,能用于构建 Web 服务器与 API。
下载命令:
npm install express
cors
:该模块用于解决跨域资源共享(CORS)问题,允许服务器接受来自不同源的请求。
下载命令:
npm install cors
mysql2/promise
:此模块为 MySQL 数据库提供了支持,并且采用了 Promise 风格的 API。
下载命令:
npm install mysql2
multer
:这是一个用于处理multipart/form-data
类型表单数据的中间件,通常用于文件上传。
下载命令:
npm install multer
fs
:它是 Node.js 的内置模块,用于文件系统操作,无需额外下载。
你可以在项目根目录下打开终端,依次执行上述 npm install
命令来下载所需模块。或者,你也可以一次性安装所有模块,使用如下命令:
npm install express cors mysql2 multer
执行完上述命令后,package.json
文件会自动更新,记录这些依赖项。
作为Web端的必须模块你必须下载
express
,cors
,multer
快速开始
const express = require('express');
const cors = require('cors');const app = express();
const hostname = '127.0.0.1';
const port = 3000;// 使用 cors 中间件
app.use(cors());// 解析 JSON 格式的请求体
app.use(express.json());// 根路径接口
app.get('/', (req, res) => {res.send('Hello World');
});// /data 接口
app.get('/data', (req, res) => {const data = { message: 'This is some data' };res.json(data);
});// 404 处理
app.use((req, res) => {res.status(404).send('Not Found');
});// 启动服务器
app.listen(port, hostname, () => {console.log(`Server running at http://${hostname}:${port}/`);
});
上述代码即node作为web端的基础
Node 后端服务各类请求的接收数据处理方式解读
在 Node.js 后端服务开发中,正确处理各类请求的接收数据至关重要。它直接关系到应用程序的功能完整性、安全性以及性能表现。本文将深入探讨 Node.js 中处理不同类型请求数据的常见方式。
一、HTTP 请求方法基础
在 Web 开发中,常见的 HTTP 请求方法有 GET、POST、PUT、DELETE 等。每种方法都有其特定的用途和数据传递方式。
- GET 请求:通常用于从服务器获取资源。其数据通过 URL 的查询参数传递,例如:http://example.com/api/users?page=1&limit=10。这种方式下,数据暴露在 URL 中,所以不太适合传递敏感信息,并且对数据长度有限制。
- POST 请求:主要用于向服务器提交数据,比如用户注册、登录信息等。数据包含在请求体中,不会显示在 URL 里,适合传输较大或敏感的数据。
- PUT 请求:一般用于更新服务器上的资源,将完整的资源数据发送到服务器指定的 URL。
- DELETE 请求:用于删除服务器上特定 URL 对应的资源。
二、Node.js 中处理请求数据的常用工具和方法
(一)使用原生 http 模块
Node.js 内置的 http 模块提供了基本的 HTTP 服务器功能。在处理请求数据时,可以通过req对象来获取相关信息。
- 处理 GET 请求数据
const http = require('http');
http.createServer((req, res) => {const url = new URL(req.url, 'http://' + req.headers.host);const params = Object.fromEntries(url.searchParams);// 这里的params就是解析后的GET请求参数对象res.writeHead(200, {'Content-Type': 'text/plain'});res.end('GET请求参数:' + JSON.stringify(params));
}).listen(3000, () => {console.log('Server running at port 3000');
});
在这段代码中,利用URL对象来解析 URL 中的查询参数,将其转换为一个对象方便后续处理。
- 处理 POST 请求数据
POST 请求的数据接收稍微复杂一些,因为数据是分块传输的,需要监听data和end事件。
const http = require('http');
http.createServer((req, res) => {let body = '';req.on('data', chunk => {body += chunk.toString();});req.on('end', () => {// 这里的body就是完整的POST请求体数据res.writeHead(200, {'Content-Type': 'text/plain'});res.end('POST请求体:' + body);});
}).listen(3000, () => {console.log('Server running at port 3000');
});
在实际应用中,还需要根据请求体的格式(如 JSON、URL 编码等)进一步解析数据。
(二)借助 Express 框架
Express 是 Node.js 中最流行的 Web 应用框架,它简化了 HTTP 服务器的开发和请求处理过程。
安装 Express 在项目目录下运行命令安装。
npm install express
- 处理 GET 请求参数
const express = require('express');
const app = express();
app.get('/users', (req, res) => {const { page, limit } = req.query;// req.query是Express提供的获取GET请求查询参数的对象res.json({ message: '获取用户列表', page, limit });
});
app.listen(3000, () => {console.log('Express server running at port 3000');
});
- 处理 POST 请求数据
要处理 POST 请求数据,首先需要使用中间件来解析请求体。对于 JSON 格式的请求体,可以使用express.json()中间件;对于 URL 编码格式的数据,可以使用express.urlencoded()中间件。
const express = require('express');
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.post('/login', (req, res) => {const { username, password } = req.body;// req.body包含了解析后的POST请求体数据if (username && password) {res.json({ message: '登录成功', user: username });} else {res.status(400).json({ message: '用户名和密码不能为空' });}
});
app.listen(3000, () => {console.log('Express server running at port 3000');
});
- 处理 PUT 和 DELETE 请求
Express 处理 PUT 和 DELETE 请求的方式与 GET、POST 类似。
app.put('/users/:id', (req, res) => {const { id } = req.params;const { name, age } = req.body;// 根据id更新用户信息res.json({ message: `更新用户${id}成功`, user: { id, name, age } });
});
app.delete('/users/:id', (req, res) => {const { id } = req.params;// 根据id删除用户信息res.json({ message: `删除用户${id}成功` });
});
这里:id是路径参数,通过req.params获取。
(三)其他数据格式处理
- 处理表单数据(multipart/form - data)
当需要处理包含文件上传等复杂表单数据时,常用multer中间件。
首先安装multer:
npm install multer
const express = require('express');
const multer = require('multer');
const app = express();
const storage = multer.memoryStorage();
const upload = multer({ storage });
app.post('/upload', upload.single('file'), (req, res) => {if (req.file) {res.json({ message: '文件上传成功', file: req.file });} else {res.status(400).json({ message: '没有文件上传' });}
});
app.listen(3000, () => {console.log('Server running at port 3000');
});
在这个例子中,upload.single(‘file’)表示处理名为file的单个文件上传。
- 处理 XML 数据
如果需要处理 XML 格式的请求数据,可以使用xml2js等库将 XML 转换为 JavaScript 对象。
先安装xml2js:
npm install xml2js
const express = require('express');
const xml2js = require('xml2js');
const app = express();
const parser = new xml2js.Parser();
app.post('/xml', (req, res) => {let xmlData = '';req.on('data', chunk => {xmlData += chunk;});req.on('end', () => {parser.parseString(xmlData, (err, result) => {if (err) {res.status(400).json({ message: 'XML解析错误', error: err });} else {res.json({ message: 'XML解析成功', data: result });}});});
});
app.listen(3000, () => {console.log('Server running at port 3000');
});
Node 中如何进行参数接收
在 Node.js 开发中,参数接收是一个基础且关键的环节。无论是处理来自客户端的请求参数,还是获取命令行中传递的参数,正确且高效地接收参数对于程序的正常运行和功能实现至关重要。接下来,我们将深入探讨在 Node.js 中接收不同类型参数的方法。
一、接收命令行参数
Node.js 提供了一个全局对象process
,其中的process.argv
属性可以获取到所有命令行参数。该属性返回一个数组,数组的第一个元素总是node
命令的路径,第二个元素是正在执行的 JavaScript 文件的路径,从第三个元素开始才是实际传递的命令行参数。
假设我们有一个简单的需求:接收命令行中的一个或多个参数,并计算它们的和。可以按照以下步骤实现:
创建一个新的 JavaScript 文件,例如sum.js
。
在文件中编写如下代码:
// 定义一个变量用于保存求和结果let result = 0;// 遍历process.argv数组,从索引为2的位置开始(即实际参数的起始位置)for (let i = 2; i < process.argv.length; i++) {// 将参数转换为数值类型并累加到result中result += Number(process.argv\[i]);}// 打印求和结果console.log(result);
在命令行中运行该程序,并传递参数。例如,输入node sum.js 1 2 3
,控制台将输出6
,即传递的参数1
、2
和3
的和。
需要注意的是,process.argv
输出的参数全部是字符串类型。如果需要进行数值运算,必须先将其转换为合适的数值类型,如使用Number()
函数或+
运算符进行转换。
另外,在 ES6 中,我们可以利用解构赋值和剩余参数来更方便地处理命令行参数。示例如下:
const [, , ...args] = process.argv;// 这里的args就是所有的命令行参数数组console.log(args);
这样,args
数组将直接包含所有传递的命令行参数,而不需要手动跳过前两个元素。
二、接收 HTTP 请求参数
在 Node.js 的 Web 开发中,处理 HTTP 请求参数是非常常见的操作。HTTP 请求主要有 GET 和 POST 两种方式,它们传递参数的方式和接收参数的方法也有所不同。
(一)接收 GET 请求参数
使用原生 http 和 url 模块:Node.js 的内置http
模块用于创建 HTTP 服务器,url
模块则可以帮助我们解析 URL 中的参数。以下是一个简单的示例:
const http = require('http');const url = require('url');http.createServer((req, res) => {// 使用url.parse方法解析URL,并将第二个参数设置为true以获取查询参数对象const queryObject = url.parse(req.url, true).query;console.log(queryObject);res.writeHead(200, {'Content-Type': 'text/html'});res.end('参数已接收');}).listen(3000, () => {console.log('Server is running on port 3000');});
在这个示例中,通过url.parse(req.url, true).query
可以获取到 URL 中的查询参数,例如当请求 URL 为http://localhost:3000/?name=John&age=30
时,queryObject
将是一个包含name
和age
属性的对象,即{ name: 'John', age: '30' }
。
使用 Express 框架:Express 是 Node.js 中最流行的 Web 应用框架,它极大地简化了 HTTP 服务器的开发和请求处理。使用 Express 处理 GET 请求参数更加简洁:
const express = require('express');const app = express();app.get('/', (req, res) => {const queryParams = req.query;console.log(queryParams);res.send('参数已接收');});app.listen(3000, () => {console.log('Server is running on port 3000');});
在 Express 中,req.query
直接返回一个包含所有查询参数的对象。例如,当请求 URL 为http://localhost:3000/?product=book&price=20
时,req.query
将是{ product: 'book', price: '20' }
。
(二)接收 POST 请求参数
使用原生 http 模块:处理 POST 请求参数相对复杂一些,因为数据是包含在请求体中,且可能以流的形式分块传输。需要监听data
和end
事件来获取完整的请求体数据,然后根据数据格式进行解析。以下是一个简单的示例,假设请求体数据为 JSON 格式:
const http = require('http');http.createServer((req, res) => {let body = '';req.on('data', chunk => {body += chunk.toString();});req.on('end', () => {try {const postData = JSON.parse(body);console.log(postData);res.writeHead(200, {'Content-Type': 'text/html'});res.end('POST参数已接收');} catch (error) {res.writeHead(400, {'Content-Type': 'text/html'});res.end('请求体数据解析错误');}});}).listen(3000, () => {console.log('Server is running on port 3000');});
在这个示例中,通过监听req
的data
事件,将接收到的每一块数据累加到body
变量中。当end
事件触发时,表示请求体数据接收完毕,此时尝试将body
解析为 JSON 格式的数据。
使用 Express 框架:在 Express 中处理 POST 请求参数,通常需要借助中间件来解析请求体。对于 JSON 格式的请求体,可以使用express.json()
中间件;对于 URL 编码格式的数据,可以使用express.urlencoded()
中间件。示例如下:
const express = require('express');const app = express();// 使用express.json()中间件解析JSON格式的请求体app.use(express.json());// 使用express.urlencoded()中间件解析URL编码格式的请求体app.use(express.urlencoded({ extended: true }));app.post('/login', (req, res) => {const { username, password } = req.body;if (username && password) {res.json({ message: '登录成功', user: username });} else {res.status(400).json({ message: '用户名和密码不能为空' });}});app.listen(3000, () => {console.log('Server is running on port 3000');});
在这个示例中,express.json()
和express.urlencoded()
中间件会将请求体数据解析后挂载到req.body
上,我们可以直接从req.body
中获取相应的参数。例如,当发送一个包含username
和password
的 JSON 格式的 POST 请求时,req.body
将包含这些参数,我们可以通过req.body.username
和req.body.password
来获取它们的值。
三、其他参数接收场景
(一)处理表单数据(multipart/form - data)
当涉及文件上传等复杂表单数据时,需要使用专门的中间件来处理。multer
是一个常用的处理multipart/form - data
类型表单数据的中间件。
首先,需要安装multer
:npm install multer
。
以下是一个简单的文件上传示例:
const express = require('express');const multer = require('multer');const app = express();const storage = multer.memoryStorage();const upload = multer({ storage });app.post('/upload', upload.single('file'), (req, res) => {if (req.file) {res.json({ message: '文件上传成功', file: req.file });} else {res.status(400).json({ message: '没有文件上传' });}});app.listen(3000, () => {console.log('Server is running on port 3000');});
在这个示例中,upload.single('file')
表示处理名为file
的单个文件上传。当文件上传成功时,req.file
将包含上传文件的相关信息,如文件名、文件类型、文件内容等。
(二)处理 XML 数据
如果需要处理 XML 格式的请求数据,可以使用xml2js
等库将 XML 转换为 JavaScript 对象。
先安装xml2js
:npm install xml2js
。
示例代码如下:
const express = require('express');const xml2js = require('xml2js');const app = express();const parser = new xml2js.Parser();app.post('/xml', (req, res) => {let xmlData = '';req.on('data', chunk => {xmlData += chunk;});req.on('end', () => {parser.parseString(xmlData, (err, result) => {if (err) {res.status(400).json({ message: 'XML解析错误', error: err });} else {res.json({ message: 'XML解析成功', data: result });}});});});app.listen(3000, () => {console.log('Server is running on port 3000');});
在这个示例中,通过监听req
的data
事件获取 XML 数据,当end
事件触发时,使用xml2js
的Parser
将 XML 数据解析为 JavaScript 对象,并根据解析结果返回相应的响应。
相关文章:
使用Node编写轻量级后端快速入门
使用Node编写轻量级后端快速入门 node 要作为轻量级后端需要下载一些对应模块可以参考下面命令。你可以借助 npm(Node Package Manager)来下载它们。 模块下载 express:这是一个广受欢迎的 Node.js Web 应用框架,能用于构建 Web…...
海量数据存储与分析:HBase vs ClickHouse vs Doris 三大数据库优劣对比指南
1.引言 在当今大数据时代,数据正以前所未有的速度持续增长。来自各个领域的数据,如互联网行业用户的每一次点击、浏览记录,金融机构的海量交易数据,以及物联网设备源源不断上传的实时监测数据等,其规模呈指数级攀升。…...
Redis 挂掉后高并发系统的应对策略:使用 Sentinel 实现限流降级与 SkyWalking 监控优化
前言 在现代分布式系统中,Redis 被广泛用作缓存中间件以提升性能和减轻数据库压力。然而,在高并发场景下,一旦 Redis 出现故障(如宕机、网络中断等),如果没有有效的容错机制,可能会导致大量请求…...
C++11新特性_自动类型推导_decltype
decltype 是 C11 引入的一个关键字,用于在编译时推导表达式的类型。它提供了一种方式,让编译器根据表达式的类型来确定变量的类型,而不需要显式地指定类型。下面为你详细介绍 decltype 的使用方法和应用场景。 基本语法 decltype 的基本语法…...
Scrapy爬虫实战总结:动态与登录爬取的精炼经验
引言 在AI时代,信息和数据往往成就你的速度和高度。。。 这篇文章基于前两篇的实践基础之上的一次小结,通过“爬取动态网页”和“登录网站”两场实战,我用Scrapy+Splash破译JavaScript,用FormRequest敲开权限大门。这篇总结凝练两场冒险的体验,淬炼Scrapy爬虫的通用经验…...
windows系统搭建自己的ftp服务器,保姆级教程(用户验证+无验证)
前言 最近在搭建环境时,我发现每次都需要在网上下载依赖包和软件,这不仅耗时,而且有时还会遇到网络不稳定的问题,导致下载速度慢或者中断,实在不太方便。于是,我产生了搭建一个FTP服务器的想法。通过搭建FT…...
PDF本地化开源项目推荐
Stirling-PDF 项目详细总结 1. 项目概述 Stirling-PDF 是一个基于 Docker 的本地化 Web 应用,专注于 PDF 文件的多样化处理。其核心特点是: 完全本地化部署:所有文件处理均在用户设备或服务器内存中进行,任务完成后自动清理临…...
从工厂到生活:算法 × 深度学习,正在改写自动化的底层逻辑
一.背景: 从工业革命时期的机械自动化,到信息时代的智能自动化,人类对自动化技术的追求从未停歇。近年来,随着物联网、大数据、云计算等技术的蓬勃发展,自动化系统的复杂度与智能化程度显著提升。算法与深度学习的深度…...
如何拿奖蓝桥杯
要在蓝桥杯中拿奖,可参考以下方法: 备赛规划方面 - 明确目标与计划:选择自己感兴趣或有基础的组别,了解比赛大纲和历年真题,制定包含基础语法学习、算法入门、真题训练等阶段的合理学习计划。 - 合理安排时间…...
【STM32单片机】#12 SPI通信(软件读写)
主要参考学习资料: B站江协科技 STM32入门教程-2023版 细致讲解 中文字幕 开发资料下载链接:https://pan.baidu.com/s/1h_UjuQKDX9IpP-U1Effbsw?pwddspb 单片机套装:STM32F103C8T6开发板单片机C6T6核心板 实验板最小系统板套件科协 目录 SPI…...
从请求到响应:初探spring web
引入: 首先小编想分享下一些开发小知识 2000年——手写servlet/JSP时代 在这个阶段中,那时候写后端代码,可谓是个麻烦事。 毕竟什么都要自己干 发来的请求都要写extends HttpServlet的类,手动在web.xml配置 <servlet>…...
【中间件】bthread_基础_TaskControl
TaskControl 1 Definition2 Introduce**核心职责** 3 成员解析**3.1 数据结构与线程管理****3.2 任务调度与负载均衡****3.3 线程停放与唤醒(ParkingLot)****3.4 统计与监控** 4 **工作流程**5 **设计亮点**6 **使用场景示例**7 **总结**8 学习过程中的疑…...
systemd和OpenSSH
1 systemd 1.1 配置文件 /etc/systemd/system /lib/systemd/system /run/systemd/system /usr/lib/systemd/user 1.2 commands systemctl list-unit-files | grep enable systemctl cat dlt-daemon.service systemctl cat dlt-system.service systemctl show dlt-daemon.ser…...
08 Python集合:数据 “去重神器” 和运算魔法
文章目录 一、Python 中的集合概述1. 集合的特性 二、集合的创建三、元素的遍历四、集合的运算1. 成员运算2. 二元运算3. 比较运算 五、集合的方法六、不可变集合 一、Python 中的集合概述 在 Python 里,集合(Set)是一种无序且元素唯一的数据…...
配置和使用基本存储
配置和使用基本存储 文章目录 配置和使用基本存储[toc]一、什么是卷?二、卷的类型三、使用EmptyDir卷存储数据1.了解EmptyDir卷2.测试EmptyDir卷的使用 四、使用HostPath卷挂载宿主机文件1.了解HostPath卷2.测试HostPath卷的使用 五、使用NFS卷挂载NFS共享目录1.准备…...
win11 终端 安装ffmpeg 使用终端Scoop
1、安装scoop (Windows 包管理器) Set-ExecutionPolicy RemoteSigned -Scope CurrentUser iwr -useb get.scoop.sh | iex 2、使用scoop来安装ffmpeg scoop install ffmpeg 3、测试一下ffmpeg,将Mp3文件转为Wav文件 ffmpeg -i A.mp3 A.wav 然后我们就看到A.wav生成…...
navicat中导出数据表结构并在word更改为三线表(适用于navicat导不出doc)
SELECTCOLUMN_NAME 列名,COLUMN_TYPE 数据类型,DATA_TYPE 字段类型,IS_NULLABLE 是否为空,COLUMN_DEFAULT 默认值,COLUMN_COMMENT 备注 FROMINFORMATION_SCHEMA.COLUMNS WHEREtable_schema db_animal(数据库名) AND table_name activity(…...
Azure Monitor 实战指南:全方位监控应用与基础设施
Azure Monitor 是 Azure 云原生的统一监控解决方案,能够实时追踪应用性能、基础设施健康状态及日志数据。本文将通过 实战步骤 演示如何利用 Azure Monitor 监控 GPT-4 服务、虚拟机、存储等资源,并结合自动化告警和日志分析,构建企业级监控体系。 1. Azure Monitor 核心功能…...
【人工智能】释放本地AI潜能:LM Studio用户脚本自动化DeepSeek的实战指南
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着大型语言模型(LLM)的快速发展,DeepSeek以其高效的性能和开源特性成为开发者关注的焦点。LM Studio作为一款强大的本地AI模型管理工具…...
智能体-CyberTask Orchestrator设计概要(V4.1超长版)
智能体-CyberTask Orchestrator设计概要(V4.0超长版) 一、深度演进背景与战略定位(核心篇幅拓展至2187字) (本段新增行业趋势与技术必要性论证) 1.1 全球网络安全威胁态势分析(2023-2025&…...
C# 面向对象实例演示
C# 面向对象编程实例演示 一、基础概念回顾 面向对象编程(OOP)的四大基本特性: 封装 - 将数据和操作数据的方法绑定在一起继承 - 创建新类时重用现有类的属性和方法多态 - 同一操作作用于不同对象产生不同结果抽象 - 简化复杂系…...
软件产品测试报告:如何全面评估及保障软件质量?
软件产品测试报告可以对软件产品质量做全面评估,还能够把评估结果展示出来,它依靠一系列测试手段和数据分析,能为产品的完善以及决策提供重要依据。下面从不同方面展开说明。 测试目的 开展本次软件产品测试,主要目的有三个。一…...
leetcode42-接雨水
leetcode 42 思路 本题使用 单调栈 来计算每个位置能够接住的雨水量 理解问题 题目要求计算一系列柱子之间可以接住的雨水量。输入是一个数组,每个元素代表柱子的高度。输出是一个整数,表示能够接住的水量。 找到边界条件 什么情况下可以接住雨水…...
普通IT的股票交易成长史--20250430晚
声明:本文章的内容只是自己学习的总结,不构成投资建议。文中观点基本来自yt站Andylee,美股Alpha姐,综合自己的观点得出。感谢他们的无私分享。 送给自己的话: 仓位就是生命,绝对不能满仓!&…...
Elastic Security 8.18 和 9.0 中的新功能
作者:来自 Elastic Mark Settle, Tamarian Del Conte, James Spiteri, Tinsae Erkailo, Charles Davison, Raquel Tabuyo, Kseniia Ignatovych, Paul Ewing, Smriti 检测规则的自动迁移、用于 ES|QL 的 Lookup Join、AI 功能增强,以及更多功能。 Elasti…...
使用 Vue 开发 VS Code 插件前端页面(上)
本文的方案主要参考了这篇博客: Vscode 的 extension webview 开发示例: Vue 和 React 实现 https://juejin.cn/post/7325132202970136585样例项目地址: github | vscode-webview-with-vuehttps://github.com/HiMeditator/vscode-webview-w…...
Vue Router路由原理
Vue Router 是 Vue.js 官方的路由管理器,它与 Vue.js 核心深度集成,使得构建单页应用(SPA)变得非常容易。Vue Router 的主要功能包括动态路由匹配、嵌套路由、编程式导航、命名路由、路由守卫等 Vue Router 原理 单页应用&#x…...
Tauri v1 与 v2 配置对比
本文档对比 Tauri v1 和 v2 版本的配置结构和内容差异,帮助开发者了解版本变更并进行迁移。 配置结构变化 v1 配置结构 {"package": { ... },"tauri": { "allowlist": { ... },"bundle": { ... },"security":…...
详解 MyBatis-Plus 框架中 QueryWrapper 类
QueryWrapper 一、 QueryWrapper 的概念为什么需要 QueryWrapper? 二、 QueryWrapper 的基本使用1. 创建 QueryWrapper 实例2. 添加查询条件3. 执行查询 三、 QueryWrapper 的常见方法1. 基本条件方法1.1 eq - 等于1.2 ne - 不等于1.3 gt - 大于1.4 ge - 大于等于1.…...
小米MiMo-7B大模型:解锁推理潜力的新传奇!
在大语言模型(LLMs)蓬勃发展的时代,推理能力成为衡量模型优劣的关键指标。今天为大家解读的这篇论文,介绍了小米的MiMo-7B模型,它通过独特的预训练和后训练优化,展现出强大的推理实力,快来一探究…...
联邦学习的收敛性分析(全设备参与,不同本地训练轮次)
联邦学习的收敛性分析 在联邦学习中,我们的目标是分析全局模型的收敛性,考虑设备异构性(不同用户的本地训练轮次不同)和数据异质性(用户数据分布不均匀)。以下推导从全局模型更新开始,逐步引入假设并推导期望损失的递减关系,最终给出收敛性结论。 1. 全局模型更新与泰…...
硬件工程师面试常见问题(10)
第四十六问:锁存器,触发器,寄存器三者的区别 触发器:能够存储一位二值信号的基本单元电路统称为 "触发器"。(单位) 锁存器:一位触发器只能传送或存储一位数据,而在实际工…...
1295. 统计位数为偶数的数字
题目 解法一 遍历数组挨个判断元素位数并统计(我的第一想法) class Solution { public:int findNumbers(vector<int>& nums) {int result 0;for(int n: nums){if(judge(n)) result;}return result;}bool judge(int a){int sum 1;a a / 10…...
3.1/Q1,Charls最新文章解读
文章题目:Social participation patterns and associations with subsequent cognitive function in older adults with cognitive impairment: a latent class analysis DOI:10.3389/fmed.2025.1493359 中文标题:认知障碍老年人的社会参与模…...
楼宇智能化四章【期末复习】
四、火灾自动报警系统 结构组成:火灾探测器、区域报警器、集中报警器 形式:1. 多线制系统 2.总线制系统 3.集中智能系统 4.分布智能系统 5.网络通信系统 工作原理: 以下是关于火灾自动报警系统及相关灭火系统的详细解答: 1. 火灾自动报警系统有哪几种形式? 区…...
Splunk 使用Role 实现数据隔离
很多人知道 Splunk 有很多自带的Role, 今天我就要说说定制化的Role: 1: 在创建新role 的界面: 2: 在如下的界面,可以定制allow index name: 3: 创建好新Role 后,在SAML 添加新的group 的时候,就可以看到Role 给某个group: 4: 这样一个特定组的人来申请Splunk 权限,就可…...
Learning vtkjs之ImplicitBoolean
隐式函数布尔操作 介绍 vtkImplicitBoolean 允许对隐式函数(如平面、球体、圆柱体和盒子)进行布尔组合。操作包括并集、交集和差集。可以指定多个隐式函数(所有函数都使用相同的操作进行组合)。 支持的操作:‘UNION…...
LabelVision - yolo可视化标注工具
LabelVision是一款可视化图像标注工具,主要用于计算机视觉研究中的各种标注任务。 支持多边形、矩形、圆形等多种标注方式,并且可以输出JSON、COCO等多种数据格式,方便与其他软件和框架进行集成和互操作。 通过它可以很轻易的对图像进行标注,适合Y…...
系统分析师-第十五章
学习目标 通过参加考试,训练学习能力,而非单纯以拿证为目的。 1.在复习过程中,训练快速阅读能力、掌握三遍读书法、运用番茄工作法。 2.从底层逻辑角度理解知识点,避免死记硬背。 3.通过考试验证学习效果。 学习阶段 快速阅读 …...
大连理工大学选修课——机器学习笔记(3):KNN原理及应用
KNN原理及应用 机器学习方法的分类 基于概率统计的方法 K-近邻(KNN)贝叶斯模型最小均值距离最大熵模型条件随机场(CRF)隐马尔可夫模型(HMM) 基于判别式的方法 决策树(DT)感知机…...
09 Python字典揭秘:数据的高效存储
文章目录 一.字典是什么1.字典的特点 二.字典的创建和使用三.字典的操作1.访问元素2.修改元素3.删除元素4.遍历字典5.成员运算 四.字典方法1.获取字典中的指定元素2.获取字典中的元素3.字典合并4.删除元素 一.字典是什么 在 Python 中,字典(dict&#x…...
20250430在ubuntu14.04.6系统上完成编译NanoPi NEO开发板的FriendlyCore系统【严重不推荐,属于没苦硬吃】
【开始编译SDK之前需要更新源】 rootrootubuntu:~/friendlywrt-h3$ sudo apt update 【这两个目录你在ubuntu14.04.6系统上貌似git clone异常了】 Y:\friendlywrt-h3\out\wireguard Y:\friendlywrt-h3\kernel\exfat-nofuse 【需要单线程编译文件系统,原因不明】 Y:…...
第五部分:进阶项目实战
在前面的学习中,我们已经掌握了图像和视频的基础操作、增强滤波、特征提取以及一些基础的目标检测方法。现在,我们将综合运用这些知识来构建一些更复杂、更实用的应用项目。 这一部分的项目将结合前面学到的技术,并介绍一些新的概念和工具&a…...
【Linux】记录一个有用PS1
PS1 是用来定义shell提示符的环境变量 下面是一个带有颜色和丰富信息的 Linux PS1 配置示例,包含用户名、主机名、路径、时间、Git 分支和退出状态提示: # 添加到 ~/.bashrc 文件末尾 PS1\[\e[1;32m\]\u\[\e[m\] # 绿色粗体用户名 PS…...
【SpringBoot】基于mybatisPlus的博客管理系统(2)
目录 1.实现用户登录 Jwt令牌 1.引入依赖 2.生成令牌(token) Controller Service Mapper 2.实现强制登录 定义拦截器: 配置拦截器: 1.实现用户登录 在之前的项目登录中,我使用的是Session传递用户信息实现校验…...
免费在Colab运行Qwen3-0.6B——轻量高性能实战
Qwen一直在默默地接连推出新模型。 每个模型都配备了如此强大的功能和高度量化的规模,让人无法忽视。 继今年的QvQ、Qwen2.5-VL和Qwen2.5-Omni之后,Qwen团队现在发布了他们最新的模型系列——Qwen3。 这次他们不是发布一个而是发布了八个不同的模型——参数范围从6亿到235…...
精益数据分析(35/26):SaaS商业模式关键指标解析
精益数据分析(35/26):SaaS商业模式关键指标解析 在创业与数据分析的征程中,我们持续探索不同商业模式的运营奥秘。今天,我们带着共同进步的期望,深入研读《精益数据分析》,聚焦SaaS商业模式&am…...
【论文速读】《Scaling Scaling Laws with Board Games》
论文链接:https://arxiv.org/pdf/2104.03113 《Scaling Scaling Laws with Board Games》:探索棋盘游戏中的扩展规律 摘要 如今,机器学习领域中规模最大的实验所需的资源,超出了仅有几家机构的预算。幸运的是,最近的…...
C++ 与多技术融合的深度实践:从 AI 到硬件的全栈协同
在数字化技术高速发展的今天,C 凭借其卓越的性能优势和底层控制能力,成为连接上层应用与底层硬件的核心纽带。这种独特定位使其在与 AI 深度学习、Python 生态及硬件加速技术的融合中展现出不可替代的价值,构建起从算法实现到硬件优化的全栈技…...
AdaBoost算法的原理及Python实现
一、概述 AdaBoost(Adaptive Boosting,自适应提升)是一种迭代式的集成学习算法,通过不断调整样本权重,提升弱学习器性能,最终集成为一个强学习器。它继承了 Boosting 的基本思想和关键机制,但在…...