• 【转】阿里巴巴研发工程师内推实习生面经


    首先,自我介绍一下,我是来自东南大学研二小硕一枚。最近在bbs上看到如火如荼的师兄发的一个阿里内推消息,

    》》男票一开始叫我投投试试看,其实我是,我是拒绝的;

    》》我跟男票讲,我拒绝,是因为,我根本不会;

    》》男票跟我讲,你先写简历,写完加特技,简历很亮、很闪、很丰富;

    》》加了一天的特技之后呢,简历duang~~~~~~~~

    》》后来我承认,我的简历是假的,是灌水的成分;

    》》我现在呢,每天都还在加特技,特技,特技,加特技,加完特技简历duang~duang~duang~,瞬间变大神;

    》》我加完特技之后呢,我还推荐给我实验室的人,加特技;

    喂,我是来正经看面经的好嘛?给我严肃点!

    》》好嘞,客观,这就给你慢慢道来。割一下~


    投简历


    每个人只能获得一次内推机会,也就是在内推消息比较多的时候,需要进行比较和选择。当然也可以多发点简历给各位内推的师兄或师姐,然后到时候获得内推链接的时候再从中选一个。但我总觉得这么做不是非常的人道,把简历发给师兄师姐,师兄师姐辛辛苦苦帮推上去,最后却被你拒绝了,似乎有点增加别人的工作量哦。所以我觉得迟早都要做出选择的事情,就趁早做出选择了吧。所以我就从中选了一个叫做“共享事业部”的部门,然后加了使用的QQ,简单的了解了一下情况,我就投了这个。到后来,我才相当的后悔啊,没了解到关键内容。那就是,最好可以问一下部门开发的语言是什么!!c啊,还是c++啊,还是Java啊?我之所以后悔,是因为我本人是偏c++的,但是却投了一个Java的岗,导致后来电面有点戳手不及。这后面我会列出面试问题的。虽然很多招聘要求都是说,至少熟悉c/c++/Java其中一门一言,但这并不意味着可以随便投,还是有很多差异的。

    所以,投简历,选部门我觉得首先当然关键是岗位,做的事情适不适合你,其次使用的开发语言你是不是比较熟悉,这点也很重要。


    一面


    简历投过去,一直都没接到面试电话,陆陆续续看见身边有些已经面试过的同学,心里也有一些疑问。所以,我找到内推的师兄,问为什么简历投到现在都没有进展啊?于是师兄向公司内部询问了一下情况,叫我们不要着急,会有进展的。在此,辛苦师兄了啊。当天晚上7点半,我就接到了来自浙江杭州的电话,我想肯定是面试了。心里顿时非常的紧张啊,那时候我正在悠闲地看着电视呢!我还没准备呢,我和面试官说,不好意思,我还在吃饭呢,能不能麻烦您六点打过来?面试官说,是八点吧?我看了看手机,连忙说,不好意思说错了,嗯,是八点。额,太尴尬了,这个万能的借口也还是要看下时间的。八点多一点,电话来了,下面开始正题了。

    • Q1 请简单做一下自我介绍,简单点,主要讲项目。

    回答:我叫XXX,来自东南大学,balabala,然后讲了下项目经验和实习经验。我觉得自我介绍是非常关键的,因为在这个阶段我们可以试着掌握面试的节奏,把面试官引向我们擅长的领域。技术面自我介绍中,需要覆盖的几个部分有:名字、简单的教育背景、实习经验、项目经验。介绍项目经验的时候可以设置伏笔,来把面试官引向自己准备好的问题中。比如介绍项目的时候,可以说,在这个项目中我遇到了很多困难,但是都被我一一解决了。那么后面面试官很有可能就会问你,遇到的最大的困难是什么,怎么解决的。或者说,我们这个项目有很多创新点,就是因为这些创新点,所以这个项目才拿到什么什么奖。那后面面试官可能问你,你们项目最大的创新点是什么呢。好了,这个自我介绍,相信每个人都会有自己的特色,所以我就不啰嗦了。

    • Q2 你在XXX公司实习过,那主要负责什么呢?
    • Q3 请选择一个你认为难度最大的项目,详细讲述一下。在这个项目中,你主要担任什么角色?
    • Q4 你了解设计模式吗?都有哪些设计模式呢?能不能举例说明,使用了设计模式有什么好处?

    回答:设计模式我了解一点。比如有:工厂模式,适配器模式,享元模式,单例模式啊等等。使用设计模式的好处,还得从面向对象(此处为我埋下的伏笔,引导面试官提问)的几个优点说起,比如:可维护性、可复用性以及可扩展性。而其实设计模式并不是什么高深的东西,而是解决问题的一种方法和思路,犹如武打戏的一招一招的招式,合理利用合适的设计模式,能够使得程序更好地进行维护,更好地复用,以及更好地扩展,这是从大的方面讲运用设计模式的好处。举例说明的话,比如当要写一个计算器的代码的时候,当我们没有习惯面向对象代码的时候,很可能我们就是按照计算机的逻辑一点一点写下去,写一个switch啊,碰到加号,就去做加法的处理等等。这就有个问题,如果我们需要增加一种运算,比如平方根,那我们就需要更改整段代码。而当我们使用简单的工厂模式来完成这个需求的话,我们把每一种运算都封装成一个类,当有新的运算加进来的话,我们只需要新增一个类,而对原来的老代码影响并不是特别的大,这就是增强的程序代码的扩展性等等。还有,比如适配器模式能够让两个功能看起来不同的类一起工作,这在一定的程度上,提高了代码的复用性。或者还有单例模式,单例模式能够保证类只有一个对象,很多时候我们也是有这个需求的。所以使用设计模式,就像学习武功招式,23招都练会了话,那么我们就是武功大侠了。

    说明:再次说明一下,我本人是c++的,我很希望面试官少问一点Java的问题,所以我埋下伏笔,这次的伏笔是【面向对象】,果不其然。。。

    • Q5 你刚也说到面向对象哦,那面向对象有什么特性呢?能举例子说明一下吗?

    回答:面向对象的三大特性就是封装、继承、多态,那下面我举例子说明它们都是什么东西。封装的意思,简单来说就是屏蔽那些我们不希望对外可见的东西。比如说,我们不希望看到我们核心算法的代码是怎么实现的,那么我们就可以选择使用某种方式把它封装起来。常用的实现封装的方法呢,就是使用public、protected、private之类的修饰词。那继承呢,继承主要是为了增加代码的复用性吧。比如人也是一种动物,它们有一些共同的属性,比如说都会吃之类的,但是人又是特殊的动物,之间存在差异性,所以我们使用继承,一部分来复用存在共同性的代码,但又可以新增加一些不同的属性。多态可以增加代码的灵活性降低代码的耦合性,比如:人是动物,鱼也是动物,马也是动物,都会吃,但是吃的东西却是不同的。那么使用多态,只需要一个对象,就可以动态的去选择到底会执行哪一个吃的代码,如果不使用多态,就需要维护三个对象,耦合度就增加了,这可不是一件好事。哈哈,请原谅我的用词是如此的粗糙。

    • Q6 嗯,没事,通俗好理解。那你刚才说到多态,多态是怎么实现的呢?

    回答:听到面试官提这个问题,心里不禁一阵窃喜,一切都在我掌握之中的感觉。这个问题,还需要说吗?好吧,那我就说啰嗦一下吧。多态的实现主要依赖虚函数,比如父类把函数a声明为virtual,子类将会复写这个a函数。那这种情况下,内存中,系统会给类新增一个成员,那就是指向虚函数表的指针。这个虚函数表中,存储的就是每个函数方法。在子类的虚函数表中,当存储到这个a函数的时候,系统会用子类的a函数覆盖掉父类的a函数,那么在程序运行的时候,就会动态的选择需要执行的a函数。

    PS:面试进行到这里,其实已经半个小时过去了。啊,下面hold不住了啊,终于要转向面试官的Java面试了,哭晕。。。。。。

    面试官说:我看你简历里面写的是Java熟练,C++一般,那下面我们就问几个Java的问题吧。

    回答:我说不好意思啊,我应该是写的是c++熟悉,Java一般吧,哈哈。面试官说,你在我们公司网站上写的是Java熟练呢。我说:不好意思啊,更正一下,我写错了。但是没关系哈,问Java也没问题(表面理直气壮,内心虚的很)。

    • Q7 Java多线程你了解吗?能不能介绍一下?

    回答:Java多线程我了解一些。在Java中创建线程有两种方式:一种是继承Thread类,另外一种是实现Runnable接口,balabala。这些问题都是很大的问题,有兴趣的同学可以自己去查阅相关的比较全面的了解。我就不啰嗦了。。

    推荐一个比较好的讲解Java多线程的博客:http://blog.csdn.net/coder_pig/article/details/44284423

    • Q8 hashTable和hashMap有什么区别?

    回答:不好意思,这个我不大清楚。说实话,这个问题我真不知道。但是我觉得他们肯定都和数据结构里面的hash表有关。然后后来面试官问,那hash表呢?你了解吗?hash表我是了解的,然后我就balabala开始介绍hash表了。那关于这个问题,后来我也查询了相关资料,大家可以参考:

    介绍性的答案:http://oznyang.iteye.com/blog/30690

    如果想比较深的进行了解,可以参考:http://blog.csdn.net/zhangerqing/article/details/8193118

    • Q9 Java的服务器框架你有没有了解?

    回答:我要晕死了,Java我真的不大会啊。然后我就拼命想答案,然后我说我知道有Tomcat,然后我平常用到的还有和Json相关的。用httpServerlet返回Json数据的格式,然后再去解析。我知道,我就是在扯,但总比一点都答不出来好啊,期待大神的解答。

    • Q10 数据库你了解吗?平时用的是什么数据库?

    回答:了解一些,平时我用的是MySql。

    • Q11 主键和外键知道吗?

    回答:知道。主键就是一个表的索引,就比如说有维护一张学生成绩的表,那索引的东西就是主键,主键具有唯一性。学生名字肯定不能作为主键,因为学生名字可能会有重复的。学号是唯一的,那么学号就可以作为主键。那么外键,外键是涉及到两个表的,a表的主键学号是b表的列属性,那么a表的学号就是b表的外键了。

    • Q12 数据库事务你知道吗?

    回答:不好意思,不大清楚。大家自行百度吧。

    说明:问到这里,已经差不多50分钟了,写的好累。

    • Q13 你平时感兴趣的一个技术方向是什么?你的学习方法是怎样的?

    一面就这么结束了,以为自己挂了,万万没想到。。。。


    二面


    在那个夜黑风高的晚上,我引来了我突如其来的二面。二面是最轻松的,主要是介绍项目,然后问一些有的没的,和HR面差不多,大概持续35分钟。


    三面


    三面问了一些和项目有关的问题之后,面试官问了下面几个问题,持续30分钟:

    • Q1 MFC中没有使用多态,而是使用了一些函数映射,请问你知道为什么MFC中不使用多态吗?虚函数表是每个对象有一个,还是每个类都有一个?

    可以参考链接:http://remyspot.blog.51cto.com/8218746/1377815

    编译器会为每个有虚函数的类创建一个虚函数表,该虚函数表将被该类的所有对象共享。

    • Q2 函数指针是什么,什么时候会用到函数指针?
    • Q3 请介绍一下hash表,还有如果是有两个线程同时进行插入的操作,会发生什么样的事情?怎么解决这个问题?
    • Q4 加入有100万个数据,选出其中最大的10个,用什么算法?

    HR面


    听面试产品经理的同学说,HR面很煎熬。前面还很紧张,因为我觉得我情商太低,会不会和HR吵起来啊。O(∩_∩)O哈哈~,开玩笑。后来发现,HR面试很轻松啊,也就是了解一下性格。还问了一些私人的问题,比如有没有男朋友,男朋友在哪里什么的。因为HR想要知道一下看有没有可能留下来,以后会不会面临两地分居啊之类的,然后还有问了下觉得杭州怎么样啊。总之,面试进行地很愉快。


    后记

    有什么问题,欢迎大家直接评论回复,祝顺利~

  • 相关阅读:
    poj3252(组合数)
    cf-Global Round2-E. Pavel and Triangles
    cf-Global Round2-D. Frets On Fire(二分)
    cf-Global Round2-C. Ramesses and Corner Inversion(思维)
    trick
    2019ICPC南京网络赛B super_log(a的b塔次方)
    欧拉定理,欧拉降幂
    F. Moving On
    Codeforces Round #200 (Div. 1)D. Water Tree
    hdu5452
  • 原文地址:https://www.cnblogs.com/buxizhizhou/p/4602171.html
Copyright © 2020-2023  润新知