【備戰秋招Day 1】經典面試題1-4及在線編程題1-3答案
經典面試題
1.什麼是盒子模型?
在網頁中,一個元素佔有空間的大小由幾個部分構成,其中包括元素的內容(content),元素的內邊距(padding),元素的邊框(border),元素的外邊距(margin)四個部分。這四個部分佔有的空間中,有的部分可以顯示相應的內容,而有的部分只用來分隔相鄰的區域或區域。4個部分一起構成了css中元素的盒模型。
2.簡述一下src與href的區別
href 是指向網路資源所在位置,建立和當前元素(錨點)或當前文檔(鏈接)之間的鏈接,用於超鏈接。
src是指向外部資源的位置,指向的內容將會嵌入到文檔中當前標籤所在位置;在請求src資源時會將其指向的資源下載並應用到文檔內,例如js腳本,img圖片和frame等元素。當瀏覽器解析到該元素時,會暫停其他資源的下載和處理,直到將該資源載入、編譯、執行完畢,圖片和框架等元素也如此,類似於將所指向資源嵌入當前標籤內。這也是為什麼將js腳本放在底部而不是頭部。
3.簡述同步和非同步的區別
同步是阻塞模式,非同步是非阻塞模式。
同步就是指一個進程在執行某個請求的時候,若該請求需要一段時間才能返回信息,那麼這個進程將會一直等待下去,直到收到返回信息才繼續執行下去;
非同步是指進程不需要一直等下去,而是繼續執行下面的操作,不管其他進程的狀態。當有消息返回時系統會通知進程進行處理,這樣可以提高執行的效率。
4.怎樣添加、移除、移動、複製、創建和查找節點?
1)創建新節點
createDocumentFragment() //創建一個DOM片段
createElement() //創建一個具體的元素
createTextNode() //創建一個文本節點
2)添加、移除、替換、插入
appendChild() //添加
removeChild() //移除
replaceChild() //替換
insertBefore() //插入
3)查找
getElementsByTagName() //通過標籤名稱
getElementsByName() //通過元素的Name屬性的值
getElementById() //通過元素Id,唯一性
在線編程題
1.查找數組元素位置
function indexOf(arr, item) { if (Array.prototype.indexOf){ return arr.indexOf(item); } else { for (var i = 0; i < arr.length; i++){ if (arr[i] === item){ return i; } } } return -1;}
2.數組求和
不考慮演算法複雜度,用遞歸做:
function sum(arr) { var len = arr.length; if(len == 0){ return 0; } else if (len == 1){ return arr[0]; } else { return arr[0] + sum(arr.slice(1)); }}
常規循環:
function sum(arr) { var s = 0; for (var i=arr.length-1; i>=0; i--) { s += arr[i]; } return s;}
函數式編程 map-reduce:
function sum(arr) { return arr.reduce(function(prev, curr, idx, arr){ return prev + curr; });}
forEach遍歷:
function sum(arr) { var s = 0; arr.forEach(function(val, idx, arr) { s += val; }, 0); return s;};
eval:
function sum(arr) { return eval(arr.join("+"));};
3.移除數組中的元素
題目要求不改變原數組,所以可以聲明一個數組a用於保存arr中不同於item的值,最後將a返回。
function remove(arr, item) { //聲明一個新數組保存結果 var a = []; //循環遍歷 for(var i=0; i < arr.length; i++){ //如果arr[i]不等於item,就加入數組a if(arr[i] != item){ a.push(arr[i]); } } return a; }
推薦閱讀: