【3.25更新】阿里巴巴 春招java开发面试经验V2
春招正在如火如荼的进行,先祝大家都能收获心仪的offer。
去年3月写了一篇我春招实习面试的经历《阿里暑期实习java开发面试经验》,有八千多次浏览五百多次收藏,帮助了许多人对阿里春招的流程和考察的点有了初步了解,已经实习转正成为一名正式员工了,我们组也已经开始春招一段时间了,上一篇文章主要是站在面试者的视角总结的经验,最近问了问同组几个面试官的面试过程,这篇文章站在面试官的视角看看春招,希望能帮助大家。
看完如果想投递我们部门(阿里巴巴-CTO线-数字供应链-天猫超市)可以将简历发送至sikai.zsk@alibaba-inc.com;或者牛客私聊我获取一对一面试帮助和简历修改建议~
考察的点
【3月25日更新】主管(二面面试官)的考察点
基础
- 首先是在校的成绩,各学科的成绩可以很直观的反映到学习能力和知识掌握能力,主要考察计算机相关的理论知识如计算机网络、操作系统和数据库等等,不一定要求每门都掌握的很透彻,如果有掌握的很有深度的理论知识会大大加分
- 开发语言,熟悉一门即可,不限于Java/C/C++/python/golang等
面试官之前面过一个同学,对计HTTP握得很深,每部分为什么这么设计,并且自己写了一个HTTP Server,还压测了并发请求量。这就是个很好的例子,HTTP的理论知识掌握得很深, 有自己的思考,最后动手实现。
兴趣
校招生相对于社招更侧重于培养而不是直接干活,所以对计算机、编程相关的兴趣尤为重要。比如喜欢研究算法,参加了什么比赛获得了什么奖;喜欢研究中间件,学习了中间件的设计架构及相关算法并通过阅读源码掌握了具体的实现方式;喜欢研究机器学习,提出了全新的模型或在其他人的模型下改进提出准确率更高的模型,发表了什么论文;在校期间做了多少项目写了多少代码;参加校园网维护组织等等,上面说的这些都是对有兴趣很好的证明
成果
成果是对上面两点最好最直接的证明,还记得我毕设中期答辩的时候,为了让我们沉下心好好做毕设,评委都很严厉,鸡蛋里挑骨头我们多多少少被怼了几句,但是有一个同学在讲进度的时候,说已经写了三万行代码,直接打断了评委的思路,半天怼不出来,直接让他通过了。春招面试也一样,基础+兴趣就像毕设答辩中的设计理论、提出的模型,成果就像答辩中的实验结果,是对前面的基础、兴趣的证明。就像上面说的,比如对消息队列感兴趣,学习了原理,并且在一个项目中用到了消息队列等等
基础知识
正如上面所说,春招更侧总考察学习能力,我去年刚刚毕业,实验室管的很严,基本没有“正大光明”出去实习的机会,所以对于没有实习经历的同学基础知识在凸显你的学习能力的方面显得尤为重要。对于基础知识的考察主要罗列了以下几点:
- 面试官对基础知识的掌握都很牢,可以问得很深,总会问到不会的点(深有体会),不要慌张把自己的想法说出来(分析什么场景下用什么方法,有哪些方法,对比其他场景用了什么方法,某个场景有哪些限制,因此适用什么方法,而不适用什么方法,举个🌰 HashMap怎么解决哈希冲突,ThreadLocal怎么解决哈希冲突,为什么用不同的方式?可以尝试用以上的思路分析下),就算答不出来也一定要把自己的思路答出来,面试官也知道自己出的题哪些是难题,也想引导你回答,把自己的思路说出来面试官也能引导你哪里想错了,哪里没想到,如果答不上来就说句“不知道,这块我不了解”,两种回答优劣显而易见(面试官一般不会突然抛出来一道难题,大多是顺着上一道题继续深入,上一道题回答得不错才会继续深入看看你了解到什么程度,遇到不会的题/难题时想想上一个问题的思路,顺着那个思路来分析问题)
- 为什么背了几百道甚至上千道的面试题还是有答不上来的问题?因为只是背了但是没有思考。体现自己的思考,正如上面一条所述,背八股文谁都会,没法体现出你与别人相比的优势,什么能体现出来?思考。这里说下我对如何去思考的理解:还是以上面的问题为例,HashMap在解决冲突时使用了拉链法,ThreadLocal使用了类似开放地址法的方法,拉链法相比于开放地址法效率更高,为什么ThreadLocal不用拉链法呢,在ThreadLocal源码中可知ThreadLocalMap基于数组实现了一套类似Map的结构,没有实现Map接口,没有next方法,因此无法使用拉链法。那为什么不实现Map接口呢?可以结合ThreadLocal的使用场景想下在此就不再展开。总之思考就是一系列“为什么”、“怎么做”、“什么时候用”的集合,遇到相似问题但是解决方案不同的场景时对比对比,在面试官问某个场景时可以不光回答这个问题,还可以再加上在另一个场景有什么解决方案,在面试官的印象里你不立马就高大了很多嘛,多思考思考没有坏处
- 专业课知识,这里直接引用面试官的原话 :“对于项目经验比较少的同学,能证明自己能力的只有专业课和一些大作业,所以考点就在专业课上面”
- 简历上写到的点都有可能被问到,不要怕简历上写的专业知识太少就往上堆一些自己不了解的知识,比如用过Redis看了些Redis教程就写熟悉Redis之类的。写在简历上就有可能问原理,需要自己权衡下简历的内容的质与量
- 在帮助许多同学答疑的时候都会问一类问题,我学得是python/C++等语言,这里要求是Java开发,这里直接引用面试官的原话 :“不在乎语言:语言只是工具,校招的同学熟练掌握一门语言就很好了,也不用太在乎自己擅长的语言和JD不一样。我们考核的是融会贯通的能力,是未来的可塑性”
我们更多的是看他们的学习能力和部分思考能力。到具体的问题点是更多的是看他们简历上自己描述的对那些方面熟悉点去问题(课程专业知识和简历描述的其他知识点),从一个问题点,先问基础简单的然后会逐渐的问深层次的原理等等去考察他们对说的是否真了解(看是不是只是了解皮毛,有木有去真的去学习了解);还可能会问一些发散的问题(给个case场景)看他们是思考如何去解决。
实习经历&项目经历
如果你有丰富的实习经历或大厂的实习经历,无疑会增加面试官对你的印象分,没有也不用担心,只要你的基础知识够牢,offer一样收。
- 对于实习经历,一定要能讲清楚实习期间做了什么,做的业务是什么,为了解决什么问题,取得了什么成功,开发期间遇到了什么困难,如何解决的。一定要讲清楚做的事情
- 对于做过的项目,和上面说的一样,做的东西要讲清楚,并且每个模块做了什么,怎么设计的,用了什么技术栈,为什么用这些技术栈(与其他同类技术栈相比的优势),哪里还有不足也要能够讲清楚
补充的面试准备(待补充)
一些不错的公众号和书
书:clean code,重构,Java编程思想,算法导论等等基础书籍