最近面试了蚂蚁金服的岗位,经过一个多月的战斗最终收获offer,想记录一下整个面试过程希望可以帮助到更多的小伙伴~
前期准备
- 简历
一份清晰的简历可以让你更容易获得面试机会,把自己的优势一定要写清楚,这样子才可以在n多份简历里脱颖而出。如果有自己的博客一定要贴上去或者参与过哪些开源项目也要贴上去,不然怎么证明自己对技术的热爱呢?
- 项目准备
这块是重点,一定要有深入的思考,不能说是按照产品的prd去crud,抽象抽象再抽象!包括项目的技术选型、技术方案评估、异常方案的设计等等。
- 熟悉岗位JD
在准备投递简历的时候,一定要先看JD,多思考一下这个职位对人才的需求。
- 内推
现在最靠谱的就是内推或者猎头了吧。
基础知识
作为一个程序员,基础知识必然是要熟悉掌握的。众所周知,大多数互联网公司都要求候选人有扎实的基础知识。包括:操作系统,计算机网络,基本的数据结构和算法,数据库,以及一些语言层面的基础。
拿Java来说,候选人应该要了解JVM、多线程、集合、IO等常用的Java基础知识。根据自己应聘的岗位和工作年限来,深入程度有所不同。
对于社招的同学,大多是从P6起,所以像多线程、集合之类的东西,不能仅仅停留在“会用API”的层面,还应该能够理解它们底层的一些设计思路和实现原理。
对于数据库,你应该知道基本的索引原理、调优方案和能够快速问题定位。常用的中间件redis、Kafka、dubbo、rocketMQ、ES、Zookeeper、MyBatis等等能够熟练的使用,对一个或多个中间件原理要有更加深入的了解。
思考问题的思路
我面试蚂蚁一共有4轮技术面 + 一轮笔试,基本上每轮技术面,面试官都会问一两个技术方面的思考题,一般是说现在有xx需求,你打算怎么去解决/实现它?
思考题考察的是候选人的知识积累,应对能力。其实并不是要每个思考题都答上来,但要体现自己思考的过程,不能一问三不知。
对技术的热爱
兴趣是第一驱动力。作为一个技术人,如果能够体现出你对技术的热爱,那自然也会得到面试官的青睐。那如何体现出你对技术的热爱呢?光口头说当然不行,候选者最好要有一些能够拿得出来的东西或者数据。比如你说你热爱开源,那你的github是不是有比较多的登录记录和提交记录?自己有没有拿得出手的开源项目?比如你说你喜欢钻研新技术,那学习新技术后有没有产出?比如技术笔记、博客或者开源书籍?
主流框架和工具
对于社招的同学来说,已经有一定的工作经验了。我们也是需要能够快速上手的人,所以希望能够对主流的框架和工具是要熟悉的。
阿里虽然使用了很多内部的中间件,但很多产品和开源产品相差不大。所以如果能够对像Spring Boot, MyBatis,MySQL,Dubbo,Zookeeper,Redis,消息中间件等等产品熟悉的话,说明候选人是有一定的开发经验的,可以快速上手日常开发。
那如何考察你对主流的框架熟悉的呢?面试官基本上会问你一些主流框架的原理,以及遇到一些常见问题的解决方案。这些就需要大家平时工作中多去思考总结了。
工作经历
作为社招的同学,之前的工作经历是可以作为参考标准的。简历上一定要写清楚自己在之前的公司或者项目上担任的职责,自己的主要贡献。最好能够找到一些比较突出的闪光点,给面试官讲清楚自己当时的问题和解决思路。
当然,如果有带团队的经验/架构经验/高并发系统设计经验,是肯定会加分的。
有读者朋友可能会问,如果我之前没有大厂经历,也可以来阿里吗?当然可以,只要你基础过硬,平时工作中有自己的思考和积累,热爱技术,都可以来投递简历~
一面
一面主要是围绕简历上的项目和基础知识来考察候选人。
- 为什么要使用微服务架构?微服务架构相对于单点服务有哪些缺点和优点?在微服务架构中遇到过什么难以解决的问题?
- 单点服务拆分微服务之后怎么做的数据平滑迁移?
- 分库分表需要注意点的有哪些?
- 新的服务上线之后如果走的灰度发布,如果新系统出现问题,这个时候怎么做好新系统和老系统之间的切换?
- 系统中使用MQ需要考虑的点都有哪些?如果做好MQ的技术选型?
- MQ如何做到顺序消费?消费失败的场景如何处理?
- 并发操作一条数据的方案都有哪些?如果考虑每种方案的优缺点?
- 分布式锁了解吗?基于redis和zk的分布式锁分别有什么优缺点?
- 我看你对dubbo很了解,可以详细说说嘛。
笔试
基本上一面没什问题的话就会联系你笔试了,也有可能是先笔试再面试。阿里系的笔试是在一个文本编辑器上写,没有像idea一样的提示功能,还是比较考验候选人的编码能力的,基本上要求在四十分钟内做完。
- 多线程交替打印ABC
- 删除链表的倒数第 N 个结点
- 单向链表翻转
二面
二面主要是会考察候选的项目和工程能力,会更加深入的挖掘你的项目。
- 微服务拆分的原则?了解DDD吗?你们的项目中有哪些领域模型?
- 服务之间的容灾方案是怎么做的?
- 有没有跨部门协作的经历?你是怎么协调资源的?
- 你们项目的qps、tps有多少?机器配置是怎么样的?
- 如果让你设计一个数据中台,你会从哪些地方去考虑?了解过业内的通用解决方案吗?
- 说一个你遇到的线上问题吧,以及你排查的过程。
- 你们团队是怎么做CR的?
- 在项目中优化过的点有哪些?
三面
三面会更加深入一层考察候选人的项目能力和架构能力,包括但不限于leadership、架构解决方案等。
- 单元化架构了解吗?
- 沙箱机制了解吗?
- 如果让你从0到1去打造团队技术氛围,你有什么思路?
- 你是怎么把控迭代的周期以及对风险点进行兜底的?
- 稳定性建设有没有什么经验?
- 了解class loader的内存泄露吗?出现了内存泄露该怎么办?
- 乐观锁和悲观锁你是怎么选择的?
- 你的博客都写得什么内容,你是怎么保持技术热情的?为什么会参与开源并贡献代码?
四面(交叉面)
交叉面主要是对三面的一个补充,通常是P9或者P10。
- dubbo你都贡献了那些feature?
- 你是如何看待云原生的?
- 聊聊的service mesh?
- 如果给你offer,你多久能入职?
HRG面
如果到了HRG,证明候选人的技术是过关的,但是HRG也有些小伙伴挂了,所以千万大意不得。
HRG面主要会考察过简历上的过往经历,考察候选人的性格、品行、思考问题的能力,也就是大家常说的软素质;还会考察对这个职位的意向度以及稳定性之类的。
总结
简历一定不要合并,不要作假,大厂的背调非常严格!
蚂蚁的面试不会像百度、字节和腾讯那种问了很多八股文,因为我面试的这个是做业务的岗位,会更加考察你的业务sense,解决方案以及架构能力。
每轮结束之后面试官都会问候选人有没有需要问的,这个时候一定要提前准备好问题,因为面试是一个双向选择的过程,这个时候就是你了解这个职位或者部门的机会,同时也能证明你是一个比较爱思考的同学。