学习Node.js的9大理由以及日常开发中的14个高级特性和代码示例分享

news2024/11/25 1:37:53

目录

为什么要学Nodejs

1. 高级事件处理:事件驱动机制

2. 非阻塞I/O

3. 异步编程

4. 模块系统

5. 流式数据处理

6. 跨平台支持

7. 高性能网络编程

8. 调试工具

9. 第三方模块

10. 升级 V8 引擎至 10.7

11. 函数式编程

12. 高级路由

13. 试验 Node watch 模式

14. 高级中间件


Node.js是一个非常流行的JavaScript运行时,可以用于构建高效、可扩展的网络应用程序。在Node.js日常开发中,有许多高级特性可以帮助开发人员更好地处理数据和逻辑。本文将介绍一些Node.js日常开发中的高级特性,希望能够帮助读者更好地了解Node.js的强大功能,后面再将详细介绍这些高级特性的详细使用方法、应用场景和原理。

大前端专栏:https://blog.csdn.net/zhouruifu2015/category_5734911

为什么要学Nodejs

首先我们将介绍下为什么要学习Node.js

以下是学习Node.js的一些理由:

1. 前端开发的必备技能:Node.js是一种基于JavaScript的后端编程语言,前端开发人员可以利用他们已经掌握的JavaScript技能来学习Node.js,从而扩展他们的技能树并成为全栈开发人员。

2. 高效的I/O操作:Node.js是一个事件驱动的非阻塞I/O平台,它可以高效地处理大量并发连接,使得它成为构建高性能网络应用程序的理想选择。

3. 丰富的生态系统:Node.js拥有一个庞大的社区和生态系统,有数以千计的开源模块和工具可供使用,可以大大提高开发效率。

4. 跨平台支持:Node.js可以在多个操作系统上运行,包括Windows、macOS、Linux等,使得开发人员可以在不同的平台上开发和部署应用程序。

5. 适合微服务架构:Node.js的轻量级和高效性使得它成为构建微服务架构的理想选择,可以快速构建和部署微服务。

6. Node.js用户量大:我们无法统计Node.js软件的下载量,但是我们可以通过Node.js框架Express的下载量来分析出Node.js的用户量非常惊人。Node.js在2017年的时候用户量已经过千万。经过了3年的发展,Node.js目前的用户量可想而知。

7. Node.js最擅长高并发:Node.js最擅长的就是处理高并发,在Java、PHP或者.net等服务器端语言中,会为每一个客户端连接创建一个新的线程,而每个线程需要耗费大约2MB内存。也就是说,理论上,一个8GB内存的服务器可以同时连接的最大用户数为4000个左右。要让Web应用程序支持更多的用户,就需要增加服务器的数量,而Web应用程序的硬件成本当然就上升了。Node.js不为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户连接了,就触发一个内部事件,通过非阻塞I/O、事件驱动机制,让Node.js程序宏观上也是并行的。使用Node.js,一个8GB内存的服务器,可以同时处理超过4万用户的连接。

8. Node.js简单:Node.Js语法完全是js语法,只要你懂JS基础就可以学会Node.js后端开发。使得Node.js具有开发周期短、开发成本低、学习成本低等优势。

9. Node.js应用场景广泛:Node.js不仅可以像其他后端语言一样写动态网站、写接口,还可以应用在云计算平台、游戏开发、区块链开发、即时通讯、跨平台App开发、桌面应用开发(electron)、云直播、物联网领域、小程序等,应用场景非常广泛。

下面将介绍下Node.js的一些高级特性

大前端专栏

https://blog.csdn.net/zhouruifu2015/category_5734911

Node.js专栏

https://blog.csdn.net/zhouruifu2015/category_6080879

1. 高级事件处理:事件驱动机制

Node.js采用事件驱动的方式处理请求和响应,这种机制可以帮助开发者处理大量并发请求,提高系统的性能和可靠性。这意味着所有的I/O操作、网络请求和异步方法都是基于事件触发的。当某个异步操作完成后,Node.js会触发一个事件,通知应用程序进行下一步操作。这个事件机制给开发人员提供了一种非常高效和优雅的并行编程方式。

例如,以下是一个事件监听器(事件驱动)的示例:

const EventEmitter = require('events');

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
  console.log('an event occurred!');
});
myEmitter.emit('event');

