我是如何拿到蚂蚁金服 offer 的 ?
作者:翟洪毅
一、梦想和被拒
二、积累
三、结语
首先介绍一下投稿作者 翟洪毅,16年华理计算机本科毕业。在年前拿到了蚂蚁金服Java开发的offer,P6。
工作经历:
15-17年,壹钱包实习、工作,基础中间件组。
17年8月-19年3月网联清算有限公司,基础组件组。
一、梦想和被拒
进入阿里一直都是我的梦想,我想这跟很多同学是相似的。我前后被拒了两次,分别是大三找实习和工作一年后。第二次尝试一面都没过,但那一次电话面试经历了一个半小时,被问了十几个问题,面试结束后感觉脑子被掏空了,没办法思考,我也看到了自己的不足,很多基础知识非常不扎实,随机应变能力差。后面针对基础知识做了很多积累。
我看过一篇技术文章,其中一个人写到技术工作者应该偶尔出去面试一下,让外界来评判你的价值,发现自身的不足。我赞同通过跟外部同行对比找出自身不足,但途径可以换成跟社区、优秀的同事交流和学习,毕竟面试是一个耗费体力和时间的事儿。
工作第一年,投出去的简历很少有回应,恰好此时网联正在筹建,同时壹钱包也是网联的股东之一,需要从支付机构借调人力。当时也为面试阿里做了些准备,所以在网联的笔试和面试都很顺利,就这样离开了上海,来到北京。
这里要温馨提示一下各位想进阿里的朋友,要做好充分的准备,不要浪费机会,你的每个回答,都会被记录,虽然你可能因为种种原因失败,但都会为你下一次挑战打下基础。
二、积累
我想强调最好的准备是你认真投入到你当前的工作,把它做的漂亮、优雅,至于一些面试题目和技巧,我个人觉得重要程度没那么高。所以这一章命名为积累而不是准备。
面对挑战的勇气。
16年刚毕业,交给我的第一个任务是学习codis的负载均衡策略,并将其应用到公司自研的分布式缓存上。codis是go写的,我第一反应是我能看懂吗。但还是硬着头皮去看了源码,我印象非常深刻,codis的负载均衡是用三个嵌套的for循环写的,go语言并没有成为障碍,反而给我很多自信。但这仅仅是个开始。
更难的是如何管理集群,扩容、缩容、迁移时集群状态的管理。最初我没掌握方法,一股脑的写,发现实现了A功能,但B功能有问题了,深刻体会到了改了一个bug,引入新bug的痛苦。我把很多功能和判断写在一起,导致这一问题。
探索的过程花了很久,最终我慢慢领悟了一些方法,先将流程肢解开,画流程图,像八爪鱼一样,将每个图中每个块(步骤)用一个函数实现,将所有函数按照流程拼在一起,后面当我发现bug,只在拼接的方法上做了调整,并没有修改太多代码。
经过三个月的开发和测试,完全跑通。这个项目在当年获得了壹钱包年度优秀项目提名,看着其他项目都是百人规模,而这个项目的核心成员只有3、4个人时,自豪感油然而生。这里我也非常感谢我的领导徐超。我的建议是勇于承担任务,逼着自己做些有挑战的工作。
窥源码,知真意。
我非常推荐大家去仔细、认真的去读一个优秀的开源工程的代码。来到网联主要负责消息队列。当时我们选择了RocketMQ,很大程度也是因为相信阿里的技术能力。开始我们并没有着急上线,而是阅读了各个组件的大部分源码,确认了它的同步刷盘、同步复制、消息重试、定时消息等等各种主要功能是如何实现的。
在这期间,一些技术公众号给了我很多帮助。在阅读源码的同时记录源码分析的文档,编写网联内部的《RocketMQ开发者手册》,开讨论会分享源码心得。这是一个漫长的过程,也是比较难受的。因为对于green hand来说,开源代码就像大海,点着点着就不知道去哪儿了,有时一个功能要看一周,而且还会遇到很多不知道的知识点,在主干任务上频繁出现分支,以至于主干任务进行缓慢。
一开始有4个同事一起看源码,最后只剩我一个还在debug。我感受到了解决疑惑的快感,从开源代码中学到了很多技术细节和技巧。窥源码,知真意也是我在即将从网联离职之前给内部培训时的标题。我从中学到了一个优秀中间件的网络线程模型应该是什么样子、内存池技术、如何增强线程功能、如何实现同步流程等等。
在帮助社区写文档时发现一个命令工具返回NaN的问题,提了issue和pr,但并没有被接收,这是第一次尝试贡献源码。后面在跟艾瑞克的交流中,我得知一个参数能提升broker的性能,使用EpollEventLoopGroup,而不是默认的NioEventLoopGroup,但当我修改配置启动时发现启动失败,于是提了一个issue。过了一段时间,很巧合的一次,在我读《Netty实战》时偶然发现boss和worker应该是相同类型,立即动手修改源码,启动,果然没有报错,第二次提pr被接纳了,那一次我知道了LGTM是啥意思。
熟知源码还能帮助我从源码层面定位问题。当时我们开启了CommitLog的预热功能,之前也熟读了预热的实现逻辑,但生产上还是出现了bug,因为对实现逻辑很敏感,在2小时内定位并解决了问题,防止剩余5个IDC出现类似的问题。
我建议如果你在工作中用到Dubbo、ZK或其他组件,甚至不是Java写的,你都可以尝试去搞清楚他们实现的方法,这对于你后面的职业生涯有非常大的帮助,如果你能成为某开源软件的Contributor或者更高,对你求职将会产生巨大的帮助。
读书。
为了搞清楚RocketMQ网络层的实现原理,我尝试去读Netty的源码,并结合《Netty权威指南》和《Netty实战》理解Netty的工作原理和RMQ的使用方法。看过Netty的部分代码给我留下最深刻的印象是好的产品是无数个细节堆砌出来的。去年为了解决RMQ自旋锁和重入锁的使用问题,阅读了《Java并发编程实战》,这是一本非常经典的Java并发的书籍,非常推荐大家深入阅读。
同时我也喜欢读一些我称之为“泛泛而谈”的书,不是说这些书内容平庸,而是内容广度大,能够拓展眼界,推荐大家阅读《大型网站系统与Java中间件实践》。如果你听了我对RocketMQ的描述并感兴趣,推荐你阅读《RocketMQ技术内幕》。阅读不仅是在书本上,极客时间很多专栏和视频课程也非常棒,都是业界大咖精心准备的,这里比较推荐丁奇的《MySQL实战》和丁雪丰的《玩转Spring全家桶》。
训练。
这里特指算法训练。推荐大家使用LeetCode,题目比较经典,分类全面。因为本身是计算机专业,对数据结构和算法有些偏爱。回想一下上学时就被动态规划、二叉树各种虐,说实话我也是在工作这几年才更深入的理解这些数据结构和算法。如果你问这些知识有什么用,我可以给你一些具体的回答。
例如当你熟悉树的结构会帮助你理解数据库索引和epoll的实现,亲身经历,面试官会问为什么数据库索引要用B+树;如果你熟悉字母树会给你提供一种快速前缀搜索的方法;如果你熟悉链表,当有人问题如何实现LRU也可以轻松回答。再回头看HashMap的实现,也会有更深刻的理解,更不容易忘。
我大概AC了300道题目,而且喜欢参加竞赛,有时间就参加,最好成绩是370名。竞赛非常有帮助!!阿里面试其中一轮一定是上机,一个小时做几道题目,跟竞赛的模式非常相似,而且题目大多类似。竞赛能让你形成一种“肌肉记忆”,上机时代码一遍过。很多同学可能会眼高手低,临场出现一些小问题,耽误很多时间。
另一个相似点在于快速思维,题目并不总是常见的,还有一些需要你临场快速给出答案,如果你习惯这种模式,当你遇到这类题目也不会害怕导致大脑空白。由于做过很多题目,以至于我在上机时超额完成任务,当时面试官还“怀疑”我抄袭。这也是一个加分项或者亮点,让你在候选人中更有竞争力。
而且LeetCode还是训练新语言的好帮手,我在学习python时,会用两种语言完成题目,尤其是python的答案有很多写的非常优雅,能快速掌握很多编码技巧,推荐大家尝试一下。
三、结语
如果你想突破自己的天花板,那一定要别人付出更多,这个过程是很辛苦的。如果你做好了充足的准备,那就自信的表达你的观点,不要因为不自信让面试官觉得你掌握的不扎实。如果你不会或拿不准,如实告知即可,遇到不会的很正常,不要不懂装懂。如果你认准了一条路,坚持走下去,你一定会获得很多收获。
·END·
程序员的成长之路
路虽远,行则必至
本文原发于 同名微信公众号「程序员的成长之路」,回复「1024」你懂得,给个赞呗。
我是如何拿到蚂蚁金服 offer 的 ?的更多相关文章
- 【面经】超硬核面经,已拿蚂蚁金服Offer!!
写在前面 很多小伙伴都反馈说,现在的工作不好找呀,也不敢跳槽,在原来的岗位上也是战战兢兢!其实,究其根本原因,还是自己技术不过关,如果你技术真的很硬核,怕啥?想去哪去哪呗!这不,我的一个读者去面试了蚂 ...
- 拿到蚂蚁金服的offer是一种什么体验?3年Java程序员分享面经
前言:我是一名三年的Java程序员,之前一直是在外包公司工作的.在这个月五号的时候,通过我的学长做内推,有了去蚂蚁金服面试的机会.我是在12号接到的电话面试的,因为蚂蚁金服需要7天的简历评估的.还有就 ...
- 面经分享!蚂蚁金服三面被拒,重拾起鼓四面猿辅导成功拿下offer!
前言 一直有小伙伴要我分享面经,说自己想面互联网公司,无奈经验太少想多看看其他人是怎么面的.我这两天刚好和一个刚拿到猿辅导offer的朋友吃了个饭,他向我说了说自己的面试经历.粉丝朋友是末流211毕业 ...
- Offer经验分享 - 蚂蚁金服、字节跳动、PDD、百度、华为、Paypal - Java社招面经
年中的时候因为换工作的缘故,陆续参加了华为.蚂蚁.字节跳动.PDD.百度.Paypal的社招面试,除了字节跳动流程较长,我主动结束面试以外,其他的都顺利拿到了Offer. 最近时间稍微宽裕点了,写个面 ...
- [从源码学设计]蚂蚁金服SOFARegistry 之 LocalDataServerChangeEvent及数据同步
[从源码学设计]蚂蚁金服SOFARegistry 之 LocalDataServerChangeEvent及数据同步 目录 [从源码学设计]蚂蚁金服SOFARegistry 之 LocalDataSe ...
- 拼多多、饿了么、蚂蚁金服Java面试题大集合
自己当初找工作时参加过众多一线互联网公司的Java研发面试,这段时间处于寒冬,然而前几天跳槽找工作,两天面了3家,已经拿了两个offer,觉得可以和大家分享下: 下面为拼多多.饿了么.蚂蚁金服.哈啰出 ...
- 蚂蚁金服研发的金融级分布式中间件SOFA背后的故事
导读:GIAC大会期间,蚂蚁金服杨冰,黄挺等讲师面向华南技术社区做了<数字金融时代的云原生架构转型路径>和<从传统服务化走向Service Mesh>等演讲,就此机会,高可用架 ...
- 蚂蚁金服 Service Mesh 渐进式迁移方案|Service Mesh Meetup 实录
小蚂蚁说: 本文是基于在 Service Mesher Meetup 上海站的主题分享<蚂蚁金服 Service Mesh 渐进式迁移方案>内容整理,完整的分享 PPT 获取方式见文章底部 ...
- 蚂蚁金服SOFAMesh在多语言上的实践
在用一项技术前,一定要知道它的优点和缺点,它的优点是否对你有足够的吸引力,它的缺点不足你是否有办法补上.黄挺在CNUTCon全球运维大会上的分享也很不错. 黄挺,蚂蚁金服高级技术专家,蚂蚁金服分布式架 ...
随机推荐
- Spring boot +Spring Security + Thymeleaf 认证失败返回错误信息
[Please make sure to select the branch corresponding to the version of Thymeleaf you are using] Stat ...
- tkinter中checkbutton多选框控件和variable用法(六)
checkbutton控件 简单的实现多选: import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya.geometry ...
- jQuery学习之旅 Item5 $与jQuery对象
1.$符号的由来 $符号本质就是函数的名字. jquery源码分析 通过分析我们知道,在jquery里边不只可以使用$符号,还可以使用jQuery标志 解决冲突问题 有的项目是中间过渡项目(proto ...
- Android SlidingMenu 使用详解
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/36677279 很多APP都有侧滑菜单的功能,部分APP左右都是侧滑菜单~Slid ...
- Effective java-对象的创建和销毁
说到java对象的创建,首先应该提下java的内存机制,最主要的两块应该就是堆内存和栈内存. 简单点来说栈内存主要是保存基本数据类型的值和保存引用变量,堆内存主要用来存放new产生的对象,数组. 堆是 ...
- python一键刷屏
#当按键q的时候,自动输入 "大家好!"并回车键发送! from pynput import keyboard from pynput.keyboard import Key, C ...
- python 产生token及token验证
1.前言 最近在做微信公众号开发在进行网页授权时,微信需要用户自己在授权url中带上一个类似token的state的参数,以防止跨站攻击.在经过再三思考之后,自己试着实现一个产生token和验证tok ...
- vagrant命令
$ vagrant init # 初始化 $ vagrant up # 启动虚拟机$ vagrant halt # 关闭虚拟机$ vagrant reload ...
- types.go
} type ChannelStatsList []*ChannelStats func (c ChannelStatsList) Len() int { return len(c) } func ( ...
- CentOS7 通过YUM安装MySQL5.7
1.进入到要存放安装包的位置 cd /home/lnmp 2.查看系统中是否已安装 MySQL 服务,以下提供两种方式: rpm -qa | grep mysql yum list installed ...