写过代码的技术同学都知道,中间件在整个技术体系里的重要性。在过去的十多年里,蚂蚁金服自主研发出了金融级的分布式中间件 —— SOFAStack,并多次在极为复杂的场景下得到验证,比如每年的双 11。在蚂蚁金服,中间件团队是一个带着“光环”的队伍,CTO 程立、副 CTO 胡喜都出自这个组织……
文/图 无暮
配置千万条,集群第一条,环境不匹配,战友两行泪。——《流浪程序猿》
为什么选择蚂蚁中间件
2 年前的这个时候,作为南哪大学(南京大学)实习求职大潮的一名小白,一开学各种互联网大小厂学长学姐的内推邮件就塞满了邮箱,特别是阿里系的内推邮件各种部门玲琅满目。要说为什么在众多内推中对蚂蚁中间件情有独钟,说起来有表里两个原因:先说里原因,一直觉得程序员的核心是用抽象和自动化来低成本和快速地实现更多的价值,而中间件则可以抽象出通用的能力为业务同学赋能,让业务同学专心于业务,实现更大的业务价值;诶嘿,表原因是中间件部门的内推 JD 看起来要求还挺高的,笃定身边好多的小伙伴都不敢投,自己投的话录用概率比较大,对就是这么肤浅!(希望老大看到不要给我 3.25)
面试的“心机“往事
本科实习的时候也投过阿里,但当时本想着自己学校还可以,学习成绩也不错,找实习那不是嗖嗖的。以为面试只是聊聊人生、聊聊课程项目走个过场,满脑子想着找工作是不是也像考大学一样,只要学校好、成绩好,就可以去个好公司。年轻人,Naive!接到的阿里的电话面试,一连串的并发编程、虚拟机等教材上没怎么接触到的词汇面到快要“自闭”。幸好保研让我有了“翻身农奴把歌唱”的机会。从研究生生涯的第一天起,就开始为一年后的阿里实习生面试做准备。
对我来说准备面试是一个复习、应试和成长的过程。
复习
复习大学课程里面学到的计算机基础知识,包括数据结构、算法、操作系统和网络相关知识。复习不仅仅是为了面试,也是能让自己能够整理归纳以前学过的知识,达到连点成线、织线成网的效果。很喜欢左耳朵耗子的一句话"基础技术总是枯燥和有价值的。数学、算法、网络、存储等基础技术吃得越透,越容易服务上层的各种衍生技术或产品"。等实践多了,就会发现很多项目中用到的技术和基础技术里面的思路很相似。学好基础技术走遍天下都不怕。
应试
准备面试就是一个应试的过程,面试很艰苦,需要经历九九八十一难才能取得 offer,那就不得不说明年下半年中美合拍的西...面试考点。对于应届生来说,其实考点还挺清晰的,网上已经有很多总结,也有很多面经:
- 数据结构:常见数据结构 List、Map 和 Set 的实现原理和应用场景,稍微上升一点,java.util.*里面数据结构的源码分析;
- 算法:几种排序算法的实现、复杂度和应用场景,稍微上升一点,当处理内存放不下的海量数据的 TOP K 问题、排序问题等等;
- 操作系统:内存分配寻址、线程调度和磁盘访问;
- 网络:七层四层协议、TCP/IP 握手挥手和拥塞控制;
- 数据库:基本的 SQL、数据库引擎的区别和索引的类型和原理。
"掌握"了上述的这些,个人觉得作为一个应届毕业生来说就已经合格了。前提是真正的掌握,要“由表及里,知其所以然”。最好是自己模拟问自己,能经受得住 3 轮以上的提问。
成长
成长主要来自于书籍的阅读和探索。研一时间里,陆陆续续把《Thinking In Java》、《Effective Java》、《Java Concurrency in Practice》、《深入理解 Java 虚拟机》和《Netty In Action》啃完,说实话能这么闲,也要感谢我们南哪放养学院。回想起来,《Thinking In Java》和《Java Concurrency InPractice》这两本书不愧为经典,内容由浅入深,很多知识点不仅仅告诉你怎么样,还讲解原理是什么、为什么这样。也是从读这两本书起,开始养成习惯采取三步法去了解一项技术:外在行为/表现是怎么样的;怎么实现/原理是什么;为什么要选择这样做,目的是什么,优劣是什么。看书不仅仅能让自己系统的掌握一项技术,技术书籍中往往还会留下一些进阶知识的引子,我也是因为这些引子开始去探索 AQS、读写锁、线程池和 ForkJoinPool 之类的源码,也是这些探索给我今后的开发和设计带来了很大的帮助。
应届生面试考察的是基础、思维和潜力。基础和思维是在平时的学习和面试的准备中培养的,没人有能一眼看出你是个"武学奇才",潜力是让面试官看到你相比其他人的优势和亮点。对于面试,谈谈自己的理解。面试的目的是向面试官“展现自己的优势”最终拿到 offer,而优势是在和面试官的对话中体现。如何最大程度的体现出自己的优势,充足的准备是一方面,另一方面引导面试官去问自己擅长的技能是很重要的一点。首先简历上要下功夫,简历上写出来的东西应该都是自己希望面试官去问的、有亮点的东西,而不是只是陈列自己做了什么项目,并且简历上的每个点最好经得住三、四问,最好能回答到面试官也不熟悉的领域。其次在自我介绍的时候,要引导话题,将焦点聚集在擅长的部分,这样才不会出现面试节奏被带跑的情况(恨不得就直接说快问我这些,我都准备好了)。
见闻及感受
想要变强,首先要站在强者中间。在蚂蚁实习和工作的一年半时间里,我对这句话有很深的体会。我参加过大大小小、各种技术主题的分享讲座,收获技术知识的同时,可以见识到他人的思维方式,拓宽自己的眼界,从各种角度获得对自己的提升。除此之外,在讲座中扮演分享者的角色,更是一个学习的机会。我曾经在实习期间做了一次 AQS 的分享,做分享对自己的提高是巨大的,想要把事情来龙去脉说的明白,既需要透彻的理解、广泛的涉猎、又要有触类旁通的总结和深入浅出的表述。蚂蚁为技术分享提供了自由的平台,“在这样的环境下,从不会缺少进步的机会”。
在巨人的肩膀上,站得更高,看得更远。除了平日众多的分享以外,蚂蚁还专门有一个技术大学为应届萌新特别准备了青年近卫军新人培养计划。在入职后的两个月内,从线上线下,从理论到实践,各个业务线和技术线的老司机将向新人同学全方位地介绍业务背景,讲解基础技术,帮助同学们快速落地。老师们知识渊博、风趣幽默,从便民服务到普惠金融,从分布式事务到单元化架构,他们独到的见解和讲授,都使我受益良多。另外在实战环节中专门配备了技术指导员和项目指导员辅导新同学从 0 到 1 完成一款“minialipay”的开发,在短短的 2 周内,收获颇丰。
欢乐的中间件团队在去 Outing 的路上
“小螺丝也能发挥大能量。”每个人都是公司的螺丝钉,双十一、新春红包千万 TPS 的考验,每一次突破的背后都是链路上所有部门的集体突破。蚂蚁天生的金融属性不仅对中间件的正确性和稳定性提出了极高的要求,加速发展的业务也要求中间件随时接受新的挑战,像火箭一般迅速迭代和拓展,这火箭的巨大能量来自于每一颗螺丝钉自我挑战和突破带来的推动力。从入职起一坐上通信中间件这艘火箭,我就开始感受到这比脱发还要快的功能开发速度。
刚入职不到一周,就被师兄丢过来一个多 Session 幂等的需求,上游数据同步催得很急要求2周内完成。才入职不能虚,接下需求,两周内设计方案、啃代码、一把梭,最终按时完成,还是挺有成就感的。"不丢、不错、不乱"数据同步的三不要求对消息队列的代码质量和功能的完备性提出了极高的要求。都知道并发编程容易出错,而蚂蚁消息队列是基于分布式存储盘古的,将并发编程从单进程扩展到多进程,在分布式存储的环境下没有锁的情况下,如何保证正确性就成了功能开发的首要障碍。凭借着这次研发经验,接着又在半年多里,陆续开发完成了 Topic 无损扩缩容、Topic 无损集群迁移和 Chaos 正确性验证等等功能。
继去 IOE 之后,技术上对去中心化,轻量虚拟化,无服务器等技术需求愈发强烈,而 Serverless 必将借势迅速发展,未来 Serverless 将在云计算的舞台上大放异彩。蚂蚁正处于 Serverless 转型的技术红利时代,“既有挑战,又充满机遇”。期待着学弟学妹加入蚂蚁中间件大家庭,一起共建蚂蚁 Serverless 未来。
关于蚂蚁“青年近卫军”
“青年近卫军”是蚂蚁技术校招新人金牌培养项目,由蚂蚁技术大学创建,该品牌诞生于 2008 年,总计精英化培养 1500+ 同学。
为了帮助新员工快速融入和掌握基础的专业技术技能,蚂蚁技术团队为应届毕业生制定了青年近卫军入职培训,包括通用内容和岗位内容,并匹配实战项目。1 年全链路培养,融合了业务知识、上手技能、职业素养,并利用网络精品课题、线下体验式学习、活动场、战略级项目养兵等多种方式让技术新人更自主融入学习,融入蚂蚁。
如今,“青年近卫军”已不仅是新人培养项目的名称,更成为了蚂蚁校招技术新人的代名词。
加入我们
岗位描述:
我们来自于蚂蚁金服的中间件团队,是蚂蚁金服最为核心的基础部门之一,包括研发框架,微服务中间件,消息中间件,数据中间件等领域。
1.加入我们,你将参与 SOFAStack 开源软件的研发,打造金融级分布式架构体系。
2.加入我们,你将接受每年双十一、双十二带来的高并发、高性能的极致挑战。
3.加入我们,你将在实际工作中接触到世界前沿技术的研发,引领未来。
岗位要求:
1.酷爱着计算机以及互联网技术,热衷于解决挑战性的问题,追求极致的用户体验。
2.痴迷于数据结构和算法,热衷于 ACM,常常为看到“accept”而兴奋的手足舞蹈。
3.至少熟悉一门计算机语言(C,C++,Java,Python,Golang,Rust),有良好和快速的学习能力。
4.有良好的进取心和责任感,有良好的团队合作精神。
5.有大赛获奖经验,开源项目经验者优先。
简历请投递到: jiangping@antfin.com