[前端]NodeJS常见面试题目
什么是非阻塞 I/O? Node.js 如何实现非阻塞 I/O?
非阻塞 I/O 是一种编程模式,它允许 I/O 操作(如读取文件、网络请求等)在执行时不阻塞程序的其余部分。换句话说,当一个 I/O 操作发起后,程序可以立即继续执行其他任务,而不必等待该 I/O 操作完成。Node.js 天然采用了非阻塞 I/O 模型,这使得它特别适合 I/O 密集型应用,例如 Web 服务器、实时聊天应用等。
Node.js 实现非阻塞 I/O 的关键在于其事件驱动(Event-Driven)的架构和异步操作。Node.js 通过其核心模块 libuv 实现了事件循环(Event Loop),以处理异步 I/O 操作。当一个非阻塞 I/O 操作启动时,Node.js 会向操作系统发起相应的系统调用,并将回调函数注册到事件循环中。事件循环不断检查是否有完成的 I/O 操作,一旦 I/O 操作完成,事件循环会将对应的回调函数放入执行队列中以便后续执行。
Node.js 中的回调、Promise 和 async/await 有什么区别?
- 回调:回调函数是一种传统的处理异步操作的方式。在 Node.js 中,当一个异步操作完成时,会调用一个事先定义好的函数来处理结果。回调函数的缺点是容易导致代码难以维护,被称为“回调地狱”。
- Promise:Promise 是为了解决回调地狱而引入的一种机制。Promise 对象代表了一个异步操作的最终完成(或失败)及其结果值。Promise 提供了链式调用的方式,使得异步代码更加清晰和易于维护。
- async/await:async/await 是基于 Promise 实现的,它使得异步代码看起来更像是同步代码。async 函数会隐式地返回一个 Promise,而 await 关键字则用于等待 Promise 的解决。使用 async/await 可以让异步代码更加简洁和直观,同时避免了回调地狱的问题。
如何在 Node.js 中进行错误处理,特别是在异步代码中?
在 Node.js 中进行错误处理,特别是在异步代码中,可以采用以下几种方式:
- try-catch 语句:在同步代码中使用 try-catch 语句可以捕获并处理错误。但在异步代码中,try-catch 语句无法直接捕获异步操作中的错误。
- Promise 的错误处理:Promise 提供了 .catch() 方法来处理错误。当 Promise 被拒绝时,.catch() 方法会被调用,并接收一个错误对象作为参数。
- async/await 的错误处理:使用 async/await 时,可以使用 try-catch 语句来捕获异步操作中的错误。当异步操作(即 await 表达式)失败时,会抛出错误,并被 try-catch 语句捕获。
什么是 Stream 流? 举例说明如何在 Node.js 中使用流处理数据?
Stream 是 Node.js 中用于处理数据的抽象接口,可以在读取和写入数据时以逐块(chunk)的方式进行操作。流可以分为可读流和可写流两种类型。
- 可读流(Readable Stream):用于从数据源(比如文件、网络请求、标准输入等)读取数据,可以以可控的方式一次读取一小块数据,而不是一次性读取整个文件或数据流。
- 可写流(Writable Stream):用于将数据写入目标位置(比如文件、网络响应、标准输出等),也是逐块写入的方式,可以分多次写入数据。
在 Node.js 中使用流处理数据的示例如下:
javascript复制代码
const fs = require('fs'); | |
// 创建一个可读流来读取文件 | |
const readableStream = fs.createReadStream('input.txt', { encoding: 'utf8' }); | |
// 创建一个可写流来写入文件 | |
const writableStream = fs.createWriteStream('output.txt', { encoding: 'utf8' }); | |
// 将可读流的数据通过管道传输到可写流 | |
readableStream.pipe(writableStream); | |
readableStream.on('end', () => { | |
console.log('文件读取和写入完成'); | |
}); |
在这个示例中,我们使用 fs.createReadStream 创建一个可读流来读取 input.txt 文件,使用 fs.createWriteStream 创建一个可写流来写入 output.txt 文件。然后,我们使用 pipe 方法将可读流的数据传输到可写流中。当可读流读取完文件并结束时,会触发 end 事件,我们在事件处理函数中打印一条消息表示文件读取和写入完成。
其他问题简要回答
-
什么是集群? 如何在 Node.js 中实现集群和负载均衡?
- 集群是指将多个服务器组合起来,共同处理客户端的请求。在 Node.js 中,可以使用
cluster模块来实现集群和负载均衡。通过创建多个工作进程来分担负载,从而提高应用程序的吞吐量和响应速度。
- 集群是指将多个服务器组合起来,共同处理客户端的请求。在 Node.js 中,可以使用
-
如何调试 Node.js 程序? 有哪些方法?
- 调试 Node.js 程序可以使用多种方法,包括使用 Node.js 内置的调试器、第三方调试工具(如 Visual Studio Code 的调试功能)、在代码中添加
console.log语句进行日志输出等。
- 调试 Node.js 程序可以使用多种方法,包括使用 Node.js 内置的调试器、第三方调试工具(如 Visual Studio Code 的调试功能)、在代码中添加
-
在 Node.js 中,如何避免回调地狱?
- 可以使用 Promise 和 async/await 来避免回调地狱。Promise 提供了链式调用的方式,而 async/await 则使得异步代码看起来更像是同步代码,从而避免了回调地狱的问题。
-
如何在 Node.js 中处理多线程或多进程操作?
- Node.js 是单线程的,但它支持多进程操作。可以使用
child_process模块来创建子进程,或者使用cluster模块来创建多个工作进程来处理并发请求。对于多线程操作,可以使用 Node.js 的worker_threads模块来实现。
- Node.js 是单线程的,但它支持多进程操作。可以使用
-
什么是模块依赖循环? 如何在 Node.js 中避免或解决它?
- 模块依赖循环是指两个或多个模块相互依赖,形成一个闭环。这可能导致模块加载失败或行为异常。为了避免或解决模块依赖循环,可以重新组织代码结构,将相关的功能拆分到不同的模块中,并确保模块之间的依赖关系清晰且没有循环。
-
如何在 Node.js 中实现文件的压缩和解压缩?
- 可以使用第三方库(如
archiver、unzipper等)来实现文件的压缩和解压缩。这些库提供了简单易用的 API,可以方便地处理各种压缩格式(如 ZIP、TAR 等)。
- 可以使用第三方库(如
-
有哪些常用的 Node.js 测试框架? 如何编写测试用例?
- 常用的 Node.js 测试框架包括 Mocha、Jest、Jasmine 等。编写测试用例时,需要定义测试场景、输入数据和预期结果,并使用测试框架提供的断言函数来验证实际结果是否符合预期。
-
什么是 package-lock.json 文件? 它的作用是什么?
package-lock.json文件是一个由 npm 生成的锁定文件,它记录了项目依赖的具体版本和依赖树。它的作用是确保项目在不同环境中使用相同版本的依赖项,从而避免由于依赖项版本不一致而导致的问题。
-
如何在 Node.js 中使用 Websocket 实现实时通信?
- 可以使用
ws或socket.io等库来实现 Websocket 通信。这些库提供了简单易用的 API,可以方便地创建 Websocket 服务器和客户端,并实现实时通信功能。
- 可以使用
-
在 Node.js 中如何进行数据库操作,比如使用什么 DB 和 ORM?
- 在 Node.js 中,可以使用多种数据库和 ORM(对象关系映射)工具来进行数据库操作。常用的数据库包括 MySQL、PostgreSQL、MongoDB 等,而常用的 ORM 工具包括 Sequelize、TypeORM、Mongoose 等。这些工具提供了简单易用的 API,可以方便地执行数据库查询和更新操作。
-
ES6 模块和 CommonJs 模块在 Node.js 中有什么区别?
- ES6 模块和 CommonJs 模块是两种不同的模块系统。ES6 模块使用
import和export关键字来导入和导出模块成员,支持静态分析和更好的性能优化。而 CommonJs 模块使用require和module.exports来导入和导出模块成员,是 Node.js 早期使用的模块系统。在 Node.js 中,可以通过设置"type": "module"在package.json文件中来使用 ES6 模块系统。
- ES6 模块和 CommonJs 模块是两种不同的模块系统。ES6 模块使用
-
在 Node.js 中如何处理文件上传和下载?
- 可以使用第三方库(如
multer、axios等)来处理文件上传和下载。multer是一个用于处理multipart/form-data类型的文件上传的中间件,而axios则是一个用于发送 HTTP 请求的库,可以用于文件下载。
- 可以使用第三方库(如
-
在 Node.js 中如何实现定时任务? 有哪些方法?
- 在 Node.js 中,可以使用
setTimeout和setInterval函数来实现简单的定时任务。此外,还可以使用第三方库(如node-schedule、agenda等)来实现更复杂的定时任务调度功能。
- 在 Node.js 中,可以使用
如何在 Node.js 中实现断言?
在 Node.js 中,可以使用内置的 assert 模块来实现断言。assert 模块提供了一系列用于执行断言的函数,这些函数可以在测试代码中用来验证假设是否为真。如果假设不为真,这些函数会抛出一个错误。
以下是一些常用的 assert 函数及其用法示例:
-
assert(value, message): 测试
value是否为真(即不是false、0、""、null、undefined或NaN)。如果不为真,则抛出错误,并显示message。javascript复制代码const assert = require('assert');assert(true, 'This will not throw');assert(false, 'This will throw: got false'); // 抛出错误 -
assert.strictEqual(actual, expected, message): 测试
actual是否严格等于(使用===)expected。如果不相等,则抛出错误,并显示message。javascript复制代码assert.strictEqual(1, 1, '1 is strictly equal to 1');assert.strictEqual(1, '1', '1 is not strictly equal to "1"'); // 抛出错误 -
assert.deepStrictEqual(actual, expected, message): 测试
actual是否深度严格等于(递归比较)expected。如果不相等,则抛出错误,并显示message。javascript复制代码assert.deepStrictEqual({ a: 1 }, { a: 1 }, 'Objects are deeply equal');assert.deepStrictEqual({ a: 1 }, { a: '1' }, 'Objects are not deeply equal'); // 抛出错误 -
assert.throws(block, error, message): 测试
block是否抛出一个错误。如果block没有抛出错误或抛出的错误与error不匹配,则抛出错误,并显示message。javascript复制代码assert.throws(() => {throw new Error('Wrong value');},Error,'Thrown value should be an instance of Error'); -
assert.doesNotThrow(block, error, message): 测试
block是否不抛出一个错误。如果block抛出了错误,则抛出错误,并显示message。javascript复制代码assert.doesNotThrow(() => {console.log('This will not throw');},Error,'This will not throw an error');
如何在 Node.js 中实现纳秒级别的高精度计时?
Node.js 的标准库并没有直接提供纳秒级别的高精度计时功能,但可以使用 process.hrtime() 方法来获取高精度的时间。process.hrtime() 返回一个数组 [seconds, nanoseconds],表示从 Node.js 进程启动到现在所经过的时间。
虽然 process.hrtime() 返回的纳秒部分是一个整数,但由于其基于高精度时钟(通常是 CPU 周期计数器),因此具有纳秒级别的精度。
以下是一个使用 process.hrtime() 进行高精度计时的示例:
javascript复制代码
const start = process.hrtime(); | |
// 模拟一些耗时操作 | |
for (let i = 0; i < 1e9; i++) { | |
// 空循环,模拟耗时操作 | |
} | |
const [seconds, nanoseconds] = process.hrtime(start); | |
const totalNanoseconds = seconds * 1e9 + nanoseconds; | |
console.log(`Elapsed time: ${totalNanoseconds} nanoseconds`); |
在这个示例中,process.hrtime(start) 返回从开始时间到当前时间的差异,以秒和纳秒的形式表示。通过将这些值转换为总纳秒数,我们可以得到高精度的时间测量结果。
需要注意的是,虽然 process.hrtime() 提供了纳秒级别的精度,但由于系统调度和其他因素的影响,实际测量的时间可能会有所偏差。此外,process.hrtime() 返回的时间是基于 Node.js 进程启动时间的相对时间,而不是绝对时间。
如何在 Node.js 中实现数据的缓存,以提高性能?
在 Node.js 中,可以通过多种方式实现数据缓存,以提高性能。常用的方法包括:
- 内存缓存:
- 使用简单的 JavaScript 对象或 Map 存储数据。
- 使用第三方库如
node-cache。
- Redis:
- Redis 是一个高性能的键值存储系统,非常适合作为缓存层。
- 可以通过
redis客户端库与 Redis 进行交互。
- Memcached:
- Memcached 也是一个分布式内存对象缓存系统。
- 使用
memcached客户端库与 Memcached 进行交互。
什么是 Node.js 的中间件?有哪些常用的中间件?
中间件 是指请求和响应之间的处理函数,可以访问请求对象(req)、响应对象(res)以及应用程序的请求/响应周期中的下一个中间件函数。中间件的功能范围从执行代码、响应请求、结束请求-响应循环,到调用堆栈中的下一个中间件。
常用的中间件包括:
- Express 中间件:如
body-parser用于解析请求体,cookie-parser用于解析 cookie。 - Connect:一个轻量级的中间件框架,是 Express 的基础。
- Morgan:用于记录 HTTP 请求日志。
- Cors:用于处理跨域请求。
如何编写自定义的 Node.js 中间件?
在 Express 中,编写自定义中间件非常简单。中间件函数是一个接受三个参数的函数 (req, res, next)。你可以使用 next() 函数将控制权传递给下一个中间件。
javascript复制代码
const express = require('express'); | |
const app = express(); | |
// 自定义中间件 | |
app.use((req, res, next) => { | |
console.log('请求时间:', Date.now()); | |
next(); | |
}); | |
app.get('/', (req, res) => { | |
res.send('Hello World!'); | |
}); | |
app.listen(3000, () => { | |
console.log('服务器正在运行在 http://localhost:3000'); | |
}); |
有哪些常用的 Node.js 开发框架?分别有什么特点?
- Express:
- 轻量级、灵活的 Node.js Web 应用框架。
- 提供了一系列强大的特性来帮助你创建各种 Web 应用和 API。
- Koa:
- 新一代的 Node.js Web 框架,致力于成为更小、更富有表现力、更健壮的基础。
- 使用中间件来处理请求和响应。
- Hapi (hapi.js):
- 一个配置导向的框架,用于构建健壮、可扩展的 Node.js 应用程序。
- 非常适合构建大型 API 和复杂的 Web 服务。
- NestJS:
- 一个用于构建高效、可靠和可扩展的服务器端应用程序的框架。
- 使用 TypeScript(但也支持纯 JavaScript)和面向对象编程。
在 Node.js 中,如何处理静态文件的服务?
在 Express 中,可以使用 express.static 中间件来处理静态文件。
javascript复制代码
const express = require('express'); | |
const app = express(); | |
// 指定静态文件目录 | |
app.use(express.static('public')); | |
app.listen(3000, () => { | |
console.log('服务器正在运行在 http://localhost:3000'); | |
}); |
如何在 Node.js 中实现 OAuth 认证?
实现 OAuth 认证通常涉及以下步骤:
- 配置 OAuth 提供者(如 Google、GitHub 等)。
- 重定向用户到 OAuth 提供者的授权页面。
- 处理授权回调,获取访问令牌。
- 使用访问令牌访问受保护资源。
你可以使用第三方库如 passport 和 passport-oauth2 来简化这个过程。
Node.js 中的守护进程是如何实现的?
在 Node.js 中,守护进程(Daemon)通常是通过将进程分离到后台运行来实现的。你可以使用 child_process 模块来创建子进程,并将其设置为守护进程。
javascript复制代码
const { fork } = require('child_process'); | |
const child = fork('path/to/your/script.js', [], { | |
detached: true, | |
stdio: ['ignore', 'ignore', 'ignore', 'ipc'] | |
}); | |
child.unref(); |
如何在 Node.js 中处理文件系统的监控,例如检测文件的变化?
你可以使用 fs.watch 或 fs.watchFile 来监控文件和目录的变化。
javascript复制代码
const fs = require('fs'); | |
fs.watch('path/to/directory', (eventType, filename) => { | |
if (filename) { | |
console.log(`文件 ${filename} 被 ${eventType}`); | |
} else { | |
console.log(`目录被 ${eventType}`); | |
} | |
}); |
在 Node.js 中如何使用 worker threads 模块?
worker_threads 模块允许你在 Node.js 中使用多线程。你可以通过创建 Worker 实例来运行并行任务。
javascript复制代码
const { Worker, isMainThread, parentPort, workerData } = require('worker_threads'); | |
if (isMainThread) { | |
// 在主线程中 | |
const worker = new Worker(__filename, { | |
workerData: { someKey: 'someValue' } | |
}); | |
worker.on('message', (message) => { | |
console.log('主线程收到消息:', message); | |
}); | |
worker.on('error', (error) => { | |
console.error('工作线程出错:', error); | |
}); | |
worker.on('exit', (code) => { | |
if (code !== 0) | |
console.error(`工作线程停止,退出码 ${code}`); | |
}); | |
} else { | |
// 在工作线程中 | |
console.log('工作线程数据:', workerData); | |
// 发送消息给主线程 | |
parentPort.postMessage('工作线程完成'); | |
} |
在 Node.js 中,如何实现应用程序的国际化(i18n)?
可以使用第三方库如 i18next 来实现国际化。
javascript复制代码
const i18n = require('i18next'); | |
const backend = require('i18next-fs-backend'); | |
i18n | |
.use(backend) | |
.init({ | |
lng: 'en', // 语言 | |
fallbackLng: 'en', // 回退语言 | |
backend: { | |
// 配置文件系统后端 | |
loadPath: './locales/{{lng}}/{{ns}}.json' | |
} | |
}); | |
i18n.t('welcome'); // 获取翻译后的文本 |
如何在 Node.js 中处理和解析二进制数据?
可以使用 Buffer 类来处理二进制数据。
javascript复制代码
const buf = Buffer.from('Hello, world!', 'utf8'); | |
console.log(buf.toString('hex')); // 打印十六进制表示 | |
console.log(buf.toString('base64')); // 打印 Base64 表示 |
什么是模板引擎?如何在 Node.js 中使用模板引擎?
模板引擎 是一种允许你生成动态内容的工具,通常用于生成 HTML。在 Node.js 中,常用的模板引擎包括 Pug(之前叫 Jade)、EJS、Handlebars 等。
使用 Pug 示例:
javascript复制代码
const express = require('express'); | |
const app = express(); | |
const pug = require('pug'); | |
app.set('view engine', 'pug'); | |
app.get('/', (req, res) => { | |
res.render('index', { title: 'My Page', message: 'Hello, world!' }); | |
}); | |
app.listen(3000, () => { | |
console.log('服务器正在运行在 http://localhost:3000'); | |
}); |
如何在 Node.js 中使用 Redis 实现数据缓存?
你可以使用 redis 客户端库与 Redis 进行交互。
javascript复制代码
const redis = require('redis'); | |
const client = redis.createClient(); | |
client.on('error', (err) => { | |
console.error('Redis 客户端错误:', err); | |
}); | |
client.set('key', 'value', redis.print); | |
client.get('key', (err, reply) => { | |
console.log('Redis 回复:', reply); // 输出 'value' | |
client.quit(); | |
}); |
在 Node.js 中,如何使用 JWT 进行用户认证?
可以使用 jsonwebtoken 库来生成和验证 JWT。
javascript复制代码
const jwt = require('jsonwebtoken'); | |
// 生成令牌 | |
const token = jwt.sign({ user: 'user123' }, 'your-secret-key', { expiresIn: '1h' }); | |
console.log('生成的令牌:', token); | |
// 验证令牌 | |
jwt.verify(token, 'your-secret-key', (err, decoded) => { | |
if (err) { | |
return console.error('令牌验证失败:', err.message); | |
} |
相关文章:
[前端]NodeJS常见面试题目
什么是非阻塞 I/O? Node.js 如何实现非阻塞 I/O? 非阻塞 I/O 是一种编程模式,它允许 I/O 操作(如读取文件、网络请求等)在执行时不阻塞程序的其余部分。换句话说,当一个 I/O 操作发起后,程序可以立即继续执行其他任…...
【实测可用】Sublime Text4 4180 windows 已测可用
------------------测试时间2024年11月7日------------------- 打开浏览器进入网站: 点击进入修改网站打开sublime text4安装目录选择文件sublime_text.exe搜索80 79 05 00 0f 94 c2更改为c6 41 05 01 b2 00 90(第一个匹配到的)保存文件命名为sublime_text.exe并…...
JAVA日期加减运算 JsonObject 转换对象List
1.用java.util.Calender来实现 Calendar calendarCalendar.getInstance(); calendar.setTime(new Date());System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//今天的日期calendar.set(Calendar.DAY_OF_MONTH,calendar.get(Calendar.DAY_OF_MONTH)1);//让日期加1 Sy…...
在 PostgreSQL 中,重建索引可以通过 `REINDEX` 命令来完成
在 PostgreSQL 中,重建索引 在 PostgreSQL 中,重建索引可以通过 REINDEX 命令来完成。 重建索引的主要目的是提高查询性能,尤其是在数据频繁更新的情况下。以下是重建索引的基本语法和示例: 基本语法 REINDEX INDEX index_name…...
SQL相关常见的面试题
SQL(Structured Query Language)是数据库管理中不可或缺的一部分,因此在技术面试中经常会被问到与 SQL 相关的问题。以下是一些常见的 SQL 面试题及其答案。 基础概念 什么是 SQL? SQL 是一种用于管理和处理关系型数据库的标准语…...
Vue数据响应式原理
前言 Vue是一个结构的框架,也就是 数据层、视图层、数据-视图层;响应式的原理就是实现当数据更新时,视图层也要相应的更新 响应式实现 基于发布订阅模式和数据劫持实现 1.发布订阅模式:vue使用发布订阅模式来实现数据变动的通知和更新 2…...
Electron + Vue3 开发桌面应用+附源码
什么是 Electron? Electron 是一个使用 JavaScript、HTML 和 CSS 构建跨平台桌面应用程序的框架。它由 GitHub 开发并维护,允许开发者使用现代 Web 技术创建原生应用程序。Electron 结合了 Chromium 渲染引擎和 Node.js 运行时环境,使得开发…...
Webserver(5.2)网页服务器框架
目录 网页服务器服务器编程基本框架两种高效的事件处理模式reactor模式proactor模式同步IO模拟Proactor模式 网页服务器 接收、存储,处理来自客户端的HTTP请求,并对其请求做出HTTP响应。 Web服务器底层是基于tcp协议的,因为要保证数据安全。…...
股指期货交易中,如何应对震荡行情?
在股指期货交易中,趋势和震荡是市场波动的两种基本形态。然而,对于许多交易者来说,如何在趋势交易中有效应对震荡行情,却是一个令人头疼的问题。本文将结合相关链接内容,为您详细解读期货交易中如何应对震荡行情。 一…...
理想汽车Android面试题及参考答案
请解释一下 Android 中的 Handler 是如何工作的 在 Android 中,Handler 主要用于在不同线程之间进行通信,特别是在主线程(UI 线程)和工作线程之间。 Handler 是基于消息队列(MessageQueue)和 Looper 来工作…...
【数据集】【YOLO】【目标检测】口罩佩戴识别数据集 1971 张,YOLO佩戴口罩检测算法实战训练教程!
数据集介绍 【数据集】口罩佩戴检测数据集 1971 张,目标检测,包含YOLO/VOC格式标注。 数据集中包含1种分类:{0: face_mask},佩戴口罩。 数据集来自国内外图片网站和视频截图。 检测场景为城市街道、医院、商场、机场、车站、办…...
前端将后端返回的文件下载到本地
vue 将后端返回的文件地址下载到本地 在 template 拿到后端返回的文件路径 <el-button link type"success" icon"Download" click"handleDownload(file)"> 附件下载 </el-button>在 script 里面写方法 function handleDownload(v…...
GISBox VS ArcGIS:分别适用于大型和小型项目的两款GIS软件
在现代地理信息系统(GIS)领域,有许多大家耳熟能详的GIS软件。它们各自具有独特的优势,适用于不同的行业需求和使用场景。在众多企业和开发者面前,如何选择合适的 GIS 软件成为了一个值得深入思考的问题。今天ÿ…...
掌握分布式系统的38个核心概念
天天说分布式分布式,那么我们是否知道什么是分布式,分布式会遇到什么问题,有哪些理论支撑,有哪些经典的应对方案,业界是如何设计并保证分布式系统的高可用呢? 1. 架构设计 这一节将从一些经典的开源系统架…...
如何使用 VNC 服务器连接桌面
如何使用VNC软件去连接远程桌面系统呢? 一、什么是VNC? VNC(Virtual Network Computing,虚拟网络计算)是一种远程桌面共享协议,允许用户通过网络访问和控制远程计算机的桌面界面。VNC 使用的是一种基于图像的方式,将远程计算机的桌面环境发送到客户端的显示设备上,同时…...
算法每日练 -- 双指针篇(持续更新中)
介绍: 常见的双指针有两种形式,一种是对撞指针(左右指针),一种是快慢指针(前后指针)。需要注意这里的双指针不是 int* 之类的类型指针,而是使用数组下标模拟地址来进行遍历的方式。 …...
读取excel并且显示进度条
读取excel并且显示进度条 通过C#实现DataGridView加载EXCEL文件,但加载时不能阻塞UI刷新线程,且向UI显示加载进度条。 #region 左上角导入 private async void ToolStripMenuItem_ClickAsync(object sender, EventArgs e) { …...
MySQL多表查询习题
数据内容介绍 数据库中有两个表 内容如下: 习题 列出所有员工的姓名及其直接上级的姓名。列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。列出在财务部工作的员…...
HTML静态网页成品作业(HTML+CSS)——阜阳剪纸介绍设计制作(1个页面)
🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有1个页面。 二、作品演示 三、代…...
创新引领,模块化微电网重塑能源格局
根据QYResearch调研团队最新发布的《全球模块化微电网市场报告2023-2029》显示,预计到2029年,全球模块化微电网市场的规模将扩大至33.1亿美元,且在未来几年内,其年复合增长率(CAGR)将达到8.8%。 如下图所示…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...
Tauri2学习笔记
教程地址:https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引:https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多,我按照Tauri1的教程来学习&…...
【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...
二维数组 行列混淆区分 js
二维数组定义 行 row:是“横着的一整行” 列 column:是“竖着的一整列” 在 JavaScript 里访问二维数组 grid[i][j] 表示 第i行第j列的元素 let grid [[1, 2, 3], // 第0行[4, 5, 6], // 第1行[7, 8, 9] // 第2行 ];// grid[i][j] 表示 第i行第j列的…...
