本文转载自微信公众号「Java极客技术」,作者鸭血粉丝 。转载本文请联系Java极客技术公众号。
Hello 大家好,我是阿粉,最近心情不是很好,因为阿粉面试阿里三面挂掉了, 当收到下面这封邮件的时候阿粉内心是拔凉拔凉的。阿粉被 “Unfortunately”,“another candidate” 这几个词深深的伤害到了。不过伤心归伤心,该自我总结还是得自我总结的,有机会再战。
前言
其实这次的阿里面试并不在自己的计划之内,因为之前也有面过,所以这次是阿里那边直接打电话过来的,原本也没有想着面试,只不过既然人家都打电话来了,而且岗位也确实挺合适,就答应了。所以就有了开篇的故事!
一面
一面是在端午放假前的某天,北京那边来了一个电话,当时正在上班,电话那头说是阿里的,有个岗位感觉很合适问有没有兴趣。简单问了下岗位的情况,确实比较合适,就应了下来,约了当天晚上九点电话面试。
不得不说,很少有公司跟阿里一样能晚上九十点面试,后面还有更惊讶的。
由于平时工作加班比较多,所以约了当天的晚上九点,因为这样才能回到家方便面试。(这里提醒一下大家,面试的时间是可以跟面试官商量的,一定要约一个自己合适的时间段。)晚上九点钟的时候,坐在书桌前等电话,阿里面试官很准时,到点电话就打过来了。面试官简单做了一下自己介绍,然后就开始了面试,整个一面的面试过程还是比较顺利的,也很自然,对于一些问题面试官也会给一些提示。整个过程大概持续了一个半小时,最后十几分钟在线编程题。
下面分享一下一面的面试题目,具体的答案就不贴了,网上或者我们 Java 极客技术的公号和知识星球都有分享过。
题外话:现在加入《Java 极客技术》知识星球送一期精华 PDF
- 自我介绍
常规套路,先来几百字的自我介绍,来一个破冰,这个内容我们平时多练习一下就好了,或者多面试几次也行。建议把相关内容写下来,自己多练几遍,这样更自然。
- 项目经历
把自己最熟悉的项目经历说出来,说清楚整个流程,采用的技术架构,自己在里面充当的角色等。这里千万注意不要说一些自己不熟悉的东西,因为面试官都是根据你说的内容来进行提问的,千万不要给自己挖坑。
- threadlocal 实现原理
- 线程池参数和怎么配合使用的
- volatile 关键字
- 锁synchronized 与 lock,读写锁
- InnoDB 与 MyISAM
- 分库分表
- 系统的架构
- 使用的云服务
- QPS,每天的流量
编程题 给定一个无序正数数组arr,求arr的所有子数组中,所有元素之和为K的最长子数组长度。例如arr=[1,3,1,1,1,1] k=4 则最长子数组为1,1,1,1 结果返回4
一面的内容相对来说还是比较正常的,没有很偏或者很难,内容都是一下 Java基础,唯一一个让阿粉比较担心的是最后一个编程题。其实一开始阿粉是不知道有编程题的,面试官在电话里面问身边有没有电脑,需要做一个题目。刚说到这个的时候还是有点慌的,面试在线编程还是第一次。不过看到题目和相关提示的时候,还是一下子就写出来了。
这里补充一下,在网站上写完之后,自我感觉是没有问题,但是为了保险就问了下能否拿到编译器里面测试一下,没想到面试官同意了,然后一粘贴到编辑器里面运行就发现好几个错误。有编写错误也有逻辑错误。。简单调试了一下完成了。所以除非你很强,不然不要迷之自信。
整个一面还是很轻松的,因为有编程题,所以两边都开了摄像头,对面的面试官看上去就是一个实实在在的程序员。说话也很直接,面试快结束的时候说,后面会根据综合情况来评估,如果两三天没人联系那就是没戏了,要是没问题后面会有更高level 的人来面试。
二面
接到二面的电话的时候是端午放假第一天,面试官就约了端午晚上八点面试,接到二面电话还是激动了一下,说明综合评估是过了,根据一面的面试官的说法,二面的面试官 level 更高,而且明明是端午放假都还要面试,也不容易。
二面整个过程也还挺好的,持续了大概一个小时左右,电话接通以后面试官先自我介绍了一下然后也描述了一下岗位的需求,说了一下他是整个项目的负责人,然后就开始了面试。
- 自我介绍
- 跳槽的原因
- 未来3-5 年的规划
- 觉得自己的技术是否还能成长
- 如何在不增加机器的情况下抗住比现在大十倍的流量
- volatile 关键字
- 频繁 fullgc 的排查
- jvm 是如何判断一个对象是可以被回收的
- mysql 执行一个 sql 的过程
- 单例的实现
- 乐观锁与悲观锁
- kafka 为何如此高效
- CAS 原理
- 如何解决并发问题
- QPS,每天的流量,最大的 QPS 是多少
- 目前的薪资和期望的薪资
- 编程题
- 二叉树,给定任何两个节点,求两个节点的最小公共节点
- 给定一个字符串S = "I am a student." 是其成为"student a am I".
二面的内容主要还是以技术为主,外加一些个人规划和薪资。二面的编程题是直接电话说解法,没有要求在线编程,还好只是提供思路解法就好,没有要求上手。问到的问题跟一面有个别重复,不过整体的难度也还正常,没有特别偏的。有些问题比较偏实际,就比如 QPS,平时有观察过才知道,就是没有注意过,也要能根据自己的业务场景评估出来,不难但是考验平时的积累和应变能力。
最后反问的环节了解到二面的面试官是小组的 leader,带领团队的。
三面
面完二面过后自己有点慌了,感觉不是很稳,有些东西虽然知道但是面试的时候说的还是有点磕磕巴巴,不够坦然。再加上二面过后间隔了一天才接到三面的电话,在没接到电话之前都已经自己已经凉了。三面约面试的电话是一个 HR 小姐姐打过来的,约了当天晚上八点三面。原本以为三面是 HR 面,结果接到电话的时候发现是另一个技术面。按照这个路子,三面的面试官应该 level 更高,当时还震惊了一下下,不过立马调整过来了。
三面整个感觉垮掉了,面试了大概四十分钟左右就 over 了,大概问到的几个问题如下,有些太紧张记不起来了。
- 自我介绍
- 日活,量级
- fullgc 的排查
- 项目的流程,内存的管理
- 技术是否还能提升
- 怎么学习
- 工作这几年最大的成长是什么
- Redis 的源码是否有看过
- 如何在不增加服务器配置的情况下支撑双倍流量
- top K 问题
再问到第三个项目的流程以及内存的管理使用的时候,面试官说到:你们对内存的使用不是很多,数据量不大。被他这样一说自己当时就慌了,我们是小公司每天的所有流量 pv 大概四亿次,日活 1200 万左右,数据量说大吧肯定没有阿里的量级大,说不大吧比其他的公司应该也大点。被他这么一说,我都接不下去。
接下来问的一些问题都比较开放,最后几个问题回答的不是很好,当时的状态有点紧张和懵,说的啥都不记得了。
心态很重要!心态很重要!心态很重要!
三面快结束的时候,看了下时间,差不多四十分钟左右,阿粉就知道凉了,前两面都是聊着聊着忘了时间,结束一看都一个多小时,这一面感觉聊了很久,结果才四十分钟,瞬间一股凉意上心头。事后阿粉觉得三面的面试官应该级别比较高了,所以在应对这种级别的面试的时候一定要稳住心态,阿粉没什么经验,在这一面,猝!
总结
虽说这次的面试并不是我本意,但是挂在三面还是有点懊恼的,只能说自己学艺不精还需要继续修炼,多多锻炼。从整个三次面试的题目和流程来看,整个技术面的难度还是适中的,都是一些常规问题,注重的还是个人的经验和心态。然后根据面试官的介绍,几个面试官应该分别的同事,leader 和部门长之类的角色。