阿里面试感受

    本人坐标东部的一个二线城市,毕业于一个蹩脚的211大学,科班出身,快6年经验了.3月份的时候萌生了换工作的想法.来公司快一年半了,开始还好,基本上每天有活干,基本不用加班,传统行业监控软件.最近一个项目,急着上线,导致加班稍多,更关键的是需要去现场出差,几千公里之外的地方,到了现场加班就不是996了,而是9,12,7了,况且工作中由于一些限制,一些能简化开发/提升效率的框架没法使用,也学不到多少技术,对涉及的业务也不是非常感兴趣,于是萌生了退意.

    3月份的时候就在网上更新了下简历,本以为这次会像以往那样,已更新简历,不用多久就会有很多hr联系你,邀请你去面试,但实现啪啪啪狠狠打了脸,快一个礼拜过去了,简历石沉大海,杳无音信.中间一家知名的公司lc的人打电话来约面试,时间是某个周六上午,于是周六早上兴冲冲的开着小毛驴去了,到了那,找了一圈才找到,原来是现场招聘会这种,一堆人在里面排队等着面试,到了现场先登记,工作人员说没打印我的简历,问我有没带,我说没有,工作人员拿出一张纸,特么居然让我现场手写简历,唉,尴尬的硬着头皮坐下来手写简历,期间发了一个号牌,数字还不错,一个8,估计是面试排号的,贴在了胸口,后来出来的时候撕下来贴在了我的毛驴上.简单写了下简历,里面人来人往,感觉像是菜市场,期间有人在面试.但是...为嘛面试官会拿着个话筒,而且,特么旁边居然还有人在录像,在拍照,容我做个悲伤的表情

 ...这特么感觉是在作秀啊,于是坐了几分钟,实在做不下去了,没轮到面试就走了.后来一直没接到其他面试通知,于是在招聘网站上主动投了几家离家近的公司,想着钱少点就少点吧,毕竟离家近啊,大冬天的能多睡会也不错.怎奈现实又啪啪啪打了脸,一直到两个月后的现在,主动投的那几家公司都没回应,唉.所在的城市还是太小了,基本没啥知名点的公司,也没啥互联网公司,更多的都是530这种初创企业,或者面向传统行业的.

 

    过了段时间,大概3月底的时候,有headhunter打电话问要不要推阿里.之前也听闻阿里在这里有个团队在开展业务.一方面感觉自己水平有限,面阿里估计会被虐,另一方面阿里工作的地方离住的地方太远,虽然一个城市的不同区,但来回得要有60公里了,所以就拒绝了.等到4月份的时候,4月16号又有一个headhunter打电话问要不要推阿里,唉,这特么就尴尬了,手上还是一个面试通知都没有,就想着去面以下吧,感受一下大厂的面试,就算被虐了,以后也是一段回忆啊,想当初我面阿里,还坚持到了XX轮,吹吹牛逼也好,就硬着头皮答应了,于是headhunter就把简历推上去了.

    接下来的时间就是等面试,期间headhunter会不断通知你面试结果,过了几天,显示简历筛选通过了,下面是第一轮面试,电话面,后续几天阿里面试的小哥打电话来约时间了,4月18号晚上9点到9.30的样子.刚好那天有另一个面试,约了晚上7.30开始,想着7.30开始,一个小时差不多了吧,刚好错开来.谁知特么第一个面试面到了9点多才结束,期间一上来就是英语面,主要都是前端的问题,什么css盒模型,bootstrap的使用,js ==与===的区别,jQuery如何ajax异步请求,关键是要一一用英语作答,蛋疼啊,好不容易回到了中文面,问的基本上都是Java后端的,问题基本上不难,最后有道编程题,将数字转换成中文,比如,123,转换后是一百二十三这种,在线写,三个面试官一直看着.期间阿里的小哥打了两次电话过来,由于还在面,两次都被我挂了.第一场面完了,估计阿里没戏了,两次放了鸽子...

    第二天上午的时候,阿里小哥又来了电话,问了下昨天没接电话的原因,然后约了晚上继续面.到了晚上,面试小哥的电话来了,声音还蛮好听的,一开始主要是一个个人的介绍,包括个人简介/工作经历,项目经历等.然后小哥会根据你简历上的项目经验,问一些问题,这一轮问的问题还是很广的,项目中涉及的技术基本都会问到,比如spring bean的生命周期,aop的原理,针对他感兴趣的项目,会问一下项目的背景,你所担当的角色,做了什么突出贡献,项目中我们用到了线程池,小哥问了线程池几个核心参数的含义,比如coreSize,maxSIze等,问了active mq的一些问题,如active mq未消费的消息存在哪里,问问对微服务的理解及相关框架spring cloud等的理解,问了项目的规模,几台app,几台db,问了有没使用过什么缓存框架,还问了jvm为什么会内存溢出.还有个算法题,两个参数,一个是sum,另一个是一个数组,里面的元素能使用0次或多次,是能数组中元素的和为sum,求所有的可能情况,唉,本人是个算法渣啊

 ,考虑了一分钟,硬着头皮说不会,面试小哥倒蛮好的,说没关系,说看看能不能用递归或者动态规划解决.唉,动态规划还是在大学的时候上算法课的时候看到过,当时学的时候就是这种状态.最后还是硬着头皮说不会

 .最后问了最近在研究的技术或者最近看过的书.大概聊了一个小时,一轮就结束了,给我的感觉就是问的还是挺广的,面试小哥人很不错,没有那种鄙视你的感觉,没有抓着你不会的问题不放,让你很尴尬.

    第一轮下来感觉不好也不算太坏,主要是算法题一点没答上来,担心可能会因为这个挂历.20号headhunter来消息说昨晚简历评估通过了,接下来是一轮面试,对,你没看错,是一轮,我一听,蒙了

 ,说前两天的不是已经一轮了么,headhunter解释说,那个只是简历面,简历筛选,严格来说不算是一轮,接下来的才是一轮,我的内心是这样的

 ...接下来阿里小哥来电话约一轮的时间,也就是第二次面试,还是电话面.约的4.23号好像是晚上9.30的样子,阿里的小哥都喜欢晚上干活啊.那一天晚上,到了九点多,紧张的坐在沙发上等电话,结果等到10点了,还没接到电话,我都准备去洗澡睡觉了,刚准备脱衣服,电话来了,看了下时间,晚上10.07分了,一面的小哥跟简历面的是同一个小哥,声音还是那么好听.一上来还是简单的自我介绍.完了小哥说,你们应用都是部署在Linux上的吧,那常用的Linux诊断命令了解吧,比如现在CPU跑满了,怎么分析.这个本人刚好之前一段时间在测试环境遇到过,当时是测试环境内存溢出了,用top命令查看了下,jvm进程CPU跑满了,再定位了下线程,是gc线程跑的很频繁,使用jstat命令看了下一两秒就年轻代gc了一次,几乎把CPU跑满了,那这个基本上就是年轻带分配空间过少,导致生命周期短的对象很快就占满了年轻代,触发了年轻代的gc,当时我们的应用也有点问题,会频繁创建生命周期短的对象,当时的做法就是调大了年轻代的大小,所以就把这段经历讲了一下,小哥还问了怎么定位有问题的代码,或者说怎么查看线程执行状态,这个可以用jstack命令查看.紧接着小哥问网络问题排查,比如现在有两个应用,A和B,A发消息给B,现在A发了消息但B没收到消息,或者A和B之间的连接突然断开了,怎么分析,这个我说可以打日志,小哥说这是最基本的,还有没有其他,我说可以抓包,小哥说我想问的就是抓包,那你怎么抓,我就要哭了,我知道有抓包,但是从来没抓过,过往的工作经历上从来没涉及到,这个只能硬着头皮说没实际抓过.小哥接着问怎么查看网络的状态,有什么命令,这个当时可能没听明白问题,我只说了这个是操作系统额功能,应该有相应的命令,要查以下,实际上就是netstat这个命令,工作中也多次用过,但当时可能蒙了,没想到.小哥接着问netstat命令可以列出网络的状态,比如listening,established,那time_wait跟wait有什么区别,记得好像是这么问的,唉,我特么又一脸懵逼了,以前使用netstat命令基本上是看一下服务器监听的端口有没有开着,以此来判断服务器有没起来,仅此而已,也只知道常见状态的含义,比如established,listening等,其他就没有深入研究了...接着小哥问了对spring boot的理解,好在之前自己学过spring boot,看过点资料,字节写过几个demo,有点使用心得,知道spring boot的原理,大概扯了下,就差不多结束了,结束时看了下时间,10.38分

    这一轮的面试给我的感受是有了一定的深度,还是偏技术,更多的是线上问题定位/排查相关的技术能力.感觉还行吧,也是不算太好,也不算太差.第二天headhunter来电话说通过了,等第二轮,说让我准备电脑,准备钉钉接视频,顿时心虚了,准备电脑估摸着是要现场写代码啊...悲催啊.二轮约的是25号晚上,也是晚上7/8点的样子.这次是另一个小哥面了.也是电话面,没让视频,也没用电脑.二轮主要问的是亮点项目,就是问你觉得那些项目是你认为比较重要的,担当了比较重要的角色.唉,虽然工作了快6年了,项目也有差不多十几二十个了,但大部分项目都是千篇一律,增删改查,要找亮点项目还真没多少了,就随便选了个之前重构的项目,乱七八槽扯了一通,为什么要重构,重构了哪些功能之类的.由于当时做过一个电商项目,客户在淘宝等平台上开店,我们的系统帮客户维护订单,面试小哥问了怎么应对双十一,怎么做测试的,测试过程有没遇到问题,这个本人经历过几次双十一,当时的确遇到了一些问题,比如当时用的IBM的websphere mq,双十一前做测试的时候发现消息发送很慢,几秒钟才发出一个消息,很不正常,最后通过查看线程执行信息,发现在创建mq connection的时候锁竞争很激烈,于是使用了spring的连接池这种方式缓存了mq的连接,解决了.另外还有个多线程上下文不对的问题,当时主要是修改了线程池的rejectHandler策略,线程池队列满了,以后,使用主线程去执行任务了,而主线程中没有上下文信息,导致发出的消息中没有带相关的上下文信息,这两个都是真实的案例,所以就对着小哥讲了.小哥还问了quartz的问题,项目中我们使用了quartz调度框架.当时我们有两台app.小哥问了使用quartz如何保证任务只在一台app上跑,我们当时是在在两台app上都有quartz的实例,那这个问题我们当时也实际遇到过,使用的quartz的方案,quartz有一套自己的表,使用的数据库的锁保证调度只会在一个app上触发.这个问题以前面试的时候从来没问道过,不得不佩服阿里小哥的眼光啊.天真的我以为到这里就结束了,哪知小哥又发问了,任务在一台app上跑,那另一台就浪费了,怎么让另一台不浪费...唉,我们当时没考虑过这个问题,所以这能硬着头皮,支支吾吾的说了一些,感觉答的不是很完美.接着问了项目上有那些是比较难解决的,最终还是解决了,本人一开始回答了两个都是技术上的,面试小哥说不要技术上的,业务上有没有什么一开始感觉挺难搞的,最终通过努力还是解决了,这个问题回答了调用天猫新的商品创建API创建商品的功能.这一轮就这样结束了.

    二轮感觉更多是偏向项目的,比如重点介绍某个项目,使用的技术,攻克的难题等.27号,headhunter说二轮也通过了,说下一步可能会现场面.然后一直等,过了五一,到了5月2号,headhunter说现在状态变成了第三轮电话面,那就不用去现场啦.结果2号阿里的一个小哥电话我说面试漏了个环节,要加试一道编程题,一听到编程题立马就跪了,编程/算法一直是软肋啊,面试小哥加了微信,说晚上进行.到了晚上7.30的样子,小哥如约来了电话,让写一个限流器,qps是100,这个本人之前刚好看到,Google的工具包guava中有线程的RateLimiter,就说已经有线程的了,直接用就可以了,面试小哥来了句,不能用二方库...

 要哭了,面试小哥说没关系,在纸上随便写写,不要求写的很严谨,8点结束,半个小时的样子,唉,于是只能硬着头皮找来纸和笔写写,大概写完是8.01分的样子,拍了照片微信发给小哥了,小哥人也很好,还说了声谢谢.加试就到此结束了,反正写的也不咋地,当时也没看过RateLimiter的源码,只知道是用令牌桶算法,大概知道原理,后来第二天还去看了RateLimiter的源码,发现还是看不懂,但学了一些StopWatch,WatchService的用法.

    然后到了4号还是5号的样子,阿里小哥又来电话了,说约下一轮的时间,要去现场面,具体时间地点发钉钉上,开始约的7号上午10天,到了7号那天又临时改到下午3点了,于是7号下午3点去了现场面.现场面是两个小哥,其中一个是简历面和一面的小哥,这次终于见到本尊了,主面试官是另外一个,两个面试官都拿着mac电脑.这一轮面还是技术,问的问题很多又跟前面几轮不一样,唉,阿里的每个面试官总能问出一些不重复的问题.以下是一些问的问题,有些可能记得不太清楚了,比如,spring中bean的生命周期,spring aop实现的原理,楼主回答了代理,紧接着又问了代理实现的方式有哪几种,楼主回答了jdk代理和cglib代理,小哥又追着问这两种代理的区别.接着问了spring中@service,@bean,@config的区别,刚听到这个问题的时候一下子蒙了,支支吾吾的说了一些都没回到到重点上,以前只关注使用,没想过区别,接着又问了spring中事务的传播行为有那些,这个就答出了常用的那几种,然后问了spring中的事务控制,比如要更新数据库,然后发送消息,怎么保证这两者的事务一致.接着问了对微服务框架的了解,楼主答了dubbo跟spring cloud ,小哥问了dubbo跟webservice的本质区别是什么,这个回答的也是支支吾吾的,没有get到重点,小哥提示说webservice两个系统之间直接交互,dubbo需不需要注册中心,经小哥提醒,一下子就get到了重点,小哥还问了注册中心挂了,对服务的调用有没有影响.其他的,还问了缓存框架的使用,memcache与redis的本质区别,这个分布式缓存没在项目中使用过,只是自己学习过,所以也都是答出一些表面的.接着问了一个场景题,秒杀系统怎么做并发控制,一开始本人以为是一个应用内,那可以使用synchronized或者Lock去控制,面试小哥提示说多个app,分布式,怎么控制,这个一下子蒙了,想了下说可以使用zookeeper这种分布式锁,但是感觉面试小哥要的回答应该是redis,结合lua脚本做原子控制,这个是面完了我才想到的方案.接着问了些数据库的东西,比如mysql的索引类型,mysq怎么分页,一张大表,里面1000w数据,怎么做分库分表,唉,分库分表的了解过,无奈没有实操经验啊,所以也是简单回答了下,面试结束后去看了下当当开源的sharding-jdbc组件.接着小哥问了mybatis中如何避免sql注入,这个楼主回答了mybatis的占位符,小哥接着问如果不用占位符怎么避免sql注入,这个楼主就跪了,不知道...然后小哥又问了些其他问题,一个接一个,都不带停顿的,比如Exception与Throwable的关系,spring中bean的scope有哪几种,默认是什么,然后问了thread scope,这个从来没见过啊...接着又问了restful的本质是什么,spring boot的本质,问了输入两个参数a和b,求a的b次方,不能用循环实现,这个楼主想了会,说用递归实现,期间还问了泛化类型,这个没听过,以为是泛型,面试官就问了下对泛型的理解,其他可能有些问题不能一一想起来了,整个过程差不多一个小时的样子,然后就结束了.

    三轮感觉小哥问的问题很多,很集中,中间都没有停顿的,就感觉一挺机枪对着你一阵狂扫,看你顶不顶得住.等到8号headhunter来电话说应该是通过了,说接下来还有面试,我特么要奔溃了,问headhunter说还有几轮,headhunter说不定,p6通常是3轮,最多的可能面5轮,p7通常要5轮,还会交叉面,面的轮次越多,意味着岗级越高,唉我特么p6都够呛,更不敢奢望p7了.结果8号下午快下班的时候接到了hr电话,约10号下午两点hr面,还发了疯封邮件.到了10号,还特地百度了下hr面的问题,结果基本没问到.hr主要问了最近一年做的事,那些印象比较深,有哪些是一开始觉得不能完成的,最终通过努力完成了,问了对应聘岗位的了解,问了对阿里巴巴的了解,最后还问了对加班的看法...大致上就是这么一些.

    回想起来,不知不觉都快面一个月了,总算结束了,总的感觉就是,不要抱侥幸心理,很多问题会就是会,不会就是不会,这些大厂对知识的广度和深度都有要求,另外一个就是,本人身处东部的二线城市,不是北上广深杭这些一线城市,虽然也有很多软件园,但都是一些小公司,或者传统行业的,所以很难有互联网的经验,感觉阿里在招的时候放低了要求,不然要是本人的水平在杭州/北京,绝逼会被问成傻逼啊.后面就是等hr的结果,听天由命吧.

   

猜你喜欢

转载自ywu.iteye.com/blog/2422540