在上面的代码中,我们创建了一个`MyEmitter`类,`MyEmitter`类继承自`EventEmitter`类(events是Node.js内置的模块),可以定义自己的事件监听器。`myEmitter.on()`函数定义了一个事件监听器,可以在事件发生时执行一些处理逻辑。`myEmitter.emit()`函数触发了一个事件,可以将事件数据传递给事件监听器。

在Node.js中,事件是非常重要的一个概念,可以帮助开发人员更好地处理异步操作和并发连接。在Node.js中,可以使用高级事件处理来实现更复杂的事件逻辑,例如事件监听器、事件发射器等。

2. 非阻塞I/O

Node.js使用异步I/O原语来实现非阻塞I/O操作,这使得应用程序可以同时处理多个请求和连接,并具有更高的性能和吞吐量。这意味着应用程序可以在等待某个操作完成的同时继续执行其他任务,而不必一直等待该操作完成。这对于处理高并发请求和I/O密集型任务非常有用,可以使应用程序具有更高的性能和响应能力。

以下是一个简单的非阻塞I/O示例:

const fs = require('fs');

fs.readFile('C:\\logs\\setup.log',(err, data) => {

    if (err) throw err;

    console.log(data);

});

在上面的代码中,我们使用Node.js内置模块`fs`进行文件读取。`readFile`方法的第二个参数是回调函数,当文件读取完成后,Node.js将会运行此回调函数。Node.js这种采用非阻塞I/O模型的处理方式,可以在等待I/O操作的同时处理其他请求,提高了系统的并发性能。

3. 异步编程

Node.js采用异步编程模型,可以通过回调函数、Promise和async/await等方式来处理异步操作,避免了多线程编程中的竞态条件和死锁等问题。回调函数和Promise可以帮助开发人员更好地处理异步I/O操作,并使代码更具可读性和可维护性。

以下是一个Promise的示例:

const fs = require('fs').promises;

fs.readFile('/path/to/file')
  .then(data => console.log(data))
  .catch(err => console.error(err));

在上面的代码中,我们使用Node.js内置模块`fs.promises`进行文件读取,并返回一个Promise对象。我们对Promise对象使用`then`和`catch`方法进行处理,当Promise对象完成或出现错误时,将会触发相应的操作。

下面的写法将输出文本文件的内容

fs.readFile('/path/to/file', (err, data) => {
  if (err) {
    console.error(err);
  } else {
    console.log(`File contents: ${data}`);
  }
});

使用Node.js内置模块`fs`读取文件的内容,并使用回调函数处理读取操作的结果。如果读取过程中发生错误,将会输出错误信息;否则,将会输出文件的内容。

4. 模块系统

Node.js使用CommonJS规范来管理模块,模块是Node.js中的基本组成部分,可以通过require函数引入其他模块,也可以通过exports对象导出模块。允许开发人员导入和导出模块。

Node.js采用模块化机制,使得开发人员可以将应用程序分解为多个模块,并且能够很容易地重用这些模块和组织代码结构。

以下是一个模块导入和导出的示例:

// mymodule.js

module.exports = {
    greeting: "Hello Cramer, I'm SteveRocket",
    sayHello1: function () {console.log(this.greeting)},
    sayHello2: () => console.log('how are you'),
};

// app.js

//导入自定义的模块
const myModule = require('./mymodule');
console.log(myModule.greeting);  // 输出 Hello Cramer, I'm SteveRocket
myModule.sayHello1();  // 输出 Hello Cramer, I'm SteveRocket
myModule.sayHello2();  // 输出 how are you

在上面的代码中,我们定义了一个名称为`mymodule`的模块,并导出了一个具有两个属性的JavaScript对象:`greeting`和`sayHello`。在另一个文件`app.js`中,我们将这个模块导入并使用它的`sayHello`方法,输出`Hello, world!`到控制台上。

5. 流式数据处理

Node.js支持流式数据处理,提供了流式数据处理的API,可以帮助开发者高效地处理大量数据,避免内存溢出等问题。Node.js将数据分成小块逐步处理,而不是一次性将整个数据加载到内存中。这对于处理大型数据集和实时数据非常有用,并且可以提高应用程序的性能和效率。

以下是一个流式数据处理的示例:

const fs = require('fs');
const readStream = fs.createReadStream('/path/to/large/file');

readStream.on('data', chunk => {
  console.log(`Received ${chunk.length} bytes of data.`);
});

readStream.on('end', () => {
  console.log('Finished reading data.');
});

