应届生求职招聘论坛

标题: 2015阿里巴巴秋季校园招聘前端在线笔试题个人参考答案--第二波 [打印本页]

作者: yuanzm    时间: 2014-8-26 23:02
标题: 2015阿里巴巴秋季校园招聘前端在线笔试题个人参考答案--第二波
http://www_cn**gs_com/yuanzm/p/ ... 3.html


  由于错过了报名时间,博主昨天才知道原来阿里巴巴秋季校园招聘已经开始了。本来以为没有机会参加了,但是昨天晚上急急忙忙填写了一份简历,今天居然可以考试,还是有点小激动的,哈哈。
  由于今天是亲身参与,时间紧急,有些题目博主自己也不记得,或者说有些题目由于能力有限,自己也不会,这里仅仅提供博主在考试的时候做出来的题目。
1.找出下面优先级相同的选择器
  A. img_thumb:after  B.[data-job="frontend"]::first-letter
  C. #main::before     D. [type="checkbox"]:checked  E. ul#shop-list
  要解这道题,首先需要知道怎么计算选择器的优先级,《CSS实战手册》里面提到过,CSS为选择器的权值提供了一个公式:
  (1): 一个标签选择器值1分
  (2):一个类选择器值10分
  (3):属性选择器值10分
  (3):一个ID选择器值100分
  (4):一个内建样式值1000分
  (5):伪元素(如first-line)通常被当做类选择器对待,值1分
  (6):伪类则被当做类对待,值10分
  根绝上面的规则,我们一个个来分析:
  A: img  == 1分  .thumb == 10分  :after == 1分  总分1 + 10 + 1 = 12
  B: [data-job="frontend"] == 10分  ::first-letter == 1分 总分10 + 1 = 11分 
  C:#main == 100分  ::before(伪元素) == 1分  总分100 + 1 == 101分
  D:[type="checkbox"] == 10分  :checked == 10分  总分10 + 10 = 20分 
  E: ul == 1分  #shop-list == 100分  总分100 + 1 == 101分
  所以这道题的答案应该是:C E
2. 常用的git操作有
  A .Add  B_Push  C_Mkdir  D_Fetch  E_Mv  F_Merge  G_Tag
  对于这里的关键词“常用”,也是没有一个明显的界限的,你要是用的多,就叫常用。下面非别分析:
  A: add:将当前工作目录中更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示记入了版本历史中,这也是提交之前所需要执行的一步。
  B:  push:将本地commit的代码更新到远程版本库中,例如 “git push origin”就会将本地的代码更新到名为orgin的远程版本库中。
  C:mkdir:应该不属于git常用操作的范围。
  D:fetch:从服务器的仓库中下载代码。(与服务器交互,从服务器上下载最新代码)
  E: mv: 重命名一个文件、目录或者链接。
  F:merge:把服务器上下载下来的代码和本地代码合并。或者进行分支合并。
  G:tag: 创建、列出、删除或者验证一个标签对象(使用GPG签名的)。
  所以这一题应该是选:A B C E F G
3.以下哪些是Javascript语言typeof可能返回的结果
  A_string  B_array  C_object  D_null
  这一道题考验记忆能力,因为了解typeof的人都知道,这个操作符基本是没什么作用的。typeof操作符的作用在Javascript里面有详细解释:
  "underfined"--如果这个值未定义
  “boolean”--如果这个值是布尔值
  “string”--如果这个值是字符串
  “number”--如果这个值是数值
  “object”--如果这个值是对象或者null
  "function"--如果这个值是函数
  显而易见的,答案是A C
4. 请写出个人github地址
  https://_gi**ub_com/yuanzm
5. 请简述异步加载的JS里有document_write会有什么问题
  异步加载js的意思是在加载页面的时候不加载js,也就是在页面加载完成之后才加载js,但是如果js里面有document_write,就会产生一个问题:页面会被document_write里面的内容重写。
6.<div class='mod-spm'data-spmid='123'>
        <divclass='child_a'></div>
        <divclass='child_b'></div>
        <divclass='child_c'></div>
        <divclass='child_d'></div>
    </div>
    <divclass='mod-spm' data-spmid='456'>
        <divclass='child_a'></div>
        <divclass='child_b'></div>
        <divclass='child_c'></div>
        <divclass='child_d'></div>
    </div>
    <divclass='mod-spm' data-spmid='789'>
        <divclass='child_a'></div>
        <divclass='child_b'></div>
        <divclass='child_c'></div>
        <divclass='child_d'></div>
    </div>
有dom结构如上,请用原生代码(禁用jQuery作答)实现以下功能:
(a)计算鼠标在mod-spm区域内的停留时长,data-spm不同视为不同区域
(b)尽量减少性能损耗
(c)重复进入计时累加
  这题是最浪费时间的,直接上代码:
[url=][/url]
1     function ShowStayTime(obj) { 2         this_obj = obj; 3         this_totalTime = 0; 4         this_enterTime = null; 5         this_divTime= document_createElement('div'); 6     } 7     ShowStayTime_prototype = { 8         constructor:ShowStayTime, 9         init: function() {10             this_showStayTime();11             this_obj_appendChild(this_divTime);12             this_beginTime();13             this_leaveTime();14         },15         showStayTime: function() {16             var message = "";17             message = "停留时间" + this_totalTime + "ms";18             this_divTime_innerText = message;19         },20         beginTime: function() {21             this_obj_addEventListener("mouseenter",function() {22                 this_enterTime = new Date();23             })24         },25         leaveTime: function() {26             var temp = this;27             this_obj_addEventListener("mouseleave",function() {28                 temp_totalTime += new Date()_getTime() - this_enterTime_getTime();29                 temp_showStayTime();30             })31         }32     }33     var divs = document_getElementsByClassName('mod-spm');34         var show1 = new ShowStayTime(divs[0]);35         var show2 = new ShowStayTime(divs[1]);36         var show3 = new ShowStayTime(divs[2]);37         show1_init();38         show2_init();39         show3_init();[url=][/url]

8. 实现数据打点的函数。  

[url=][/url]
1 function adddot(num) { 2     var temp = new Array(); 3     for (var i = 0;i < num_length;i++) { 4         temp_push(num); 5     } 6     if (num_length < 4) { 7         return num; 8     } 9     for (var i = num_length - 3;i >= 0;i -= 3) {10             if (i > 0) {11                  temp_splice(i,0,'_');12             }13     }14     return temp_join("");15 }[url=][/url]


10.有字符串var str = "abc345efgabcab",请写三条js语句分别实现如下三个功能:
  1)去掉字符串中的a、b、c字符,形成结果:“345efg”
  2)将字符串中的数字用括号括起来,形成结果“abc[3][4][5]efgabcab”
  3) 将字符串中的每个数字的值分别乘2,形成结果:“abc6810efgabcab”
  这题很显然是考察正则表达式,但是时间紧急,楼主用了取巧的办法,希望正则大神指正:
  (1):var a  = str_replace(/abc/g,"").replace(/ab/g,"");
  (2):var b = str_replace(/345/g,"[3][4][5]");
  (3):var c = str_replace(/345/g,"6810");
11从前端工程师的角度如何提高客户体验.
  略
最后,再次声明,本人只是本科二年级的学生,所作出的解答只是具有参考性,如有错误,欢迎指出~






欢迎光临 应届生求职招聘论坛 (https://bbs.yingjiesheng.com/) Powered by Discuz! X3.2