热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

分享阿里巴巴面试心得(成功拿到实习offer)

0引言在成功拿到阿里的实习offer之前,我已经有过两次面试的经历,但最终都被GG了(后面作总结我会分析原因)。对于像我这样向来自信甚至带点小自负的人来说,是相当受打击的。好在两次

0 引言

在成功拿到阿里的实习offer之前,我已经有过两次面试的经历,但最终都被GG了(后面作总结我会分析原因)。对于像我这样向来自信甚至带点小自负的人来说,是相当受打击的。好在两次失败的经历并不是只有坏处,最起码下次面试的时候不会再怯场,还有一点更重要的,通过这两次面试,我大致摸清了阿里的整个面试流程以及套路。客观的讲,面试除了自身的实力以外,技巧性是相当重要的,我相信,不管是一个技术再厉害的大牛,如果没有对整个面试环节有一个大致方向性的把握,对于面试官所要提问的内容毫无准备,谁也不敢保证说这个offer我肯定可以拿到。因此,我在这里分享下自己的经验,希望帮助更多人,在面试过程中可以少走一些弯路。

1 笔试

先来说一下笔试部分,对于阿里的笔试难度来说,以我曾经做过的网易、蘑菇街笔试难度来比较的话,大致应该是:阿里>蘑菇街>网易,当然这里仅仅考虑了难度,抛开了各个公司的评判标准。比如说,阿里的笔试你考60就给你过了,但是网易可能就要你考75。阿里的笔试题总共包括两个部分,前面一部分是选择题,总共20道,时间是40分钟。也就是说,40分钟后,不管有没有做完,选择题会自动进行提交,然后你才可以继续做第二部分。从我做下来的情况看,时间相当得赶,基本上会来不及。题目内容大多是一些智商题,概率论,操作系统、网络等基础题。给我的感觉是,只要是技术面,选择题都是从一个大的题库中随机抽取,而不是跟某个具体的岗位挂钩。比如一些概率题,会有考察贝叶斯公式的,一些智商题,可能需要你用到简单的动态规划来推算。个人认为,选择题部分主要还是在考察一个人的基本功还有他的知识面。第二部分总共有三道大题,时间好像是两个小时,有点记不太清了。一般情况下会考一道算法题,难度不会太大,但是如果你没做过这样的题目,基本上还是做不出来。我举几道笔试原题:

在一个数组中,有若干个数,每个数字都出现两次,也就是说数组中如果出现了一个2,那必定存在另一个2,除了一个数仅仅出现了一次,如何在空间复杂度为O(1)的情况下找出这个数。

这道题目如果你有做过,你会发现解决问题的方式相当巧妙。具体答案可以自行百度,这里不赘述。

从100个数中随机抽取K个数,要求K个数不能重复。

你也许可以马上想到用暴力的解决办法,如果重复了,那再次抽取,直到抽完K个数。这道题目也有巧妙的解决办法,详见《编程珠玑》随机数那一章。

另外两道题目,以我的经验,一般会出现一道并发编程题,往往它会给你一个场景,让你提供一个解决方案,比如说设计一个活动抢购之类的程序。这些题目,大多万变不离其中,从最本质上来说,它可能仅仅是让你写一个生产者消费者模式或者是哲学家吃饭思考的问题。

一般情况下,笔试部分选择题做得不是很差,后面三道大题能做出两道来基本上就过了。

2 面试

再来说下面试,在这里,我不想条条框框得把我面试到的问题都列出来,因为那样毫无意义。问什么问题都是取决于interviewer个人的,没有什么所谓的题库,他想到问什么就问什么,当然也会根据你自身的实际情况来做提问。同时为了避免泛泛而谈,我可能也会以几个实际的面试题为例。

一般情况下,总共会有三轮技术面+HR面。如果你参加的是内推,所有的都是电话面试。对于我来讲,我更喜欢与面试官一对一面试,通过一些肢体语言和纸笔,有利于把一个问题更好得表达清楚,我并不惧怕现场写代码。在这方面,网易做得就比较好,先通过一轮电话面试筛掉一部分人,然后再参加现场面试,对于外地过来的同学,车票可以报销。如果你参加的是校招,通过了笔试,一般会邀请你去一个酒店进行面试。

