饿了么大前端 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
常见问题
- 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
常见问题
- 什么是 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]
测试
常见问题
- 为什么要写测试? 写测试是否会拖累开发进度?[more]
- 单元测试的单元是指什么? 什么是覆盖率?[more]
- 测试是如何保证业务逻辑中不会出现死循环的?[more]
- mock 是什么? 一般在什么情况下 mock?[more]
util
常见问题
- HTTP 如何通过 GET 方法 (URL) 传递 let arr = [1,2,3,4] 给服务器? [more]
- Node.js 中继承 (util.inherits) 的实现? [more]
- 如何递归获取某个文件夹下所有的文件名? [more]
存储
常见问题
- 备份数据库与 M/S, M/M 等部署方式的区别? [more]
- 索引有什么用,大致原理是什么? 设计索引有什么注意点? [more]
- Monogdb 连接问题(超时/断开等)有可能是什么问题导致的? [more]
- 什么情况下数据会出现脏数据? 如何避免? [more]
- redis 与 memcached 的区别? [more]
安全
[Doc]
Crypto (加密)[Doc]
TLS/SSL[Doc]
HTTPS[Point]
XSS[Point]
CSRF[Point]
中间人攻击[Point]
Sql/Nosql 注入
常见问题
- 加密是如何保证用户密码的安全性? [more]
- TLS 与 SSL 有什么区别? [more]
- HTTPS 能否被劫持? [more]
- XSS 攻击是什么? 有什么危害? [more]
- 过滤 Html 标签能否防止 XSS? 请列举不能的情况? [more]
- CSRF 是什么? 如何防范? [more]
- 如何避免中间人攻击? [more]
最后
目前 repo 处于施工现场的情况,如果发现问题欢迎在 issues 中指出。如果有比较好的问题/知识点/指正
,也欢迎提 PR。
另外关于 Js 基础
是个比较大的话题,在本教程不会很细致深入的讨论,更多的是列出一些重要或者更服务端更相关的地方,所以如果你拿着《JavaScript 权威指南》给教程提 PR 可能不会采纳。本教程的重点更准确的说是服务端基础中 Node.js 程序员需要了解的部分。
赞
赞
赞
前几天在github上看到你们这个面试啊,excited。
可是只有我是从node入门写着写着变成浏览器端的了么。。。而且还觉得,nodejs没有浏览器端好玩?
mark
来自酷炫的 CNodeMD
超棒的~ 饿了么也跳进weex的坑了
赞
赞
很棒
已 star ! 期待 eleme 越来越强! 👏
赞
顶一下 写的很nice 楼主对linux有很深入的了解
赞
弱弱的问一句,饿了么大前端进阶 == 资深nodejs后端吗?为什么放在这个章节下面,有些小好奇。一直以为nodejs做后端是一个很冷门的路子,走的人不多。看完前面的面试题后,我感觉nodjes的后端路子还是能走的很精彩的; BTW:写这份面试题的人,一定是一个linux服务端大牛(从守护进程的实现感受到,不甘使用现有工具,努力造轮子的心); Ps:最近在找nodejs后端相关工作,希望有机会聊聊:)
mark
赞。
学习👍
厉害了👍! ——来自吴小粥的cnode-react手机版
很好,目前自学node中!
Mark.
赞赞赞!!
已收藏~~~ 对于自学者太重要了
fork
感谢分享
来自酷炫的 CNodeMD
比较全的Node后端面试题。
太棒啦,github已粉
Mark
2017.3.1 更新 Network 专题, 添加在线阅览页 https://elemefe.github.io/node-interview/
Mark
network的链接写错了
感谢分享,在对的时间遇到对的资源,嘿嘿
@reverland 服务器端比浏览器好玩多了。我现在es7直接在node上玩,连babel都不用。webpack之类的更不用动。爽的很。
mark
赞
mark
来自酷炫的 CNodeMD
赞一下,这个用来查漏补缺还是挺不错的
好东西啊😝
来自酷炫的 CNodeMD
6666 From Noder
赞。
顶
cool
赞一个
赞 PS: markdown里的JS的完整书写(JavaScript),第二个S要大写吧
支持下饿了么大前端
👍
天天啥都用现成的库,导致我现在狗屁不通啊!!!!
@lileilei 会用库也是一种技能啊
很有用
顶
更新了 os, 错误处理 两个专题, 感谢各位支持 ( ̄▽ ̄)~*
@think2011 123
source vue-cnode mobile 2.0
123
source vue-cnode mobile 2.0
mark
mark
很赞
很赞
123 来自vue-cnode
mark 来自vue-cnode
学习了 支持下
mark
mark! 来自 CNodeJS ionic2
赞,大前端牛逼
大赞
从头到尾撸了一遍感觉压力好大
看完之后感觉自己这几年的nodejs白用了
mark一下
source vue-cnode mobile 2.0
赞<br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
这个太好了
mark , study
赞
@lsqy test
source vue-cnode mobile 2.0
mark
source vue-cnode mobile 2.0
写的不错,最近在看,感觉大前端就是各种端,各种引擎,各种node架构起来的各种优化
收藏了,支持下
赞
@honggin赞一个
力赞! Mark!
感谢分享
FYI:
调整了内容, 关于 path
的模块的内容新增至 OS
部分, 新添加 测试
与 util
相关的内容. 目前只整理了大概, 还有不少缺漏, 如果有同学有兴趣可以帮忙查漏补缺.
厉害
来自酷炫的 CNodeMD
学习了
source vue-cnode mobile 2.0
aa
aa
321321
source vue-cnode mobile 2.0
nice<br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
很不错!
mark
水好深,只有膜拜的份儿了
1111111
2341234
很不错 学习了
谢谢分享~~~~~~~
@reverland 表示作为一个写node的后端工程师很难被人理解
测试 From Noder
受教了 From Noder
很不错的教程
好文章,已mark!
非常好的文章, 最近自己还是node.js学习的初级阶段, 对我有很大帮助.
好 From Noder
最后两个分类也更新了, 整个 12 个分类基本内容都有了, 不过目前文中还有不少地方有缺漏, 欢迎反馈 / 提 issue / 提 PR
mark
test
赞
@jinyuaa 加油一个
写的很棒,努力看给自己充电!
undefined
这篇文章写的很好,对哟有很大帮助
很赞
查漏补缺
家家户户
From Noder
厉害
@rebornchris ddd
6666666
@E-GreeHe 逗 自豪地采用 CNodeJS ionic
北海道姑姑养的丫丫的
@E-GreeHe 真巧啊
迪斯科解放
迪斯科解放
这个好呀,厉害!
mark From Noder
nice!
@jinyuaa厉害
请问如何与其他异构系统(java)进行消息通信呢?分布式消息?保证事务?
@reverland 说的很好
@YuJiusihuanian 你这样毫无意义的@ 别人是会被封的,我告诉你啊
@hezhongfeng 好的,谢谢啦
import yun from 'yun-ui'
import 'yun-ui/dist/yun/index.css'
Vue.use(yun)
@reverland = = 哪里都能见到学长大触
来自酷炫的 CNodeMD
fork
123
赞 自豪地采用 CNodeJS ionic
感谢大神的分享啊
我也想要好好学node
学好node 学好javascript
6666<p><br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a></p>
大神求带
赞赞赞。。已star
😯 From Noder
好东西
来自酷炫的 CNodeMD
03
不错<br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
赞 自豪地采用 CNodeJS ionic
<p>都是大牛啊</p>
@jinyuaa 测试
@dfsq1311 测试测试
写的很有心,饿了么在node技术栈的实践上有非常不错的探索。迅雷前端团队在node实践上也有不错的经验,在深圳的朋友也可以来聊下。 如何聊?
支持
支持
mark
最近在看里面的内容,吐槽一下,好多地方语句不通,虽然也能明白啥意思但是感觉别扭,不过总体来说很不错,总结的很全面,在多一些插图会更好
@dlyt 赞
source vue-cnode mobile 2.0
aaaa
大赞
1<br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
Mark一下,感觉自己什么都不懂啊,努力学习
学习了
真的很赞,感谢无私奉献的开源精神!!!
来自酷炫的 CNodeMD
学习了
@owldamon 学习
@mia1232 学习了
这个厉害了
@reverland 学习了
感觉有好多功课要补了
mark
来自酷炫的 CNodeMD
马克 自豪地采用 CNodeJS ionic
test
good!!!
makr
666
666
马克 自豪地采用 CNodeJS ionic
不错 过来学习下
粗体
@lellansin 测试一下回复功能
赞
很棒
来自酷炫的 CNodeMD
很棒
来自酷炫的 CNodeMD
@Mrlyj解决户口规划局规划 <br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
@Mrlyjoutlook <br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
@Mrlyjoutlook <br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
@Mrlyjoutlook <br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
test
test1
收益很多 <br><br>来自<a href=“https://lzxb.github.io/react-cnode/” target="_blank">react-cnode手机版</a>
赞
@Mrlyjoutlook 的确很赞
现在就会用个node操作下数据库 做个增删改查,哎
收藏一下,很赞
6666
excited!!!
为毛没有算法相关的。。。。
赞一下
再赞一下09121314
这文章适合面试
来自酷炫的 CNodeMD
赞
@zhigangwu 赞 From Noder
赞
@FateZeros 赞一下
@Mrlyjoutlook <br><br>来自<a href=“https://lzxb.github.io/react-cnode/” target="_blank">react-cnode手机版</a>
非常有帮助,谢谢!
非常有帮助,谢谢!
HttpService <br><br>来自<a href=“https://lzxb.github.io/react-cnode/” target="_blank">react-cnode手机版</a>
HttpService <br><br>来自<a href=“https://lzxb.github.io/react-cnode/” target="_blank">react-cnode手机版</a>
ssa <br><br>来自<a href=“https://lzxb.github.io/react-cnode/” target="_blank">react-cnode手机版</a>
好东西,收藏~
tt<br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
由于刚接触NodeJS,现在是只要相关的教程,我都要看一下,呵呵
dd
iPhone8
Mark
eqw
赞 From Noder
好东西
赞
说得好,我很赞同·······
fgggggg
this.is = test
好东西!
观光团到此一游
赞 自豪地采用 CNodeJS ionic
全栈,对涉及的问题大概只有不到一半的了解,看来需要学习的还有很多。
感謝整理與分享!
顶顶
顶
测试
1
5a03d21b84ed7ceb219ea83d
5a03d21b84ed7ceb219ea83d
5a03d21b84ed7ceb219ea83d
5a03d21b84ed7ceb219ea83d
@xrr20160322 11111
source vue-cnode mobile 2.0
zan
zan
很好, 受益匪浅, 正在学习中…
mark
来自酷炫的 CNodeMD
mark
除了仰望,还是仰望
了解一下
了解一下
1
不错
来自酷炫的 CNodeMD
学习一下
zan
为什么前面几节404了啊
来自酷炫的 CNodeMD
nice
@cfywan 测试一下,哈哈
来自拉风的 Taro-cnode
写的确实很棒 👍
来自酷炫的 CNodeMD