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

[前端]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 事件,我们在事件处理函数中打印一条消息表示文件读取和写入完成。

其他问题简要回答

  1. 什么是集群? 如何在 Node.js 中实现集群和负载均衡?

    • 集群是指将多个服务器组合起来,共同处理客户端的请求。在 Node.js 中,可以使用 cluster 模块来实现集群和负载均衡。通过创建多个工作进程来分担负载,从而提高应用程序的吞吐量和响应速度。
  2. 如何调试 Node.js 程序? 有哪些方法?

    • 调试 Node.js 程序可以使用多种方法,包括使用 Node.js 内置的调试器、第三方调试工具(如 Visual Studio Code 的调试功能)、在代码中添加 console.log 语句进行日志输出等。
  3. 在 Node.js 中,如何避免回调地狱?

    • 可以使用 Promise 和 async/await 来避免回调地狱。Promise 提供了链式调用的方式,而 async/await 则使得异步代码看起来更像是同步代码,从而避免了回调地狱的问题。
  4. 如何在 Node.js 中处理多线程或多进程操作?

    • Node.js 是单线程的,但它支持多进程操作。可以使用 child_process 模块来创建子进程,或者使用 cluster 模块来创建多个工作进程来处理并发请求。对于多线程操作,可以使用 Node.js 的 worker_threads 模块来实现。
  5. 什么是模块依赖循环? 如何在 Node.js 中避免或解决它?

    • 模块依赖循环是指两个或多个模块相互依赖,形成一个闭环。这可能导致模块加载失败或行为异常。为了避免或解决模块依赖循环,可以重新组织代码结构,将相关的功能拆分到不同的模块中,并确保模块之间的依赖关系清晰且没有循环。
  6. 如何在 Node.js 中实现文件的压缩和解压缩?

    • 可以使用第三方库(如 archiverunzipper 等)来实现文件的压缩和解压缩。这些库提供了简单易用的 API,可以方便地处理各种压缩格式(如 ZIP、TAR 等)。
  7. 有哪些常用的 Node.js 测试框架? 如何编写测试用例?

    • 常用的 Node.js 测试框架包括 Mocha、Jest、Jasmine 等。编写测试用例时,需要定义测试场景、输入数据和预期结果,并使用测试框架提供的断言函数来验证实际结果是否符合预期。
  8. 什么是 package-lock.json 文件? 它的作用是什么?

    • package-lock.json 文件是一个由 npm 生成的锁定文件,它记录了项目依赖的具体版本和依赖树。它的作用是确保项目在不同环境中使用相同版本的依赖项,从而避免由于依赖项版本不一致而导致的问题。
  9. 如何在 Node.js 中使用 Websocket 实现实时通信?

    • 可以使用 ws 或 socket.io 等库来实现 Websocket 通信。这些库提供了简单易用的 API,可以方便地创建 Websocket 服务器和客户端,并实现实时通信功能。
  10. 在 Node.js 中如何进行数据库操作,比如使用什么 DB 和 ORM?

    • 在 Node.js 中,可以使用多种数据库和 ORM(对象关系映射)工具来进行数据库操作。常用的数据库包括 MySQL、PostgreSQL、MongoDB 等,而常用的 ORM 工具包括 Sequelize、TypeORM、Mongoose 等。这些工具提供了简单易用的 API,可以方便地执行数据库查询和更新操作。
  11. ES6 模块和 CommonJs 模块在 Node.js 中有什么区别?

    • ES6 模块和 CommonJs 模块是两种不同的模块系统。ES6 模块使用 import 和 export 关键字来导入和导出模块成员,支持静态分析和更好的性能优化。而 CommonJs 模块使用 require 和 module.exports 来导入和导出模块成员,是 Node.js 早期使用的模块系统。在 Node.js 中,可以通过设置 "type": "module" 在 package.json 文件中来使用 ES6 模块系统。
  12. 在 Node.js 中如何处理文件上传和下载?

    • 可以使用第三方库(如 multeraxios 等)来处理文件上传和下载。multer 是一个用于处理 multipart/form-data 类型的文件上传的中间件,而 axios 则是一个用于发送 HTTP 请求的库,可以用于文件下载。
  13. 在 Node.js 中如何实现定时任务? 有哪些方法?

    • 在 Node.js 中,可以使用 setTimeout 和 setInterval 函数来实现简单的定时任务。此外,还可以使用第三方库(如 node-scheduleagenda 等)来实现更复杂的定时任务调度功能。

