Node.js 按图索骥
根据饿了么的node-interview按主题整理了 node 学习资料,方便日后按图索骥,检索学习。
1. Javascript 基础问题
- 类型判断,推荐阅读lodash源码,建议学习Typescript。
- 作用域,推荐阅读你不知道的 Javascript。
- 引用传递,还是传递引用,和指针的区别是什么,推荐阅读is-javascript-a-pass-by-reference-or-pass-by-value-language。
- 内存释放,需要了解 V8 的 GC,了解哪些情况可能会导致内存泄漏。推荐阅读《如何分析 Node.js 中的内存泄漏》,以及《深入浅出 Node.js》的相关章节。
- ES6+新特性。深入理解 ES6,推荐阅读阮一峰的《ECMAScript 6 入门》,或者红宝书作者的Understanding ECMAScript 6。
2. 模块
- 模块机制,先阅读官方文档。深入理解CommonJS规范。
- 热更新,理解 require.cache,以及清空 cache 的问题。是否应该将可变的数据存到数据库?
- 上下文,一般情况只有一个上下文,可以使用 vm 模块在一个沙盒环境运行 js 避免上下文被污染。参考VM 官方文档。
- 包管理,深入理解 npm,yarn,语义化版本等。参考npm 官方文档。
3. 事件/异步
- Promise。理解 Promise 的一些细节,比如 then 第二个参数和 catch 的区别,参考We have a problem with promises。理解 Promise 的实现。
- Events。理解events核心模块。理解 Stream 基于 Events 实现,而 fs,net,http 等模块都依赖 Stream。
- Timers。理解 nextTick、setTimeout 以及 setImmediate 三者的区别。深入理解Event Loop。官方文档The Node.js Event Loop, Timers, and process.nextTick()。Jake Archibald 的文章Tasks, microtasks, queues and schedules。
- 并行和并发。并发,2 个队列对应 1 个咖啡机。并行,2 个队列对应 2 个咖啡机。
4. 进程
- 关于进程以及操作系统,推荐阅读《Unix 环境高级编程》。
- 关于 Node.js 中的 process 对象,推荐看官方文档。
- 配置。可以通过设置环境变量,或者使用 dotenv 等库读取配置文件。
- 标准流。熟悉 process.stderr、process.stdout 和 process.stdin。
- child process。可以参考之前翻译过的文章,熟悉child_process模块的用法。
- 理解cluster模块。
- 理解 IPC 进程间通信。
- 理解守护进程的概念和实现。
5. IO
- Buffer 是 Node.js 中用于处理二进制数据的类,与 IO 相关的操作均基于 Buffer。官方文档。理解 ES6 的 TypedArray。
- String Decoder。将 Buffer 转成 string。
- Stream。可以参考之前翻译过的文章。
- 理解 pipe 的用法和实现。
- 了解 Console.log 的实现,基于 process.stout。
- 熟悉 fs 模块的使用。官方文档。
- 理解标准输入输出,理解 shell 和进程,ssh 的使用和实现等。
6. NetWork
- TCP/IP。推荐阅读TCP/IP 详解 卷一,图解 TCP/IP,Wireshark 网络分析就这么简单。
- 熟悉 HTTP/HTTPS/HTTP2。理解RESTful 架构。
- 理解 DNS 解析,Zlib 压缩等。
- 理解 RPC,了解 Thrift,gRPC。
7. OS
8. 错误处理/调试
- 理解常见的错误类型,JS 错误、系统错误、自定义错误、断言错误。
- 理解 Node.js 中处理错误的几种方式,callback(err, data)、throw/try/catch、EventEmitter 的 error 事件。
- 理解异步调用的函数,错误栈可能会丢失,比如在 setImmediate 中的异步调用。
- 理解防御性编程。
- 知道什么时候Let it crash。
- 理解 uncaughtException、unhandledRejection 的使用。
- 知道如何 debug,console.log、node-inspector、 built-in debugger、debug module、vscode debug。
9. 测试
10. util
- 理解 url 的组成。
- 熟悉 querystring 的使用。
- 熟悉 util 的一些工具方法。
- 熟悉常用模块的使用。
11. 存储
- 理解数据库范式。
- 熟悉 SQL 的相关概念,主键、外键、索引等。
- 熟悉 Mysql、MongoDB 的使用。
- 理解数据库模式 M/M、M/S 等,理解事务、数据一致性等概念。
- 理解 redis、memcached,了解 zookeeper、kafka、hadoop、spark、storm 等。
12. 安全
- 熟悉crypto模块的使用。
- 理解 HTTPS 的认证过程,了解 TLS/SSL。
- 理解常见的 Web 安全问题以及防御策略,XSS、CSRF、CSP、SQL 注入等。
Topic:#node