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); //遞歸
})
}
複製代碼