在上面的代码中,我们使用Node.js内置模块`fs`创建了一个读取文件的可读流,并使用`on`方法监听`data`和`end`事件。当数据块可用时,`data`事件将被触发并输出接收到的数据块大小。当数据读取完成时,`end`事件将被触发并输出`Finished reading data.`。

6. 跨平台支持

Node.js可以在多种操作系统上运行,包括Windows、Linux、MacOS等操作系统,这使得开发者可以轻松地开发和部署跨平台应用程序。

以下是一个跨平台示例:

const os = require('os');

console.log(`This application is running on ${os.platform()}.`);

Windows上输出:This application is running on win32.

在上面的代码中,我们使用Node.js内置模块`os`获取当前操作系统的平台,并输出到控制台上。

7. 高性能网络编程

Node.js具有出色的网络编程能力,可以轻松地构建高性能的网络应用程序。Node.js提供了一些高性能的网络编程API,例如http模块、net模块、WebSocket模块等,可以帮助开发者构建高性能的网络应用程序。Node.js使用事件驱动和非阻塞I/O的方式,使得应用程序可以同时处理多个连接和请求,并具有更高的性能和吞吐量。Node.js其他的内置模块详解请关注公众号:CTO Plus,参考后面的文章介绍。

以下是一个简单的网络编程示例:

const net = require('net');

const server = net.createServer(socket => {
    socket.write('Hello cramer', new Date());
    socket.on('data', data => {
        console.log(`Received data from client ${data}`);
    });

});

server.listen(3000, () => {
    console.log('Server listening on port:3000');
});

在上面的代码中,我们使用Node.js内置模块`net`创建了一个TCP服务器,并监听端口3000。当客户端连接到服务器时,服务器会向客户端发送一条欢迎消息,并监听客户端发送的数据,并在控制台上输出。

8. 调试工具

Node.js提供了一系列调试工具,例如Node Inspector、Chrome DevTools等,可以帮助开发人员调试定位、优化应用程序和解决应用程序中的问题,例如代码错误、内存泄漏和性能问题等。使得开发人员可以更轻松地调试和分析应用程序。

以下是一个使用Node.js调试工具的示例:

const http = require('http');

const server = http.createServer((req, res) => {
  const message = 'Hello, world!';
  res.end(message);
});

server.listen(3000, () => {
  console.log('Server listening on port 3000.');
});

在上面的代码中,我们创建了一个HTTP服务器,并监听端口3000。我们可以使用Node.js内置的调试工具`--inspect`来调试应用程序。例如,我们可以在控制台上运行以下命令:

node --inspect app.js

这将启动Node.js应用程序,并在Chrome浏览器中打开调试器。在调试器中,我们可以查看应用程序的源代码、设置断点、监视变量和执行代码等。

9. 第三方模块

Node.js拥有一个庞大的第三方模块生态系统,可以通过npm包管理工具来安装和使用这些模块,这些模块可以帮助开发者快速构建应用程序,使得开发人员可以轻松地使用各种功能强大的模块来扩展应用程序的功能。

以下是一个使用第三方模块的示例:

const moment = require('moment');

const date = moment().format('YYYY-MM-DD');

console.log(`Today's date is ${date}.`);

在上面的代码中,我们使用npm安装了一个名为`moment`的第三方模块,并在代码中引入它。我们使用`moment`模块获取当前日期,并将其格式化为YYYY-MM-DD的形式,并输出到控制台上。

10. 升级 V8 引擎至 10.7

Node.js v19 将 V8 JavaScript 引擎更新至 V8 10.7,其中包含一个新函数 Intl.NumberFormat,用于格式化敏感数字。

Intl.NumberFormat(locales, options)

对于不同的语言,传入不同的 locales:

const number = 123456789.123456789;

console.log(new Intl.NumberFormat('de-DE', {style: 'currency', currency: 'EUR'}).format(number));
console.log(new Intl.NumberFormat('ja-JP', {style: 'currency', currency: 'JPY'}).format(number));
console.log(new Intl.NumberFormat('ar-SA', {style: 'currency', currency: 'EGP'}).format(number));
console.log(new Intl.NumberFormat('zh-CN', {style: 'currency', currency: 'CNY'}).format(number));

输出结果

11. 函数式编程

Node.js支持函数式编程,这使得开发人员可以编写更加简洁、可维护和可测试的代码。函数式编程强调函数的纯粹性和不可变性,使得代码更加容易理解和调试。

