nodejs基礎知識

餓了麼面試:https://elemefe.github.io/node-interview/#/sections/zh-cn/node

node流的概念:http://www.javashuo.com/article/p-zdxliltq-r.htmlgit

node的單線程github

node.js單線程只是一個js主線程,本質上的異步操做仍是由線程池完成的,node將全部的阻塞操做都交給了內部的線程池去實現,自己只負責不斷的往返調度,
並無進行真正的I/O操做,從而實現異步非阻塞I/O。
重點在主線程爲單線程,主線程執行代碼造成一個執行棧
主線程以外維護一個事件隊列,當IO或異步操做,會將事件放到Event queue中,並不會執行且繼續執行主線程代碼,不會阻塞,直到主線程代碼完畢。
主線程執行完畢,循環去取事件,用線程池線程去執行事件。當有事件執行完畢後,會通知主線程,主線程執行回調,線程歸還給線程池。面試

必定注意異步問題,可以使用promise,實現代碼以下數據庫

 1 // 遇到須要同步執行的代碼,promise化,await執行,外層必定要有async
 2 function formImage() {
 3     return new Promise((resolve, reject) => {
 4         form((opt, {fields, files})=> {
 5             console.log(files)
 6             let filename = files.file.name
 7             console.log(files.file.path)
 8             let uploadDir = config.ROOTPATH + `/tmp/${roomId}/`
 9             let relativePath =  `/tmp/${roomId}/` + Date.now() + '_' + filename
10             mkdirs(uploadDir, () => {
11                 fs.renameSync(files.file.path, config.ROOTPATH + relativePath) //重命名
12                 resolve(relativePath)
13             })
14         })
15     })
16 }
17 let p = await formImage();
View Code

Node.js等則規定在JavaScript的回調函數的第一個參數爲 Error 對象,這也是它的一個慣例。
npm install packageName --save //安裝到項目目錄下,並在package.json文件的dependencies中寫入依賴,簡寫爲-S
數據類型symbol:爲了解決屬性名重複的問題,symbol值是經過symbol函數生成的,確定是獨一無二npm

class:constructor方法是類的默認方法,經過new命令生成對象實例時,自動調用該方法。一個類必須有constructor方法,若是沒有顯式定義,一個空的constructor方法會被默認添加。
調用要用 new Class()json

事件驅動的過程promise

全部的東西包裝成一個對象,執行了一個事件循環異步

​ 事件驅動,把全部的東西都當成一個事件async

while(true){ // 無限循環 }

###不一樣的異步,不一樣的優先級

while(true){ 第一步: 執行script(所有的代碼) 先去清空micor-task隊列的事件,去把這裏面的所有執行完 再去找 setInterval 執行 再去清空micor-task隊列 再去找 setImmediate 執行,再去清空micor-task隊列 再去 I/O 操做 再去清空micro-task隊列 }

雖然都是異步,可是是有優先級的

macro-task:隊列 script(所有的代碼)

script(所有的代碼) setInterval() setTimeout() setImmediate() I/O操做(讀寫,查詢數據庫) 他們都是同步的,可是他們的回調函數是異步的

micro-task:隊列

process.nextTick() Promise().then()

注意 setInterval()和setTimeout()優先級是同樣的

異步事件的優先級

nextTick > Promise.then > setTimeout > setImmediate
相關文章
相關標籤/搜索