阿里巴巴19号在美国上市,已经成为中国第一,全球第二的互联网公司,市值2300多亿美元,感觉在这个非常时刻能拿到阿里巴巴的offer,真的是一件很令人高兴的事情。下面谈谈阿里巴巴招聘流程和阿里巴巴前端面经。
今年阿里的招聘真早啊,8月初的时候就开始了提前批(也称作内推)。当时由于还在爱立信实习,就没去走这趟浑水了。网申8月24号截止,我的简历还是24号中午投的呢,现在想想,真是好惊险啊,差点就和阿里巴巴错过了。
下面描述一下阿里巴巴前端的校招流程,当然你也可以去官网看(http://www.job.alipay.com/)。阿里巴巴果然是与众不同,没有繁琐的宣讲会,或许是名气太大了,不需要宣讲吧。所有职位都采用在线笔试。笔试通过之后,需要进行在线预约才能接着参加面试。技术类的面试有3轮,第一轮和第二轮都是技术面,第三轮有两种情况,普通的是HR面(13k*15),如果一、二轮表现好的是交叉面(这种情况就是传说中的15k*15啦)。
8月25号参加了在线笔试,前端一共12个题目,考察的范围还是相当广泛的,分为以下:
1,Html5(包括媒体查询,CSS3里面的旋转变换啦)
2,前端安全
3,git命令和github账号(https://github.com/liufeng-cheng)
4,用户体验和性能优化
5,编程能力的考察(当然更希望你能把面向对象和设计模式考虑进去)
笔试一共60分钟,需要编程的题目大概有5题吧,代码量其实不是太大,30~100行左右。就是让你实现一些功能,比如对URL的解析,写个弹窗效果,设计一组API等等。这里面当然你需要对闭包、作用域、原型等javascript高级知识点有深入的了解。笔试很能够区分水平的,很多研究生都会被无情的刷掉。
这里面我想谈几点:
1, 不要依赖jQuery, Ext, YUI等等javascript库,平时写写玩具的时候尽量使用原生javascript或者原生ajax,这样你会对很多原理和底层的知识有所了解。
2, 前端很庞大,不是简单的html,css,javascript的混合体,你需要广阔的技术视野,关注并了解新技术并且尝试运用。
3, 平时写代码的时候尝试去优化他,你可以测试代码的性能(YSlow和jsperf.com都行)。
4, 写代码要用到模块化的思想,你可以阅读以下AMD规范,浏览器端的javascript最好去遵循这个规范,常见的requirejs已经采用了AMD规范
5, 要让面向对象和设计模式为你的javascript code所用。
9月2号,当时看到我的个人状态变成了”待面试“,那个时候,真的很高兴,因为身边很多人都被刷掉了,包括大把大把的研究生。有时想想,现实就是这么残酷,有人通过,就有人铩羽。我预约到了9月12号,地点是武汉纽宾凯鲁广国际酒店,是一家五星级的酒店。阿里巴巴的财大气粗的形象瞬间跃然纸上,别的公司都是在学校里面搞笔试面试,它在5星级的酒店里。可能阿里面对的不是一个学校的学生,而是整个武汉,甚至是华中地区的学生吧,这样做会让面试流程更加规范吧。当然,也有部分是为了公司的宣传。
笔试通过之后,这10天我并没有闲着,我开始复习前端,这个庞然大物。要复习的知识真的是太多太多,概念也完全无法穷尽。从基础知识到高级知识,然后是项目经验,实习经验的总结,以前编写的代码的总结,开源框架jQuery,EXT, YUI源码的复习,nodejs,Html5,前端开发工具,性能优化。我觉得10天确实太过于短暂。
时间真快,9月12号那天下午,我带上简历,武汉理工大学经纬网聘书,爱立信实习证明,黑客马拉松一等奖证书,信心满满的奔向了人生的第二场面试。
3楼大堂的人真多啊,小数一下,也有四,五百人吧,人流络绎不绝。有从湖南那边赶过来的,有来霸面的,早该猜到了,有无数个人想进阿里。当然招聘5个人,面试官可能会面50个或者100个,真是千挑万选啊。当时我就在想,面试的时候给面试官留下深刻的印象是多么重要啊。下面直奔3轮面试了。
一面是纯技术面,所有的问题都是技术问题,问题问的很深,但是同样考察到了基础的掌握。刚刚见到面试官的时候,我递上了我准备的其它材料。然后面试官让我谈项目经历,然后我说了之前参加黑客马拉松时候的一个项目,采用google angularjs、cordova和爱立信LTE broadcast部门提供的高通API去实现一个基于 android平台的app,后台使用nodejs实现的http server和backbone.js。数据库采用android平台 下自带的sqlite3。实现了RSS订阅功能,数据广播和点播的功能,并且使用cordova自带的Media播放 插件实现音频文件的播放。为力求高效,我们使用了ionic。然后面试官问为什么选择angular? angular相比其它前端框架的优势?然后面试官准备了一些问题,如下:
1, 写一个正则表达式,规则我忘了,反正挺长的(需要现场写code)
2, 前端安全(XSS,sql注入,CSRF)。问有没有那些攻击别人站点的经历,然后问CSRF的原理,一些html code如果要显示在页面上,怎么处理,当然是通过编码解码啦,哈哈。
3, 兼容性问题
ie6下的奇葩太多了,浮动双边距,上下margin,微高,png兼容,然后问我引入脚本处理png图片的原理。。。
4, 输入url到页面出现的过程
包括DNS解析,TCP连接,HTTP GET获取数据,加载DOM树,渲染树,然后问了下哪些地方会出现css阻塞,哪些地方出现js阻塞。ie各版本和chrome可以并行下载多少个资源。
5, 跨域请求及实现的原理
比如jsonp,window.name, iframe,window.postMessage。jsonp的原理是动态插入script标签
6, 问了一个算法问题,字符串匹配相关的(需要现场写code)
先是用数组去模拟,后来讲的时候发现不行,改成了hash表
7, javascript里面的继承怎么实现,如何避免原型链上面的对象共享(需要现场写code)
回答当然是经典的构造函数和原型链的混合模式去实现继承的啦,避免对象共享可以参考经典的extend()函数,很多前端框架都有封装的,就是用一个空函数当做中间变量
8, 设计模式的一些问题
我谈了下XHR工厂和事件委托里面的中介者模式
9, 异步加载和延迟加载的实现。
面完之后,面试官和我深情的握了一个手,看的出来,他对我的表现非常满意。
出去等了一会儿,用手机刷新了一下官网状态,发现一面通过。等了10分钟之后,接着参加二面。
二面的问题感觉让我很尴尬,部分技术问题,部分团队,项目问题。大概是下面这些:
1,你是学软件工程的,为什么搞前端?
2,看了你的简历,项目经历这么丰富,你说说你从这么多项目中,学到了什么?
3,项目中和他人有所分歧的时候,怎么办?
4,你当初为什么考虑引入angular?而不是其他框架?
5,html5开发的一些经验和问题(作为前端达人,一般这个问题,必扯localStronge, webgl, device api)
6, 对阿里巴巴有多少了解?
7, 以后想去杭州还是北京啊,为什么不选择北京?
8,以前做一个项目,如何和团队中其它的成员分工?是按板块分还是页面分
9,如何带一个新人?
10, 性能,如何去测试。代码层面,哪些地方可以优化性能(提到了一下重排和重绘)
11,谈了下grunt, YUI compressor 和 google clojure用来进行代码压缩的用法。
出去等了一会儿,通知3面。
当时挺激动的,一般3面基本不怎么刷人的,当时觉得这次面试稳了。三面是传说中的交叉面,也就意味着一面,二面表现优秀,工资会有所提高。当然,交叉面当时我也不知道,时候听别的学长说的。
3面HR问题:
1, 自我介绍
2, 实习学到了什么? 有没有拿到爱立信的offer?
3, 为什么想要加入阿里巴巴?
3面技术官问题:
1, 如何实现一个缓存(还好以前用nodejs写过静态文件服务器,对缓存了解的很清楚)
2, 追问浏览器端的缓存要不要发送HTTP请求(我当时回答,304的时候不需要,其实是错的,还是需要发送请求,只不过不需要在去下载服务器的资源了)
3, angularjs里面的双向数据绑定和依赖注入的原理?
面完已经6点半了,当走出酒店的那一瞬间,真的非常高兴,虽然整个面试过程我个人感觉还挺轻松,但是我觉得我已经打破了我们专业本科生好几年没有进BAT的历史了,当然以后能进一个更好的平台,于业界顶级水平的人一起工作,学到的应该会很多吧。
我面试的感悟和建议是:
1, 要有激情,对于新事物,新技术,要有一双善于发现的眼睛。
2, 团队工作经验,项目经验,实习经验真的很重要,个人的眼界和知识真的太有限了,只有经常和别人交流,你才能走的更远,看的更远。
3, 技术的深度和广度很重要。
4, 要多思考,多总结。你要想着如何去改进已有的东西,去优化你的代码。有的时候,停住脚本真的很有意义。