饿了么大前端 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 不同, 后端是直面服务器的, 更加偏向内存方面.

  • [Basic]类型判断
  • [Basic]作用域
  • [Basic]引用传递
  • [Basic]内存释放
  • [Basic]ES6 新特性

常见问题

  • js 中什么类型是引用传递, 什么类型是值传递? 如何将值类型的变量以引用的方式传递?[more]
  • js 中, 0.1 + 0.2 === 0.3 是否为 true ? 在不知道浮点数位数时应该怎样判断两个浮点数之和与第三数是否相等?
  • const 定义的 Array 中间元素能否被修改? 如果可以, 那 const 的意义是?[more]
  • JavaScript 中不同类型以及不同环境下变量的内存都是何时释放?[more]

阅读更多

模块

  • [Basic]模块机制
  • [Basic]热更新
  • [Basic]上下文

常见问题

  • a.js 和 b.js 两个文件互相 require 是否会死循环? 双方是否能导出变量? 如何从设计上避免这种问题?[more]
  • 如果 a.js require 了 b.js, 那么在 b 中定义全局变量t
    = 111
    能否在 a 中直接打印出来?[more]
  • 如何在不重启 node 进程的情况下热更新一个 js/json 文件? 这个问题本身是否有问题?[more]

阅读更多

事件/异步

  • [Basic]Promise
  • [Doc]Events (事件)
  • [Doc]Timers (定时器)
  • [Point]阻塞/异步
  • [Point]并行/并发

常见问题

  • Promise 中 .then 的第二参数与 .catch 有什么区别?[more]
  • Eventemitter 的 emit 是同步还是异步?[more]
  • 如何判断接口是否异步? 是否只要有回调函数就是异步?[more]
  • nextTick, setTimeout 以及 setImmediate 三者有什么区别?[more]
  • 如何实现一个 sleep 函数?[more]
  • 如何实现一个异步的 reduce? (注:不是异步完了之后同步 reduce)[more]

阅读更多

进程

  • [Doc]Process (进程)
  • [Doc]Child Processes (子进程)
  • [Doc]Cluster (集群)
  • [Basic]进程间通信
  • [Basic]守护进程

常见问题

  • 进程的当前工作目录是什么? 有什么作用?[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

  • [Doc]Net (网络)
  • [Doc]UDP/Datagram
  • [Doc]HTTP
  • [Doc]DNS (域名服务器)
  • [Doc]ZLIB (压缩)
  • [Point]RPC

常见问题

  • cookie 与 session 的区别? 服务端如何清除 cookie?[more]
  • HTTP 协议中的 POST 和 PUT 有什么区别?[more]
  • 什么是跨域请求? 如何允许跨域?[more]
  • TCP/UDP 的区别? TCP 粘包是怎么回事,如何处理? UDP 有粘包吗?[more]
  • TIME_WAIT是什么情况? 出现过多的TIME_WAIT可能是什么原因?[more]
  • ECONNRESET 是什么错误? 如何复现这个错误?
  • socket hang up 是什么意思? 可能在什么情况下出现?[more]
  • hosts 文件是什么? 什么叫 DNS 本地解析?
  • 列举几个提高网络传输速度的办法?

阅读更多

OS

  • [Doc]TTY
  • [Doc]OS (操作系统)
  • [Doc]命令行参数
  • [Basic]负载
  • [Point]CheckList

常见问题

  • 什么是 TTY? 如何判断是否处于 TTY 环境?[more]
  • 不同操作系统的换行符 (EOL) 有什么区别?[more]
  • 服务器负载是什么概念? 如何查看负载?[more]
  • ulimit 是用来干什么的?[more]

阅读更多

错误处理/调试/优化

  • [Doc]Errors (异常)
  • [Doc]Domain (域)
  • [Doc]Debugger (调试器)
  • [Doc]C/C++ 插件
  • [Doc]V8
  • [Point]内存快照
  • [Point]CPU profiling

常见问题

  • 怎么处理未预料的出错? 用 try/catch ,domains 还是其它什么?[more]
  • 什么是uncaughtException事件? 一般在什么情况下使用该事件?[more]
  • domain 的原理是? 为什么要弃用 domain?[more]
  • 什么是防御性编程? 与其相对的 let it crash 又是什么?
  • 为什么要在 cb 的第一参数传 error? 为什么有的 cb 第一个参数不是 error, 例如 http.createServer?
  • 为什么有些异常没法根据报错信息定位到代码调用? 如何准确的定位一个异常?[more]
  • 内存泄漏通常由哪些原因导致? 如何分析以及定位内存泄漏?[more]

阅读更多

整理中的专题

  • 测试
  • util
  • 存储
  • 安全

最后

目前 repo 处于施工现场的情况,如果发现问题欢迎在 issues 中指出。如果有比较好的问题/知识点/指正,也欢迎提 PR。

另外关于
Js 基础
是个比较大的话题,在本教程不会很细致深入的讨论,更多的是列出一些重要或者更服务端更相关的地方,所以如果你拿着《JavaScript 权威指南》给教程提 PR 可能不会采纳。本教程的重点更准确的说是服务端基础中 Node.js 程序员需要了解的部分。

转载:http://cnodejs.org/topic/58ad76db7872ea0864fedfcc

个人建了前端学习群,旨在一起学习前端。纯净、纯粹技术讨论,非前端人员勿扰!入群加我微信:iamaixiaoxiao。


更多相关文章

  1. python:如何在Linux中编写守护进程
  2. Python标准库06 子进程 (subprocess包)
  3. Python3 串口两进程同时读写
  4. 与kubectl exec运行后台进程
  5. 基础入门_Python-进线协程.分分钟玩转multiprocessing多进程编程
  6. python使用多进程爬取图片
  7. Python随心记--进程、线程
  8. 我需要一个django-芹菜守护进程来监听特定的rabbitmq通道
  9. python + selenium多进程分摊爬虫任务基础

随机推荐

  1. Android手势滑动(左滑和右滑)
  2. 用网络adb连接调试Android
  3. Android常见问题总结(七)
  4. Android BitmapShader 实战 实现圆形、圆
  5. android binder机制之--(我是Server Porxy
  6. IOS与Android的session的存储区别
  7. Android Activity生命周期
  8. Android ListView内存优化
  9. Android studio项目不能编译,提示设备版本
  10. Android数据库代码备忘