(7)NodeJS的使用与NPM包管理器
本系列教程目录:Vue3+Element Plus全套学习笔记-目录大纲
文章目录
第1章 NodeJS
如果你是一个前端程序员,你不懂得像PHP、Python或Ruby等动态编程语言,然后你想创建自己的服务,那么Node.js是一个非常好的选择。如果你熟悉Javascript,那么你将会很容易的学会Node.js。
1.1 NodeJS简介
Node.js 是一个基于 Chrome V8 JavaScript 引擎 构建的开源、跨平台运行时环境。V8 引擎是即 Google Chrome 的核心。这使 Node.js 的性能非常出色。V8引擎允许开发者使用 JavaScript 编写服务器端代码,而不是仅仅局限于浏览器中的前端开发。
Node.js 是运行在服务端的 JavaScript,是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
NodeJS官网:https://nodejs.org/zh-cn
1.2 NodeJS下载
打开官网中的下载页面,选择一个合适的版本下载安装包,然后双击安装:
安装过程:点击下一步…下一步…默认安装即可。
NodeJS历史版本下载:https://nodejs.org/dist/
安装完毕后,打开cmd窗口,输入node -v查看node的版本。
1.3 Node基础入门
1.3.1 控制台输出
我们现在做个最简单的小例子,演示如何在控制台输出,创建文本文件demo01.js,代码内容:
var a=1;
var b=2;console.log(a+b);
我们在命令提示符下输入命令
node demo01.js
1.3.2 使用函数
创建文本文件demo02.js
function add(a,b){return a+b;
}
var c=add(100,200);console.log(c);
命令提示符输入命令
node demo2.js
运行后看到输出结果为300
1.4 NodeJS模块化编程
模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++扩展。
将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为模块化,其中拆分出的每个文件就是一个模块 ,模块的内部数据是私有的,不过模块可以暴露内部数据以便其他模块使用。
创建文本文件demo03_01.js
exports.add=function (a,b){return a+b;
}
创建文本文件demo03_2.js
// 导入demo03_1模块,类似于Java中的对象
var demo= require('./demo03_01');// 通过"对象名"调用方法
console.log(demo.add(400,600));
我们在命令提示符下输入命令
node demo03_02.js
结果为1000
1.5 NodeJS内置模块
Node.js 作为一个 JavaScript 的运行环境,其官方提供了非常多的的内置模块,这些内置模块就和Java中的核心API一样,为NodeJS提供了很多基础功能,我们可以通过require()将这些模块导入到当前的JS文件中。
- fs:文件系统模块。
- fs.writeFile(file, data[, options], callback):文件写入
- fs.readFile(path[, options], callback):读取文件
- fs.unlink(path, callback):删除文件
- fs.mkdir(path[, options], callback):创建文件夹
使用示例:
// 导入fs模块
const fs = require('fs');
fs.writeFile('./test01.txt', '学而时习之,不亦说乎', err => {
//如果写入失败,则回调函数调用时,会传入错误对象,如写入成功,会传入 nullif (err) {console.log(err);return;}console.log('写入成功');
});
1.5.1 fs模块
fs模块是nodejs中关于文件操作的模块。
语法:
- fs.writeFile(file, data[, options], callback):文件写入
- file 文件名
- data 待写入的数据
- options 选项设置 (可选)
- callback 写入回调
使用示例:
// 导入fs模块
const fs = require('fs');var str = "北冥有鱼,其名为鲲。鲲之大,不知其几千里也。"
fs.writeFile('./test01.txt', str, err => {
//如果写入失败,则回调函数调用时,会传入错误对象,如写入成功,会传入 nullif (err) {console.log(err);return;}console.log('写入成功');
});
- fs.readFile(path[, options], callback):读取文件
- path 文件路径
- options 选项配置
- callback 回调函数
使用示例:
//导入 fs 模块
const fs = require('fs');// 读取的是字节
fs.readFile('./test01.txt', (err, data) => {if(err) throw err;console.log(data);
});// 安装编码来读取
fs.readFile('./test02.txt', 'utf-8',(err, data) => {if(err) throw err;console.log(data);
});
- fs.unlink(path, callback):删除文件
- path 文件路径
- callback 操作后的回调
const fs = require('fs');fs.unlink('./test01.txt', err => {if(err) throw err;console.log('删除成功');
});
- fs.mkdir(path[, options], callback):创建文件夹
- path 文件夹路径
- options 选项配置( 可选 )
- callback 操作后的回调
使用示例:
const fs = require('fs');
// 创建文件夹
fs.mkdir('./a1', err => {if(err) throw err;console.log('创建成功');
});
//递归创建
fs.mkdir('./aa/b1/c1', {recursive: true}, err => {if(err) throw err;console.log('递归创建成功');
});
- fs.rmdir(path[, options], callback):删除文件夹
- path:文件夹路径
- options:选项配置( 可选 )
- callback:操作后的回调
使用示例:
const fs = require('fs');
//删除文件夹
fs.rmdir('./a1', err => {if(err) throw err;console.log('删除成功');
});
//递归删除文件夹
fs.rmdir('./aa', {recursive: true}, err => {if(err) {console.log(err);}console.log('递归删除')
});
1.5.2 http模块
http模块是nodejs中有关于http协议的模块。
(1)创建HTTP服务:
// 1. 导入http模块
const http = require('http');/*** 2. 创建http服务* request:请求对象* response:响应对象*/
const server = http.createServer((request, response) => {response.end('Hello HTTP server');
});// 3. 监听端口, 启动服务
server.listen(8000, () => {console.log('服务已经启动, 端口 9000 监听中...');
});
打开浏览器,访问:http://localhost:8000
(2)request对象
常用方法及属性:
含义 | 语法 |
---|---|
请求方式 | request.method |
协议和版本 | request.httpVersion |
请求路径 | request.url |
URL 路径 | require(‘url’).parse(request.url).pathname |
URL 查询字符串 | require(‘url’).parse(request.url).query |
请求头 | request.headers |
请求体 | request.on(‘data’, function(chunk){}) request.on(‘end’, function(){}); |
使用示例:
// 1、引入http模块
const http = require("http");
const url = require('url')// 2、建立服务
const server = http.createServer((request, response) => {// 设置响应类型response.setHeader("Content-Type", "text/html;charset=utf-8")// 获取完整的请求路径(带请求参数)var requestUrl =url.parse(request.url).pathname;// 获取查询字符串var params = url.parse(request.url).query;response.write(`<hr> 请求方式: ${request.method}`);response.write(`<hr> 协议和版本: ${request.httpVersion}`);response.write(`<hr> 请求路径: ${request.url}`);response.write(`<hr> URL 路径: ${requestUrl}`);response.write(`<hr> URL 查询字符串: ${params}`);response.write(`<hr> 请求头: ${JSON.stringify(request.headers)}`);response.write("name:" + params.name);if (request.url == "/register" && request.method == "GET") {response.end("<hr> welcome to register...");} else if (request.url == "/login" && request.method == "GET") {response.end("<hr> welcome to login...");} else {response.end("<h1>404 Not Found</h1>")}
})
// 3、监听端口
server.listen(8000, () => {console.log('服务启动中....');
})
打开浏览器,访问:http://localhost:8000/register?username=xiaohui
(3)response对象
常用方法及属性:
作用 | 语法 |
---|---|
设置响应状态码 | response.statusCode |
设置响应状态描述 | response.statusMessage |
设置响应头信息 | response.setHeader(‘头名’, ‘头值’) |
设置响应体 | response.write(‘xx’) response.end(‘xxx’) |
使用示例:
require('http').createServer((request, response) => {//获取请求的方法已经路径let {url, method} = request;// 设置响应类型response.setHeader("content-Type", "text/html")if (method == "GET" && url == "/index.html") {// 通过fs模块读取文件(同步读取)let data = require('fs').readFileSync('./index.html');response.statusCode = 200;response.end(data);} else {let data = require('fs').readFileSync('./404.html');response.statusCode = 404;response.end(data);}
}).listen(8000, () => {console.log('8000端口正在启动中....');
})
访问:http://localhost:8000/index.html
1.6 NPM包管理工具
npm全称Node Package Manager,他是node包管理和分发工具。我们可以把NPM理解为java中的Maven。我们通过npm可以很方便地下载js库,管理前端工程。最近版本的node.js已经集成了npm工具,在命令提示符输npm -v 可查看当前npm版本。
NPM官网:https://www.npmjs.com/
1.6.1 修改npm镜像
NPM官方的管理的包都是从 http://npmjs.com下载的,但是这个网站在国内速度比较慢。这里推荐使用淘宝 NPM 镜像 ,淘宝 NPM 镜像是一个完整 npmjs.com 镜像。
设置镜像地址:
#经过下面的配置,以后所有的 npm install 都会经过淘宝的镜像地址下载
npm config set registry https://registry.npmmirror.com
#查看npm配置信息
npm config list
# 查看镜像源
npm config get registry
1.6.2 相关命令
命令 | 介绍 |
---|---|
npm init | 初始化工程 |
npm init -y | 可以跳过向导,快速初始化工程 |
npm install | 简写npm i,自动下载package.json中dependencies中全部的依赖。 |
npm install 包名 | 简写npm i 包名,下载指定包 |
npm install --save 包名 | 简写npm i -S 包名,下载并保存依赖项(package.json中dependencies) 5.0.0版本之后的npm会自动保存到dependencies |
npm uninstall 包名 | 简写npm un 包名,只删除,如果有依赖项会依然保存 |
npm uninstall --save 包名 | 简写npm un -S 包名,删除的同时也会将依赖信息删除 |
npm help | 查看使用帮助 |
npm 命令 --help | 查看对应命令的使用帮助,例如我忘记uninstall的简写,那么我可以输入npm uninstall --help |
1.6.3 初始化工程
使用npm init命令可以把当前文件夹初始化成一个“包”,即一个标准的nodejs工程
建立一个空文件夹,在命令提示符进入该文件夹 执行命令初始化
npm initnpm init -y # 全面使用默认值来初始化项目
按照提示输入相关信息,如果是用默认值则直接回车即可。
C:\Users\Admin\Desktop\dfxt\dfxt_day02\web\NodeJSDemo\demo04_npm>npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.See `npm help init` for definitive documentation on these fields
and exactly what they do.Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.Press ^C at any time to quit.
package name: (demo04_npm)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to C:\Users\Admin\Desktop\dfxt\dfxt_day02\web\NodeJSDemo\demo04_npm\package.json:{"name": "demo04_npm", # 项目名称"version": "1.0.0", # 项目版本号"description": "", # 项目描述"main": "index.js", # 入口文件"scripts": { # 脚本"test": "echo \"Error: no test specified\" && exit 1"},"author": "", # 作者"license": "ISC" # 认证信息
}Is this OK? (yes) yes
npm init 命令的作用是将文件夹初始化为一个“包”,创建 package.json 文件,执行完npm init后会生成package.json文件,这个是包的配置文件,相当于maven的pom.xml,我们之后也可以根据需要进行修改。
1)安装镜像
install命令用于安装某个模块,如果我们想安装jquery模块,输出命令如下:
# 下载最新版本的jquery
npm install jquery
在该目录下已经出现了一个node_modules
文件夹和package-lock.json
文件。
- node_modules文件夹:用于存放下载的js库(相当于maven的本地仓库)。
- package-lock.json文件:确定当前安装的包的依赖,以便后续重新安装的时候生成相同的依赖,而忽略项目开发过程中有些依赖已经发生的更新。
我们再打开package.json文件,发现刚才下载的jquery已经添加到依赖列表中了,依赖包会被添加到dependencies节点下,类似maven中的<dependencies>
标签。
安装时想指定特定的版本:
npm install jquery@3.2.1
查看package.json的依赖:
"dependencies": {"jquery": "^3.2.1"
}
2)版本号说明
指定版本:比如3.2.1,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
- 波浪号指定版本:比如~3.2.1,表示安装3.2.x的最新版本(不低于3.2.1),但是不安装3.3.x,也就是说安装时不改变大版本号和次要版本号。
- 插入号指定版本:比如ˆ3.2.1,表示安装3.x.x的最新版本(不低于3.2.1),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,比如^0.2.1,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。
- latest:安装最新版本。比如:
npm install jquery@latest
。需要注意,“最新版本”指的是latest标签指向的版本,而latest通常是主版本的最新稳定版,但不一定是最高的版本号,因为可能有预发布版本存在。例如,如果一个包的版本是1.2.3,然后发布了2.0.0-beta,这时候latest可能仍然指向1.2.3,直到2.0.0正式发布。
npm安装依赖说明:
场景 | 实际安装版本 |
---|---|
npm install vue | 安装 latest 标签对应的版本(如 Vue 3.4.21) |
npm install vue@next | 安装 next 标签对应的版本(如 Vue 3.4.21-beta) |
npm install vue@3.2.0 | 安装精确指定版本(3.2.0) |
npm ci | 严格按 package-lock.json 安装,确保环境一致性 |
3)全局安装
在 npm 中,-g
是 --global
的缩写,表示全局安装。它的作用是将一个包(package)安装到系统的全局环境中,而不是当前项目的本地目录。全局安装后的包可以在系统的任何目录下通过命令行直接使用。
全局安装适用于需要跨项目使用的命令行工具或全局工具。例如:vue-cli
(Vue 脚手架)、create-react-app
(React 脚手架)、nodemon
(自动重启 Node 服务)等。
全局安装的路径:
- Windows:
C:\Users\<用户名>\AppData\Roaming\npm\node_modules
- macOS/Linux:
/usr/local/lib/node_modules
安装与卸载全局包:
npm install -g @vue/cli # 全局安装 Vue CLI(跨项目使用)
npm uninstall -g @vue/cli # 卸载全局的 Vue CLI
4)运行依赖和开发依赖
我们使用npm install <packageName>
就能在线下载依赖到本地的node_modules目录,但我们项目打包时通常不会打包项目的node_modules以减轻项目大小。当项目发送给了团队的其他成员时只有源代码而没有项目所需的依赖,此时项目是无法运行的。
因此我们安装某个依赖时,除了下载依赖项到本地的node_modules目录外,还应该记录当前项目的依赖项配置,这样就算其他人获得到了项目源代码也可以按照依赖项配置来下载当前项目所需依赖。
在安装(npm install xxx)某个依赖项时,可以通过配置--save
或--save-dev
来将该依赖项记录下来:
- –save 等同于 -S (常用,可保存在package.json文件中):依赖项信息将加入到dependencies中,表示是生产阶段的依赖,也就是项目运行时的依赖,就是程序上线后仍然需要依赖。
- –save-dev 等同于 -D:依赖项信息将加入到devDependencies,表示是开发阶段的依赖,就是我们在开发过程中需要的依赖,只在开发阶段起作用。
Tips:从npm 5.0.0版本开始,默认行为改变了。现在当运行npm install xxx时,npm会自动将包添加到dependencies中,相当于之前需要–save的效果。
如下:
{// jquery是开发依赖"devDependencies": {"jquery": "^3.7.1"},// bootstrap是生产依赖"dependencies": {"bootstrap": "^5.3.5"}
}
项目运行时必须依赖的包(无论是本地开发、生产环境还是其他环境),例如一些框架或常用库,如:JQuery、Bootstrap、Vue、axios等依赖,如果缺少这些依赖,代码将无法运行,这些依赖就应该是dependencies;
一些仅在开发阶段需要的依赖,生产环境不需要。例如一些构建、转码、测试工具等,如webpack、babel、eslint、jest等,这些依赖投入到生产环境中就再也不需要了,这些依赖就应该是devDependencies;
1.6.5 package和package-lock文件
1)package文件:
package.json定义了这个项目所需要的各种模块,以及项目的配置信息,包括名称、版本、许可证、依赖模块等元数据。
当执行 npm install 的时候,node 会先从 package.json 文件中读取所有 dependencies 信息,然后根据 dependencies 中的信息与 node_modules 中的模块进行对比,没有的直接下载,已有的检查更新。另外,package.json 文件只记录你通过 npm install 方式安装的模块信息,而这些模块所依赖的其他子模块的信息不会记录。
2)package-lock文件:
package.json文件中保存着项目的依赖以及这些依赖的版本信息,但是这些依赖的版本并非是一个固定的,而是可以随着时间的流逝(例如该依赖发布了新版本)自动更新的。因此,同一个package.json在不同时间点执行npm install
可能会导致项目实际使用的依赖版本不同。
如项目中JQuery依赖为ˆ3.2.1
,当前该依赖最新发布版本为3.5.1
,执行npm install
命令后将3.5.1版本的JQuery下载到了项目中。四个月后JQuery官方对其进行更新,当前最新版本为3.7.1,此时从新执行该项目的``npm install`将会安装3.7.1版本的JQuery。
可以看到,同一个项目,不同时间点来执行安装命令会导致项目的依赖版本不一样。package-lock.json文件正是来解决这个问题的。
package-lock.json 文件会保存 node_modules 中所有包的信息,包括精确版本 version 和下载地址 resolved 以及依赖关系 dependencies 等,用以记录当前状态下实际安装的各个模块的具体来源和版本号。这样 npm install 时速度就会提升。
当项目中已有package-lock.json 文件,在安装项目依赖时,将以该文件为主进行解析安装指定版本依赖包,而不是使用 package.json 来解析和安装模块。因为 package.json 指定的版本不够具体,而package-lock 为每个模块及其每个依赖项指定了版本,位置和完整性哈希,所以它每次的安装都是相同的。
package-lock.json 文件主要作用有以下两点:
- 1)当删除 node_module 目录时,想通过 npm install 恢复所有包时,提升下载速度。
- 2)锁定版本号,防止自动升级新版本。
项目中存在了package-lock.json当下载依赖时会以该文件中锁定的版本来下载,但有时我们也希望更新一下项目依赖,此时可以执行npm update
来更新项目的依赖版本,并且更新package-lock.json锁定的版本。
一般来说前端工程完毕后是不会将node_modules文件夹打包到项目中的(精简项目),当项目发布到互联网时,用户需要自行执行npm install来根据package.json或package-lock.json文件来下载依赖。如果项目中没有package-lock.json可以使用如下命令来构建一个package-lock.json:
npm install --package-lock-only
相关文章:
(7)NodeJS的使用与NPM包管理器
本系列教程目录:Vue3Element Plus全套学习笔记-目录大纲 文章目录 第1章 NodeJS1.1 NodeJS简介1.2 NodeJS下载1.3 Node基础入门1.3.1 控制台输出1.3.2 使用函数 1.4 NodeJS模块化编程1.5 NodeJS内置模块1.5.1 fs模块1.5.2 http模块 1.6 NPM包管理工具1.6.1 修改npm镜…...
策略模式:思考与解读
原文地址:策略模式:思考与解读 更多内容请关注:7.深入思考与解读设计模式 引言 你是否曾遇到过这样的情况:在一个系统中,有许多算法或策略,每种策略的实现逻辑相似,但在某些情况下需要进行替换和扩展&am…...
1.Vue3 - 创建Vue3工程
目录 一、 基于vue-cli 脚手架二、基于vite 推荐2.1 介绍2.2 创建项目2.3 文件介绍2.3.1 extensions.json2.3.2 脚手架的根目录2.3.3 主要文件 src2.3.3.1 main.js2.3.3.2 App.vue 组件2.3.3.3 conponents 2.3.4 env.d.ts2.3.5 index.html 入口文件2.3.6 package2.3.7 tsconfig…...
Spring MVC 执行流程全解析:从请求到响应的七步走
Spring MVC 的工作流程,漏了这一个今天刚好面试提到了,没回答出来,记录一下。 🧭 Spring MVC 整体执行流程一览(从请求到响应) ✅ 1. 请求发出:浏览器发送 HTTP 请求 如用户访问: …...
四元数转旋转矩阵
目录 gsplat 四元数转旋转矩阵等同代码实现 scipy 四元数转旋转矩阵替换代码 gsplat 四元数转旋转矩阵等同代码实现 import torch import torch.nn.functional as Fdef quat_act(x: torch.Tensor) -> torch.Tensor:return x / x.norm(dim-1, keepdimTrue)def normalized_q…...
Pytorch的极简transformer用于时间序列预测
本博客来源于CSDN机器鱼,未同意任何人转载。 更多内容,欢迎点击本专栏,查看更多内容。 目录 0.引言 1.数据准备 2. 网络搭建 3. 完整代码 4. 结语 0.引言 在【博客】中,我们基于tensorflow2.x深度学习框架搭建了transforme…...
垂直行业突围:工业软件在汽车、航空领域的 “破壁” 实践
在当今科技高速发展的时代,工业软件已悄然完成从通用工具到垂直行业 “战略武器” 的蜕变。特别是在汽车与航空这两大高端制造领域,工业软件的价值早已超越单纯的效率提升,成为关乎核心技术自主可控的关键要素,一场围绕工业软件的…...
人工智能在智能家居中的应用与发展
随着人工智能(AI)技术的飞速发展,智能家居逐渐成为现代生活的重要组成部分。从智能语音助手到智能家电,AI正在改变我们与家居环境的互动方式,让生活更加便捷、舒适和高效。本文将探讨人工智能在智能家居中的应用现状、…...
维度建模工具箱 提纲与总结
这里写自定义目录标题 基本概念事实表和维度表BI(Business Intelligence) 产品 事实表事实表的粒度事实表的种类 维度表建模技术基本原则避免用自然键作为维度表的主键,而要使用类似自增的整数键避免过度规范化避免变成形同事实表的维度表 SCD(Slowly Changed Dimen…...
Vue3 源码解析(六):响应式原理与 reactive
今天这篇文章是笔者会带着大家一起深入剖析 Vue3 的响应式原理实现,以及在响应式基础 API 中的 reactive 是如何实现的。对于 Vue 框架来说,其非侵入的响应式系统是最独特的特性之一了,所以不论任何一个版本的 Vue,在熟悉其基础用…...
规则引擎 - Easy Rules
Easy Rules 依赖demodemo1demo2 总结 Easy Rules 是一个轻量级的 Java 规则引擎,使用简单,适合快速开发和简单的规则场景,适合对于一些判断,是否属于白名单,是否有特殊权限,是否属于当前区域,调…...
uniapp打ios包
uniapp在windows电脑下申请证书并打包上架 前言 该开发笔记记录了在window系统下,在苹果开发者网站生成不同证书,进行uniapp打包调试和上线发布,对window用户友好 注:苹果打包涉及到两种证书:开发证书 和 分发证书 …...
from tensorflow.keras.models import Model中Model报红;以及动态链接库(DLL)初始化例程失败
博主也是网上搜索资料又问的kimi 试了一节课 总结下来: 1、用这句话导入Model from tensorflow.keras.models import Model 2、更新pip pip install --upgrade pip 3、卸载重装tensorflow pip uninstall tensorflow 4、使用阿里云使tensorflow降低到2.8.0&a…...
【初阶数据结构】树——二叉树(上)
文章目录 目录 前言 一、树 1.树的概念与结构 2.树相关术语 3.树的表示 二、二叉树 1.概念与结构 2.特殊的二叉树 3.二叉树存储结构 总结 前言 本篇带大家学习一种非线性数据结构——树,简单认识树和二叉数以及了解二叉树的存储结构。 一、树 1.树的概念与结构 树…...
Debian GNU/Linux的新手入门介绍
Debian GNU/Linux:起源、基本介绍与发行版对比 一、起源与发展历程 Debian GNU/Linux 是现存最古老的 Linux 发行版之一,由 Ian Murdock 于 1993 年 8 月 16 日创立。其名称结合了他的女友(后成为妻子)Debra 和他自己的名字 Ian…...
13 数据存储单位与 C 语言整数类型:从位到艾字节、常见整数类型及其范围、字面量后缀、精确宽度类型详解
1 数据存储单位 在计算机科学领域,数据存储采用分层级的单位体系,各层级单位以 2 的幂次方为换算基础,而非传统数学中的 10 的幂次方。 以下是常见的数据存储单位介绍: 位(bit,b)是计算机中的最…...
【CPU】结合RISC-V CPU架构回答中断系统的7个问题(个人草稿)
结合RISC-V CPU架构对中断系统七个关键问题的详细解析,按照由浅入深的结构进行说明: 一、中断请求机制(问题①) 硬件基础: RISC-V通过CLINT(Core Local Interrupter)和PLIC(Platfor…...
基于unsloth微调一个越狱大模型
网上其实并没有找到现成的开源越狱数据集,所以数据集获取是个麻烦事。想了想easydataset,可能还是不行,easydataset是基于大模型回答的,大模型一般都做了对齐训练,那本地文档生成数据这条路也不可靠。 现成的越狱数据…...
城市客运安全员证适用岗位及要求
城市客运安全员证适用岗位及要求 城市客运安全员证是从事城市公共交通行业安全管理工作的重要资格证书,主要适用于以下岗位: 1. 公交车辆安全员 岗位职责:负责公交车辆运行过程中的安全监督,检查乘客携带物品,防止危…...
UDP协议详解
UDP协议详解 一、理解socket套接字 1.1理解IP 我们都知道在网络中IP用来标识主机的唯一性。那么?这句话该如何理解呢?大家来思考一个问题:计算机之间传输传输数据是目的吗?就好比,你爸叫你给你妈带句话ÿ…...
Unreal Engine中FRotator与FQuat在赛车游戏方向盘控制中的协同应用解析
摘要 深入剖析 Unreal Engine 中这两个关键组件在赛车游戏方向盘控制中的协同作用,涵盖全流程与实践技巧。 一、引言 在赛车游戏开发中,实现逼真的方向盘控制是提升玩家体验的关键要素之一。而在 Unreal Engine 里,FRotator 与 FQuat 这两…...
第十四届蓝桥杯 2023 C/C++组 飞机降落
目录 题目: 题目描述: 编辑题目链接: 思路: 核心思路: 思路详解: 代码: 代码详解: 题目: 题目描述: 题目链接: 洛谷 P9241 [蓝桥杯 20…...
完美解决Microsoft Edge浏览器无法同步/一直在同步中/更新失败等问题
在使用Microsoft Edge浏览器的过程中,我们可能会遇到一些常见的问题,例如无法同步数据或无法更新浏览器。这些问题通常可以归结为以下两个主要原因: 一、网络连接问题 当Edge浏览器无法同步或更新时,首要考虑的是网络连接问题。…...
CSS文本属性
CSS文本属性 在CSS中,可以使用以下属性来设置文本的样式和布局: 1.color : 设置文本颜色。可以使用颜色名称、十六进制值或RGB值来指定颜色: p{color:red; }font-family : 设置文本的字体系列。可以指定一个或多个字…...
思科路由器做DNS服务器
1.实验环境中,常常需要一台DNS服务器来做名称解析,一般会安装一台windows server,启用dns服务,或者安装一台Linux服务器,安装Bind来实现;虽然可以实现你想要的功能,但是费时费力且配置复杂&…...
Windows部署FunASR实时语音听写便捷部署教程
FunASR提供可便捷本地或者云端服务器部署的实时语音听写服务,内核为FunASR已开源的runtime-SDK。 FunASR集成了达摩院语音实验室在Modelscope社区开源的语音端点检测(VAD)、Paraformer-large非流式语音识别(ASR)、Paraformer-large流式语音识别(ASR)、标点预测(PUNC) 等相关能…...
C++之unordered封装
目录 一、哈希表的修改 1.1、哈希表节点结构 1.2、迭代器 1.3、哈希表结构 1.4、完整代码 二、unordered_map的实现 二、unordered_set的实现 一、哈希表的修改 注意:这里我们使用哈希桶来封装unordered_map和unordered_set。 1.1、哈希表节点结构 templa…...
Pycharm(九)函数的闭包、装饰器
目录 一、函数参数 二、闭包 三、装饰器 一、函数参数 def func01():print("func01 shows as follows") func01() # 函数名存放的是函数所在空间的地址 print(func01)#<function func01 at 0x0000023BA9FC04A0> func02func01 print(func02)#<function f…...
7. 栈与队列(随想录)
1.栈实现队列 2.用队列实现栈 3.有效的括号 4.删除字符串中的所有相邻重复项 5.逆波兰表达式 6.滑动窗口最大值 7.前k个高频元素...
GPU软硬件架构协同设计解析
GPU软硬件架构协同设计解析 GPU(图形处理器)的软硬件协同设计是其在通用计算和高性能计算(HPC)领域取得突破的核心原因。以下从硬件架构、软件架构、协同设计的关键技术及典型案例展开深度解析。 一、硬件架构的核心设计原则 流式多处理器(SM)的模块化设计 计算单元…...
【软考】论NoSQL数据库技术及其应用示例
论NoSQL数据库技术及其应用 随着互联网web2.0网站的兴起,传统关系数据库在应对web2.0 网站,特别是超大规模和高并发的web2.0纯动态SNS网站上已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到…...
特伦斯智慧钢琴评测:如何用科技重塑钢琴学习新体验
对于渴望学习钢琴的爱好者而言,传统钢琴的笨重体积、高昂成本与扰民问题往往成为绊脚石。而智能电钢琴的出现,正以轻量化设计、沉浸式体验与智能化功能打破这些壁垒。特伦斯智慧钢琴凭借其专业级硬件配置与创新教学系统,成为市场中兼具性能与…...
UML 状态图:解锁电子图书馆管理系统的高效设计
目录 一、UML 状态图的核心要素 状态:系统行为的 “栖息地” 转换:连接状态的 “桥梁” 动作:赋予功能的 “实践者” 二、电子图书馆管理系统状态图解析 系统空闲状态:一切的起点 读者登录与身份验证:安全的 “…...
UML 状态图:陪伴机器人系统示例
目录 一、状态图的基本概念 1.1 状态 1.2 转换 1.3 动作 二、陪伴机器人系统状态图解析 2.1 初始与待机状态 2.2 情绪检测中状态 2.3 陪伴模式下的细分 2.4 疏导模式的严谨流程 2.5 安抚模式的关键作用 三、状态图绘画 四、UML 状态图的强大 4.1 直观呈现系统行为…...
超详细实现单链表的基础增删改查——基于C语言实现
文章目录 1、链表的概念与分类1.1 链表的概念1.2 链表的分类 2、单链表的结构和定义2.1 单链表的结构2.2 单链表的定义 3、单链表的实现3.1 创建新节点3.2 头插和尾插的实现3.3 头删和尾删的实现3.4 链表的查找3.5 指定位置之前和之后插入数据3.6 删除指定位置的数据和删除指定…...
分布式光纤测温技术让森林火灾预警快人一步
2025年春季,多地接连发生森林火灾,累计过火面积超 3万公顷。春季历来是森林草原火灾易发、多发期,加之清明节已到来,生产生活用火活跃,民俗祭祀用火集中,森林火灾风险进一步加大。森林防火,人人…...
判断链表是否为环(Java版本自己用)
141. 环形链表 核心代码版本: public class Solution {public boolean hasCycle(ListNode head) {if (head null) {return false;}ListNode slow head;ListNode fast head.next;while (fast ! null && fast.next ! null) {if (slow fast) {return true…...
leetcode 516. Longest Palindromic Subsequence
题目描述: 代码: class Solution { public:int longestPalindromeSubseq(string s) {int n s.size();//i<j,dp[i][j]表示s[i,j]的最长回文子串的长度,按照这个定义dp[0][n-1]就是答案,i>j的dp[i][j]不定义vector<vector<int>> dp(n,…...
关于敏感文件或备份 安全配置错误 禁止通过 URL 访问 Vue 项目打包后的 .gz 压缩文件
要禁止通过 URL 访问 Vue 项目打包后的 .gz 压缩文件(如 sc.6abb69d9.css.gz)或其他敏感文件,可以通过 Nginx 配置和 Tomcat 配置双重防护来实现。以下是具体解决方案: 方法 1:通过 Nginx 配置禁止访问 .gz 文件 在 N…...
Linux系统启动全流程解析:从BIOS到用户登录
摘要 深度解析Linux系统启动五阶段:内核加载→init进程初始化→系统服务启动→终端创建→用户登录,涵盖SysV/Systemd差异及运行级别管理,提供故障排查指南。 一、启动流程全景概览 Linux系统启动过程严格遵循5个阶段顺序执行,每…...
unity动态骨骼架设+常用参数分享(包含部分穿模解决方案)
Unity骨骼物理模拟插件Dynamic Bone Dynamic Bone 可用于对角色的骨骼(bones)或者铰链系统(joints)施加物理效果。 物理效果可以使得游戏角色的头发、衣服、胸部或者是其他的任何部位,都可以以近似真实的状态运动。 …...
【云原生】k8s集群部署最新版ELFK日志采集平台
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Golang开…...
基于瑞芯微RK3576国产ARM八核2.2GHz A72 工业评估板——ROS2系统使用说明
前 言 本文主要介绍创龙科技TL3576-MiniEVM评估板演示基于Ubuntu的ROS系统(版本:ROS2 Foxy)使用说明,包括镜像编译、镜像替换,以及ROS系统测试的方法。适用开发环境如下。 Windows开发环境:Windows 10 64bit Linux虚拟机环境:VMware16.2.5、Ubuntu22.04.5 64bit U-B…...
android studio sdk unavailable和Android 安装时报错:SDK emulator directory is missing
md 网上说的都是更换proxy代理什么的,还有一些二其他乱七八糟的,根本没用,感觉很多就是解决不了问题,还贼多贼一致,同质化,感觉很坑人,让人觉得他们和我的一样的,大家都是按他们说的…...
qemu构建arm环境(AI生成)
要编译 qemu-system-arm,你需要安装一些依赖库,配置编译环境,并执行编译过程。以下是一般步骤,适用于大多数基于Linux的系统。 1. 安装依赖 首先,你需要安装一些必要的开发工具和库。你可以使用包管理器来安装这些依…...
10天学会嵌入式技术之51单片机-day-4
第十二章 中断系统 中断系统是单片机用于处理外部紧急事件的一种机制。中断系统工作的大致流程如下 图所示:当 CPU 正在处理某项任务时,外部发生了某个紧急事件,此时 CPU 会暂停当前 的工作,转而去处理这个紧急事件,处…...
spark—SQL3
连接方式 内嵌Hive: 使用时无需额外操作,但实际生产中很少使用。 外部Hive: 在虚拟机下载相关配置文件,在spark-shell中连接需将hive-site.xml拷贝到conf/目录并修改url、将MySQL驱动copy到jars/目录、把core-site.xml和hdfs-sit…...
CENTOS 7 安装VNC
一、VNC简介 VNC(Virtual Network Computing),为一种使用RFB协议的屏幕画面分享及远程操作软件。此软件借由网络,可发送键盘与鼠标的动作及即时的屏幕画面。 VNC与操作系统无关,因此可跨平台使用,例如可用…...
第42讲:走进智慧农业的“感知神经系统”——农田遥感 + 边缘计算的融合实践
目录 ✨一、为什么要融合遥感与边缘计算? 🧪二、典型应用场景案例 ✅ 案例 1:棉花田的智能水分监测系统 ✅ 案例 2:水稻纹枯病自动识别与预警系统 💻三、关键技术框架与实现思路 🚦 1. 系统架构流程图: 📦 2. 模型部署建议: 💡四、未来发展趋势展望 �…...
Dify忘记管理员密码,重置的问题
今天本地win10电脑,使用源码启动dify,忘记了管理员账号和密码,于是网上查找解决办法。 1.有的网上资料说是去数据库删除用户表,于是进入数据库: docker exec -it docker-db-1 psql -U postgres -d dify 找到postgre…...