饿了么大前端 Node.js 进阶教程
因为 2016 年面试了很多做 Node.js 的同学,发现大部分做 Node 的同学都是前端转过来的,对后端的知识大多一片空白。所以很难招到比较好的 Node.js 服务端程序员(注意,不是全栈)。
于是出于我们一贯的开源与分享精神,我们筹备了这个名字叫《如何通过饿了么 Node.js 面试》的开源的 Node.js 进阶教程。
github 仓库地址:https://github.com/ElemeFE/node-interview
导读
本教程包含 2~3 年经验的 Node.js 服务端需要知道的知识点。
需要注意的是, 并不适用于零基础的同学, 你需要有一定的 JavaScript/Node.js 基础, 并且有一定的工作经验. 另外本教程的重点更准确的说是服务端基础中 Node.js 程序员需要了解的部分.
稳重将一些常见的问题划分归类, 每类标明涵盖的一些覆盖点
, 并且列举几个常见问题
, 通常这些问题都是 2~3 年工作经验需要了解或者面对的. 如果你对某类问题感兴趣, 或者想知道其中列举问题的答案, 可以通过该类下方的 阅读更多
查看更多的内容.
整体上大纲列举的并不是很全面, 细节上覆盖率不高, 很多讨论只是点到即止, 希望大家带着问题去思考.
Js 基础问题
与前端 Js 不同, 后端是直面服务器的, 更加偏向内存方面.
覆盖点
常见问题
- js 中什么类型是引用传递, 什么类型是值传递? 如何将值类型的变量以引用的方式传递? [more]
- js 中, 0.1 + 0.2 === 0.3 是否为 true ? 在不知道浮点数位数时应该怎样判断两个浮点数之和与第三数是否相等?
- const 定义的 Array 中间元素能否被修改? 如果可以, 那 const 的意义是? [more]
- Javascript 中不同类型以及不同环境下变量的内存都是何时释放? [more]
模块
常见问题
- a.js 和 b.js 两个文件互相 require 是否会死循环? 双方是否能导出变量? 如何从设计上避免这种问题? [more]
- 如果 a.js require 了 b.js, 那么在 b 中定义全局变量
t = 111
能否在 a 中直接打印出来? [more] - 如何在不重启 node 进程的情况下热更新一个 js/json 文件? 这个问题本身是否有问题? [more]
事件/异步
常见问题
- Promise 中 .then 的第二参数与 .catch 有什么区别? [more]
- Eventemitter 的 emit 是同步还是异步? [more]
- 如何判断接口是否异步? 是否只要有回调函数就是异步? [more]
- nextTick, setTimeout 以及 setImmediate 三者有什么区别? [more]
- 如何实现一个 sleep 函数? [more]
- 如何实现一个异步的 reduce? (注:不是异步完了之后同步 reduce) [more]
进程
常见问题
- 进程的当前工作目录是什么? 有什么作用? [more]
- child_process.fork 与 POSIX 的 fork 有什么区别? [more]
- 父进程或子进程的死亡是否会影响对方? 什么是孤儿进程? [more]
- cluster 是如何保证负载均衡的? [more]
- 什么是守护进程? 如何实现守护进程? [more]
IO
[Doc]
Buffer[Doc]
String Decoder (字符串解码)[Doc]
Stream (流)[Doc]
Console (控制台)[Doc]
File System (文件系统)[Doc]
Readline[Doc]
REPL
常见问题
- Buffer 一般用于处理什么数据? 其长度能否动态变化? [more]
- Stream 的 highWaterMark 与 drain 事件是什么? 二者之间的关系是? [more]
- Stream 的 pipe 的作用是? 在 pipe 的过程中数据是引用传递还是拷贝传递? [more]
- 什么是文件描述符? 输入流/输出流/错误流是什么? [more]
- console.log 是同步还是异步? 如何实现一个 console.log? [more]
- 如何同步的获取用户的输入? [more]
- Readline 是如何实现的? (有思路即可) [more]
整理中的专题
- Network
- OS
- 错误处理/调试/优化
- 测试
- util
- 存储
- 安全
最后
目前 repo 处于施工现场的情况,如果发现问题欢迎在 issues中指出。如果有比较好的问题/知识点/指正
,也欢迎提 PR。
另外关于 Js 基础
是个比较大的话题,在本教程不会很细致深入的讨论,更多的是列出一些重要或者更服务端更相关的地方,所以如果你拿着《Javascript 权威指南》给教程提 PR 可能不会采纳。本教程的重点更准确的说是服务端基础中 Node.js 程序员需要了解的部分。