【面试题】Node.JS篇
1. 什么是Node.js?它的主要特点是什么?适用于哪些场景?
Node.js 是一个基于Chrome V8引擎的JavaScript运行时环境,它允许JavaScript代码在服务器端运行。Node.js的主要特点是事件驱动、非阻塞I/O模型,这使得它非常适合处理高并发请求和实时应用。它适用于构建快速、可扩展的网络应用,如API服务器、实时聊天应用、单页应用(SPA)的后端服务等。
2. 如何在Node.js中创建一个简单的HTTP服务器?
在Node.js中,你可以使用内置的http
模块来创建一个简单的HTTP服务器。以下是一个基本的示例:
const http = require('http'); const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World\n');
}); server.listen(3000, '127.0.0.1', () => { console.log('Server running at http://127.0.0.1:3000/');
});
3. 在Node.js中,如何导入和导出模块?
在Node.js中,你可以使用require
函数来导入模块,使用module.exports
或exports
对象来导出模块。例如:
// 导入模块
const fs = require('fs'); // 导出模块
module.exports = { myFunction: function() { console.log('Hello from myFunction!'); }
}; // 或者使用exports对象
exports.anotherFunction = function() { console.log('Hello from anotherFunction!');
};
4. Node.js中,同步和异步代码有什么区别?
同步代码会阻塞代码的执行,直到操作完成。而异步代码不会阻塞代码的执行,它会在操作完成后通过回调函数、Promise或async/await来处理结果。这使得异步代码更适合处理I/O密集型任务,如文件读写、网络请求等。
5. 什么是npm?如何使用它来管理项目的依赖?
npm(Node Package Manager)是Node.js的包管理器,它允许你安装、发布和管理Node.js包。你可以使用npm install
命令来安装依赖,使用npm init
命令来创建package.json
文件,以及使用npm list
命令来查看项目依赖。
6. Node.js中的回调函数是什么?请举例说明
回调函数是一个函数,它作为参数传递给另一个函数,并在某个操作完成后被调用。例如:
function fetchData(callback) { // 模拟异步操作,如网络请求 setTimeout(() => { callback('Data fetched!'); }, 1000);
} fetchData((data) => { console.log(data); // 输出: Data fetched!
});
7. 如何使用Node.js读取和写入文件?
你可以使用Node.js的fs
模块来读取和写入文件。以下是一个读取文件的示例:
const fs = require('fs'); fs.readFile('example.txt', 'utf8', (err, data) => { if (err) { console.error(err); return; } console.log(data);
});
写入文件的示例:
const fs = require('fs'); const content = 'Hello, World!'; fs.writeFile('example.txt', content, (err) => { if (err) { console.error(err); return; } console.log('File written successfully!');
});
8. 什么是package.json文件?它的作用是什么?
package.json
文件是一个JSON格式的文件,它包含了Node.js项目的元数据,如项目名称、版本、依赖、脚本等。你可以使用npm init
命令来创建这个文件。它的作用是让npm和其他开发者了解你的项目信息,以及安装和管理项目依赖。
9. 如何在Node.js中捕获和处理异常?
在Node.js中,你可以使用try...catch
语句来捕获和处理同步代码中的异常。对于异步代码,你可以通过回调函数、Promise的.catch()
方法或async/await的try...catch
语句来处理异常。例如:
try { // 可能会抛出异常的代码
} catch (err) { console.error('Error caught:', err);
}
10. 什么是Node.js全局对象?有哪些全局对象?
Node.js全局对象是在全局作用域中可用的对象。它们包括global
、__filename
、__dirname
、process
、Buffer
等。
11. 什么是Node.js全局变量?有哪些全局变量?
Node.js全局变量是定义在全局作用域中的变量。然而,在Node.js中,通常不推荐使用全局变量,因为它们可能会导致代码难以维护和理解。如果你确实需要使用全局变量,可以通过global
对象来访问它们。但是,请注意,直接使用global
对象可能会导致全局命名空间污染。
12. Node.js中的Buffer对象是什么?它有什么作用?
Buffer
对象是Node.js中用于处理二进制数据的类。它允许你创建、读取、写入和操作二进制数据。Buffer
对象在处理文件、网络请求和流等场景中非常有用。
13. 如何在Node.js中解析JSON数据?
你可以使用JSON.parse()
方法来解析JSON数据。例如:
const jsonString = '{"name": "John", "age": 30}';
const jsonObject = JSON.parse(jsonString); console.log(jsonObject.name); // 输出: John
14. 什么是Node.js中的模块加载机制?
Node.js使用CommonJS模块规范来加载和执行模块。当你使用require
函数导入一个模块时,Node.js会查找该模块的路径,然后执行该模块的代码,并将其导出对象返回给require
函数的调用者。如果模块已经被加载过,Node.js会直接从缓存中返回该模块,以避免重复加载。
15. Node.js中的process对象是什么?它有哪些常用属性?
process
对象是Node.js中的一个全局对象,它提供了有关当前Node.js进程的信息和控制当前进程的方法。它的常用属性包括pid
(进程ID)、version
(Node.js版本)、platform
(操作系统平台)、argv
(命令行参数数组)等。
16. 什么是Node.js中的REPL?
REPL(Read-Eval-Print Loop)是Node.js中的一个交互式编程环境,它允许你输入JavaScript代码并立即查看其执行结果。你可以使用node
命令来启动REPL环境。
17. 什么是子进程?如何在Node.js中创建子进程?
子进程是操作系统中由另一个进程(父进程)创建的进程。在Node.js中,你可以使用child_process
模块来创建子进程。这个模块提供了spawn
、exec
、execFile
和fork
等方法来创建子进程。
18. 如何使用Node.js发送HTTP请求?比如GET和POST请求?
你可以使用Node.js的http
或https
模块来发送HTTP请求。但是,更常见的是使用第三方库,如axios
或node-fetch
,因为它们提供了更简洁和易于使用的API。以下是一个使用axios
发送GET和POST请求的示例:
const axios = require('axios'); // 发送GET请求
axios.get('https://api.example.com/data') .then(response => { console.log(response.data); }) .catch(error => { console.error('Error fetching data:', error); }); // 发送POST请求
axios.post('https://api.example.com/data', { key1: 'value1', key2: 'value2'
}) .then(response => { console.log('Data posted successfully:', response.data); }) .catch(error => { console.error('Error posting data:', error); });
19. 在Node.js中,如何获取命令行参数?
你可以通过process.argv
数组来获取命令行参数。process.argv
包含了命令行输入的参数数组,其中process.argv[0]
是node的路径,process.argv[1]
是执行的js文件的路径,其余的元素是传递给脚本的命令行参数。
21. 什么是 Node.js 中的 global
对象?它包含哪些常用属性?
global
对象在 Node.js 中是全局作用域的一个对象,它类似于浏览器中的 window
对象。它包含了一些全局可访问的变量和函数。
常用属性包括:
global.console
: 引用全局的console
对象。global.process
: 引用全局的process
对象,提供有关当前 Node.js 进程的信息和控制。global.__filename
: 当前执行脚本的文件名。global.__dirname
: 当前执行脚本所在的目录。
22. Node.js 中的 require
和 import
有什么区别?
require
是 CommonJS 模块规范的一部分,是 Node.js 中用于导入模块的函数。它返回模块导出的对象。import
是 ES6 模块规范的一部分,用于导入模块,可以使用静态导入或动态导入(import()
)。它支持具名导入和默认导入。
23. Node.js 中 require
方法是同步还是异步操作?为什么?
require
方法是同步操作。在 Node.js 中,模块加载是在代码执行前完成的,因此 require
会在整个文件执行之前解析和加载依赖的模块。这样做是为了简化代码执行路径,避免回调地狱等问题。
24. 什么是 CommonJS 模块规范?Node.js 如何实现它?
CommonJS 是一个用于 JavaScript 模块的规范,它定义了一套用于服务器端 JavaScript 环境的模块、包、二进制、和其他系统的标准。Node.js 通过实现 require
函数和 module.exports
对象来实现 CommonJS 模块规范。每个文件都被视为一个模块,可以导出对象、函数等,并可以通过 require
导入其他模块。
25. 如何在 Node.js 中发送电子邮件?
可以使用 nodemailer
库来发送电子邮件。首先,需要安装 nodemailer
:
npm install nodemailer
然后,可以使用以下代码发送电子邮件:
const nodemailer = require('nodemailer'); let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'your-email@gmail.com',
pass: 'your-password'
}
}); let mailOptions = {
from: 'your-email@gmail.com',
to: 'recipient-email@example.com',
subject: 'Hello ✔',
text: 'Hello world?',
html: '<b>Hello world?</b>'
}; transporter.sendMail(mailOptions, function(error, info){
if (error) {
return console.log(error);
}
console.log('Message sent: %s', info.messageId);
});
26. Node.js 的 process.nextTick()
有什么作用?
process.nextTick()
方法用于将回调函数添加到“next tick queue”中。一旦当前执行栈清空,Node.js 就会执行队列中的所有回调。它通常用于在当前操作完成后,但在 I/O 事件(如计时器或文件操作)之前执行代码。
27. Node.js 中的 util
模块提供了哪些常用功能?
util
模块提供了许多实用功能,如:
util.format()
: 格式化字符串。util.inherits()
: 继承父类,实现类间继承。util.promisify()
: 将基于回调的 API 转换为返回 Promise 的版本。util.inspect()
: 将对象转换为字符串表示,用于调试。
28. 如何在 Node.js 中创建 TCP 服务器?
可以使用 net
模块来创建 TCP 服务器:
const net = require('net'); const server = net.createServer((socket) => {
socket.on('data', (data) => {
console.log('Received: ' + data);
socket.write('Hello from server\r\n');
socket.end();
}); socket.on('end', () => {
console.log('Client disconnected');
});
}); server.listen(8080, '127.0.0.1', () => {
console.log('Server listening on 127.0.0.1:8080');
});
29. 在 Node.js 中,如何检查一个路径是文件还是目录?
可以使用 fs
模块中的 fs.stat
或 fs.statSync
方法来检查路径是文件还是目录:
const fs = require('fs'); fs.stat('path/to/file_or_directory', (err, stats) => {
if (err) {
return console.error(err);
}
if (stats.isFile()) {
console.log('It is a file.');
} else if (stats.isDirectory()) {
console.log('It is a directory.');
}
});
10. 什么是 Node.js 中的标准输入、输出和错误流?如何使用它们?
Node.js 中的标准输入、输出和错误流分别是 process.stdin
、process.stdout
和 process.stderr
。
process.stdin
: 标准输入流,用于从用户或文件读取数据。process.stdout
: 标准输出流,用于向控制台输出数据。process.stderr
: 标准错误流,用于向控制台输出错误信息。
例如,读取标准输入并输出到标准输出:
process.stdin.resume();
process.stdin.setEncoding('utf8'); process.stdin.on('data', (chunk) => {
process.stdout.write(`Data received: ${chunk}`);
});
11. 如何在 Node.js 中创建和解析 URL?
可以使用 url
模块来创建和解析 URL:
const url = require('url'); // 创建 URL 对象 const myUrl = new URL('https://example.com:8080/pathname/?search=test#hash'); console.log(myUrl.protocol); // 'https:' console.log(myUrl.hostname); // 'example.com' console.log(myUrl.port); // '8080' console.log(myUrl.pathname); // '/pathname/' console.log(myUrl.search); // '?search=test' console.log(myUrl.hash); // '#hash' // 解析 URL 字符串 const parsedUrl = url.parse('https://example.com:8080/pathname/?search=test#hash'); console.log(parsedUrl);
30. Node.js 中的定时器函数 setImmediate()
和 setTimeout()
有什么区别?
setImmediate()
:将回调函数添加到“check”队列中,在当前操作完成后尽快执行,但在 I/O 事件之前。setTimeout()
:将回调函数添加到计时器队列中,在指定的毫秒数后执行。
31. 如何在 Node.js 中执行外部命令或脚本?
可以使用 child_process
模块来执行外部命令或脚本:
const { exec } = require('child_process'); exec('ls -la', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
console.error(`stderr: ${stderr}`);
});
32. Node.js 中的 path
模块有哪些常用方法?
path
模块提供了用于处理和转换文件路径的实用方法,如:
path.join()
: 将所有给定的path
片段连接在一起,使用平台特定的分隔符作为定界符。path.basename()
: 返回路径中的最后一部分。path.dirname()
: 返回路径中的目录名。path.extname()
: 返回路径中的扩展名。path.isAbsolute()
: 如果路径是绝对路径,返回true
。
33. 在 Node.js 中,如何获取和设置环境变量?
// 获取环境变量
const myVar = process.env.MY_ENV_VAR; // 设置环境变量(注意:这种方法只能在当前进程中有效)
process.env.MY_ENV_VAR = 'some_value';
可以使用 process.env
对象来获取和设置环境变量:
34. 什么是 Node.js 中的 console
模块?它有哪些常用方法?
console
模块提供了用于在标准输出流和标准错误流上打印日志信息的函数。常用方法包括:
console.log()
: 打印普通信息。console.error()
: 打印错误信息。console.warn()
: 打印警告信息。console.info()
: 打印信息(与console.log()
类似)
以下是对您提出的 Node.js 前端面试题的详细解答,序号从 35 开始依次增加:
35. 如何在 Node.js 中生成和使用加密的随机数?
在 Node.js 中,你可以使用 crypto
模块来生成加密的随机数。crypto.randomBytes(size, callback)
方法可以生成一个指定字节长度的随机缓冲区,这个缓冲区包含了加密安全的随机数。
const crypto = require('crypto'); // 生成一个 16 字节的随机缓冲区
crypto.randomBytes(16, (err, buffer) => {
if (err) throw err;
console.log(buffer.toString('hex')); // 将缓冲区转换为十六进制字符串输出
});
36. 如何在 Node.js 中对 base64 进行编解码?
在 Node.js 中,你可以使用 Buffer
类来进行 base6
const projectRootPath = process.cwd();
console.log(projectRootPath);
4 的编解码。Buffer.from(string, 'base64')
可以将 base64 编码的字符串解码为二进制数据,而 buffer.toString('base64')
则可以将二进制数据编码为 base64 字符串。
const buffer = Buffer.from('Hello, world!', 'utf8');
const base64Encoded = buffer.toString('base64');
console.log(base64Encoded); // 输出编码后的 base64 字符串 const decodedBuffer = Buffer.from(base64Encoded, 'base64');
const decodedString = decodedBuffer.toString('utf8');
console.log(decodedString); // 输出解码后的原始字符串
37. 如何在 Node.js 中获取项目的根路径?
在 Node.js 中,你可以使用 process.cwd()
方法来获取当前工作目录,这通常是项目的根路径。
j
38. 什么是 Node.js 中的 crypto 模块?它有什么作用?
crypto
是 Node.js 的一个核心模块,它提供了加密功能,包括哈希、HMAC、加密、解密、签名和验证等。它主要用于安全通信和数据保护。
39. 如何在 Node.js 中生成和验证哈希值?
在 Node.js 中,你可以使用 crypto
模块来生成和验证哈希值。首先,你需要创建一个哈希对象,然后更新它,最后计算哈希值。
const crypto = require('crypto'); // 生成哈希值
const hash = crypto.createHash('sha256');
hash.update('Hello, world!');
const hashValue = hash.digest('hex');
console.log(hashValue); // 验证哈希值(通常是通过比较生成的哈希值与预期的哈希值来完成)
40. 什么是 Node.js 中的事件发射器(EventEmitter)?它有什么作用?
EventEmitter
是 Node.js 的一个核心类,它允许对象在特定事件发生时发出信号。其他对象可以监听这些信号并做出响应。事件发射器是 Node.js 实现事件驱动编程的基础。
……(中间问题省略,直接跳到序号对应的问题)
47. 如何在 Node.js 中处理 HTTP 请求的路由?
在 Node.js 中,你可以使用路由库(如 Expr
const express = require('express');
const app = express(); app.get('/', (req, res) => {
res.send('Hello, world!');
}); app.listen(3000, () => {
console.log('Server is running on port 3000');
});
ess)或手动实现路由逻辑来处理 HTTP 请求的路由。使用 Express 时,你可以通过定义路由处理器来处理不同的 URL 请求。
相关文章:

