1. 程式人生 > >歡聚時代2017校招筆試題目(web前端類)B卷

歡聚時代2017校招筆試題目(web前端類)B卷

1.以下程式中i的輸出值為:

var i = 10;
for(var i = 0; i < 5; i++){
 i += 2;
}
console.log(i);

答案:6
在js中只有全域性作用域和函式作用域,沒有塊級作用域。全域性i會被for迴圈中的覆蓋,輸出6。這道題有個小陷阱選項12。

2.下面對CDN表述錯誤的有那些?

A. CDN是一種分佈時網路儲存
B. CDN伺服器質量比程式伺服器更好,所以速度才塊。
C. 使用CDN可以對抗DDOS攻擊
D. CDN無法加速動態程式

答案:BD
CDN的全稱是內容分發網路(Content Delivery Network),是一層構建在網際網路之上的一層智慧虛擬網路。智慧體現在通過負載均衡技術對分佈時儲存的內容進行排程,是使用者能夠訪問到距離最近、響應最快的內容。響應使用者的內容直接來源於快取伺服器。

3.下面程式碼執行後,foo.x的值是 :

var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};

A. 1
B. 2
C. 程式報錯
D. 其他

答案:D
要理解這道題,我們應該對連續賦值的順序有了解。第三條語句的執行順序:首先會為foo建立屬性x,我們都知道js的變數宣告提前,此時的foo.x=undefined;接著foo指向了新的物件{n:2},最後給一開始宣告的foo.x賦值{n:2}。
好了,理清執行順序後,就要說這道題的關鍵點了。我們知道物件是一種複雜資料型別,變數foo、bar中儲存的其實是物件的儲存地址。foo={n:2}將foo的指標從{n:1}移向了{n:2},當然經過變數的宣告提前後{n:1}實際是{n:1,x:undefined},foo.x=foo後為{n:1,x:{n:2}},而這一切都與foo無關了,因為早在foo={n:2}時foo就與這個物件無關了。

4.說說你所知道解決跨域問題的方案,越多越好:

Jsonp、window.postMessage、document.domain、http請求頭設定Access-Control-Allow-Origin

5.使用快速排序演算法,對[3,23,66,32,2,77,45,87,64,34,33]進行由小到大的排序

var arr = [3,23,66,32,2,77,45,87,64,34,33];
(function quickSort(arr,begin,end){

    if(begin>=end) return; //遞迴呼叫結束

    var p = arr[begin
]; //基準p var i = begin+1,j = end; //i從左向右掃描,j從右向左掃描 while(true){ for(;arr[j]>=p&&j>begin;j--); for(;arr[i]<=p&&i<j;i++); if(i>=j) break; var temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } var temp = arr[j]; //交換p與arr[j] arr[j] = p; arr[begin] = temp; quickSort(arr,begin,j-1); //基準p已歸位,拆分子序列繼續排序 quickSort(arr,j+1,end); })(arr,0,arr.length-1);

6.[“1”, “2”, “3”].map(parseInt)的執行結果是:

A. ["1", "2", "3"]
B. [1, 2, 3]
C. [0, 1, 2]
D. 其他

答案:D
要對map和parseInt方法足夠了解。map方法提供三個引數:當前遍歷的元素、索引、被遍歷陣列本身。parseInt除了接受一個引數進行轉換外,還會接受第二個引數作為進位制數。當省略第二個引數或為0時,會根據第一個引數自動判斷進位制。如果第二個引數小於2或大於36,parseInt返回NaN;如果兩引數不匹配,也返回NaN(如將3作為二進位制數轉換)。
補充:parseFloat只接受一個引數,parseInt和parseFLoat在接收字串的第一個字元不能轉為數字時返回NaN。

7.關於SVG和CANVAS,下面陳述正確的有:

A. SVG做動畫效能要優於CANVAS
B. CANVAS做動畫效能要優於SVG
C. SVG產生的dom數量比CANVAS要少
D. CANVAS產生的dom數量比SVG要少
E. CANVAS可以使用css設定動畫樣式
F. SVG可以使用css設定動畫樣式

答案:DF