文章目录
-
-
- 1. 什么是Node.js?
- 2. Node.js是如何工作的?
- 3. Node.js与其他流行的框架相比有何优势?
- 4. Node.js如何克服I/O操作阻塞的问题?
- 5. 为什么Node.js是单线程的?
- 6. 如果Node.js是单线程的,那么它是如何处理并发的?
- 7. Node.js中有多少种API函数?
- 8. 你是如何管理Node.js项目中的包的?
- 9. Node.js有哪些常用的计时特性?
- 10. 使用Promise代替回调有什么好处?
- 11. Node.js中的fork是什么?
- 12. module.exports的用途是什么?
- 13. 可以使用哪些工具来确保代码风格一致?
- 14. 你对回调地狱的理解是什么?
- 15. Node.JS中的事件循环是什么?
- 16. 什么是错误优先的回调函数?
- 17. 你如何避免回调地狱?
- 18. 你如何用Node来监听80端口?
- 19. 运算错误与程序员错误的区别?
- 20. 为什么npm包管理器有帮助?
- 21. 什么是Stub?举个使用场景?
- 22. 什么是测试金字塔?当我们谈到HTTP API时,我们如何实施它?
- 23. 你最喜欢的HTTP框架以及原因?
- 24. 什么是事件驱动?
- 25. 什么是非阻塞I/O?
- 26. 什么是NPM?
- 27. 解释下什么是“回调函数”?
- 28. 什么是闭包?
- 29. 什么是流(Streams)?在Node.js中如何使用它们?
- 30. 如何在Node.js中处理异常?
-
1. 什么是Node.js?
答案:Node.js是一个开源与跨平台的JavaScript运行时环境,它允许开发者使用JavaScript来编写服务器端代码。
2. Node.js是如何工作的?
答案:Node.js基于事件驱动的架构,其中I/O异步运行,使其轻量且高效。它使用了Chrome的V8 JavaScript引擎来执行代码。
3. Node.js与其他流行的框架相比有何优势?
答案:Node.js提供了简单的开发体验,非阻塞I/O和基于事件的模型使其响应时间短,并发处理能力强。此外,由于前后端都使用JavaScript,开发速度更快。
4. Node.js如何克服I/O操作阻塞的问题?
答案:Node.js通过事件循环和异步编程模型来处理I/O操作,避免了阻塞主线程。
5. 为什么Node.js是单线程的?
答案:Node.js是作为异步处理的实验而创建的,旨在尝试在单个线程上进行异步处理,而不是通过不同框架进行缩放的现有基于线程的实现。
6. 如果Node.js是单线程的,那么它是如何处理并发的?
答案:虽然主循环是单线程的,但所有异步调用都由libuv库管理,该库负责将不同的任务分配给不同的线程。
7. Node.js中有多少种API函数?
答案:有两种类型的API函数:异步、非阻塞函数(主要是I/O操作)和同步的、阻塞的函数(主要是影响在主循环中运行的进程的操作)。
8. 你是如何管理Node.js项目中的包的?
答案:可以使用npm或yarn等软件包安装程序及其相应的配置文件进行管理。为了维护项目中安装的库版本,我们使用package.json和package-lock.json。
9. Node.js有哪些常用的计时特性?
答案:
setTimeout/clearTimeout用于实现代码执行的延迟;
setInterval/clearInterval用于多次运行代码块;
setImmediate/clearImmediate作为setImmediate()参数传递的任何函数都是在事件循环的下一次迭代中执行的回调;process.nextTick。
10. 使用Promise代替回调有什么好处?
答案:使用Promise的主要优点是可以获得一个对象来决定异步任务完成后需要采取的操作。这提供了更易于管理的代码并避免了回调地狱。
11. Node.js中的fork是什么?
答案:通常,fork用于生成子进程。在Node.js中,它用于创建一个新的v8引擎实例来运行多个worker来执行代码。
12. module.exports的用途是什么?
答案:module.exports用于公开要在项目其他地方使用的特定模块或文件的功能。这可用于将所有类似功能封装在一个文件中,从而进一步改进项目结构。
// Person.js
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, my name is ${
this.name} and I am ${
this.age} years old.`);
}
}
module.exports = Person;
// app.js
const Person = require('./Person');
const person1 = new Person('Alice', 30);
person1.greet(); // 输