阿里巴巴 2016 校招前端工程师笔试总结

前言

本来走的是内推渠道被推到笔试,以为会自动申请笔试就没有再关注。结果今天看到群里有人讨论笔试题,急忙跑去校招中心去看,发现所有的状态还是老样子,接着尝试进行了新投递,没想到立马收到了笔试通知,不过此时距笔试结束时间只有 40 分钟(整个笔试答题时间 60 分钟),没办法只能硬着头皮上了。

另外没想到整个笔试过程居然还要视频监考,我可是光着膀子在家答题啊,时间紧迫也顾不上穿衣服,啊啊啊啊啊啊啊!

题目

由于时间比较紧,所以没有刻意记录所有题目,以下内容都是根据记忆整理的:

总共选择题、填空题和代码题三种题型。选择题大多比较简单,偏重基础知识的掌握,这部分内容只要认真看过两本前端基础书籍都不会有太大的问题。

选择题

  • 阻止事件冒泡的方法(比较简单,有一个干扰项)
  • 无序列表的标签(这个太简单了)
  • 标准盒模型及IE盒模型宽度计算的问题(判断说法对错)
  • 判断哪一个选项不是 CSS 的单位,每个选项包含两个单位(由于答题仓促,直接选了不太常见的 mm 的选项,感觉是跪了)

填空题

  • 判断对象自身是否包含某个属性,主要考察 hasOwnProperty 方法使用;
  • 编写 filter 方法的筛选函数,主要考察 filter 函数的使用(这个记不清筛选函数应该返回 true 还是 false - -);
  • 二维数组的扁平化,要求填一个方法名和函数参数的函数体(这个题没太有头绪);

代码题

  • 使用尽可能多的方法实现垂直水平居中;(比较实际的需求,我用了 absolute + transforminline-blocktable-cell 三种方法)
  • 对象 click 本来绑定了 save 处理函数,要求增加 confirm 确认是否执行 save;(两个思路:1. 先解绑 save,然后重新绑定一个新的函数加入 confirm 逻辑;2. 在捕获阶段进行 confirm 根据结果选择是否触发;由于第二个思路会阻止所有 click 事件,因此选择使用思路1实现)
  • 实现一个保存优先级的对象,包括两个方法:add 及 print,调用 add('item1', 5) 将保存 item1 并赋优先级 5,调用 print() 实现按照优先级从大到小输出 item。(需求很简单,也比较容易实现,只是需要注意代码风格和代码规范,很遗憾由于时间问题这个题目没有完成。)

总结

好像一共有 13 题,能够回忆起来的只有这么多,供后来的同学参考吧。题目总体来说比较简单,基础扎实、有一定开发经验的童鞋都不会有太大问题,另外建议大家在做代码题的时候选择自己平时使用的编辑器,一是方便调试,二是配合 zencoding 等插件可以节约大量时间,调试无误后再将代码复制到答题框中即可。

最遗憾的就是这次时间没有把握好,继续努力!


翌日补充

看了一下群里其他人发的笔试题截图,发现应该一共有 11 道题,一共回忆起 10 道,剩下的一道实在没有印象了。

另外,仔细研究了一下二维数组扁平化的题目,原题是这样的:

var matrix = [
[1, 2],
[3, 4],
[5, 6]
]
var flatten = matrix._____(function (a, b) {
_____
})
console.log(flatten) // [1, 2, 3, 4, 5, 6]

要求填调用的方法,和作为方法参数的函数体。

首先查找了一下所有以函数作为参数的数组方法,包括 every filter find findIndex map reduce reduceRight some sort。在查找这些方法的过程中没想到竟然意外收获了答案,这道题目竟然是 MDN 中 reduce 方法的一段 DEMO。所以这个题目的正解就是:

var matrix = [
[1, 2],
[3, 4],
[5, 6]
]
var flatten = matrix.reduce(function (a, b) {
return (a || []).concat(b)
})
console.log(flatten) // [1, 2, 3, 4, 5, 6]