Node學習總結 基礎篇

2021-10-08 14:42:14 字數 3248 閱讀 8742

答:值型別:字串(string)、數值(number)、布林值(boolean)、undefined、null、symbol(es6)

引用型別:物件(object)、陣列(array)、函式(function)

答:null是乙個表示 "無" 的物件,轉為數值時為 0;undefined是乙個表示 "無" 的原始值,轉為數值時為nan。

答:值型別:

引用型別:

答:首先要明白資料結構中的棧和堆:

其次,記憶體中的棧區和堆區:

答:在早期的es5中,js的作用域分為兩種,分別為全域性作用域和區域性作用域。之後在es6中新增了塊級作用域,主要通過命令let和const來實現。

es5只有全域性作用域和函式作用域,沒有塊級作用域,會帶來以下問題:

答:1.const定義的變數不可以修改(引用型別可以修改,但是引用始終不變,變得是在堆中的物件或者陣列或者函式),而且必須初始化。

2.var定義的變數可以修改,如果不初始化會輸出undefined,不會報錯。

3.let是塊級作用域,函式內部使用let定義後,對函式外部無影響。

答:簡單來說: == 代表相同, === 代表嚴格相同(型別也必須相同)。

當進行雙等號比較時候:先檢查兩個運算元資料型別,如果相同,則進行===比較,如果不同,則願意為你進行一次型別轉換,轉換成相同型別後再進行比較,而===比較時,如果型別不同,直接就是false。

答:1、for … in

2、object.keys(obj).foreach(key)

3、object.getownpropertynames(obj).foreach(key)

4、reflect.ownkeys(obj).foreach(key)

答:1、for迴圈 + push()

2、concat()

3、es6的擴充套件運算子…

當陣列中有引用物件時,第2和3種是淺拷貝。

答:淺拷貝:只是拷貝索引,不拷貝物件。原物件變化時,新物件也會隨之變化。

深拷貝:拷貝物件。陣列的json.parse(json.stringify(arr))

答:在node中,每乙個js檔案相當於乙個module(這裡node和前端是有區別的),它都會有其獨自的變數空間,require相當於在自己的模組中,拿到其他模組的引用。

同乙個模組被多個模組引用時,該模組的內容只執行一次,第二次載入時會直接在快取中載入(require.cache)。

兩個模組互相迴圈引用,並不會造成死迴圈。(乙個模組獲取另乙個模組的全部引用,而乙個模組只會獲取另乙個模組的未完成的副本)。

大概載入流程:

答:exports只是module.exports的引用,如果module.exports被直接賦值,則exports的賦值不會起作用,例如module.exports='hanjc'。

但是如果是module.exports.name這種增加屬性,則exports會起作用。

答:1、普通函式呼叫:這個情況沒特殊意外,就是指向全域性物件-window。

2、物件函式呼叫:這個相信不難理解,就是哪個函式呼叫,this指向**。

答:promise有三種狀態:pending狀態(進行中)reslove狀態(已成功)reject狀態(已失敗)

答:promise.all接受乙個promise陣列,並行執行陣列中的所有非同步操作,返回結果集。陣列裡面的promise是並行執行的。

答:1. 簡潔(if判斷,巢狀等等地方)。2.錯誤處理(直接用try/catch)。

答:async函式是generator函式的語法糖,用function*定義,方法內用yeild標識,用return返回(),執行時用next進行下乙個步驟。

co 模組:用於 generator 函式的自動執行,返回乙個promise物件。

答:express是乙個自身功能極簡,完全是路由和中介軟體構成乙個web開發框架:從本質上來說,乙個express應用就是在呼叫各種中介軟體。

2、中介軟體分類:內建中介軟體(express.static唯一的內建中介軟體)、自定義中介軟體(自己實現的)、第三方中介軟體(npm匯入的中介軟體,例如bodypaser等等)

3、瀏覽器向伺服器傳送乙個請求後,伺服器直接通過request.定位屬性的方式得到通過request攜帶過去的資料(有使用者輸入的資料和瀏覽器本身的資料資訊)。這中間就一定有乙個函式將這些資料分類做了處理,已經處理好了,最後讓request物件呼叫使用,對的,這個處理資料處理函式就是我們要說的中介軟體。

由此可見,中介軟體可以總結以下幾點:

答:nodejs的執行機制:nodejs主線程主要起乙個任務排程的作用。nodejs用乙個主線程處理所有的請求,將i/o操作交由底下的執行緒池處理。在所有主線程任務執行完成後,主線程處理事件佇列。所以在同步初始化**執行完成後,nodejs會基於事件佇列不停的做事件迴圈。事實上,nodejs執行環境 = 主線程(單執行緒,包括事件佇列) + 執行緒池(工作執行緒池,執行其他工作-多執行緒)

node 的初始化:

事件迴圈

答:1、通過stdin / stdout傳遞json。

用spawn方法拿到子程序的handle,然後用通過stdin/stdout傳遞json。

2、原生ipc支援。

同樣要有一方能夠拿到另一方的

handle

才行。

3、sockets。

4、message queue。

答:在node.js中,記憶體主要分為兩個部分,堆記憶體和棧記憶體。

答:不會,buffer屬於堆外記憶體,不是v8分配的。

答:buffer.allocunsafe建立的 buffer 例項的底層記憶體是未初始化的。 新建立的 buffer 的內容是未知的,可能包含敏感資料。使用 buffer.alloc() 可以建立以零初始化的 buffer 例項。

答:為了高效的使用申請來的記憶體,node採用了slab分配機制。slab是一種動態的記憶體管理機制。node以8kb為界限來來區分buffer為大物件還是小物件,如果是小於8kb就是小buffer,大於8kb就是大buffer。

例如第一次分配乙個1024位元組的buffer,buffer.alloc(1024),那麼這次分配就會用到乙個slab,接著如果繼續buffer.alloc(1024),那麼上一次用的slab的空間還沒有用完,因為總共是8kb,1024+1024 = 2048個位元組,沒有8kb,所以就繼續用這個slab給buffer分配空間。

如果超過8kb,那麼直接用c++底層地宮的slowbuffer來給buffer物件提供空間。

答:rs.setencoding('utf8')

(我試過

iconv

解決,只不過電腦得提前安裝一下)

Node學習總結 網路計算機篇

答 概括 程序和執行緒都是乙個時間段的描述,是cpu工作時間段的描述。首先cpu ram 各種資源 比如顯示卡,光碟機,鍵盤,gps,等等外設 構成我們的電腦,電腦的執行,實際就是cpu和相關暫存器以及ram之間的事情。cpu太快了,當多個任務要執行的時候,在cpu看來就是輪流著來的。執行一段程式 ...

Node學習入門篇(五) Node資料儲存

mysql 1 安裝node mysql模組 npm install mysql2 建立程式邏輯 引入模組 var mysql require mysql 建立表的sql語句 var querysql create table if not exists work id int 10 not nul...

node學習篇之框架express

前面也有提到,和node搭配的框架主要有express koa hapi。express框架比較完善 穩定 文件全 社群大,koa框架比較超前,hapi這個框架的話比較複雜 適合做複雜的大型專案。所以這裡介紹的是express框架和node的乙個搭配。首先,對express框架做乙個簡單的介紹 ex...