以下是一个函数式编程的示例:

const numbers = [1, 2, 3, 4, 5];

const sum = numbers.reduce((acc, cur) => acc + cur, 0);

console.log(`The sum of numbers is ${sum}.`);

const squares = numbers.map(num => num * num);

console.log(`The squares of numbers are ${squares}.`);

在上面的代码中,我们使用数组的`reduce`和`map`方法来计算数字的总和和平方。`reduce`方法接受一个累加器函数和一个初始值,将数组中的每个元素依次传递给累加器函数进行计算,最终返回累加结果。`map`方法接受一个转换函数,并返回一个新的数组,其中每个元素都是原数组中对应元素经过转换函数处理后的结果。

12. 高级路由

在Node.js中,路由是非常重要的一个概念。路由可以帮助开发人员将请求分发到不同的处理程序中,以便更好地处理数据和逻辑。在Node.js中,可以使用高级路由来实现更复杂的路由逻辑,例如正则表达式路由、参数化路由等。

例如,以下是一个使用箭头函数实现的参数化路由的示例:

const express = require('express');
const app = express();
//基于express框架的第二个web服务,参数化路由
app.get('/users/:id', (req, res) => {
    const id = req.params.id;
    console.log('Hello Cramer!用户ID:', id, typeof id);
    //处理用户ID
    res.send('Hello Cramer!your ID:' + id);
});

app.listen(3000, () => {
    console.log('Server started on port:3000')
});

在上面的代码中,`/:id`表示一个参数化路由,可以匹配任何以`/users/`为前缀的URL,并将ID参数传递给处理程序。

启动服务进行访问

13. 试验 Node watch 模式

运行时增加了 node --watch 选项。

在 "watch" 模式下运行,当导入的文件被改变时,会重新启动进程。

比如:

const express = require("express");

const path = require("path");

const app = express();

app.use(express.static(path.join(__dirname, "../build")));

app.listen(8080, () =>

  console.log("Express server is running on localhost:8080")

);

% node --watch server

(node:67643) ExperimentalWarning: Watch mode is an experimental feature. This feature could change at any time

(Use `node --trace-warnings ...` to show where the warning was created)

Express server is running on localhost:8080

14. 高级中间件

中间件是Node.js中非常重要的一个概念,可以帮助开发人员在请求和响应之间执行一些处理逻辑。在Node.js中,可以使用高级中间件来实现更复杂的中间件逻辑,例如错误处理中间件、身份验证中间件等。

例如,以下是一个错误处理中间件的示例:

const express = require('express');
// 高级中间件
const app = express();

app.get('/users/:id', (req, res) => {
    const id = req.params.id;
    console.log("user " + id + " request");
    //处理用户ID
    res.send("hello cramer", id);  // TODO 此处会导致抛异常
});

app.use((err, req, res, next)=>{
    console.error(err.stack);
    res.status(500).send("Something broker!");
});

app.listen(3000, () => {
    console.log('Server listen on port:3000');
});

请求服务

在上面的代码中,`app.use()`函数定义了一个错误处理中间件,可以捕获所有请求中的错误,并将错误信息发送回客户端。

总之,Node.js具有很多高级特性,本文介绍了一些Node.js日常开发中的高级特性,例如事件驱动机制、非阻塞I/O、异步编程和模块系统、高级路由、高级中间件和高级事件处理等。这些特性使得Node.js成为构建高性能、高可扩展性和易于维护的应用程序的理想技术。还可以帮助开发人员更好地处理数据和逻辑,希望这些高级特性能够帮助读者更好地了解Node.js的强大功能,提高应用程序的开发效率和质量。

Node.js 14 将在 2023 年 4 月结束更新维护,Node.js 16 (LTS) 预计将在 2023 年 9 月结束更新维护。建议将版本按需升级到 Node.js 18(LTS)或 Node.js 20(LTS)。后面将通过项目实战来详细介绍这些高级特性的使用技巧,更多高级特性,请关注公众号:CTO Plus,获取更多学习资料,一起学习。

大前端专栏
https://blog.csdn.net/zhouruifu2015/category_5734911https://blog.csdn.net/zhouruifu2015/category_5734911Node.js专栏
https://blog.csdn.net/zhouruifu2015/category_6080879https://blog.csdn.net/zhouruifu2015/category_6080879


更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。

关于公众号的描述访问如下链接


关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