如何在 Node.js 中实现断言?

在 Node.js 中,可以使用内置的 assert 模块来实现断言。assert 模块提供了一系列用于执行断言的函数,这些函数可以在测试代码中用来验证假设是否为真。如果假设不为真,这些函数会抛出一个错误。

以下是一些常用的 assert 函数及其用法示例:

  1. assert(value, message): 测试 value 是否为真(即不是 false0""nullundefined 或 NaN)。如果不为真,则抛出错误,并显示 message

    javascript复制代码

    const assert = require('assert');
    assert(true, 'This will not throw');
    assert(false, 'This will throw: got false'); // 抛出错误
  2. 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"'); // 抛出错误
  3. 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'); // 抛出错误
  4. 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'
    );
  5. 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 中,可以通过多种方式实现数据缓存,以提高性能。常用的方法包括:

  1. 内存缓存
    • 使用简单的 JavaScript 对象或 Map 存储数据。
    • 使用第三方库如 node-cache
  2. Redis
    • Redis 是一个高性能的键值存储系统,非常适合作为缓存层。
    • 可以通过 redis 客户端库与 Redis 进行交互。
  3. 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 开发框架?分别有什么特点?

  1. Express
    • 轻量级、灵活的 Node.js Web 应用框架。
    • 提供了一系列强大的特性来帮助你创建各种 Web 应用和 API。
  2. Koa
    • 新一代的 Node.js Web 框架,致力于成为更小、更富有表现力、更健壮的基础。
    • 使用中间件来处理请求和响应。
  3. Hapi (hapi.js)
    • 一个配置导向的框架,用于构建健壮、可扩展的 Node.js 应用程序。
    • 非常适合构建大型 API 和复杂的 Web 服务。
  4. 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 认证通常涉及以下步骤:

  1. 配置 OAuth 提供者(如 Google、GitHub 等)。
  2. 重定向用户到 OAuth 提供者的授权页面。
  3. 处理授权回调,获取访问令牌。
  4. 使用访问令牌访问受保护资源。

你可以使用第三方库如 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 是一种编程模式&#xff0c;它允许 I/O 操作&#xff08;如读取文件、网络请求等&#xff09;在执行时不阻塞程序的其余部分。换句话说&#xff0c;当一个 I/O 操作发起后&#xff0c;程序可以立即继续执行其他任…...

【实测可用】Sublime Text4 4180 windows 已测可用

------------------测试时间2024年11月7日------------------- 打开浏览器进入网站&#xff1a; 点击进入修改网站打开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 中&#xff0c;重建索引 在 PostgreSQL 中&#xff0c;重建索引可以通过 REINDEX 命令来完成。 重建索引的主要目的是提高查询性能&#xff0c;尤其是在数据频繁更新的情况下。以下是重建索引的基本语法和示例&#xff1a; 基本语法 REINDEX INDEX index_name…...

SQL相关常见的面试题

SQL&#xff08;Structured Query Language&#xff09;是数据库管理中不可或缺的一部分&#xff0c;因此在技术面试中经常会被问到与 SQL 相关的问题。以下是一些常见的 SQL 面试题及其答案。 基础概念 什么是 SQL&#xff1f; SQL 是一种用于管理和处理关系型数据库的标准语…...

Vue数据响应式原理

前言 Vue是一个结构的框架,也就是 数据层、视图层、数据-视图层&#xff1b;响应式的原理就是实现当数据更新时&#xff0c;视图层也要相应的更新 响应式实现 基于发布订阅模式和数据劫持实现 1.发布订阅模式&#xff1a;vue使用发布订阅模式来实现数据变动的通知和更新 2…...

Electron + Vue3 开发桌面应用+附源码

什么是 Electron&#xff1f; Electron 是一个使用 JavaScript、HTML 和 CSS 构建跨平台桌面应用程序的框架。它由 GitHub 开发并维护&#xff0c;允许开发者使用现代 Web 技术创建原生应用程序。Electron 结合了 Chromium 渲染引擎和 Node.js 运行时环境&#xff0c;使得开发…...

