餓了麼大前端 Node.js 進階教程

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]

閱讀更多

整理中的專題

  • 測試
  • util
  • 存儲
  • 安全

最後

目前 repo 處於施工現場的情況,如果發現問題歡迎在 issues 中指出。如果有比較好的問題/知識點/指正,也歡迎提 PR。

另外關於 Js 基礎 是個比較大的話題,在本教程不會很細緻深入的討論,更多的是列出一些重要或者更服務端更相關的地方,所以如果你拿着《JavaScript 權威指南》給教程提 PR 可能不會採納。本教程的重點更準確的說是服務端基礎中 Node.js 程序員需要了解的部分。

轉載:http://cnodejs.org/topic/58ad76db7872ea0864fedfcc

個人建了前端學習羣,旨在一起學習前端。純淨、純粹技術討論,非前端人員勿擾!入羣加我微信iamaixiaoxiao。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章