面试一般会让你先做个自我介绍,这时候不要再去重复得介绍一些个人信息,面试官跟你面试的时候,肯定是已经拿到你的个人简历了,可以介绍一下自己平时经常做的事情,自认为比较擅长的或者自己喜欢的,自我介绍一分钟足矣,在这过程中,应该是让面试官知道你擅长什么,从而引导面试官有针对性的提问。接下来会问一些项目经验,你应该是挑一些有一定的含金量,并且印象比较深刻的(面试前,有必要回顾下做过的项目)。大致可以按照这几点来介绍:自己负责了哪个模块;把这个模块的大致流程介绍一遍;在做这个项目过程中碰到了哪些问题,最后是怎么解决的;最后就是对这个项目的收获。介绍完项目经验以后,面试官开始自由提问,以我多次面试的经验来看,面试的问题都不会太难。我可以大致给出面试的提问范围:

  1. 关于java虚拟机,你需要知道JVM的内存结构,垃圾回收机制,内存分配策略,类的加载机制以及内存模型。以上这些请参考周志明的《深入理解java虚拟机》。
  1. 熟悉java各个容器的实现,例如HashMap、ConcurrencyHashMap等,最好去阅读源码,这次面试关于HashMap原理三个面试官问了我三次,重要程度不需多说了。
  2. 熟悉java并发编程,尤其是java.concurrency包下的api,并发作为一块高级内容,对于很多人说,很少接触,也很难将其掌握。幸运的是,面试官在这一块都不会考得太深入,推荐《java concurrency in practice》。
  3. 熟悉常用的数据结构、算法。很多人认为算法在实际项目中根本用不到,并且觉得算法太难,就疏于学习。那为什么所有的大公司都喜欢考算法呢?尤其是像微软、facebook这样的巨头?算法不仅需要必备的理论,更需要亲自动手,有关算法的书籍更多,找一本适合的就可以了,题库推荐leetcode。
  4. 其他还有像设计模式、数据库都很重要,这些东西并不是靠一两个月就能掌握,还是需要平时多积累、总结。推荐《head first 设计模式》,如果有你认为学习能力强,可以直接看四人帮的《设计模式》,数据库就不多说了。

在这里,我并不是想给出一个面试宝典一样的东西。事实上,上面列出的东西,没有两到三年的时间学习,根本掌握不了。要想成为一名技术大牛没有捷径。还是希望大家可以认真踏实的学习,一旦你真正掌握了这些,面对面试官的提问基本上可以达到游刃有余。

3 总结

总体来说,大多数企业考虑到校招针对的是在校学生,面试都不会出现太难的题目。然而在如何学习这个问题,笔者还是有话要说的,我见过很多人,光看书或者视频,忽略了实践,最终的结果就是我能看懂代码,但是我不会写。更有甚者,拿着一本与自身水平不适应的书例如《think in java》在那里啃,导致自信心大受打击,学习兴趣骤减。武侠小说告诉我们,练一门与自身功力不相符的武功只会走火入魔。我在学习马克思主义的时候,对里面提出的思想观点是相当抵触的。但是有一点关于理论与实践的辩证关系,我深表赞同:实践是理论的基础,理论对实践有反作用,理论和实践是相辅相成的,缺一不可。我曾经遇到一位长者,他目前的职位是产品经理,问我在学校有没有项目,我说基本没有。然后他以一种教育的口吻跟我说,你这样会荒废掉的。我笑而不语,如果非要用一张图来描述我的表情的话,应该是这样的:

《分享阿里巴巴面试心得(成功拿到实习offer)》

我刚才强调了实践的意义,但是我认为,如果你做过类似的项目已经足够得多,就不要再去做重复劳动。我无意去贬低在学校做的项目,但是事实就是如此,99%的学校里的项目只能算个Demo。试问,有谁考虑了代码是否足够Elegant?是否足够Robust?是否足够Security?如果没有,那就远远达不到作为产品级别的工业强度!那么这样的项目做得再多也是无用功。

另外,文章开头谈到我两次失败的经历,都是到了HR面,有人说能面到HR,基本上就已经过了。而我两次都败在了HR面上,我甚至一度怀疑自己是不是情商有问题。在HR面的整个过程中,给人感觉还是比较轻松的,就跟平时聊天一样,基本上都是一些比较开放性的问题。但是一定要能够说得通,不能出现前后矛盾,那面试官肯定以为你是在忽悠。另外,不要把自己的缺点说得太过直白,笔者就是因为吃了这个亏。好了,作为一个HR面的loser,我就不多说了。

最后,如果面试失败也不要灰心,面试很大一部分是有运气成分的,笔者不乏见过很多被BAT刷掉,最终去了微软谷歌的,你能说他们技术不够强硬?重要的是每次面试后,都能做反思、总结,吸取经验教训。


推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • 关于CMS收集器的知识介绍和优缺点分析
    本文介绍了CMS收集器的概念、运行过程和优缺点,并解释了垃圾回收器的作用和实践。CMS收集器是一种基于标记-清除算法的垃圾回收器,适用于互联网站和B/S系统等对响应速度和停顿时间有较高要求的应用。同时,还提供了其他垃圾回收器的参考资料。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • SQL Server 内存中OLTP内部机制概述(一)
    内存中OLTP(项目名为“Hekaton”)是一个新的完全集成到SQLServer中的数据库引擎组件。它专为访问内存常驻数据的OLTP工作负荷而进行优化。内存中OLTP有助于OLT ... [详细]
author-avatar
摇身一变鄙人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有