Webserver(5.2)网页服务器框架

目录 网页服务器服务器编程基本框架两种高效的事件处理模式reactor模式proactor模式同步IO模拟Proactor模式 网页服务器 接收、存储&#xff0c;处理来自客户端的HTTP请求&#xff0c;并对其请求做出HTTP响应。 Web服务器底层是基于tcp协议的&#xff0c;因为要保证数据安全。…...

股指期货交易中,如何应对震荡行情?

在股指期货交易中&#xff0c;趋势和震荡是市场波动的两种基本形态。然而&#xff0c;对于许多交易者来说&#xff0c;如何在趋势交易中有效应对震荡行情&#xff0c;却是一个令人头疼的问题。本文将结合相关链接内容&#xff0c;为您详细解读期货交易中如何应对震荡行情。 一…...

理想汽车Android面试题及参考答案

请解释一下 Android 中的 Handler 是如何工作的 在 Android 中&#xff0c;Handler 主要用于在不同线程之间进行通信&#xff0c;特别是在主线程&#xff08;UI 线程&#xff09;和工作线程之间。 Handler 是基于消息队列&#xff08;MessageQueue&#xff09;和 Looper 来工作…...

【数据集】【YOLO】【目标检测】口罩佩戴识别数据集 1971 张,YOLO佩戴口罩检测算法实战训练教程!

数据集介绍 【数据集】口罩佩戴检测数据集 1971 张&#xff0c;目标检测&#xff0c;包含YOLO/VOC格式标注。 数据集中包含1种分类&#xff1a;{0: face_mask}&#xff0c;佩戴口罩。 数据集来自国内外图片网站和视频截图。 检测场景为城市街道、医院、商场、机场、车站、办…...

前端将后端返回的文件下载到本地

