跳到主要内容
CNode

饿了么大前端 Node.js 进阶教程

精华分享
Llellansin发布于 9 年前最后回复 8 年前
2649522170
目录 · 12 个章节

untitled4.png

饿了么大前端 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

常见问题

  • 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]

阅读更多

错误处理/调试/优化

常见问题

  • 怎么处理未预料的出错? 用 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]

阅读更多

安全

常见问题

  • 加密是如何保证用户密码的安全性? [more]
  • TLS 与 SSL 有什么区别? [more]
  • HTTPS 能否被劫持? [more]
  • XSS 攻击是什么? 有什么危害? [more]
  • 过滤 Html 标签能否防止 XSS? 请列举不能的情况? [more]
  • CSRF 是什么? 如何防范? [more]
  • 如何避免中间人攻击? [more]

阅读更多

最后

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

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

查看回复

回复 (264)

Q
Q-Angelo#2648 年前

写的确实很棒 👍

来自酷炫的 CNodeMD

I
icai#2638 年前
引用 cfywandd iPhone8

@cfywan 测试一下,哈哈

来自拉风的 Taro-cnode

P
pretty-foam#2628 年前

nice

W
wanhua1993#2618 年前

为什么前面几节404了啊

来自酷炫的 CNodeMD

J
jypblue#2608 年前

zan

S
sstruct#2598 年前

学习一下

F
flylib#2588 年前

不错

来自酷炫的 CNodeMD

Y
YangCongZhao#2578 年前

1

L
liyujian3225#2568 年前

来自酷炫的 CNodeMD

J
JinhuaYu#2558 年前

了解一下

J
JinhuaYu#2548 年前

了解一下

C
cleaverlove#2538 年前

除了仰望,还是仰望

Y
y5ma#2528 年前

mark

U
uniqueann#2518 年前

mark

来自酷炫的 CNodeMD

L
lvyueyang#2508 年前
G
gmw-zjw#2499 年前

很好, 受益匪浅, 正在学习中...

D
dongeast#2489 年前

zan

D
dongeast#2479 年前

zan

X
xzq8#2469 年前
Z
ZongDuCha#2459 年前

5a03d21b84ed7ceb219ea83d

Z
ZongDuCha#2449 年前

5a03d21b84ed7ceb219ea83d

Z
ZongDuCha#2439 年前

5a03d21b84ed7ceb219ea83d

Z
ZongDuCha#2429 年前

5a03d21b84ed7ceb219ea83d

Z
ZongDuCha#2419 年前

1

Z
ZongDuCha#2409 年前

测试

S
sxy1990#2399 年前

W
woshixiekunyu#2389 年前

顶顶

K
kevinbird61#2379 年前

感謝整理與分享!

L
lyh2668#2369 年前

全栈,对涉及的问题大概只有不到一半的了解,看来需要学习的还有很多。

A
Ant-passerby#2359 年前

赞 自豪地采用 CNodeJS ionic

K
KangZhiDong#2349 年前

观光团到此一游

R
royshu#2339 年前

好东西!

J
Jugg0#2329 年前

this.is = test

W
wangjunsen-1010#2319 年前

fgggggg

W
Wzhaoli#2309 年前
引用 cllgeek

@cllgeek

Y
YangXinYu97#2299 年前

说得好,我很赞同·······

O
onebook0505#2289 年前

F
flyfish008#2279 年前

好东西

Z
zhigangwu#2259 年前

赞 From Noder

