转自:http://blog.pixelnfinite.com/archives/211
在线笔试部分
在线笔试还是挺方便的,随意找一个小时撸完了,下面是一些有印象的题目。
- flatten函数实现,将一个数组摊平。比如[1,[2,3,[4,5]]] => [1,2,3,4,5]
- isDuplicate,检验arguments中有没有重复元素,返回bool值。
- loadScript,异步加载js实现
- cookie实现,包括get, set, delete
- 向ul中插入若干条li的实现,这个没来得及写,性能优化上需要考虑
随意水了一发,过了一个月收到了面试通知,于是欢乐地跑去新街口面试了。
面试
一面
一面是个帅哥啊啊啊,估计中午吃的麦当劳还有麦旋风的杯子2333。人挺好,有的没答出来也没不耐烦啥的。旁边一个面试官面了两个我才结束,问的还挺细的,大致问题如下。
HTML
- doctype标签
- html5有哪些新标签
CSS
- css选择器和顺序
- css margin消除浏览器区别
- position标签
- inline和block区别
JS
- 面向对象的特点
- addEventListener和attachEvent(bool参数)
- 事件event对象
- 设计模式
- 闭包具体实现
- 闭包的缺点
- 继承的实现
- 跨域和jsonp原理
- lazyload
- 原生DOM选择器
- 事件捕获冒泡
- Nodejs
其他
- 前端发展最新趋势
- 前端性能优化
- 印象最深的项目
二面
二面是圆心面的,后来才知道是淘宝UED的boss。m( _ _ )m
问的倒是不多,主要看我最近做的一个项目,让我手写一下设计模式,具体怎么实现的,然后就大概问了下怎么学习的云云。
三面
回到等待室还没坐下来就收到三面通知了。三面是书恒,很有魅力的一个HR。感觉轻音体柔23333。
也就是问了下个人情况,在学校社团任职的情况,对于淘宝前端开发的看法和建议等等。
flatten函数实现,将一个数组摊平。比如[1,[2,3,[4,5]]] => [1,2,3,4,5]
flatten:function(ac) { var array = []; var group = this.arr; if(ac) group = ac; for (var i = 0; i < group.length; i++) { if(group[i] instanceof Array) { array = array.concat(this.flatten(group[i])); } else { array = array.concat(group[i]); } } return array; }
var arr = [1,[[4,5,6],2,[[[7,8,9]]],3]]; //转成一位数组:[1, 4, 5, 6, 2, 7, 8, 9, 3] function f(arr){ if(Object.prototype.toString.call(arr) != '[object Array]') //判断arr是不是数组 return; var newArr = []; function fn(arr){ for (var i = 0; i < arr.length; i++) {//遍历数组 if(arr[i].length){//判断是不是多维数组 fn(arr[i]); //递归调用 }else{ newArr.push(arr[i]); } } } fn(arr); return newArr; } console.log(f(arr));
数字类型转千分位表示
var num = 123456789.9; //结果转成千分位表示 123,456,789.9 function f(num){ if(typeof num != 'number') return; num += ''; if(num.indexOf('.')!=-1){ //判断是否存在小数 return fn(num.split('.')[0])+'.'+num.split('.')[1]; }else{ return fn(num); } function fn(newNum){ var str = ''; var l = newNum.length; while(l>3){ str = ','+newNum.substring(l-3,l) + str; l = l-3; } str = newNum.substring(0,l) + str; return str; } } console.log(f(num));
解析url:var str = 'http://s.weibo.com/weibo/Aralic?topnav=1&wvr=6'获得参数名和参数值
function f(url){ var l = url.indexOf('?'); if(l!=-1){ var obj = {}; var arr = url.substring(l+1,url.length).split('&'); for(var i = 0; i<arr.length; i++){ obj[arr[i].split('=')[0]] = arr[i].split('=')[1]; } return obj; } } console.log(f('http://s.weibo.com/weibo/Aralic?topnav=1&wvr=6'))