阿里面试经历(转)

官网的简历上一共有3个开放式问,每个问题1000字内,一定要认真对待。

1、请介绍一项你最热爱、最擅长的专业领域,并且介绍你在这个领域的学习经历和未来的学习规划。

我最热爱、最擅长的专业领域是大前端开发。目前,大前端领域正在向模块化、组件化、工程化推进。

一开始接触前端是13年开始做毕业设计的时候,利用canvas做网页RPG游戏,市面上也还没有像现在一样那么多的做网页游戏的框架。那会画面的渲染停留在靠setTimeout和setInterval来实现,后来发展到了用requestAnmationFrame来渲染。从此喜欢上了前端开发,喜欢上了Javascript这门语言。当然,这款RPG游戏现在看来,有很多的问题。那会连JS闭包都还不懂,都是全局变量,写的代码都是基于一个函数调用另外一个函数,也没有JS设计模式,代码管理维护紊乱,不过,我很感谢这次经历,让我意识到了模块化,复用思想,后期维护等的重要性。

前端的学习基本上靠自学和参加各种前端相关的技术party,如去蘑菇街参加NodeParty(见到了朴灵大大,Teambition的题叶),去携程参加携程C4(见到了尤小右),去D2,去segmentFault举办的2015开发者大会(见到了玉伯),参加百度IFE组织的百度前端技术学院等,很多前端的大神之前只是在微博上关注,见到本人还是有点小激动的。就这样,慢慢的眼界和格局稍微宽广了些。

以前,人们可能会认为前端是比较低端的,只是切页面的活,但是现在,随着ES6的落地,web page正在演变为web application.一个大型的Web应用,模块化、组件化、工程化,是必须的。围绕NodeJS,开始出现了前端的代码压缩、自动化测试等开发,调试,测试,部署的工具链,所以目前整个大前端技术的更迭频繁,因为前端还是比较年轻的,而前端的浏览器兼容性大坑将会慢慢随着低版本IE的消亡得到填补。目前,我正在学习React技术,相比较于Angularjs,我更喜欢React的容易上手,体积轻巧。

未来,我想继续走在大前端这条路上,以JS相关的大前端技术栈为主,做到可以全栈式开发,移动端开发,以及做性能、架构等方面的改进与优化(学校的项目基本不关注性能优化),期待可以进入阿里实习,向更多已经走在前端前沿的各位前辈们学习。

2、请介绍你参与的印象最深刻的一个项目,为什么?并且介绍你在项目中的角色和发挥的作用。

我参与的印象最深刻的一个项目是浙江工业大学大数据可视化平台。

项目简介:这个项目主要属于工大内部的建设数字化校园的一个子项目,主要是对工大建校以来毕业的近25万学生以及目前在职老师进行数据分析,服务于广大校友和师生。比如:分析各个专业的考研分布情况,就业分布情况,出国留学分布情况,老师的职称评审情况等。可视化采用百度的echarts实现。

角色和作用:这个项目是我一个人开发完成的,从前端到服务器端,包括技术选型,架构,数据库设计,以及遇到问题的解决方案。这是我读研后,导师安排的第一个项目,所以印象会比较深刻一些。

遇到的挑战一:我们知道由于历史遗留等问题,在数据库中的数据往往都包含一些杂乱的脏数据,所以数据可视化的第一步要进行数据的清洗以达到封装成我们需要的数据格式,但是从数据库取出数据,到服务器端清洗数据,再到前端用户看到可视化界面的平均响应时间会随着数据量的增大而延长(工大的25万的学生数据,数据清洗,封装要6,7分钟,更不用说千万级别的数据了)所以我需要缩短平均响应时间,让用户在3秒内即可看到可视化效果。
解决方案:在服务器端增加了一层缓存机制。即在用户访问之前,就已经将已经数据预处理好的数据缓存在服务器端了,直接发送到前端即可。缓存数据一般在凌晨3,4点的时候生成。

遇到的挑战二:工大校友数据库中的数据每天在不断变化,如何保证数据的实时真实,可信?
解决方案:采用的解决方案是利用JAVA精灵线程去模拟访问一遍这个项目的所有页面,拿到缓存数据,每天凌晨3,4点的时候,更新缓存数据。

遇到的挑战三:如果用户在更新缓存的过程中访问,怎么办?
解决方案:服务器端实现二级缓存。当用户在在更新缓存的过程中访问的时候,去访问二级缓存,二级缓存相当于一级缓存的一个副本,当一级缓存在更新的时候,使用二级缓存中的数据去响应用户,在一级缓存更新完毕后,更新二级缓存。