vue 将后端返回的文件地址下载到本地 在 template 拿到后端返回的文件路径 <el-button link type"success" icon"Download" click"handleDownload(file)"> 附件下载 </el-button>在 script 里面写方法 function handleDownload(v…...

GISBox VS ArcGIS:分别适用于大型和小型项目的两款GIS软件

在现代地理信息系统&#xff08;GIS&#xff09;领域&#xff0c;有许多大家耳熟能详的GIS软件。它们各自具有独特的优势&#xff0c;适用于不同的行业需求和使用场景。在众多企业和开发者面前&#xff0c;如何选择合适的 GIS 软件成为了一个值得深入思考的问题。今天&#xff…...

掌握分布式系统的38个核心概念

天天说分布式分布式&#xff0c;那么我们是否知道什么是分布式&#xff0c;分布式会遇到什么问题&#xff0c;有哪些理论支撑&#xff0c;有哪些经典的应对方案&#xff0c;业界是如何设计并保证分布式系统的高可用呢&#xff1f; 1. 架构设计 这一节将从一些经典的开源系统架…...

如何使用 VNC 服务器连接桌面

如何使用VNC软件去连接远程桌面系统呢? 一、什么是VNC? VNC(Virtual Network Computing,虚拟网络计算)是一种远程桌面共享协议,允许用户通过网络访问和控制远程计算机的桌面界面。VNC 使用的是一种基于图像的方式,将远程计算机的桌面环境发送到客户端的显示设备上,同时…...

算法每日练 -- 双指针篇(持续更新中)

介绍&#xff1a; 常见的双指针有两种形式&#xff0c;一种是对撞指针&#xff08;左右指针&#xff09;&#xff0c;一种是快慢指针&#xff08;前后指针&#xff09;。需要注意这里的双指针不是 int* 之类的类型指针&#xff0c;而是使用数组下标模拟地址来进行遍历的方式。 …...

读取excel并且显示进度条

读取excel并且显示进度条 通过C#实现DataGridView加载EXCEL文件&#xff0c;但加载时不能阻塞UI刷新线程&#xff0c;且向UI显示加载进度条。 #region 左上角导入 private async void ToolStripMenuItem_ClickAsync(object sender, EventArgs e) { …...

MySQL多表查询习题

数据内容介绍 数据库中有两个表 ​​​​ 内容如下&#xff1a; 习题 列出所有员工的姓名及其直接上级的姓名。列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。列出部门名称和这些部门的员工信息&#xff0c;同时列出那些没有员工的部门。列出在财务部工作的员…...

HTML静态网页成品作业(HTML+CSS)——阜阳剪纸介绍设计制作(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…...

创新引领,模块化微电网重塑能源格局

根据QYResearch调研团队最新发布的《全球模块化微电网市场报告2023-2029》显示&#xff0c;预计到2029年&#xff0c;全球模块化微电网市场的规模将扩大至33.1亿美元&#xff0c;且在未来几年内&#xff0c;其年复合增长率&#xff08;CAGR&#xff09;将达到8.8%。 如下图所示…...

LeetCode34:在排序数组中查找元素第一个和最后一个位置

原题地址&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须…...

汽车广告常见特效处理有哪些?

​汽车广告作为展示汽车性能和外观的重要媒介&#xff0c;常常需要借助特效来增强视觉效果&#xff0c;吸引观众的注意力。以下是一篇关于汽车广告中常见特效处理的文章。 在竞争激烈的汽车市场中&#xff0c;广告不仅是推广产品的工具&#xff0c;更是艺术和科技的结合。特效技…...

Unexpected response code: 400解决

原因&#xff1a;Nginx配置错误&#xff0c;业务服务提供了 websocket 服务&#xff0c;基于 websocket 来实现报表数据的推送&#xff0c;客户在浏览器上查看报表&#xff0c;经过 http 代理将请求传递给后端服务。 解决方案 Nginx中增加websocket配置 location ~/websocket…...

世优科技携手人民中科打造AI数字人智能体助力智慧校园

近日&#xff0c;世优科技与人民中科携手&#xff0c;为中国劳动关系学院开发了一款AI数字人助手&#xff0c;不仅在校园内部承担日常问询、交互工作&#xff0c;还在学校的展厅中担任讲解员的角色&#xff0c;为师生们提供生动详尽的导览服务。 中国劳动关系学院作为中华全国总…...

Mac intel 安装IDEA激活时遇到问题 jetbrains.vmoptions.plist: Permission denied

激活时执行脚本&#xff0c; permission denied ➜ scripts ./install.sh ./install.sh: line 31: /Users/dry/Library/LaunchAgents/jetbrains.vmoptions.plist: Permission deniedjetbrains.vmoptions.plist 这个文件没权限&#xff0c;打开看了一下 install.sh 这…...

区块链应用第1讲:基于区块链的智慧货运平台

基于区块链的智慧货运平台 网络货运平台已经比较成熟&#xff0c;提供了给货源方提供找司机的交易匹配方案&#xff1b;其中包含这几个角色&#xff1a;货主、承运人(司机、车队长)、监管机构、平台。司机要想接单&#xff0c;依赖于多个中心化的第三方平台&#xff0c;且三方平…...

量化交易系统开发-实时行情自动化交易-风险控制

19年创业做过一年的量化交易但没有成功&#xff0c;作为交易系统的开发人员积累了一些经验&#xff0c;最近想重新研究交易系统&#xff0c;一边整理一边写出来一些思考供大家参考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下来继续说说风险控制模块&#xff0…...

深入探索 Seaborn:高级绘图的艺术与实践

引言 在数据科学领域&#xff0c;数据可视化是至关重要的一步。它不仅能够帮助我们更好地理解数据&#xff0c;还能有效地传达信息&#xff0c;支持决策过程。Seaborn 是一个基于 Matplotlib 的高级 Python 数据可视化库&#xff0c;它提供了许多高级绘图功能&#xff0c;使得…...

《现代工业经济和信息化》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答&#xff1a; 问&#xff1a;《现代工业经济和信息化》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《现代工业经济和信息化》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;山西省工业和…...

【TS】九天学会TS语法——2.TypeScript基本类型及变量声明

今天学习的内容是TypeScript 基本类型&#xff0c;包括 number, string, boolean, any, void 等&#xff0c;以及变量声明的方式和区别。 基本类型介绍变量声明&#xff08;var, let, const&#xff09;类型注解 开始学习 目录 引言 一、基本类型介绍 二、变量声明 1.概念解析 …...