diff --git a/sections/en-us/README.md b/sections/en-us/README.md
index efb06f8..75241bd 100644
--- a/sections/en-us/README.md
+++ b/sections/en-us/README.md
@@ -1,4 +1,4 @@
-
+
## Guide
@@ -15,7 +15,7 @@
**Common Problem**
-[View more](/sections/en-us/js-basic.md)
+[View more](/sections/en-us/common.md)
## [Module](/sections/en-us/module.md)
diff --git a/sections/en-us/common.md b/sections/en-us/common.md
index 08c5269..8c0425c 100644
--- a/sections/en-us/common.md
+++ b/sections/en-us/common.md
@@ -3,8 +3,8 @@
* [`[Common]` Type judgment](/sections/en-us/common.md#Type-judgement)
* [`[Common]` Scope](/sections/en-us/common.md#Scope)
* [`[Common]` Reference](/sections/en-us/common.md#Reference)
-* `[Common]` Memory release
-* `[Common]` ES6+ features
+* [`[Common]` Memory release](/sections/en-us/common.md#Memory-release)
+* [`[Common]` ES6+ features](/sections/en-us/common.md#ES6-features)
## Summary
@@ -46,3 +46,66 @@ Sometimes, we ask about the difference between `==` and `===`. And then, `true`
Note 1: For senior candidates, you are expected to question directly on the question. e.g. There is no pass by reference in JavaScript. There is call by sharing. Read about [Is JavaScript a pass-by-reference or pass-by-value language?](http://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language). Though it is advanced, it is common for senior developer with more than 3 years experiences.
If C++ is mentioned in resume, it is certain to ask `what is the difference between pointer and reference`.
+
+## Memory release
+
+> When will each types and each scope of variables be released in JavaScript?
+
+If reference was no longer referenced, it would be collected by the GC of V8. If a value variable was inside a closure, it wouldn't be release until the closure was no longer referenced. In non-closure scope, it will be collected when V8 is switched to new space.
+
+In contrast to frontend JavaScript, a Node.js developer with more than 2 years experience should care about memory. Though you may not understand in depth, you had better have a basic concept of memory release and start to pay attention to memory leaks.
+
+You need to know which operations lead to memory leaks, or even crash the memory. For example, will the code segment given below fill up with all of V8's memory?
+
+```javaScript
+let arr = [];
+while(true)
+ arr.push(1);
+```
+
+Then, what's the difference between this one and the above?
+
+```javaScript
+let arr = [];
+while(true)
+ arr.push();
+```
+
+If a `Buffer` was pushed, what would happen?
+
+```javaScript
+let arr = [];
+while(true)
+ arr.push(new Buffer(1000));
+```
+
+After thinking about the aboves, try to figure out what else can fill up with V8's memory. And then let's talk about memory leaks.
+
+```javaScript
+function out() {
+ const bigData = new Buffer(100);
+ inner = function () {
+ void bigData;
+ }
+}
+```
+
+Closure references variable from its parent. If it is not released, a memory leak happens. The example above shows `inner` is under the root, which causes a memory leak (`bigData` is not released).
+
+For senior candidates, you need to know the mechanism of GC in V8 and know how memory snapshot (which will be discussed in chapter of `Debug/Optimization`) works. e.g. Where do V8 store different types of data? What are the specific optimizing strategies for different areas when doing memory release?
+
+## ES6 features
+
+We recommend a [ECMAScript 6 Tutorial](http://es6.ruanyifeng.com/) book from @ruanyifeng (in Chinese).
+
+The basic questions can be the differences between `let` and `var`, and between `arrow function` and `function`.
+
+To go deeper, there are lots of details in es6, such as `reference` together with `const`. Talk about `Set` and `Map` in context of usage and disadvantages of `{}`. Or it can be about the privatization and `symbol`.
+
+However, it is unnecessary to ask `what is a closure?`. Instead, we'd like to ask about the application of closures. e.g. If interviewer usually uses closure to make data private, then we may ask can new features (e.g. `class` and `symbol`) be private? If true, then why we need closure here? When will data in a closure be released? And so on.
+
+For `...`, how to implement deletion of duplicated for an array (Bonus point for using Set).
+
+> Is it possible for an element in a const Array be modified? If possible, what's the effect of const?
+
+The elements can be modified. And it protects the reference, which cannot be modified (e.g. [Map](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map) is sensitive to reference and it need const. Besides, it is also suitable for immutable).
diff --git a/sections/en-us/error.md b/sections/en-us/error.md
index c36bde0..1c69be4 100644
--- a/sections/en-us/error.md
+++ b/sections/en-us/error.md
@@ -231,7 +231,7 @@ You can see the latest news about this module at: [deprecate domains](https://gi
Command line debug tool like gdb (Build-in debugger in the image above), it also supports remote debug (like [node-inspector](https://github.com/node-inspector/node-inspector), but still in trial). Of course, many developers feel that [vscode](https://code.visualstudio.com/) has maken a better integration to the debug tools.
-We recommend reading [official ducoment](https://nodejs.org/dist/latest-v6.x/docs/api/debugger.html) to learn how to use this build-in debugger. If you want to dig deeper, see: [Modify the value of a variable in the NodeJS program dynamically](http://code.oneapm.com/nodejs/2015/06/27/intereference/)
+We recommend reading [official document](https://nodejs.org/dist/latest-v6.x/docs/api/debugger.html) to learn how to use this build-in debugger. If you want to dig deeper, see: [Modify the value of a variable in the NodeJS program dynamically](http://code.oneapm.com/nodejs/2015/06/27/intereference/)
## C/C++ Addon
diff --git a/sections/en-us/process.md b/sections/en-us/process.md
index 29a54da..7dfadc1 100644
--- a/sections/en-us/process.md
+++ b/sections/en-us/process.md
@@ -27,7 +27,7 @@ For more details about the process and the operating system, you can read the AP
## Process
-Here we will discuss the `project` object in Node.js. It can be printed out by using `console.log (process)` in the code. You can see the process object exposed a lot of useful properties and methods. For more details you can refer [Official document](https://nodejs.org/dist/latest-v6.x/docs/api/process.html), which has been very detailed,
+Here we will discuss the `process` object in Node.js. It can be printed out by using `console.log (process)` in the code. You can see the process object exposed a lot of useful properties and methods. For more details you can refer [Official document](https://nodejs.org/dist/latest-v6.x/docs/api/process.html), which has been very detailed,
including but not limited to:
* The basic information of the process
diff --git a/sections/zh-cn/README.md b/sections/zh-cn/README.md
index 7aad507..a564c04 100644
--- a/sections/zh-cn/README.md
+++ b/sections/zh-cn/README.md
@@ -1,4 +1,4 @@
-
+
# 如何通过饿了么 Node.js 面试
diff --git a/sections/zh-cn/event-async.md b/sections/zh-cn/event-async.md
index cbc511e..4a5b272 100644
--- a/sections/zh-cn/event-async.md
+++ b/sections/zh-cn/event-async.md
@@ -35,7 +35,7 @@ doSth.then(() => {
});
```
-毫无疑问的可以得到一下输出结果:
+毫无疑问的可以得到以下输出结果:
```
hello
@@ -222,6 +222,6 @@ function sleep(ms) {
并行 (Parallel) = 2 队列对应 2 咖啡机.
-Node.js 通过事件循环来挨个抽取事件队列中的一个个 Task 执行, 从而避免了传统的多线程情况下 `2个队列对应 1个咖啡机` 的时候上线文切换以及资源争抢/同步的问题, 所以获得了高并发的成就.
+Node.js 通过事件循环来挨个抽取事件队列中的一个个 Task 执行, 从而避免了传统的多线程情况下 `2个队列对应 1个咖啡机` 的时候上下文切换以及资源争抢/同步的问题, 所以获得了高并发的成就.
至于在 node 中并行, 你可以通过 cluster 来再添加一个咖啡机.
diff --git a/sections/zh-cn/module.md b/sections/zh-cn/module.md
index d7d69b8..5db7128 100644
--- a/sections/zh-cn/module.md
+++ b/sections/zh-cn/module.md
@@ -64,7 +64,7 @@ function require(...) {
> a.js 和 b.js 两个文件互相 require 是否会死循环? 双方是否能导出变量? 如何从设计上避免这种问题?
-② 不会, 先执行的导出空对象, 通过导出工厂函数让对方从函数去拿比较好避免. 模块在导出的只是 `var module = { exports: {} };` 中的 exports, 以从 a.js 启动为例, a.js 还没执行完 exports 就是 `{}` 在 b.js 的开头拿到的就是 `{}` 而已.
+② 不会, 先执行的导出其 **未完成的副本**, 通过导出工厂函数让对方从函数去拿比较好避免. 模块在导出的只是 `var module = { exports: {...} };` 中的 exports, 以从 a.js 启动为例, a.js 还没执行完会返回一个 a.js 的 exports 对象的 **未完成的副本** 给 b.js 模块。 然后 b.js 完成加载,并将 exports 对象提供给 a.js 模块。
另外还有非常基础和常见的问题, 比如 module.exports 和 exports 的区别这里也能一并解决了 exports 只是 module.exports 的一个引用. 没看懂可以在细看我以前发的[帖子](https://cnodejs.org/topic/5734017ac3e4ef7657ab1215).
diff --git a/sections/zh-cn/network.md b/sections/zh-cn/network.md
index 17d6ff8..efe1d15 100644
--- a/sections/zh-cn/network.md
+++ b/sections/zh-cn/network.md
@@ -16,7 +16,7 @@
默认情况下, TCP 连接会启用延迟传送算法 (Nagle 算法), 在数据发送之前缓存他们. 如果短时间有多个数据发送, 会缓冲到一起作一次发送 (缓冲大小见 `socket.bufferSize`), 这样可以减少 IO 消耗提高性能.
-如果是传输文件的话, 那么根本不用处理粘包的问题, 来一个包拼一个包就好了. 但是如果是多条消息, 或者是别的用途的数据那么久需要处理粘包.
+如果是传输文件的话, 那么根本不用处理粘包的问题, 来一个包拼一个包就好了. 但是如果是多条消息, 或者是别的用途的数据那么就需要处理粘包.
可以参见网上流传比较广的一个例子, 连续调用两次 send 分别发送两段数据 data1 和 data2, 在接收端有以下几种常见的情况:
@@ -33,7 +33,7 @@
***方案1***
-只需要等上一段时间再进行下一次 send 就好, 适用于交互频率特别低的场景. 缺点也很明显, 对于比较频繁的场景而言传输效率实在太低. 不过几乎用做什么处理.
+只需要等上一段时间再进行下一次 send 就好, 适用于交互频率特别低的场景. 缺点也很明显, 对于比较频繁的场景而言传输效率实在太低. 不过几乎不用做什么处理.
***方案2***
diff --git a/sections/zh-cn/security.md b/sections/zh-cn/security.md
index d9267ce..798f809 100644
--- a/sections/zh-cn/security.md
+++ b/sections/zh-cn/security.md
@@ -45,7 +45,7 @@ Node.js 的加密貌似有点问题, 某些算法算出来跟别的语言 (比
由 RA 统筹、审核用户的证书申请, 将证书申请送至 CA 处理后发出证书, 并将证书公告至 DS 中. 在使用证书的过程中, 除了对证书的信任关系与证书本身的正确性做检查外, 并透过产生和发布证书废止列表 (Certificate Revocation List, CRL) 对证书的状态做确认检查, 了解证书是否因某种原因而遭废弃. 证书就像是个人的身分证, 其内容包括证书序号、用户名称、公开金钥 (Public Key) 、证书有效期限等.
-在 TLS/SLL 中你可以使用 OpenSSL 来生成 TLS/SSL 传输时用来认证的 public/private key. 不过这个 public/private key 是自己生成的, 而通过 PKI 基础设施可以获得权威的第三方证书 (key) 从而加密 HTTP 传输安全. 目前博客圈子里比较流行的是 [Let's Encrypt 签发免费的 HTTPS 证书](https://imququ.com/post/letsencrypt-certificate.html).
+在 TLS/SSL 中你可以使用 OpenSSL 来生成 TLS/SSL 传输时用来认证的 public/private key. 不过这个 public/private key 是自己生成的, 而通过 PKI 基础设施可以获得权威的第三方证书 (key) 从而加密 HTTP 传输安全. 目前博客圈子里比较流行的是 [Let's Encrypt 签发免费的 HTTPS 证书](https://imququ.com/post/letsencrypt-certificate.html).
需要注意的是, 如果 PKI 受到攻击, 那么 HTTPS 也一样不安全. 可以参见 [HTTPS 劫持 - 知乎讨论](https://www.zhihu.com/question/22795329) 中的情况, 证书由 CA 机构签发, 一般浏览器遇到非权威的 CA 机构是会告警的 (参见 [12306](https://kyfw.12306.cn/otn/)), 但是如果你在某些特殊的情况下信任了某个未知机构/证书, 那么也可能被劫持.
diff --git a/sections/zh-cn/util.md b/sections/zh-cn/util.md
index 70ef812..7be404e 100644
--- a/sections/zh-cn/util.md
+++ b/sections/zh-cn/util.md
@@ -24,7 +24,7 @@
### 转义字符
-常见的需要转移的字符列表:
+常见的需要转义的字符列表:
|字符|encodeURI|
|---|---|