遇到的挑战四:在做数据可视化的过程中,发现很多重复劳动的工作,比如:用SQL语句取数据,将数据清洗,封装成满足要求的数据格式,以特定的图表类型展现。
解决方案:开发了一键制图模块。只要输入SQL语句,选择好相应的图表类型,点击提交,1分钟内就可以做好一张可视化图,不用再重复劳动了。

3、你最期望在阿里巴巴实习的部门或项目是什么?请介绍下你对该部门的了解和希望实习的原因。

看个人喜好填了。

一面电话面试

一面时间是2016年3月3号,早上10点27分,面试过程34分钟。接到一个杭州打来的电话,我那会正在寝室看书,接到电话后,电面我的哥哥问我是否方便接受电话面试。我那会居然说了方便。哭了,脑子短路了(寝室没网啊),好吧,硬着头皮继续了。先简单做了下自我介绍,有哪些项目经历,然后问了下我简历上相关的问题。基本上都还是比较简单的问题,感觉一面主要是问项目经历为主。

最后一个问题,你有什么问题要问我的嘛?我回答:这是我的第一次电话面试,也知道自己有点紧张,一些问题没有回答好,(尼玛,都口吃了。。。丢人啊),想请问一下,根据我目前的表现,你觉得我的优点和不足的地方在哪里?然后面试我的哥哥说了,项目经历还是蛮丰富的,欠缺的就是没有自己去尝试着写框架,组件,都只是停留在用别人的框架,作为研究生,应该去尝试着自己写一个开源框架。

一面结束后

二面电话面试

二面时间是2016年3月10号,晚上7点,面试时间是27分钟。接到0571开头打来的电话,我那会正在实验室写博客,整理服务计算相关的东西。电面我的哥哥问我是否方便面试,我果断说方便。开始面试啦。

来到实验室的阳台,阳台好冷,再加上还是有点紧张的,所以整个过程说话都在颤抖。

先是自我介绍.就不详细说了,跳过吧。

Q:为什么投前端开发工程师。
A:因为从本科阶段做毕设开始就喜欢上做小游戏,热爱前端,然后介绍了本科毕设中用到的A星算法,好吧,哭了,电面我的哥哥一听A星算法,开始问我A星算法的细节了,我介绍了一下A星算法的原理,然后他又问我A星算法和广搜和深搜之间的区别。我也回答了,貌似还算满意。

Q:了解哪些前端相关的框架并介绍其特点。
A:了解React、echarts在内的一些相关前端框架,React的特点是虚拟DOM,JSX,组件化开发框架,单向数据绑定。接着又顺带介绍了一下React和AngularJS的区别。

Q:用过node吗?对于node技术,你怎么看?
A:恩,用过node,express,jade,ejs,handbars等模板引擎。然后聊了会支付宝的基于KOA改造的Chair框架。关于技术的看法:每一项技术都有自己的适用场景,node也不例外,node更适合开发适合开发DIRT程序,即数据密集型实时程序,但其由于是单线程的,不稳定,尤其是JS这门语言是动态类型语言,不像JAVA是静态类型语言,会在编译时确定变量的类型,对于支付宝这样的金融公司,对系统的稳定性,安全性要求比较高的,所以Chair的后台采用的是JAVA,但和JAVA对接的是node,这样对前端开发工程师来说也易于和后台交互,总的来说呢,node就像是前端这个行业的第二次工业革命,带来了许多革命性的产品。

Q:node的异步问题是如何解决的?
A:目前我是采用回调的方式解决的,不过这种方式过于冗余,我在书上看到也有相关的npm异步包或者是通过事件的emit,ES6的Promise方式来解决这个问题的。

Q:node是如何实现高并发的?
A:这个问题我之前问过朴灵大大。下面是我的问题以及朴灵大大的回答。

阿里面试经历(转)向朴灵大大的提问

然后,朴灵大大回答:

阿里面试经历(转)朴灵大大的回答

回答完这个问题,差不多25分钟了。

Q:了解网络相关的知识吗?
A:了解的,不过可能有些忘了,要复习一下了。(本以为面试哥哥要问我相关网络问题,结果他不问了,感谢,我马上去恶补网络知识)

Q:后端的技术会吧?
A:恩,会JAVA,PHP的。

最后,面试哥哥说,支付宝要求的是全栈工程师,不只是会前端的,对于前端,网络,操作系统,后端都要能独当一面的(这个算是本次面试的总结了吧,这也是为什么面试哥哥不问我前端相关的问题的原因了)。