1. 程式人生 > >Interview for JavaScript

Interview for JavaScript

1、webSocket如何相容低瀏覽器?

Adobe Flash Socket 、 ActiveX HTMLFile (IE) 、 基於 multipart 編碼傳送 XHR 、 基於長輪詢的 XHR

2、執行緒與程序的區別

一個程式至少有一個程序,一個程序至少有一個執行緒. 
執行緒的劃分尺度小於程序,使得多執行緒程式的併發性高。 
另外,程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大地提高了程式的執行效率。 
執行緒在執行過程中與程序還是有區別的。每個獨立的執行緒有一個程式執行的入口、順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。 
從邏輯角度來看,多執行緒的意義在於一個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看做多個獨立的應用,來實現程序的排程和管理以及資源分配。這就是程序和執行緒的重要區別。

3、你如何對網站的檔案和資源進行優化?

期待的解決方案包括:
 檔案合併
 檔案最小化/檔案壓縮
 使用 CDN 託管
 快取的使用(多個域名來提供快取)
 其他

4、請說出三種減少頁面載入時間的方法。

 1.優化圖片 
2.影象格式的選擇(GIF:提供的顏色較少,可用在一些對顏色要求不高的地方)
3.優化CSS(壓縮合並css,如margin-top,margin-left...)
4.網址後加斜槓(如www.campr.com/目錄,會判斷這個“目錄是什麼檔案型別,或者是目錄。)
5.標明高度和寬度(如果瀏覽器沒有找到這兩個引數,它需要一邊下載圖片一邊計算大小,如果圖片很多,瀏覽器需要不斷地調整頁面。這不但影響速度,也影響瀏覽體驗。 當瀏覽器知道了高度和寬度引數後,即使圖片暫時無法顯示,頁面上也會騰出圖片的空位,然後繼續載入後面的內容。從而載入時間快了,瀏覽體驗也更好了。) 6.減少http請求(合併檔案,合併圖片)。

5、什麼是 FOUC(無樣式內容閃爍)?你如何來避免 FOUC?

 FOUC - Flash Of Unstyled Content 文件樣式閃爍
 <style type="text/css" media="all">@import "../fouc.css";</style> 
而引用CSS檔案的@import就是造成這個問題的罪魁禍首。IE會先載入整個HTML文件的DOM,然後再去匯入外部的CSS檔案,因此,在頁面DOM載入完成到CSS匯入完成中間會有一段時間頁面上的內容是沒有樣式的,這段時間的長短跟網速,電腦速度都有關係。
 解決方法簡單的出奇,只要在
<head>之間加入一個<link>或者<script>元素就可以了。

6、null和undefined的區別?

undefined是一個表示"無"的原始值,轉為數值時為 當宣告的變數還未被初始化時,變數的預設值為null用來表示尚未存在的物件,常用來表示函式企圖返回一個不存在的物件。

(1)變數被聲明瞭,但沒有賦值時,就等於undefined。 (2) 呼叫函式時,應該提供的引數沒有提供,該引數等於undefined。 (3)物件沒有賦值的屬性,該屬性的值為undefined。 (4)函式沒有返回值時,預設返回undefined。 

 
(1) 作為函式的引數,表示該函式的引數不是物件。 (2) 作為物件原型鏈的終點。

7、new操作符具體幹了什麼呢?

  1、建立一個空物件,並且 this 變數引用該物件,同時還繼承了該函式的原型。
  2、屬性和方法被加入到 this 引用的物件中。
  3、新建立的物件由 this 所引用,並且最後隱式的返回 this 。

var obj  = {};
obj.__proto__ = Base.prototype;
Base.call(obj); 

8、JSON 的瞭解?

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。它是基於JavaScript的一個子集。資料格式簡單, 易於讀寫, 佔用頻寬小{'age':'12', 'name':'back'}

9、js延遲載入的方式有哪些?

defer和async、動態建立DOM方式(建立script,插入到DOM中,載入完畢後callBack)、按需非同步載入js

10、如何解決跨域問題?

   jsonp、 document.domain+iframe、window.name、window.postMessage、伺服器上設定代理頁面

   jsonp的原理是動態插入script標籤

11、ajax過程

(1)建立XMLHttpRequest物件,也就是建立一個非同步呼叫物件.

(2)建立一個新的HTTP請求,並指定該HTTP請求的方法、URL及驗證資訊.

(3)設定響應HTTP請求狀態變化的函式.

(4)傳送HTTP請求.

(5)獲取非同步呼叫返回的資料.

(6)使用JavaScript和DOM實現區域性重新整理.

12、請解釋一下 JavaScript 的同源策略?為什麼要有同源限制?

概念:同源策略是客戶端指令碼(尤其是Netscape Navigator2.0,其目的是防止某個文件或指令碼從多個不同源裝載。

這裡的同源策略指的是:協議,域名,埠相同,同源策略是一種安全協議。
指一段指令碼只能讀取來自同一來源的視窗和文件的屬性。

什麼是 "use strict"; ? 使用它的好處和壞處分別是什麼?

 
 

Javascript在更嚴格的條件下執行。

 
 

設立"嚴格模式"的目的,主要有以下幾個:

 
 
- 消除Javascript語法的一些不合理、不嚴謹之處,減少一些怪異行為;
- 消除程式碼執行的一些不安全之處,保證程式碼執行的安全;
- 提高編譯器效率,增加執行速度;
- 為未來新版本的Javascript做好鋪墊。
 
 

注:經過測試 缺點:
現在網站的merge 後,這個串就到了檔案的中間,不僅沒有指示嚴格模式,反而在壓縮後浪費了位元組。

 

13、GET和POST的區別,何時使用POST?

  GET:一般用於資訊獲取,使用URL傳遞引數,對所傳送資訊的數量也有限制,一般在2000個字元
  POST:一般用於修改伺服器上的資源,對所傳送的資訊沒有限制。

  GET方式需要使用Request.QueryString來取得變數的值,而POST方式通過Request.Form來獲取變數的值,也就是說Get是通過位址列來傳值,而Post是通過提交表單來傳值。

然而,在以下情況中,請使用 POST 請求:
無法使用快取檔案(更新伺服器上的檔案或資料庫)
向伺服器傳送大量資料(POST 沒有資料量限制)
傳送包含未知字元的使用者輸入時,POST 比 GET 更穩定也更可靠