前端面试题目 (Node.JS-Express框架)[二]
在 Express 中如何使用 Passport.js 进行身份认证?
Passport.js 是一个 Node.js 的身份验证中间件,它可以很容易地与 Express 集成。下面是一个简单的示例,展示了如何使用 Passport.js 进行基本的身份认证。
安装依赖
npm install express passport passport-local
设置 Passport
const express = require('express');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;const app = express();// 序列化用户会话
passport.serializeUser((user, done) => {done(null, user.id);
});// 反序列化用户会话
passport.deserializeUser((id, done) => {User.findById(id, (err, user) => {done(err, user);});
});// 使用本地策略
passport.use(new LocalStrategy((username, password, done) => {User.findOne({ username: username }, (err, user) => {if (err) { return done(err); }if (!user) { return done(null, false, { message: 'Incorrect username.' }); }if (!user.validPassword(password)) { return done(null, false, { message: 'Incorrect password.' }); }return done(null, user);});
}));// 中间件配置
app.use(passport.initialize());
app.use(passport.session());// 登录路由
app.post('/login', passport.authenticate('local', { failureRedirect: '/login-failure' }), (req, res) => {res.redirect('/profile');
});// 登录失败路由
app.get('/login-failure', (req, res) => {res.send('Login failed.');
});// 需要认证的路由
app.get('/profile', (req, res) => {if (!req.isAuthenticated()) {return res.status(401).send('Unauthorized');}res.send(`Hello, ${req.user.username}`);
});app.listen(3000, () => {console.log('Server is running on port 3000');
});
如何在 Express 中集成 GraphQL?
要在 Express 中集成 GraphQL,你需要使用 express-graphql 中间件。
安装依赖
npm install express express-graphql graphql
设置 GraphQL
const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const { buildSchema } = require('graphql');const app = express();// 构建 GraphQL Schema
const schema = buildSchema(`type Query {hello: String}
`);// 根级别的解析器
const root = {hello: () => {return 'Hello world!';},
};// 将 GraphQL HTTP 中间件应用到 Express
app.use('/graphql', graphqlHTTP({schema: schema,rootValue: root,graphiql: true, // 启用 GraphiQL 界面
}));app.listen(4000, () => {console.log('Now listening for requests on port 4000');
});
如何在 Express 中实现 CSRF 防护?
你可以使用 csurf 中间件来在 Express 中实现 CSRF 防护。
安装依赖
npm install csurf cookie-parser
设置 CSRF 防护
const express = require('express');
const cookieParser = require('cookie-parser');
const csurf = require('csurf');const app = express();// 解析 cookies
app.use(cookieParser());// 创建 CSRF 保护中间件
const csrfProtection = csurf({ cookie: true });// 应用 CSRF 保护到所有 POST 请求
app.post('/some-route', csrfProtection, (req, res) => {res.send('Form submitted successfully');
});// 提供 CSRF 令牌给前端(例如,通过模板或 API)
app.get('/form', (req, res) => {// 将 CSRF 令牌传递给前端res.cookie('XSRF-TOKEN', req.csrfToken());// 或者通过模板直接渲染// res.render('send', { csrfToken: req.csrfToken() });res.send(`<form action="/some-route" method="post"><input type="hidden" name="_csrf" value="${req.csrfToken()}"><button type="submit">Submit</button></form>`);
});app.listen(3000, () => {console.log('Server is running on port 3000');
});
Express 中如何处理文件下载功能?
你可以使用 res.download() 方法来处理文件下载。
const express = require('express');
const path = require('path');const app = express();app.get('/download', (req, res) => {const filePath = path.join(__dirname, 'example.txt');res.download(filePath, 'new-name.txt', (err) => {if (err) {console.error('Error during file download:', err);} else {console.log('File downloaded successfully');}});
});app.listen(3000, () => {console.log('Server is running on port 3000');
});
Express 中的错误处理中间件如何编写?
错误处理中间件是带有四个参数的中间件函数,第四个参数是 next 的错误处理形式(通常省略或用 err 占位)。
const express = require('express');
const app = express();// 普通的中间件
app.use((req, res, next) => {// 如果有错误发生,传递给下一个错误处理中间件const err = new Error('Something broke!');err.status = 400; // 设置错误状态码next(err);
});// 错误处理中间件
app.use((err, req, res, next) => {console.error(err.stack);res.status(err.status || 500);res.json({ message: err.message });
});app.listen(3000, () => {console.log('Server is running on port 3000');
});
在 Express 中如何实现用户认证和授权?
用户认证通常通过中间件实现,如之前 Passport.js 示例所示。授权则可以在路由处理函数中检查用户权限。
Express 中如何设置默认的错误处理程序?
默认的错误处理程序是放在所有其他路由之后的错误处理中间件。
const express = require('express');
const app = express();// 其他路由...// 默认错误处理程序
app.use((err, req, res, next) => {console.error(err.stack);res.status(500).send('Something broke!');
});app.listen(3000, () => {console.log('Server is running on port 3000');
});
如何在 Express 中实现简单的表单提交和处理?
你可以使用 body-parser 中间件来解析表单数据。
安装依赖
npm install body-parser
处理表单提交
const express = require('express');
const bodyParser = require('body-parser');const app = express();// 解析 urlencoded 表单数据
app.use(bodyParser.urlencoded({ extended: true }));app.post('/submit', (req, res) => {const { name, email } = req.body;res.send(`Received name: ${name} and email: ${email}`);
});app.listen(3000, () => {console.log('Server is running on port 3000');
});
在 Express.js 中,处理 HTTP 请求头信息、设置模板引擎、使用参数匹配路由以及区分 app.get() 和 app.post() 方法是非常常见的任务。以下是详细的解释和示例:
设置和获取 HTTP 请求头信息
设置请求头信息
通常,客户端(如浏览器)会设置请求头信息,但服务器端可以通过中间件修改响应头信息。
const express = require('express');
const app = express();app.get('/', (req, res) => {res.setHeader('Content-Type', 'application/json');res.send(JSON.stringify({ message: 'Hello, World!' }));
});app.listen(3000, () => {console.log('Server is running on port 3000');
});
获取请求头信息
你可以在请求处理函数中通过 req.headers 来获取请求头信息。
app.get('/headers', (req, res) => {const userAgent = req.headers['user-agent'];res.send(`Your User-Agent is: ${userAgent}`);
});
设置模板引擎
使用 EJS
-
安装 EJS:
npm install ejs -
配置 Express 使用 EJS:
const express = require('express'); const app = express();app.set('view engine', 'ejs');app.get('/', (req, res) => {res.render('index', { title: 'Hello, EJS!' }); });app.listen(3000, () => {console.log('Server is running on port 3000'); });在
views文件夹中创建一个名为index.ejs的文件:<!DOCTYPE html> <html> <head><title><%= title %></title> </head> <body><h1><%= title %></h1> </body> </html>
使用 Pug (以前称为 Jade)
-
安装 Pug:
npm install pug -
配置 Express 使用 Pug:
const express = require('express'); const app = express();app.set('view engine', 'pug');app.get('/', (req, res) => {res.render('index', { title: 'Hello, Pug!' }); });app.listen(3000, () => {console.log('Server is running on port 3000'); });在
views文件夹中创建一个名为index.pug的文件:doctype html htmlheadtitle= titlebodyh1= title
使用参数匹配路由
参数匹配路由允许你根据 URL 中的参数动态地处理请求。
app.get('/user/:userId', (req, res) => {const userId = req.params.userId;res.send(`User ID is: ${userId}`);
});
例如,访问 /user/123 会输出 User ID is: 123。
app.get() 和 app.post() 方法的区别
-
app.get():用于处理 HTTP GET 请求。GET 请求通常用于请求数据,而不是提交数据。app.get('/data', (req, res) => {res.send('This is a GET request'); }); -
app.post():用于处理 HTTP POST 请求。POST 请求通常用于提交数据,如表单数据或文件上传。app.post('/submit', (req, res) => {const body = req.body; // 假设你使用了 body-parser 中间件res.send(`Received data: ${body.data}`); });注意:要解析 POST 请求体中的数据,你需要使用中间件,如
express.json()或express.urlencoded({ extended: true })。const express = require('express'); const app = express();app.use(express.json()); // 用于解析 JSON 数据 app.use(express.urlencoded({ extended: true })); // 用于解析 URL 编码的数据app.post('/submit', (req, res) => {const body = req.body;res.send(`Received data: ${body.data}`); });app.listen(3000, () => {console.log('Server is running on port 3000'); });
以上就是 Express.js 中设置和获取 HTTP 请求头信息、设置模板引擎、使用参数匹配路由以及区分 app.get() 和 app.post() 方法的基本用法。
1. 在 Express 中如何处理 JSON 格式的请求体?
使用 express.json() 中间件可以解析 JSON 格式的请求体,并将其挂载到 req.body。
const express = require('express');
const app = express();app.use(express.json());app.post('/data', (req, res) => {console.log(req.body); // 解析后的 JSON 数据res.send('JSON Received');
});app.listen(3000, () => console.log('Server running on port 3000'));
2. Express 中的 app.set() 方法有什么作用?
app.set() 用于设置 Express 应用的全局变量或配置项,供应用中的其他部分访问。
示例
const express = require('express');
const app = express();// 设置视图引擎
app.set('view engine', 'pug');
app.set('views', './views');// 访问配置项
console.log(app.get('view engine')); // 'pug'
3. Express 中的请求对象 req 包含哪些常用属性?
req.body:请求体数据(需中间件支持,如express.json())。req.params:路由路径参数。req.query:查询字符串参数。req.headers:请求头。req.method:HTTP 请求方法。req.url:请求路径。
示例
app.get('/user/:id', (req, res) => {console.log(req.params.id); // 路由参数console.log(req.query.sort); // 查询参数res.send('Request details logged');
});
4. Express 中的响应对象 res 有哪些常用方法?
res.send():发送响应数据。res.json():发送 JSON 格式数据。res.status():设置 HTTP 状态码。res.redirect():重定向到指定 URL。res.render():渲染模板引擎输出。
示例
app.get('/json', (req, res) => res.json({ success: true }));
app.get('/redirect', (req, res) => res.redirect('/new-page'));
5. 在 Express 中如何处理 404 错误?
通过捕获所有未匹配路由并返回 404 错误。
app.use((req, res, next) => {res.status(404).send('Page Not Found');
});
6. 什么是 Express 中的路由方法链式调用?
通过链式调用同一路径的多个 HTTP 方法(如 get、post)来组织路由。
示例
app.route('/user').get((req, res) => res.send('Get User')).post((req, res) => res.send('Create User')).put((req, res) => res.send('Update User'));
7. 如何在 Express 中使用 app.use() 方法?
app.use() 用于注册中间件或绑定处理函数,可应用于全局或特定路径。
示例
// 全局中间件
app.use((req, res, next) => {console.log('Request received');next();
});// 路径绑定
app.use('/secure', (req, res, next) => {console.log('Secure route');next();
});
8. Express 中的模板引擎有哪些?如何选择?
常用模板引擎
- Pug:简洁、语法直观。
- EJS:嵌入 JavaScript,灵活易用。
- Handlebars:结构化模板,适合复杂视图。
选择依据
- Pug:适合需要简洁语法的项目。
- EJS:适合需要直接嵌入逻辑的场景。
- Handlebars:适合强调分离逻辑和视图的项目。
9. 在 Express 中如何处理静态文件的缓存?
通过 express.static() 设置静态文件目录,并自定义缓存设置。
示例
app.use(express.static('public', {maxAge: '1d', // 缓存 1 天
}));
10. Express 的中间件有哪些类型?
- 应用级中间件:绑定到
app,如app.use()。 - 路由级中间件:绑定到路由实例。
- 错误处理中间件:处理错误,形参包含
err。 - 内置中间件:如
express.json()、express.static()。 - 第三方中间件:如
cors、body-parser。
11. 在 Express 中如何使用路由器 (Router) 模块化路由?
通过 express.Router() 创建独立路由模块。
示例
创建路由模块:userRoutes.js
const express = require('express');
const router = express.Router();router.get('/', (req, res) => res.send('Get Users'));
router.post('/', (req, res) => res.send('Create User'));module.exports = router;
主文件:app.js
const express = require('express');
const userRoutes = require('./userRoutes');
const app = express();app.use('/users', userRoutes);app.listen(3000, () => console.log('Server running on port 3000'));
Express Generator
Express Generator 是一个命令行工具,可以快速生成一个具有基本目录结构和文件的 Express 应用。这个工具能够自动化地创建项目结构,包括主要的服务器文件、路由文件、以及配置文件等,从而帮助开发者节省初始设置项目的时间。
要使用 Express Generator,你需要先全局安装它(如果尚未安装):
npm install -g express-generator
然后,你可以使用以下命令来创建一个新的 Express 项目:
express myapp
其中 myapp 是你的项目名称。执行这个命令后,Express Generator 会在当前目录下创建一个名为 myapp 的新目录,并在其中生成一个基本的 Express 应用结构。
app.listen() 方法
在 Express 中,app.listen() 方法用于启动 HTTP 服务器并监听指定的端口。这个方法通常是在所有路由和中间件配置完成后调用的。例如:
const express = require('express');
const app = express();
const port = 3000;// 配置路由和中间件
// ...app.listen(port, () => {console.log(`Server is running at http://localhost:${port}`);
});
在这个例子中,app.listen(port, callback) 方法启动了一个监听在 3000 端口的 HTTP 服务器,并在服务器启动时打印了一条消息到控制台。
路由参数
Express 中的路由参数(也称为动态路由)允许你捕获 URL 片段的值,并将其作为请求对象(req)的属性。这对于构建 RESTful API 或需要根据 URL 动态生成内容的网站非常有用。例如:
app.get('/user/:id', (req, res) => {res.send(`User ID is ${req.params.id}`);
});
在这个例子中,:id 是一个路由参数,它捕获了 URL 中 /user/ 后面的部分,并将其存储在 req.params.id 中。
静态文件中间件
Express 提供了 express.static 中间件来提供静态资源(如 HTML 文件、图片、CSS 样式等)。这个中间件通常放在所有路由定义之前,以便为静态文件请求提供服务。例如:
app.use(express.static('public'));
在这个例子中,express.static 中间件被配置为从 public 目录提供静态文件。如果客户端请求一个静态文件(如 /images/logo.png),Express 会查找 public/images/logo.png 并将其发送给客户端。
中间件
Express 中间件是一堆方法,可以接收客户端发来的请求、可以对请求做出响应,也可以将请求继续交给下一个中间件继续处理。中间件在 Express 应用中扮演着非常重要的角色,它们可以用于执行各种任务,如解析请求体、处理跨域请求、验证用户身份等。
要使用中间件,你可以使用 app.use() 方法将其添加到应用中。中间件函数通常有三个参数:req(请求对象)、res(响应对象)和 next(一个函数,用于将控制权传递给下一个中间件)。例如:
app.use((req, res, next) => {console.log('Request received');next(); // 将控制权传递给下一个中间件或路由
});
创建路由
在 Express 中创建路由非常简单。你可以使用 app.get()、app.post()、app.put()、app.delete() 等方法定义不同类型的 HTTP 请求路由。这些方法接受两个参数:一个是 URL 路径模式,另一个是处理该请求的回调函数(也称为路由处理函数)。例如:
app.get('/', (req, res) => {res.send('Hello, World!');
});app.post('/submit-form', (req, res) => {res.send('Form has been submitted!');
});
Express 框架的基本使用步骤
- 导入 Express 框架:使用
require('express')导入 Express 模块。 - 创建应用实例:通过调用
express()函数创建一个 Express 应用实例。 - 配置中间件和路由:使用
app.use()添加中间件,使用app.get()、app.post()等方法定义路由。 - 启动服务器:使用
app.listen()方法启动 HTTP 服务器并监听指定端口。
Express.js 和 Koa.js 框架的区别
- 设计理念:Express 的设计理念是“约定优于配置”,注重快速开发和易用性;而 Koa 的设计理念是“中间件优先”,提供了更加灵活和可控的中间件机制。
- 异步编程方式:Express 使用回调函数处理异步操作,而 Koa 则采用基于 Promise 的异步编程方式(从 v2 版本开始支持 async/await)。
- 错误处理:Express 使用中间件来处理错误,而 Koa 则使用 try/catch 语句和 async/await 来捕获和处理错误。
- 社区和生态系统:Express 拥有更大的社区和更丰富的第三方中间件和库支持,而 Koa 则相对较为年轻,但也在不断发展壮大。
综上所述,Express 和 Koa 都是优秀的 Node.js Web 框架,选择哪个框架取决于你的具体需求和偏好。如果你需要快速搭建一个 Web 应用并希望利用丰富的社区资源和中间件支持,那么 Express 是一个不错的选择;如果你需要更灵活的中间件机制和更现代的异步编程方式,那么 Koa 可能更适合你。
相关文章:
前端面试题目 (Node.JS-Express框架)[二]
在 Express 中如何使用 Passport.js 进行身份认证? Passport.js 是一个 Node.js 的身份验证中间件,它可以很容易地与 Express 集成。下面是一个简单的示例,展示了如何使用 Passport.js 进行基本的身份认证。 安装依赖 npm install express passport …...
防范TCP攻击:策略与实践
TCP(传输控制协议)是互联网通信的核心协议之一,它确保了数据在网络上的可靠传输。然而,TCP也容易成为各种网络攻击的目标,如SYN洪水攻击、TCP连接耗尽攻击等。本文将探讨如何通过配置防火墙规则、优化服务器设置以及采…...
3D 生成重建034-NerfDiff借助扩散模型直接生成nerf
3D 生成重建034-NerfDiff借助扩散模型直接生成nerf 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 感觉这个论文可能能shapE差不多同时期工作,但是shapE是生成任意种类。 本文提出了一种新颖的单图像视图合成方法NerfDiff,该方法利用神经辐射场 …...
分布式 Paxos算法 总结
前言 相关系列 《分布式 & 目录》《分布式 & Paxos算法 & 总结》《分布式 & Paxos算法 & 问题》 参考文献 《图解超难理解的 Paxos 算法(含伪代码)》《【超详细】分布式一致性协议 - Paxos》 Basic-Paxos 基础帕克索斯算法…...
我的宝贵经验
在技术的浩瀚海洋中,一份优秀的技术文档宛如精准的航海图。它是知识传承的载体,是团队协作的桥梁,更是产品成功的幕后英雄。然而,打造这样一份出色的技术文档并非易事。你是否在为如何清晰阐释复杂技术而苦恼?是否纠结…...
geoserver 瓦片地图,tomcat和nginx实现负载均衡
在地理信息系统(GIS)领域,GeoServer作为一个强大的开源服务器,能够发布各种地图服务,包括瓦片地图服务。为了提高服务的可用性和扩展性,结合Tomcat和Nginx实现负载均衡成为了一个有效的解决方案。本文将详细…...
Jenkins 启动 程序 退出后 被杀死问题
参考 Spawning Processes From Build (jenkins.io) 解决jenkins脚本启动项目后进程被杀死_jenkins杀进程-CSDN博客...
SEGGER | 基于STM32F405 + Keil - RTT组件01 - 移植SEGGER RTT
导言 RTT(Real Time Transfer)是一种用于嵌入式中与用户进行交互的技术,它结合了SWO和半主机的优点,具有极高的性能。 使用RTT可以从MCU非常快速输出调试信息和数据,且不影响MCU实时性。这个功能可以用于很多支持J-Link的设备和MCU࿰…...
分布式开发学习
1、kratos的特点 gRPC:Kratos 默认支持 gRPC,提供高性能的远程调用能力,适用于微服务间通信。 HTTP :同时支持 HTTP/1.1 和 HTTP/2,方便微服务与外部系统交互。 Protocol Buffers: protoc 工具生…...
freeswitch(开启支持MCU视频会议,使用mod_av模块)
亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch场景说明: 有些场景想使用视频会议MCU融合画面进行开会使用方法: 第一步:下载插件 yum install -y epel-release yum install...
Vue3常见api使用指南(TS版)
defineProps() 和 defineEmits() 内置函数,无需import导入,直接使用。传入到 defineProps 和 defineEmits 的选项会从 setup 中提升到模块的范围。因此,传入的选项不能引用在 setup 范围中声明的局部变量(比如设置默认值时),但是…...
分布式 分布式事务 总结
前言 相关系列 《分布式 & 目录》《分布式 & 分布式事务 & 总结》《分布式 & 分布式事务 & 问题》 分布式事务 所谓分布式事务是指操作范围笼罩多个不同节点的事务。例如对于订单节点&库存节点而言,一次完整的交易需要同时调动两个节…...
onnx文件转pytorch pt模型文件
onnx文件转pytorch pt模型文件 1.onnx2torch转换及测试2.存在问题参考文献 从pytorch格式转onnx格式,官方有成熟的API;那么假如只有onnx格式的模型文件,该怎样转回pytorch格式? https://github.com/ENOT-AutoDL/onnx2torch提供了…...
智能座舱人机交互升级
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源&…...
RabbitMQ中点对点(Point-to-Point)通讯方式的Java实现
RabbitMQ是一个广泛使用的开源消息代理软件,它实现了高级消息队列协议(AMQP)。RabbitMQ支持多种消息传递模式,其中最基本的是点对点(Point-to-Point)通讯方式。在这种模式下,消息生产者将消息发…...
爬虫实战:获取1688接口数据全攻略
引言 在电商领域,数据的重要性不言而喻。1688作为中国领先的B2B电商平台,提供了海量的商品数据。通过爬虫技术获取这些数据,可以帮助企业进行市场分析、价格监控和供应链管理。本文将详细介绍如何使用Python爬虫技术合法合规地获取1688接口数…...
生成树协议STP工作步骤
第一步:选择根桥 优先级比较:首先比较优先级,优先级值越小的是根桥MAC地址比较:如果优先级相同,则比较MAC地址。MAC地址小的是根桥。 MAC地址比较的时候从左往右,一位一位去比 第二步:所有非根…...
Android14 AOSP支持短按关机
修改frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java diff --git a/base/services/core/java/com/android/server/policy/PhoneWindowManager.java b/base/services/core/java/com/android/server/policy/PhoneWindowManager.java in…...
C# 和 go 关于can通信得 整理
在C#中开发CAN(Controller Area Network)通信接口时,确实有一些现成的NuGet包可以简化你的开发工作。这些库通常提供了与CAN硬件接口通信所需的基本功能,如发送和接收CAN消息。下面是一些常用的NuGet包: PCANBasic.NET…...
vue常用命令汇总
nvm 一个nodejs版本管理工具,解决node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本的node.js。 npm 可以管理 nodejs 的第三方插件。 vue-cli 是Vue提供的一个官方cli,专门为单页面应用快速搭建繁杂的脚手架。 nginx 是一个高性能的HTTP和反向代理we…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
