我是如何拿到蚂蚁金服 offer 的 ?(Java岗)

一、梦想和被拒

二、积累

三、结语

15-17年,壹钱包实习、工作,基础中间件组。
17年8月-19年3月网联清算有限公司,基础组件组。
</pre>

我是如何拿到蚂蚁金服 offer 的 ?

一、梦想和被拒

进入阿里一直都是我的梦想,我想这跟很多同学是相似的。我前后被拒了两次,分别是大三找实习和工作一年后。第二次尝试一面都没过,但那一次电话面试经历了一个半小时,被问了十几个问题,面试结束后感觉脑子被掏空了,没办法思考,我也看到了自己的不足,很多基础知识非常不扎实,随机应变能力差。后面针对基础知识做了很多积累。

我看过一篇技术文章,其中一个人写到技术工作者应该偶尔出去面试一下,让外界来评判你的价值,发现自身的不足。我赞同通过跟外部同行对比找出自身不足,但途径可以换成跟社区、优秀的同事交流和学习,毕竟面试是一个耗费体力和时间的事儿。

工作第一年,投出去的简历很少有回应,恰好此时网联正在筹建,同时壹钱包也是网联的股东之一,需要从支付机构借调人力。当时也为面试阿里做了些准备,所以在网联的笔试和面试都很顺利,就这样离开了上海,来到北京。

这里要温馨提示一下各位想进阿里的朋友,要做好充分的准备,不要浪费机会,你的每个回答,都会被记录,虽然你可能因为种种原因失败,但都会为你下一次挑战打下基础。

二、积累

我想强调最好的准备是你认真投入到你当前的工作,把它做的漂亮、优雅,至于一些面试题目和技巧,我个人觉得重要程度没那么高。所以这一章命名为积累而不是准备。

面对挑战的勇气。

16年刚毕业,交给我的第一个任务是学习codis的负载均衡策略,并将其应用到公司自研的分布式缓存上。codis是go写的,我第一反应是我能看懂吗。但还是硬着头皮去看了源码,我印象非常深刻,codis的负载均衡是用三个嵌套的for循环写的,go语言并没有成为障碍,反而给我很多自信。但这仅仅是个开始。

更难的是如何管理集群,扩容、缩容、迁移时集群状态的管理。最初我没掌握方法,一股脑的写,发现实现了A功能,但B功能有问题了,深刻体会到了改了一个bug,引入新bug的痛苦。我把很多功能和判断写在一起,导致这一问题。

探索的过程花了很久,最终我慢慢领悟了一些方法,先将流程肢解开,画流程图,像八爪鱼一样,将每个图中每个块(步骤)用一个函数实现,将所有函数按照流程拼在一起,后面当我发现bug,只在拼接的方法上做了调整,并没有修改太多代码。

经过三个月的开发和测试,完全跑通。这个项目在当年获得了壹钱包年度优秀项目提名,看着其他项目都是百人规模,而这个项目的核心成员只有3、4个人时,自豪感油然而生。这里我也非常感谢我的领导。我的建议是勇于承担任务,逼着自己做些有挑战的工作。

窥源码,知真意。

我非常推荐大家去仔细、认真的去读一个优秀的开源工程的代码。来到网联主要负责消息队列。当时我们选择了RocketMQ,很大程度也是因为相信阿里的技术能力。开始我们并没有着急上线,而是阅读了各个组件的大部分源码,确认了它的同步刷盘、同步复制、消息重试、定时消息等等各种主要功能是如何实现的。

当然也不仅仅是RocketMQ,我还整理了一份工作中常用的框架源码思维导图:

我是如何拿到蚂蚁金服 offer 的 ?

需要导图相关学习资料加群:810589193,还有更完整的Java架构思维导图

一开始有4个同事一起看源码,最后只剩我一个还在debug。我感受到了解决疑惑的快感,从开源代码中学到了很多技术细节和技巧。窥源码,知真意也是我在即将从网联离职之前给内部培训时的标题。我从中学到了一个优秀中间件的网络线程模型应该是什么样子、内存池技术、如何增强线程功能、如何实现同步流程等等。

熟知源码还能帮助我从源码层面定位问题。当时我们开启了CommitLog的预热功能,之前也熟读了预热的实现逻辑,但生产上还是出现了bug,因为对实现逻辑很敏感,在2小时内定位并解决了问题,防止剩余5个IDC出现类似的问题。

我建议如果你在工作中用到Dubbo、ZK或其他组件,甚至不是Java写的,你都可以尝试去搞清楚他们实现的方法,这对于你后面的职业生涯有非常大的帮助,如果你能成为某开源软件的Contributor或者更高,对你求职将会产生巨大的帮助。

读书。

为了搞清楚RocketMQ网络层的实现原理,我尝试去读Netty的源码,并结合《Netty权威指南》和《Netty实战》理解Netty的工作原理和RMQ的使用方法。看过Netty的部分代码给我留下最深刻的印象是好的产品是无数个细节堆砌出来的。去年为了解决RMQ自旋锁和重入锁的使用问题,阅读了《Java并发编程实战》,这是一本非常经典的Java并发的书籍,非常推荐大家深入阅读。

同时我也喜欢读一些我称之为“泛泛而谈”的书,不是说这些书内容平庸,而是内容广度大,能够拓展眼界,推荐大家阅读《大型网站系统与Java中间件实践》。如果你听了我对RocketMQ的描述并感兴趣,推荐你阅读《RocketMQ技术内幕》。

三、结语

如果你想突破自己的天花板,那一定要别人付出更多,这个过程是很辛苦的。如果你做好了充足的准备,那就自信的表达你的观点,不要因为不自信让面试官觉得你掌握的不扎实。如果你不会或拿不准,如实告知即可,遇到不会的很正常,不要不懂装懂。如果你认准了一条路,坚持走下去,你一定会获得很多收获。

欢迎做Java的工程师朋友们加入Java猫的架构学习基地:810589193进群交流,我为大家准备了免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)

合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

在Java路上我们一起成长,共同进步!

推荐阅读更多精彩内容