如何通過餓了么 Node.js 面試

gapz4651 7年前發布 | 12K 次閱讀 Node.js Node.js 開發

如何通過餓了么 Node.js 面試

本文針對的并不是零基礎的同學, 你需要有一定的 JavaScript/Node.js 基礎, 并且有一定的工作經驗. 另外本教程的重點更準確的說是服務端基礎中 Node.js 程序員需要了解的部分.

如果你覺得大多不了解, 就不用投簡歷了

(這樣兩邊都節約了時間) , 如果你覺得大都有了解或者 光看大綱都都覺得很簡單那么歡迎投遞簡歷至 ElemeFe

.

導讀

雖然說目的是要通過面試, 但是本教程并不是簡單的把所有面試題列出來, 而主要是將面試中需要確認你是否懂的點列舉出來, 并進行一定程度的討論.

本文將一些常見的問題劃分歸類, 每類標明涵蓋的一些 覆蓋點 , 并且列舉幾個 常見問題 , 通常這些問題都是 2~3 年工作經驗需要了解或者面對的. 如果你對某類問題感興趣, 或者想知道其中列舉問題的答案, 可以通過該類下方的 閱讀更多 查看更多的內容.

整體上大綱列舉的并不是很全面, 細節上覆蓋率不高, 很多討論只是點到即止, 希望大家帶著問題去思考.

Js 基礎問題

覆蓋點

常見問題

  • js 中什么類型是引用傳遞, 什么類型是值傳遞? 如何將值類型的變量以引用的方式傳遞? [more]
  • js 中, 0.1 + 0.2 === 0.3 是否為 true ? 在不知道浮點數位數時應該怎樣判斷兩個浮點數之和與第三數是否相等?
  • const 定義的 Array 中間元素能否被修改? 如果可以, 那 const 的意義是? [more]
  • Javascript 中不同類型以及不同環境下變量的內存都是何時釋放? [more]

閱讀更多

模塊

與前端 Js 不同, 后端是直面服務器的, 更加偏向內存方面, 對于一些更基礎的問題也會更加關注.

常見問題

  • 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

常見問題

  • HTTP 協議中的 POST 和 PUT 有什么區別?
  • TCP/UDP 的區別? TCP 粘包是怎么回事,如何處理? UDP 有粘包嗎?
  • time_wait 是什么情況?出現過多的 close_wait 可能是什么原因?
  • socket hang up 是什么意思? 一般什么情況下出現?
  • 列舉幾個提高網絡傳輸速度的辦法?

更多整理中

OS

  • [Doc] TTY
  • [Doc] OS (操作系統)
  • [Doc] 命令行參數
  • [Basic] 負載
  • [Basic] 指標
  • [Point] CheckList

常見問題

  • 服務器負載是什么概念? 如何計算負載?
  • ulimit 是用來干什么的?

更多整理中

錯誤處理/調試/優化

  • [Doc] Errors (異常)
  • [Doc] Domain (域)
  • [Doc] Debugger (調試器)
  • [Doc] C/C++ 插件
  • [Doc] V8
  • [Point] 內存快照
  • [Point] CPU剖析

常見問題

  • 怎么處理未預料的出錯?用 try/catch ,domains 還是其它什么?
  • domain 的原理是? 為什么要棄用 domain?
  • 為什么要在 cb 的第一參數傳 error? 為什么有的 cb 第一個參數不是 error, 例如 http.createServer?

更多整理中

測試

  • [Basic] 單元測試
  • [Basic] 基準測試
  • [Basic] 集成測試
  • [Doc] Assert (斷言)
  • [Module] 常見測試工具
  • [Module] 常見斷言工具

常見問題

  • 為什么要寫測試? 寫測試是否會拖累開發進度?
  • 單元測試的單元是指什么? 什么是覆蓋率?
  • 測試是如何保證業務邏輯中不會出現死循環的?
  • mock 是指什么? 一般如何實現?

更多整理中

util

  • [Doc] URL
  • [Doc] Path (路徑)
  • [Doc] Utilities (實用函數)
  • [Doc] Query Strings (查詢字符串)
  • [Basic] 正則表達式

  • 如何獲取某個文件夾下所有的文件名?

更多整理中

存儲

  • [Point] Sql
  • [Point] NoSql
  • [Point] 緩存
  • [Point] 數據一致性

常見問題

  • 索引有什么用,大致原理是什么?設計索引有什么注意點?
  • Session/Cookie 有什么區別?
  • 連接超時有可能是什么問題導致的?
  • 什么情況下數據會出現臟讀? 如何避免?

更多整理中

安全

  • [Point] XSS
  • [Point] CSRF
  • [Point] 中間人攻擊
  • [Point] Sql/Nosql 注入攻擊
  • [Doc] Crypto (加密)

常見問題

  • CSRF 的攻擊和防范方法?
  • 加密如何保證用戶密碼的安全性?
  • 如何避免中間人攻擊?

 

 

來自:https://github.com/ElemeFE/node-interview

 

 本文由用戶 gapz4651 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!