阿里前端笔试题目
1.有一个长度未知的数组a,如果它的长度为0就把数字1添加到数组里面,否则按照先进先出的队列规则让第一个元素出队。
按照我的理解,肯定是要使用js原生的方法,这里比较容易混的应该是先进先出(shift),先进后出(pop)这2个方法
2.考闭包和自执行函数
1 var test = (function(a) { 2 this.a = a; 3 return function(b) { 4 return this.a + b; 5 } 6 } (function(a, b) { 7 return a; 8 }(1, 2))); 9 10 console.log(test(4)); //输出什么
答案:5
3.往页面添加10个<ul><li>i</li></ul>,i从1到10,采用性能比较好的方法
对于大的DOM更改,使用innerHTML要比使用标准的DOM方法创建同样的DOM结构快得多。
1 var html = [],i; 2 for (i = 0; i < 10; i++) { 3 html.push('<ul><li>' + i + '</li></ul>'); 4 } 5 document.body.innerHTML = html.join('');
不建议使用以下这种方法,因为appendChild()性能不太好
1 var i; //由于js会先变量提升,所以将i放在循环外面会减少出错的可能 2 for (i = 0; i < 10; i++) { 3 var ul = document.createElement('ul'), 4 li = document.createElement('li'); 5 li.innerHTML = i; 6 ul.appendChild(li); 7 document.body.appendChild(ul); 8 }
4.乱序一个数组
1 array.sort(function() { 2 return Math.random() - 0.5 3 });
5.雅虎前端优化的方法
减少http请求,使用css sprites,减少DNS查询次数,缓存ajax,避免404,Gzip压缩传输文件,
避免空的图片src------- 空的图片src仍然会使浏览器发送请求到服务器,这样完全是浪费时间
减少cookie大小,详细介绍:雅虎35条黄金准则
6.使用自动化功能实现上面雅虎优化的功能
使用gulp自动构建化工具
正则这个感觉是笔试必备佳肴
8.本地测试没有问题,上线了之后却又问题,如何找到错误?
缓存问题?
9.不使用loop循环,创建一个长度为100的数组,并且每个元素的值等于它的下标。
10.有一个长度为100的数组,请以优雅的方式求出该数组的前10个元素之和
1 var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], 2 sum = 0; 3 4 sum = a.slice(0, 10).reduce(function(pre, current) { 5 return pre + current; 6 }); 7 8 console.log(sum); //55
11.当项目的某个模块发生问题了,你是怎么定位错误的?你常用的调试工具是什么?
额外附加:
发现面试题目很多都是和循环有关的,顺便说一下如何优化循环
在JavaScript中,我们可以使用 for(;;), while(), for(in) 三种循环,事实上,这三种循环中for(in)的效率极差,因为他需要查询散列键,只要可以,就应该尽量少用。
for(;;)和while循环,while循环的效率要优于for(;;),可能是因为for(;;)结构的问题,需要经常跳转回去。比如
1 var arr = [1, 2, 3, 4, 5, 6, 7]; 2 var sum = 0; 3 for (var i = 0, l = arr.length; i < l; i++) { 4 sum += arr[i]; 5 } 6 7 //可以考虑替换为: 8 9 var arr = [1, 2, 3, 4, 5, 6, 7]; 10 var sum = 0, l = arr.length; 11 while (l--) { 12 sum += arr[l]; 13 }