撩課-Web大前端天天5道面試題-Day38

1.JavaScript實現二分法查找?

二分法查找,也稱折半查找,是一種在有序數組中查找特定元素的搜索算法。
查找過程能夠分爲如下步驟:
(1)首先,從有序數組的中間的元素開始搜索,若是該元素正好是目標元素(即要查找的元素),則搜索過程結束,不然進行下一步。
(2)若是目標元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半區域查找,而後重複第一步的操做。
(3)若是某一步數組爲空,則表示找不到目標元素。
 代碼:

 // 非遞歸算法
 function binary_search(arr, key) {
   var low = 0,
   high = arr.length - 1;
   while(low <= high){
   var mid = parseInt((high + low) / 2);
       if(key == arr[mid]){
           return  mid;
       }else if(key > arr[mid]){
           low = mid + 1;
       }else if(key < arr[mid]){
           high = mid -1;
       }else{
           return -1;
        }
   }
};

 var arr = [1,2,3,4,5,6,7,8,9,10,11,23,44,86];
 var result = binary_search(arr,10);
 alert(result); // 9 返回目標元素的索引值

 // 遞歸算法
 function binary_search(arr,low, high, key) {
     if (low > high){
       return -1;
        }
     var mid = parseInt((high + low) / 2);
      if(arr[mid] == key){
        return mid;
     }else if (arr[mid] > key){
        high = mid - 1;
        return binary_search(arr, low, high, key);
     }else if (arr[mid] < key){
        low = mid + 1;
        return binary_search(arr, low, high, key);
     }
};

 var arr = [1,2,3,4,5,6,7,8,9,10,11,23,44,86];
 var result = binary_search(arr, 0, 13, 10);
 alert(result); // 9 返回目標元素的索引值

複製代碼

2.你所瞭解到的Web攻擊技術?

(1)XSS(Cross-Site Scripting,跨站腳本攻擊):
 指經過存在安全漏洞的Web網站註冊用戶的瀏覽器內運行
 非法的HTML標籤或者JavaScript進行的一種攻擊。
(2)SQL注入攻擊
(3)CSRF(Cross-Site Request Forgeries,跨站點請求僞造):
 指攻擊者經過設置好的陷阱,
 強制對已完成的認證用戶進行非預期的
 我的信息或設定信息等某些狀態更新。

複製代碼

3.寫一個function,清除字符串先後的空格?(兼容全部瀏覽器)

var reg = /^(\w)+(\.\w+)*@(\w)+((\.\w{2,3}){1,3})$/;
 var email = "example@qq.com";
 console.log(reg.test(email));  // true
複製代碼

4.有一樓梯共M級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第M級,共有多少種走法?

這個問題要倒過來看,
要到達n級樓梯,
只有兩種方式,從(n-1)級 或 (n-2)級到達的。
因此能夠用遞推的思想去想這題,
假設有一個數組s[n], 
那麼s[1] = 1(因爲一開始就在第一級,只有一種方法),
s[2] = 1(只能從s[1]上去 沒有其餘方法)。
那麼就能夠推出s[3] ~ s[n]了。
下面繼續模擬一下, s[3] = s[1] + s[2],
由於只能從第一級跨兩步, 或者第二級跨一步。

function cStairs(n) {
    if(n === 1 || n === 2) {
        return 1;
    } else {
        return cStairs(n-1) + cStairs(n-2)
    }
}
複製代碼

5.遞歸設計。 實現一個函數,給該函數一個DOM節點,函數訪問其全部子元素(全部子元素,不單單是直接子元素),每次訪問子元素的時候,併爲其傳一個callback?

//訪問一個DOM tree,是一個經典的深度優先搜索的算法

function Traverse(DOM,callback) {
    callback(DOM);
    var list = DOM.children;
    Array.prototype.forEach.apply(list,(item)=>{
        Traverse(item,callback); //遞歸
    })
}
複製代碼
相關文章
相關標籤/搜索