第38篇
1、Javascript实现2分法查找
1 // 非递归实现 2 function binary_search(arr, key) { 3 var high = arr.length - 1; 4 var low = 0; 5 6 while (low <= high) { 7 var mid = parseInt((high + low) / 2); 8 9 if (arr[mid] == key) { 10 return mid; 11 } else if (arr[mid] < key) { 12 low = mid + 1; 13 } else if (arr[mid] > key) { 14 high = mid - 1; 15 } 16 } 17 } 18 19 // 递归实现 20 function binary_search2(arr, low, high, key) { 21 if (low > high) retuen - 1 22 var mid = parseInt((high + low) / 2); 23 24 if (arr[mid] == key) { 25 return mid; 26 } else if (arr[mid] < key) { 27 low = mid + 1; 28 return binary_search2(arr, low, high, key); 29 } else if (arr[mid] > key) { 30 high = mid - 1; 31 return binary_search2(arr, low, high, key); 32 } 33 } 34 35 var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 36 console.log(binary_search(arr, 6)); 37 console.log(binary_search2(arr, 0, 9, 6));
2、你所了解到的Web攻击技术?
1)XSS(Cross-Site Scripting,跨站脚本攻击)指通过存在安全漏洞的Wev网站注册用户的浏览器内运行非法的HTML标签或者Javascript进行的一种攻击。
处理办法:【1】过滤特殊字符 【2】使用HTTP头指定类型 w.Header().Set("Content-Type", "text/javascript");
2) SQL注入 攻击者向服务器提交恶意的SQL查询代码,程序在接受后错误的将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑
被改变,额外的执行撩攻击者精心构造的恶意代码。
处理办法:对进入数据库的特殊字符(‘“\尖括号&*;等)进行转义处理,或者编码转换
3)CSRF(Cross-Site Request Forgeries,跨站点请求伪造)攻击者盗用了你的身份,以你的名义发送恶意请求。
3、写一个function,清楚字符串前后的空格。(兼容所有的浏览器)
1 if(!String.prototype.trim) { 2 3 String.prototype.trim = function() { 4 return this.replace(/(^\s+)|(\s+$)/g, ""); 5 } 6 }
4、有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少走法?
1 function cStairs(n) { 2 if (n === 1 || n === 2) { 3 return 1; 4 } else { 5 return cStairs(n - 1) + cStairs(n - 2); 6 } 7 }
5、递归设计。实现一个函数,给该函数一个DOM节点,函数访问其所有子元素(所有子元素,不仅仅是直接子元素),
每次访问子元素的时候,并为其传一个callback?
// 访问一个DOM tree,是一个经典的深度优先搜索的算法
1 function Traverse(DOM, callback) { 2 callback(DOM); 3 var list = DOM.children; 4 Array.prototype.forEach.apply(list, (item) => { 5 Traverse(item, callback); 6 }) 7 }