面经:阿里内推-天猫JAVA研发工程师

Apr 12, 2017


  3月上旬的时候,投了阿里的内推JAVA岗,选的部门是天猫,结果三面挂了,感觉在第三面挂掉略可惜,所以也写一个面经来记录一下。

  投递简历之后就收到短信和内推邮件,通知参加在线测评,也就是一些性格测试题和智商题。做完之后还有一个编程测验,是一道类似于生产者消费者的题,只给半个小时,我没有完全按照要求只是写了最简单的生产者消费者膜型,不过这个编程测验是不影响面试安排的,也就没太在意了。到周五晚上九点多,我看球的时候来了面试电话,只好约到周一晚上七点一面。

  一面还出了点小偏差,当天晚上面试官直接把这事情忘记了,第二天早上发短信和我重新约时间,我约的晚上七点,结果到八点还没来面试电话,只好发了个短信催,最后八点半等来了一面的电话。首先问的是项目,让我挑一个说,说完之后问了项目中的几个重难点,团队内的协作等。面试官似乎对我做的传感器网络项目很感兴趣,问了很多关于组网和供电的问题,最后提到一些安全性问题。我就把持久供电的方案、搭建星形网络的方案等等说了一遍。关于数据的安全性当时做项目确实没有考虑到,所以答得少一些。面试官大致把简历上的几个项目过了一遍,就开始问JAVA了。  

  首先问的是JAVA有哪几种锁,我就说了自己比较熟悉的synchronize和ReentrantLock,面试官先问了他们的不同点,然后问重入锁的公平队列是怎么实现的。我能记起来是AbstractQueueSynchronizer内部的FairSync类,但是对其内部实现不太清楚了,只是讲了一下内部的链表的乐观锁机制和线程获取锁失败后如何挂起的,细节不太清楚,面试官不是很满意。后来又问到序列化,提了一个将对象序列化输出成本地保存的文件,如何限制大小的问题,我没有想出来怎么解决。问了几个JVM的基础问题,内存管理啊、垃圾收集器这些,比较简单,都能答上来。最后问了我对阿里产品的了解,我说到了淘宝和天猫推荐商品的千人千面算法,因为之前有看到过相关文章,是MapEmbedding算法实现的,虽然没有完全理解这个算法,倒也能说出大致的流程,面试官没有追问。一面就这样结束了,虽然感觉有些问题没有答出来,但是旁边听我面试的同学说我答得非常好,估计是在面试的时候显得比较自信的原因。

  阿里的内推一般是一周一面,3月21号的时候收到了二面的电话。二面没有再问项目,一上来就是计算机基础,由于缺乏准备,回答得比较炸。首先问的是计网,问了两个我认为很简单的问题,一个是Session和cookie的区别,我答session是服务端保存,cookie是客户端保存,session是对象cookie是字符串,session比cookie能容纳更多信息等等,面试官不太满意,问我就只有这些区别了吗,我又说了一些在实际场合下的应用,包括什么时候选session什么时候选cookie。这时候面试官问我session在服务端是怎么实现的,我不知道怎么回答,只好答不知道了。随后问get和post的区别,依旧是说了不少区别面试官都不满意,重点提问我关于安全性的区别,问我post的数据是否能被网络嗅探到,如果被嗅探到怎么保证数据安全之类的,因为对这些底层实现不了解,这些问题就没怎么回答,不知道的都说不知道了。随后问操作系统,问到信号量中pv操作的实现,因为太细节根本就记不起来了,面试官又转向问数据结构,问了一些不太能理解的实际应用问题,回答得也不好。

  问完计算机基础我已经感觉要挂了,面试官又提了一些缓存相关的问题,包括但不限于memcache、redis,都问到内部实现机制,依旧是没答出来,只能用实际应用去强行回答。这时候面试官就开始进入教育模式,告诉我学一门技术要足够深入,应该怎么样怎么样,讲了很多,然后结合自己的经历要我保持持续学习的态势,要深入理解底层的实现,基础也要打好。说完后又告诉我后面还会有一轮面试,我想看来这一面不是一面的部门来面的,所以不刷人,不然肯定挂掉了。

  过了两天来了三面的电话。一开始就要在线写一个程序,也就是直播写代码面试官在另一边看,是输出一个整数中二进制一的个数,这个题因为之前就和同学讨论过,而且书上还有原题,所以没难度地写出来了。然后聊了一会项目,主要都问业务方面的问题,没有太问细节。接着开始问JAVA web相关,这一块基本都不会,毕竟没有java web开发的经验。首先问了几个severlet的问题,后来又问到spring,hibernate,几乎都答不出来。接下来问到数据库,首先问题就是分布式事务,我把两段提交协议三段提交协议这些说了,但面试官不太满意,继续问如何在分布式系统中执行事务,看来是想问我实现细节,我当然没有自己实现过分布式事务,只好说在这块没有什么实践经验。面试官就说问一些偏实践的问题,然后问我如何从零开始设计一个AOP框架,直接答不出来了,感觉这个问题层次还是太高,自己的姿势水平根本不够。面试官还顺带问了几个二面问到过的计网问题,答得还可以。最后问到数据结构,问了几个排序算法。这时候我出现了一个重大失误,因为之前直播写代码的窗口还开着,问到排序算法的时候我不知道为什么居然主动要求手写一个排序算法,面试官就说那你写个冒泡排序吧,结果我立马写了一个选择排序出来,还跟面试官讲了一遍实现。。。。这个失误直到面试结束我才发现,非常坑,估计是被挂掉的重要原因。

  面完三面的第二天状态变成已回绝,虽然是挂了,但毕竟面到三面,也学了不少的东西,尤其是从二面面试官口中听到了很多不同的思考问题的方式。现在想来,阿里内推这三面为我今后的面试打下了比较好的基础,让我知道要怎么进行准备了。