阿里实习笔试面试

转自: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')) 
原文地址:https://www.cnblogs.com/simonryan/p/4846147.html