天天看點

前端面試題十大重要問題????

(一),跨域有幾種實作方式???分别都是哪些???

**1,**jsonp跨域。原理是:動态插入script标簽,通過script标簽引入一個js檔案,這個js檔案載入成功後會執行我們在url參數中指定的函數,并且會把我們需要的json資料作為參數傳入。

由于同源政策的限制,XmlHttpRequest隻允許請求目前源(域名、協定、端口)的資源,為了實作跨域請求,可以通過script标簽實作跨域請求,然後在服務端輸出JSON資料并執行回調函數,進而解決了跨域的資料請求。

優點是相容性好,簡單易用,支援浏覽器與伺服器雙向通信。

缺點是隻支援GET請求。

JSONP:json+padding(内填充),顧名思義,就是把JSON填充到一個盒子裡

2,cors跨域。伺服器端對于CORS的支援,主要就是通過設定Access-Control-Allow-Origin來進行的。如果浏覽器檢測到相應的設定,就可以允許Ajax進行跨域的通路。通過修改document.domain來跨子域

将子域和主域的document.domain設為同一個主域.前提條件:這兩個域名必須屬于同一個基礎域名!而且所用的協定,端口都要一緻,否則無法利用document.domain進行跨域,域相同的使用document.domain,使用window.name來進行跨域。

window對象有個name屬性,該屬性有個特征:即在一個視窗(window)的生命周期内,視窗載入的所有的頁面都是共享一個window.name的,每個頁面對window.name都有讀寫的權限,window.name是持久存在一個視窗載入過的所有頁面中的,使用HTML5中新引進的window.postMessage方法來跨域傳送資料

還有flash、在伺服器上設定代理頁面等跨域方式。個人認為window.name的方法既不複雜,也能相容到幾乎所有浏覽器,這真是極好的一種跨域方法。

(二),對BFC規範的了解???

BFC,塊級格式化上下文,一個建立了新的BFC的盒子是獨立布局的,盒子裡面的子元素的樣式不會影響到外面的元素。在同一個BFC中的兩個毗鄰的塊級盒在垂直方向(和布局方向有關系)的margin會發生折疊。

(W3C CSS 2.1 規範中的一個概念,它決定了元素如何對其内容進行布局,以及與其他元素的關系和互相作用。)

(三),線程與程序的差別???

一個程式至少有一個程序,一個程序至少有一個線程.

線程的劃分尺度小于程序,使得多線程程式的并發性高。

另外,程序在執行過程中擁有獨立的記憶體單元,而多個線程共享記憶體,進而極大地提高了程式的運作效率。

線程在執行過程中與程序還是有差別的。每個獨立的線程有一個程式運作的入口、順序執行序列和程式的出口。但是線程不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個線程執行控制。

從邏輯角度來看,多線程的意義在于一個應用程式中,有多個執行部分可以同時執行。但作業系統并沒有将多個線程看做多個獨立的應用,來實作程序的排程和管理以及資源配置設定。這就是程序和線程的重要差別。

(四),http狀态碼有那些?分别代表是什麼意思???

100-199 用于指定用戶端應相應的某些動作。

200-299 用于表示請求成功。

300-399 用于已經移動的檔案并且常被包含在定位頭資訊中指定新的位址資訊。

400-499 用于指出用戶端的錯誤。400 1、語義有誤,目前請求無法被伺服器了解。401 目前請求需要使用者驗證 403 伺服器已經了解請求,但是拒絕執行它。

500-599 用于支援伺服器錯誤。 503 – 服務不可用

詳情:http://segmentfault.com/blog/trigkit4/1190000000691919

(五),ajax過程???

(1)建立XMLHttpRequest對象,也就是建立一個異步調用對象.

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

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

(4)發送HTTP請求.

(5)擷取異步調用傳回的資料.

(6)使用JavaScript和DOM實作局部重新整理.

(六),JavaScript 的同源政策???

概念:同源政策是用戶端腳本(尤其是Netscape Navigator2.0,其目的是防止某個文檔或腳本從多個不同源裝載。

這裡的同源政策指的是:協定,域名,端口相同,同源政策是一種安全協定。

指一段腳本隻能讀取來自同一來源的視窗和文檔的屬性。

(七),GET和POST的差別,何時使用POST???

GET:一般用于資訊擷取,使用URL傳遞參數,對所發送資訊的數量也有限制,一般在2000個字元

POST:一般用于修改伺服器上的資源,對所發送的資訊沒有限制。

GET方式需要使用Request.QueryString來取得變量的值,而POST方式通過Request.Form來擷取變量的值,

也就是說Get是通過位址欄來傳值,而Post是通過送出表單來傳值。

然而,在以下情況中,請使用 POST 請求:

無法使用緩存檔案(更新伺服器上的檔案或資料庫)

向伺服器發送大量資料(POST 沒有資料量限制)

發送包含未知字元的使用者輸入時,POST 比 GET 更穩定也更可靠

(八),js數組去重???

最之間的一種方式就是調用set()方法直接去重。

Array.prototype.unique1 = function () {

var n = []; //一個新的臨時數組

for (var i = 0; i < this.length; i++) //周遊目前數組

{

//如果目前數組的第i已經儲存進了臨時數組,那麼跳過,

//否則把目前項push到臨時數組裡面

if (n.indexOf(this[i]) == -1) n.push(this[i]);

}

return n;

}

Array.prototype.unique2 = function()

{

var n = {},r=[]; //n為hash表,r為臨時數組

for(var i = 0; i < this.length; i++) //周遊目前數組

{

if (!n[this[i]]) //如果hash表中沒有目前項

{

n[this[i]] = true; //存入hash表

r.push(this[i]); //把目前數組的目前項push到臨時數組裡面

}

}

return r;

}

Array.prototype.unique3 = function()

{

var n = [this[0]]; //結果數組

for(var i = 1; i < this.length; i++) //從第二項開始周遊

{

//如果目前數組的第i項在目前數組中第一次出現的位置不是i,

//那麼表示第i項是重複的,忽略掉。否則存入結果數組

if (this.indexOf(this[i]) == i) n.push(this[i]);

}

return n;

}

(九)****,HTTP和HTTPS???

HTTP協定通常承載于TCP協定之上,在HTTP和TCP之間添加一個安全協定層(SSL或TSL),這個時候,就成了我們常說的HTTPS。

預設HTTP的端口号為80,HTTPS的端口号為443。

為什麼HTTPS安全???

因為網絡請求需要中間有很多的伺服器路由器的轉發。中間的節點都可能篡改資訊,而如果使用HTTPS,密鑰在你和終點站才有。https之是以比http安全,是因為他利用ssl/tls協定傳輸。它包含證書,解除安裝,流量轉發,負載均衡,頁面适配,浏覽器适配,refer傳遞等。保障了傳輸過程的安全性

(十),前端子產品化???

AMD 是 RequireJS 在推廣過程中對子產品定義的規範化産出。

CMD 是 SeaJS 在推廣過程中對子產品定義的規範化産出。

AMD 是提前執行,CMD 是延遲執行。

AMD推薦的風格通過傳回一個對象做為子產品對象,CommonJS的風格通過對module.exports或exports的屬性指派來達到暴露子產品對象的目的。

CMD子產品方式

define(function(require, exports,module) {

  // 子產品代碼

});
           

嘻嘻,當然辣,這隻是其中非常重要以及常見的問題,還有很多很多的問題大家也可以直接在度娘搜一搜的,畢竟多看看多熟悉熟悉總是好的。謝謝大家!!!❤❤❤❤❤❤

繼續閱讀