推荐阅读:

  • 开源项目 | JavaScript最热门的25个前端开发插件(库)总结

  • 前端开发技术栈(模板篇):10款较流行的前端后台管理系统模板

  • 50+款前端高效开发辅助工具总结

Node.js系列

学习Node.js的9大理由以及日常开发中的14个高级特性和代码示例分享

https://blog.csdn.net/zhouruifu2015/article/details/130912309

最热门高效的Node.JS开源第三方开发库和特点(持续更新......)

https://blog.csdn.net/zhouruifu2015/article/details/130912283

前端开发技术栈(工具篇):2023最新版nvm的Win/Linux安装和使用(详细) 27.8k stars

https://blog.csdn.net/zhouruifu2015/article/details/130912278

Node.js基本概念、特点、用途和常用模块,以及Express框架开发一个web应用

https://blog.csdn.net/zhouruifu2015/article/details/130912299

弄清楚Node.js的功能特性、运行时、组成和发展趋势分析以及与JavaScript的区别

https://blog.csdn.net/zhouruifu2015/article/details/130912285

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/584980.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国内免费可用的ChatGPT网页版

ChatGPT 一、ChatGPT是个啥?二、16个国内免费的ChatGPT网站。三、ChatGPT使用方式 一、ChatGPT是个啥? chat:表示“聊天”。 GPT:则是Generative、Pre-trained、Transformer的缩写,表示“预训练语言模型”&#xff0…

【Unity100个实用小技巧】同一个Canvas下的UI顺序通过代码如何修改

☀️博客主页:CSDN博客主页💨本文由 萌萌的小木屋 原创,首发于 CSDN💢🔥学习专栏推荐:面试汇总❗️游戏框架专栏推荐:游戏实用框架专栏⛅️点赞 👍 收藏 ⭐留言 📝&#…

三维场景重建经典论文详解

来源:投稿 作者:小灰灰 编辑:学姐 论文标题: 《REAL-TIME INDOOR SCENE RECONSTRUCTION WITH RGBD AND INERTIA INPUT》 论文链接: https://arxiv.org/pdf/2008.00490.pdf https://github.com/CWanli/RecoNet 数据集:P…

停车系统多位多车算法

1、算法代码 下面代码是伪Java代码&#xff0c;看得懂就行。 //查询当前车牌号对应的车主的其他的车牌号的入场纪录&#xff0c;根据时间倒叙排列。 List<Record> comeRecords mapper.selectFromDB; //车主所有的在场车辆数量-车主拥有车位数量 等于需要计费的车辆数量…

虚拟机NAT模式下修改linux静态ip

首先修改VMware的虚拟网络编辑器&#xff0c;NAT设置-> 设置网关&#xff0c;一般ip的第四部分网关为2&#xff0c;第三部分自己设置。 然后设置自己windows电脑 右键属性里面的ipv4&#xff0c;设置为静态的&#xff0c;dns除了对应网关还加一个通用dns 8.8.8.8。 这些外…

基于Q-Table的强化学习笔记