C
chikeiswang#2249 年前
 ![Image](http://resource) 

来自酷炫的 CNodeMD

L
liuoulin#2239 年前

eqw

J
Juliiii#2229 年前

Mark

C
cfywan#2219 年前

dd

iPhone8

D
Damhoo#2209 年前

由于刚接触NodeJS,现在是只要相关的教程,我都要看一下,呵呵

G
guofuming#2199 年前
S
SunShinewyf#2189 年前

好东西,收藏~

A
angleone#2179 年前
L
LRY1994#2169 年前

HttpService



来自react-cnode手机版

L
LRY1994#2159 年前

HttpService



来自react-cnode手机版

B
Bob-huang-gdut#2149 年前

非常有帮助,谢谢!

B
Bob-huang-gdut#2139 年前

非常有帮助,谢谢!

X
xiaoweiwei1231#2119 年前
引用 FateZeros再赞一下09121314

@FateZeros 赞一下

L
leichangchun#2109 年前

Y
yiRiver#2099 年前
Z
zhigangwu#2089 年前
引用 zhigangwu

@zhigangwu 赞 From Noder

Z
zhigangwu#2079 年前

F
fuerpeng#2069 年前

这文章适合面试

来自酷炫的 CNodeMD

F
FateZeros#2059 年前

再赞一下09121314

F
FateZeros#2049 年前

赞一下

Y
YUFENGWANG#2039 年前

为毛没有算法相关的。。。。

Y
YUFENGWANG#2029 年前

excited!!!

L
LuckyJQ#2019 年前

6666

A
AmazingLynch#2009 年前

收藏一下,很赞

D
dengnan123#1999 年前

现在就会用个node操作下数据库 做个增删改查,哎

C
chenshenghui340#1989 年前
引用 Mrlyjoutlook

@Mrlyjoutlook 的确很赞

C
chenshenghui340#1979 年前

A
AmazingLynch#1969 年前

收益很多



来自react-cnode手机版

C
chouhui#1959 年前

test1

C
chouhui#1949 年前

test

Z
z739778#1939 年前
Z
z739778#1929 年前
Z
z739778#1919 年前
Z
z739778#1909 年前
引用 Mrlyjoutlook

@Mrlyj解决户口规划局规划

I‘m webapp-cnodejs-vue

W
wangchang163#1899 年前
  1. fghh

来自酷炫的 CNodeMD

W
wangchang163#1889 年前

Dssdd

  1. xxddf

来自酷炫的 CNodeMD

T
TakWolf#1879 年前

很棒

来自酷炫的 CNodeMD

T
TakWolf#1869 年前

很棒

来自酷炫的 CNodeMD

B
bigtotorouk#1859 年前

R
renzhao1113#1839 年前

粗体

H
huangzh123#1829 年前

不错 过来学习下

A
Ant-passerby#1819 年前

马克 自豪地采用 CNodeJS ionic

I
iherewy#1809 年前

666

I
iherewy#1799 年前

666

X
xuqiuye#1789 年前

makr

K
ken90242#1769 年前

good!!!

Z
zweigao#1759 年前

@Mrlyjoutlook

M
Magic90#1749 年前

test

W
wangdabaoqq#1739 年前
引用 qingruxu1203@owldamon 学习

@qingruxu1203

A
Ant-passerby#1729 年前

马克 自豪地采用 CNodeJS ionic

H
hu-qi#1719 年前

mark

来自酷炫的 CNodeMD

C
chrislbb#1709 年前

感觉有好多功课要补了

P
psytree#1689 年前

这个厉害了

Q
qingruxu1203#1669 年前
引用 owldamon学习了 支持下

@owldamon 学习

Q
qingruxu1203#1659 年前

学习了

L
Liujiangsong#1649 年前

Image

来自酷炫的 CNodeMD

P
pigpigever#1639 年前

真的很赞,感谢无私奉献的开源精神!!!

J
jie51103#1619 年前

Mark一下,感觉自己什么都不懂啊,努力学习

H
haisenbergX#1609 年前
A
artgou#1599 年前

大赞

W
weihui5289#1589 年前

aaaa

X
xumengjing#1579 年前
L
lei2231#1569 年前

最近在看里面的内容,吐槽一下,好多地方语句不通,虽然也能明白啥意思但是感觉别扭,不过总体来说很不错,总结的很全面,在多一些插图会更好

R
ResJay#1559 年前

mark

H
hankewins#1549 年前

支持

P
pengrongjie#1539 年前

支持

H
hellolwq#1529 年前

写的很有心,饿了么在node技术栈的实践上有非常不错的探索。迅雷前端团队在node实践上也有不错的经验,在深圳的朋友也可以来聊下。 如何聊?

M
mia1232#1519 年前

@dfsq1311 测试测试

M
mia1232#1499 年前
1
15826954460#1489 年前

都是大牛啊

W
WananPr1st#1479 年前

赞 自豪地采用 CNodeJS ionic

R
Rockny#1469 年前
T
TTQ99#1459 年前

03

M
mahailong#1449 年前

好东西

来自酷炫的 CNodeMD

C
cuiken#1439 年前

😯 From Noder

W
wangypeng#1429 年前

赞赞赞。。已star

Y
YHp1994#1419 年前

大神求带

S
sqfbeijing#1409 年前
C
cllgeek#1399 年前

学好node 学好javascript

W
wxfkwx#1389 年前

我也想要好好学node

1
15826954460#1379 年前

感谢大神的分享啊

T
tushiner#1369 年前

赞 自豪地采用 CNodeJS ionic

R
renzhao1113#1359 年前

123

D
dajianjian#1349 年前

fork

H
huangzh123#1329 年前

import yun from 'yun-ui' import 'yun-ui/dist/yun/index.css' Vue.use(yun)

H
hezhongfeng#1309 年前

@YuJiusihuanian 你这样毫无意义的@ 别人是会被封的,我告诉你啊

J
johnnychen#1289 年前

请问如何与其他异构系统(java)进行消息通信呢?分布式消息?保证事务?

J
jinyuaa#1279 年前
引用 jinyuaa很赞

@jinyuaa厉害

C
Cydmi#1269 年前

nice!

D
dangyanglim#1259 年前

mark From Noder

Z
zzl81cn#1249 年前

这个好呀,厉害!

S
stjw7098#1239 年前

迪斯科解放

S
stjw7098#1229 年前

迪斯科解放

A
anth-angle#1219 年前
引用 E-GreeHe6666666

@E-GreeHe 真巧啊

S
stjw7098#1209 年前

北海道姑姑养的丫丫的

S
stjw7098#1199 年前
引用 E-GreeHe6666666

@E-GreeHe 逗 自豪地采用 CNodeJS ionic

E
E-GreeHe#1189 年前

6666666

R
rebornchris#1179 年前
S
stjw7098#1169 年前

厉害

C
caoqinhui#1159 年前

家家户户

From Noder

C
caoqinhui#1149 年前
引用 jinyuaa很赞

@jinyuaa 黄金季节

From Noder

T
Tayshin#1139 年前

查漏补缺

J
jinyuaa#1129 年前

很赞

J
jinyuaa#1119 年前

这篇文章写的很好,对哟有很大帮助

X
xiefounder#1109 年前

undefined

L
laokey#1099 年前

写的很棒,努力看给自己充电!

A
aylizhiyuan#1089 年前
引用 jinyuaa

@jinyuaa 加油一个

J
jinyuaa#1079 年前

S
stjw7098#1069 年前

@fronteason

R
rebornchris#1049 年前

test

R
rebornchris#1039 年前

mark

L
lellansin#1029 年前

最后两个分类也更新了, 整个 12 个分类基本内容都有了, 不过目前文中还有不少地方有缺漏, 欢迎反馈 / 提 issue / 提 PR

S
sternelee#1019 年前

好 From Noder

L
literature#1009 年前

非常好的文章, 最近自己还是node.js学习的初级阶段, 对我有很大帮助.

J
JsonMa#999 年前

好文章,已mark!

N
nqdy666#979 年前

很不错的教程

C
CocaCola183#969 年前

受教了 From Noder

Y
yylgit#949 年前

测试 From Noder

S
sxtaosdo#929 年前

谢谢分享~~~~~~~

W
wsgsz#919 年前

很不错 学习了

Z
zhangfan6644777#909 年前

2341234

Z
zhangfan6644777#899 年前

1111111

K
kakanjau#889 年前

水好深,只有膜拜的份儿了

R
rockyou9000#879 年前

mark

H
hzy104#869 年前

很不错!

C
ChEnZYKing#859 年前
H
hbsndg#849 年前

321321

source vue-cnode mobile 2.0

W
weihf#839 年前

aa

W
weihf#829 年前

aa

W
weihf#819 年前

学习了

source vue-cnode mobile 2.0

I
itfanr#809 年前

厉害

来自酷炫的 CNodeMD

L
lellansin#799 年前

FYI: 调整了内容, 关于 path 的模块的内容新增至 OS 部分, 新添加 测试util 相关的内容. 目前只整理了大概, 还有不少缺漏, 如果有同学有兴趣可以帮忙查漏补缺.

Z
zhiqunz#789 年前

感谢分享

J
JailBreakC#779 年前

力赞! Mark!

Z
zentanso#769 年前

@honggin赞一个

S
shaoky#759 年前

C
ChenXiaoMian#749 年前

收藏了,支持下

S
sqliang#739 年前

写的不错,最近在看,感觉大前端就是各种端,各种引擎,各种node架构起来的各种优化

C
ChenXiaoMian#729 年前
L
lsqy#719 年前
M
Mrzzchao#709 年前

D
dfsdfddd#699 年前

mark , study

H
honggin#689 年前

这个太好了

S
shaoky#679 年前
L
lsqy#669 年前

mark一下

source vue-cnode mobile 2.0

L
lovemybb#659 年前

看完之后感觉自己这几年的nodejs白用了

T
tushiner#649 年前

从头到尾撸了一遍感觉压力好大

Y
yezhwi#639 年前

大赞

H
hxc1995#629 年前

赞,大前端牛逼

X
xggaxlc#619 年前

mark! 来自 CNodeJS ionic2

L
lilistyle001#609 年前

mark

O
owldamon#599 年前

学习了 支持下

R
raszxcv#589 年前

mark 来自vue-cnode

R
raszxcv#579 年前

123 来自vue-cnode

J
jason1213#569 年前

很赞

L
leyou319#559 年前

很赞

2
2YANG#549 年前

mark

Y
yongningfu#539 年前

mark

F
feifanyajun#529 年前
F
feifanyajun#519 年前
L
lellansin#509 年前

更新了 os, 错误处理 两个专题, 感谢各位支持 ( ̄▽ ̄)~*

J
JoV5#499 年前

J
JoV5#489 年前

很有用

L
luogue#479 年前

@lileilei 会用库也是一种技能啊

L
lileilei#469 年前

天天啥都用现成的库,导致我现在狗屁不通啊!!!!

D
dognie#459 年前

👍

F
fubst0318#449 年前

支持下饿了么大前端

K
kidbai#439 年前

赞 PS: markdown里的JS的完整书写(JavaScript),第二个S要大写吧

S
shmilysong#429 年前

赞一个

N
norfish#419 年前

cool

F
finmily#409 年前

G
geefQAQ#399 年前

赞。

F
falost#389 年前

6666 From Noder

H
Harveytwo#379 年前

好东西啊😝

来自酷炫的 CNodeMD

M
moonfy#369 年前

赞一下,这个用来查漏补缺还是挺不错的

B
beyondouyuan#359 年前

mark

来自酷炫的 CNodeMD

E
evilcige#349 年前

D
Dengjiansheng#339 年前

mark

S
stonephp#329 年前
引用 reverland前几天在github上看到你们这个面试啊,excited。 可是只有我是从node入门写着写着变成浏览器端的了么。。。而且还觉得,nodejs没有浏览器端好玩?

@reverland 服务器端比浏览器好玩多了。我现在es7直接在node上玩,连babel都不用。webpack之类的更不用动。爽的很。

P
poppowerlb2#319 年前

感谢分享,在对的时间遇到对的资源,嘿嘿

L
luoyjx#309 年前

network的链接写错了

B
boySanGeDiao#299 年前

Mark

L
lellansin#289 年前

2017.3.1 更新 Network 专题, 添加在线阅览页 https://elemefe.github.io/node-interview/

J
jude-liu#279 年前

Mark

A
AyumiKai#269 年前

太棒啦,github已粉

O
OtherRuan#259 年前

比较全的Node后端面试题。

S
sc-yuns#249 年前

感谢分享

来自酷炫的 CNodeMD

S
shmilysong#239 年前

fork

J
jerossh#229 年前

已收藏~~~ 对于自学者太重要了

J
jowang2016#219 年前

赞赞赞!!

L
LonelyLiaR#209 年前

Mark.

Y
YouNOFish#199 年前

很好,目前自学node中!

X
xiaozhouwu#189 年前
T
Tonyce#179 年前

学习👍

C
Chalin-Shi#169 年前

赞。

L
leehomeok#159 年前

mark

H
haozxuan#149 年前

弱弱的问一句,饿了么大前端进阶 == 资深nodejs后端吗?为什么放在这个章节下面,有些小好奇。一直以为nodejs做后端是一个很冷门的路子,走的人不多。看完前面的面试题后,我感觉nodjes的后端路子还是能走的很精彩的; BTW:写这份面试题的人,一定是一个linux服务端大牛(从守护进程的实现感受到,不甘使用现有工具,努力造轮子的心); Ps:最近在找nodejs后端相关工作,希望有机会聊聊:)

X
xiashulin#139 年前

B
burning0xb#129 年前

顶一下 写的很nice 楼主对linux有很深入的了解

S
soullcm#119 年前

T
think2011#109 年前

已 star ! 期待 eleme 越来越强! 👏

J
JianShaw#99 年前

很棒

J
JustforNode#89 年前

D
dlyt#79 年前

H
hezhongfeng#69 年前

超棒的~ 饿了么也跳进weex的坑了

X
xrr20160322#59 年前

mark

来自酷炫的 CNodeMD

R
reverland#49 年前

前几天在github上看到你们这个面试啊,excited。

可是只有我是从node入门写着写着变成浏览器端的了么。。。而且还觉得,nodejs没有浏览器端好玩?

A
artisan#39 年前

C
cllgeek#29 年前

M
Mrlyjoutlook#19 年前

参与回复

登录后即可参与回复。登录