2015年9月阿里校招前端工程师笔试题

前一段时间参加了阿里的9月校招,为了贯彻及时总结的精神,今天就来总结一下我做的这套题目吧。

1.下面哪段css代码通常用于页面水平居中:

1 A:site-align:center;
2 B:margin:center;
3 C:margin:auto 0;
4 D:margin:0 auto;

这题很简单,水平居中答案选D。每个选项来剖析一下, A选项在我做开发两年来,完全没有见到过,初略百度一下也没看到相关的东西;B选项,明显错误;D,其实D可以做到页面垂直居中,要怎么做呢,如下图,默认是horizental的,如果改变书写模式,改成vertical,就可以实现垂直居中了,不妨试试

-webkit-writing-mode: vertical-rl; /* for browsers of webkit engine */
writing-mode: tb-rl; /* for ie */ 

 

2.下列关于http协议状态码描述错误的是:

1 A:200 请求成功
2 B:302 URL临时性替代
3 C:304 页面未修改
4 D:403 页面未找到

关于状态码,百度可以有很详细的介绍,这里简单说说,1开头表示消息,2开头表示成功请求,3开头表示重定向,意思是你请求的这个资源在服务器指向另一个地址,需要再请求,4开头表示客户端的错误,可能是url地址错误或者参数错误,5开头表示的是服务器错误,服务器挂了(?)之类的。所以,我们可以判断,200是OK,请求成功没问题。302的意思是Move temporarily,暂时性移动了,符合题意。304是Not Modified,没有被修改,符合题意。403是Forbidden,字面意思是禁止,服务器已经理解请求,但是拒绝执行它。所以D错误。另外提一下,页面未找到是我们见得最多的404。

 

3.以下关于盒子模型描述正确的是

A:标准盒子模型中:盒子的总宽度=左右margin+左右border+左右padding+width
B:IE盒子模型中:盒子总宽度=左右margin+左右border+width
C:标准盒子模型中:盒子的总宽度=左右margin+左右border+width
D:IE盒子模型中:盒子总宽度=width

盒子模型有两种,假如我们设置有以下设置:

width:100px;
margin:20px;
border:5px solid #fff;
padding:10px;

在IE盒子模型(box-sizing:border-box)中里面,这个容器的宽度就是100px=内容的width+左右border+左右padding,所以内容的width为40px,盒子宽度为100px。

而标准盒子模型(box-sizing:content-box)里,width就指的是内容的width,所以容器的宽度是width+左右border+左右padding,总共是160px;

所以答案是A,答案D很接近,IE盒子总宽度应该是width+左右margin。

 

4、对于事件委托(事件代理)描述不正确的是:

A:事件委托实现原理利用了冒泡的机制
B:事件委托提高了页面的性能
C:事件委托并不能提高性能,只是简化了事件管理成本
D:一般在JQuery中个利用delegate方法来进行事件委托

首先要知道什么是事件委托,就比如,onclick,onmouseover,onmouseout这些js事件本来是加在一个元素上面的,现在我不加,我让其他元素来实现。事件监听器是被添加到它们的父元素上。事件监听器会分析从子元素冒泡上来的事件,找到是哪个子元素的事件。

$(function(){ 
    $('#ul12').delegate('li','click',function(){ 
        alert(123);
    }) 
});

像上面这样的就运用了事件委托。事件委托有什么好处呢?

1、提高性能。

2、新添加的元素还会有之前的事件。

所以到这里,我们知道了,答案是C。另外值得一提的是,现在jquery也可以用on方法来进行事件委托。

 

5、关于HTML语义化,以下哪个说法是正确的?

A:语义化的HTML有利于机器的阅读,如PDA手持设备,搜索引擎爬虫;但不利于人的阅读
B:Table属于过时的标签,遇到数据列表时,需尽量使用div来模拟表格
C:语义化是HTML5带来的新概念,此前版本的HTML无法做到语义化
D:Header、article、address都属于语义化明确的标签

这题显然B,C错误,那么A的后半句有点问题,语义化并不会造成阅读有问题的,所以答案选D。

 

6、编码判断一个对象obj自身是否包含某属性“render”

for(var propName in obj){
        if(){
            console.log(true);
        }
    }

直接答案:propName=='render'。因为题目自带遍历了,所以就不用obj.hasOwnProperty();

 

7、使用递归的方式实现一个求和函数

function sum(num){
        if(num>1){
           
        }else{
            return 1;
        }
    }

答案:return num+sum(num-1);

 

8、输出对象中值大于2的key的数组

var data={a:1,b:2,c:3,d:4};
Object.keys(data).filter(function(x){return       });
期待输出:["c","d"]

解析:首先,Object.keys(obj)返回一个数组,数组里是该obj可被枚举的所有属性。

console.log(Object.keys(data));//返回["a", "b", "c", "d"]

而filter的作用是从数组中找到适合条件的元素(比如说大于某一个元素的值)

var arr=[1,23,5,78,34,55,13];
        console.log(arr.filter(function(x){
            return x>23;
        }))
//返回[78, 34, 55]

回到题目,在得到了["a", "b", "c", "d"]这个数组后,我们要找出它们所对应的值大于2的,就应该拿着这些值回去data数组里面找,所以判断if(data[x]>2),true的话就return,由于题目只有一行,所以用一个三目运算符即可。

答案:data[x]>2?x:null;

 

9、使用尽量多的方式实现一个块元素在容器中水平垂直居中,可以使用css3特性

这题就不细说了,网上很多,关键在于自己动手多实践,去理解,只是看是永远记不住的。

 http://www.3lian.com/edu/2014/07-09/154729.html

http://blog.sina.com.cn/s/blog_5177c22601012ooj.html

http://www.dbpoo.com/css3-transform-vertical-center/

 

10、请将下面的对象

{"react":100,"angular":75,"javascript":116,"backbone":15}

排序后输出为

{"backbone":15,"angular":75,"react":100,"javascript":116,}

 

答案:

var obj={"react":100,"angular":75,"javascript":116,"backbone":15}
        var obj2={};

        var json=[
            {name:"react",value:100},
            {name:"angular",value:75},
            {name:"javascript",value:116},
            {name:"backbone",value:15}
        ]

        json.sort(function(x,y){
            return (x.value>y.value)?1:-1;
        })

        for(var i=0,j=json.length;i<j;i++){
            Object.defineProperty(obj2,json[i].name,{
                value:json[i].value
            });
        }

        console.log(obj2);

 

posted @ 2015-09-08 22:51  DanielLam  阅读(318)  评论(0编辑  收藏  举报