【面试题】Node.JS篇
1. 什么是Node.js?它的主要特点是什么?适用于哪些场景? Node.js 是一个基于Chrome V8引擎的JavaScript运行时环境,它允许JavaScript代码在服务器端运行。Node.js的主要特点是事件驱动、非阻塞I/O模型,这使得它非常适合处理高并发请求和实时应用。它适…...

Leetcode11:盛水最多的容器
原题地址:. - 力扣(LeetCode) 题目描述: 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳…...

php如何对海量数据进行基数统计
在PHP中,对海量数据进行基数统计通常可以使用布隆过滤器(Bloom Filter)或者Count-Min Sketch算法。以下是使用Count-Min Sketch算法的一个简单示例: class CountMinSketch {private $rows;private $columns;private $values;publ…...

git命令报错:fatal: not a git repository (or any of the parent directories): .git
当你执行 Git 命令时遇到错误信息 "fatal: not a git repository (or any of the parent directories): .git",这表明你当前所在的目录不是一个 Git 仓库,或者你的工作目录不在 Git 仓库的根目录下。以下是一些解决这个问题的步骤:…...

如何通过sip信令以及抓包文件分析媒体发到哪个地方
前言 问题描述:A的媒体没转发到B,B只能听到回铃音,没有A的说话声音,并且fs这边按正常的信令发送了. 分析流程 分析早期媒体发送到哪一个IP 10.19.0.1发送了一个请求给10.19.0.157这个IP,然而这里的SDP媒体地址&am…...

【网络安全零基础入门】一文搞懂Javascript实现Post请求、Ajax请求、输出数据到页面、实现前进后退、文件上传
文章目录 一、Javascript原生post请求写法二、原生JS封装Ajax请求三、JS里的值或内容输出到HTML网页中四、Javascript页面后退前进刷新示例五、Javascript实现文件上传👉1.成长路线图&学习规划👈👉2.网安入门到进阶视频教程👈…...

NVR管理平台EasyNVR多个NVR同时管理综合应用方案
为了推动应急管理能力的现代化,应急管理部提出了加速现代信息技术与应急管理业务深度融合的宏伟蓝图。这一计划不仅是国家加强和改进应急管理工作的战略重点,也是应对当前应急管理形势的严峻挑战和满足人民群众对公共安全需求的必要举措。 为了实现应急管…...

SpringBoot核心框架之AOP详解
SpringBoot核心框架之AOP详解 一、AOP基础 1.1 AOP概述 AOP:Aspect Oriented Programming(面向切面编程,面向方面编程),其实就是面向特定方法编程。 场景:项目部分功能运行较慢,定位执行耗时…...

Linux: network: ifconfig已经过时,建议使用ip addr相关命令
最近有一个同事在问网络的问题,在debug的过程中还在使用ifconfig命令查看IP的相关信息。 但是这个ifconfig已经不推荐使用了,最好使用ip 相关的命令做操作。 有些信息使用ifconfig显示不出来 ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500ine…...

Flutter 鸿蒙next中的路由使用详解【基础使用】
✅近期推荐:求职神器 https://bbs.csdn.net/topics/619384540 🔥欢迎大家订阅系列专栏:flutter_鸿蒙next 💬淼学派语录:只有不断的否认自己和肯定自己,才能走出弯曲不平的泥泞路,因为平坦的大路…...

基于SSM+小程序民宿短租管理系统(民宿1)
👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM小程序民宿短租管理系统实现了管理员、用户及房主 1、管理员可以管理民宿信息和订单信息用户管理、房主管理、房间类型管理、预定管理等。 2、房主可以管理自己的民宿和订单 3、…...

SQL LIKE 操作符
SQL LIKE 操作符 在SQL中,LIKE 操作符用于在查询中搜索列中的特定模式。它通常与 % 和 _ 通配符一起使用,分别代表任意数量的字符和单个字符。LIKE 操作符在数据过滤和模式匹配方面非常有用,尤其是在处理大量文本数据时。 LIKE 操作符的基本…...

七款主流图纸加密软件强力推荐|2024年CAD图纸加密保护指南
在当今信息化的设计行业,保护CAD图纸的知识产权和数据安全变得尤为重要。随着越来越多的企业采用数字化设计和共享文件,如何防止CAD图纸被未经授权的访问和窃取成为了许多设计师和企业关注的焦点。为此,选用合适的图纸加密软件是保护CAD文件安…...

【STM32】单片机ADC原理详解及应用编程
本篇文章主要详细讲述单片机的ADC原理和编程应用,希望我的分享对你有所帮助! 目录 一、STM32ADC概述 1、ADC(Analog-to-Digital Converter,模数转换器) 2、STM32工作原理 二、STM32ADC编程实战 (一&am…...

C# 委托简述
1.委托 1.1什么是委托 委托委托 官网解释: 委托是安全封装方法的类型,类似于 C 和 C 中的函数指针。 与 C 函数指针不同的是,委托是面向对象的、类型安全的和可靠的。 委托的类型由委托的名称确定。 个人理解:委托就是一个方法的模板。它可以接收…...

瑞吉外卖项目
目录 Day01业务开发 一、项目总体介绍与展示 二、软件开发整体介绍 (一)软件开发流程 三、瑞吉外卖项目介绍 (一)项目介绍 (二)技术选型功能架构 1.技术选型—— 编辑2.功能架构—— 编辑 &a…...

Docker:4、龙晰(Anolis OS 8.8)宝塔面板安装
接上文Docker:1、基于龙晰 (Anolis OS 8.8 )的基础镜像制作,本节我们介绍:基于Docker的龙晰(Anolis OS 8.8 )宝塔安装。 在第一节中由于我们对 Docker 容器进行了SSH设置,这为我们这…...

多端项目开发全流程详解 - 从需求分析到多端部署
引言 在当今互联网时代,一个完整的产品常常需要覆盖多个终端,包括小程序、Web端(后台管理系统)、App端等。本文将详细介绍一个采用前后端分离架构的多端项目开发流程,重点分析各个终端的特点、功能定位及其开发要点。…...

4.5KB原生html+js+css实现图片打印位置的坐标和尺寸获取
一般用于图片打印文字或图片的坐标获取,代码来自AI有改动。 功能:本地图选择后不上传直接可比划线条作为对角线得到矩形,动态显示坐标 按下鼠标开始松开鼠标结束。有细微BUG但不影响坐标获取。 <!DOCTYPE html> <html lang"en">…...

智诊小助手-记录模式选择
记录模式总共有连续记录、硬件触发、软件触发、错误触发四种模式选择,并且在选择完记录模式后还可以设置保留触发点前报文条数、存储时间、录制通道、保存类型 配置过程如下: 点击下面右图中模式选择即可进入到左图中的参数配置界面 如上图选择的配置…...

JDBC: Java数据库连接的桥梁
什么是JDBC? Java数据库连接(Java Database Connectivity,简称JDBC)是Java提供的一种API,允许Java应用程序与各种数据库进行交互。JDBC提供了一组标准的接口,开发者可以利用这些接口执行SQL语句、处理结果集…...

英伟达GPU算力【自用】
GPU(图形处理单元)算力的提升是驱动当代科技革命的核心力量之一,尤其在人工智能、深度学习、科学计算和超级计算机领域展现出了前所未有的影响力。2024年的GPU技术发展,不仅体现在游戏和图形处理的传统优势上,更在跨行…...

「C/C++」C++11 之 智能指针
✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…...

算法面试小抄
第一章:算法与数据结构要点速学 1.时间复杂度 (大 O) 首先,我们来谈谈常用操作的时间复杂度,按数据结构/算法划分。然后,我们将讨论给定输入大小的合理复杂性。 数组(动态数组/列表) 规定 n arr.length, 注意: &am…...

当有违法数据时,浏览器不解析,返回了undefined,导致数据不解析
现象:页面上没有看到数据 排查:断点到线上的源码里:1、协议回调确实没有拿到数据是个undefined 2、network里看服务确实响应了数据 3、控制台没有任何报错。 心情:莫名其妙的现象 我本地有json格式化工具,copy进去后&…...

在MySQL中ORDER BY使用的那种排序算法
在 MySQL 中,ORDER BY 子句的排序算法通常根据场景、数据量和表的索引情况而有所不同。MySQL 常用的排序算法包括: 文件排序(File Sort):MySQL 没有使用索引排序的情况下,会进行文件排序,这可以…...

学习threejs,使用粒子实现雨滴特效
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.Points简介1.11 ☘️…...

分布式-单元化架构1
一 两地三中心 1.1 两地三中心* 两地指的是两个城市:同城,异地。三中心指的是三个数据中心:生产中心、同城容灾中心、异地容灾中心。 在同一个城市或者临近的城市建设两个相同的系统,双中心具备相当的业务处理能力,…...

C++模板、STL
目录 一、模板 1、函数模板 (1)、基本语法和使用 (2)、函数模板注意事项 (3)、普通函数与函数模板的区别 (4)、普通函数与函数模板的调用规则 (5)、模板的局限性 2、类模板 (1)、基本语法 (2)、类模板与函数模板区别 (3)、类模板中成员函数创建时机 (4)、类模板对象…...

计算机视觉中的点算子:从零开始构建
Hey小伙伴们!今天我们要聊的是一个非常基础但极其重要的计算机视觉技术——点算子(Point Operators)。点算子主要用于对图像的每个像素进行独立的处理,比如亮度调整、对比度增强、灰度化等。通过这些简单的操作,我们可…...