基于Q-Table的强化学习笔记 1 几个概念1.1 状态空间 S S S和动作空间 A A A1.2 奖励 R R R1.3 价值函数与Q-Table1.4 马尔可夫性 2 基于Q-Table的强化学习算法2.1 SARSA算法2.2 Q-learning算法 1 几个概念 最近也从小白入手看了些强化学习(Reinforcement Learning&#xff0c;…

中国人民大学与加拿大女王大学金融硕士——每天都要优于过去的自己,加油!

职场中拉开人与人之间差距的&#xff0c;往往是日复一日微小的积累。满足已取得的成就会让人停滞不前&#xff0c;一旦停止学习&#xff0c;人就会止步不前。懂得持续学习、终生成长的人&#xff0c;能保持积极进取的状态。金融行业的你有计划来人民大学与加拿大女王大学金融硕…

累积运行时间功能块(SCL语言)

设备累积运行时间功能块梯形图源代码请参看下面的文章博客: SMART PLC设备累计运行时间功能块_RXXW_Dor的博客-CSDN博客功能块非常简单,没有什么特别需要说明的,方法不唯一仅供参考。https://blog.csdn.net/m0_46143730/article/details/129170452方法始终不唯一,受限于当…

【c】vscode c/c++环境配置

文章目录 1 mingw下载及配置1.1 mingw下载1.2 环境变量配置1.3 gdb安装 2 vscode c插件安装3 vscode文件配置 1 mingw下载及配置 1.1 mingw下载 https://sourceforge.net/projects/mingw-w64/files/ 1.2 环境变量配置 1.3 gdb安装 我下载的mingw未安装gdb调试 cmd执行: …

vue3 项目实践总结

一、挂载全局变量 1.1 main.js 中挂载 // 引入全局变量 import api from /api;const app createApp(App);// 挂载全局变量 app.config.globalProperties.$API api;app.use(store).use(router).use(ElementPlus).use(Vant).mount(#app);1.2 组件中获取 方法一 推荐使用proxy…

研发工程师玩转Kubernetes——非定时任务

在《研发工程师玩转Kubernetes——自动扩缩容》一文中&#xff0c;我们使用在本地使用wrk进行了压力测试。如果我们希望在容器中运行&#xff0c;该怎么做呢&#xff1f; 构建/推送wrk镜像 Dockerfile如下。主要就是在Ubuntu22中安装wrk。 From ubuntu:22.04 RUN apt-get up…

【Nodejs】Node-js笔记

Node.js 文章目录 Node.js一、Node.js概述1.1、介绍1.2、官网1.3、Node.js应用场景1.4、安装Node.js1.5、npm包管理器1.5.1、介绍1.5.2、切换npm源1.5.3、生成JSON配置文件1.5.4、查看当前安装的树形模块1.5.5、安装模块1.5.6、自定义脚本命令1.5.7 、自动重启应用 1.6、模块化…

VehicleHal.java - fwk层对应VehicleService

VehicleHal.java - fwk层对应VehicleService 1、VehicleHal.java初始化1.1 hal服务区分1.2 简要时序图 2、PowerHalService为例2.1 PowerHalService初始化和订阅2.2 简要时序图 android12-release 【IVI】VehicleService启动 【IVI】车载设备硬件抽象层VHAL 【IVI】CarService启…

【人脸识别】insightface 使用记录和搭建服务注意点和坑 从0到1

文章目录 前言1.开始1.1 前置1.2 再次运行&#xff0c;人脸检测跑通1.3 人脸特征抽取1.3.1 模型下载1.3.2 重新跑一下检测和识别1.3.3 人脸监测返回值分析1.3.4 计算相似度 1.4 全流程的相似度 2. 业务化人脸识别 前言 人脸识别项目&#xff0c;再走一遍。之前是公司老人留下的…

HTML+CSS实训——Day05——JavaScript基础知识点

前言 上一周我们只做了静态页面&#xff0c;这周开始要学js了&#xff0c;那我们先来认识一下他的语法和变量吧。 知识点 变量定义 学习了var还有console.log()输出变量 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&…

点云配准算法综述-完整解读

点云配准的挑战 同源点云配准 同源点云的配准是指从同一类型的传感器,但在不同的时间或视角下获取的点云在进行配准问题中存在的挑战,其主要包含了 噪声和离群值。在不同的采集时间,环境和传感器噪声是不同的,采集到的点云在同一三维位置附近会包含噪声和异常值。部分重叠…

全网最火爆,从接口测试到接口自动化测试总结,卷王进阶高级...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Python接口自动化测…

设计模式之美-为什么基于接口而非实现编程?有必要为每个类都定义接口吗?

我愿意称之为最强设计书籍之一。看完这篇文章使我对代码编写有了新的思考。值得注意的是文章全篇写的是伪代码&#xff0c;并没有真正实现方法的逻辑&#xff0c;不过这样反而有利于逻辑的理解。 在上一节课中&#xff0c;我们讲了接口和抽象类&#xff0c;以及各种编程语言是如…

如何跑通一个java项目

查找项目代码的途径&#xff1a;github,码云&#xff0c;掘金网 以小说精品屋项目(掘金网)为例&#xff1a; 先读Readme&#xff08;这里会介绍项目结构和技术选型&#xff09;&#xff0c;这里还会告诉你们怎么跑起来这个项目&#xff0c;比如让你先安装数据库&#xff0c;然…

从业者指南:专业编辑和校对技巧

在写作领域&#xff0c;编辑和校对是确保高质量作品的关键步骤。作为从业者&#xff0c;你需要掌握专业的编辑和校对技巧&#xff0c;以提高客户满意度和自己的市场竞争力。以下是一些值得关注的专业编辑和校对技巧。 1.建立良好的沟通 与客户保持良好的沟通是提高编辑和校对质…