阿里-蚂蚁金服社招面经

首先介绍一下自己,18年本科(末流985,电子信息工程专业)毕业,两年多工作经验,毕业第一年在一个国企,之后在杭州一个创业公司,这次面试的是蚂蚁金服。在这先申明,介绍这么详细只是为了大家方便参考,大家可以参考工作经验、年限,个人觉得如果你是通过内推渠道或者已经通过简历筛选,其实学历或者说学校对面试的影响不是特别大。因为疫情原因,都是电话面试,如果算上hr面试,一共是五面。

第一面  大概一个小时

是一个阿里这边的一个同事联系到我,我们约好面试时间。

1.先自我介绍一下

主要是介绍工作经验、项目经历、你在项目中承担的角色是什么等(这些是重点,要有逻辑和侧重点来介绍)我分享一下我的介绍大家可以参考。我18年在××大学毕业,之后在**公司××部门担任开发工程师,我们主要做的项目是***,我在这个项目中主要是后台开发,也会写一些对UI要求不是很高的页面。比较有挑战的是因为项目需要,需要开发一个规则引擎,我基于开源的doorls封装实现,具体的技术原理、技术实现如果感兴趣我们可以之后再讨论。之后因个人发展考虑到了杭州,因考虑到自己缺乏一个项目完整项目周期的历练,进入了一个创业公司。开始接触到分布式设计理论、微服务架构这些主流的架构设计。我们项目是一个涉及三高场景的支付交易的系统(具体是啥就不说了,要不然就暴露了哈哈哈)。技术选型是基于springboot开发微服务、dubbo做rpc框架、数据库主要是mysql和redis、mongdb等.常用的分布式技术比如分库分表、分布式锁、分布式事务等都有考虑涉及,技术细节可以之后讨论。

 

2.那大概说一下你们支付系统

这个主要是涉及自己对自己做过项目的熟悉程度,要对写在简历上的东西负责,且要对项目有思考、比如技术选型时候的考虑、系统存在的问题、如何改进等。

 

3.你们用到rocketMq 是基于什么考虑?

 

4.你们项目也用到了kafka,那为什么不统一一下,只用rocketMq或者只用kafka不行吗?基于什么考虑?

这个要结合具体的业务场景、为什么rocketmq合适而kafka不合适?主要要理解rocketmq和kafka的优势和劣势。

 

5.那说一下rocketmq如何保证消息不丢失呢?从原理上说一下

 

6.系统中如果保证消息不会重复消费?

我们都知道回答幂等,但是要提供出具体的实现方式、比如插入用唯一索引来保证插入的唯一性、更新时候状态设置等,具体实现可以上网找一下。、

 

7.你说你们用到了分布式锁?具体场景是什么样的?怎么实现的?

我们有营销系统(相当于优惠券系统)要保证库存不会出现超卖情况。主流实现方式有数据库、redis、zk。各个实现方式的原理、优势劣势、我们业务场景、基于这个我们考虑用**方案。这个需要个人有所思考。

 

8.因为涉及到高并发的场景,那你怎么保证数据库更新的有效性?

这个其实主要涉及到mysql的锁机制。乐观锁如何实现、悲观锁分类以及如何上锁等。要特别注意行锁和间隙锁实现,这个是重点,可能大多数人也一知半解,但是必须要搞懂的。我当初面试时候也是没回答好。

 

9.如何保证数据的一致性?

这个属于分布式事务的一部分。大家可以去掘金搜索一下,很多好文章。

 

10.好了,今天差不多了。你有什么问题问我吗?

这个就看个人了,真诚一点就好。我主要还是会问这次面试我的表现还有不足,但是不问具体的技术问题。面试也是为了检验自己和进步嘛。

 

第二面    40分钟

流程差不多,都是先自我介绍,然后通过项目提问,我主要写一些我还记得问题吧。

1.你们项目中redis怎么用的?基于什么考虑的?

 

2.你们项目中dubbo用来rpc,那如果自己设计一个正常的rpc要考虑哪些?如何设计?

这个我们要了解rpc的基本功能涉及到哪些?包括协议如何设计、如何序列化、网络传输(同步阻塞、异步阻塞等方式)

 

3.说一下dubbo服务注册和发现的过程。

spi机制要了解。

 

4.用zk做注册中心,那zk数据结构是怎样的?如何选举?

 

5.你们分库分表是如何做?

涉及到为什么分库分表?主要是数据量考虑。如何分库分表?分库分表技术.几种技术优势劣势对比。

 

6.你们的订单号和流水号这些是如何产生的?

这是生成分布式全局id的技术考察。当然还要结合自己的业务。

 

7.之后就是问问题环节了。当然面试过程中还会穿插一些java基础、比如currenthashmap等并发容器、读写锁、AQS等,要基于版本来说 比如1.7和1.8的实现就很不同。

 

第三面 大概45分钟

流程差不多,都是先自我介绍,然后通过项目提问,我主要写一些我还记得问题吧。这一面比较注重数据库方面。注意这里只是说比较注重数据库,不是说没有问其他问题。具体问题我也记不太清,知识点可以大概说一下。

1.innodb中索引的结构,这里涉及索引的数据结构、主键索引和普通索引区别、索引优化。这个要结合项目、比如如何发现慢sql、如何判断使用了什么索引?explain的使用。

 

2.innodb的事务。主要涉及到mvcc以及视图回滚等,各个隔离级别下的问题以及如何解决?比如mysql默认是可重复读级别,但是会有幻读问题,你得从原理上了解为什么会出现幻读、那如何解决呢,我们可以通过间隙锁来解决,那间隙锁的原理是什么?间隙锁有什么问题。回答的时候最好把这些问题都涉及到,引导面试官。因为面试是一个相互的过程,相当于聊天,要有来有回,不要人家问什么你就回答什么。

 

3.mysql的性能分析和解决。这个其实是比较开放性的题目,从分析工具到优化过程都可以说,只是要真诚,要是项目中真正遇到过的,不能随意瞎编。

 

4.还有分布式事务实现。主流的实现手段,项目中使用的分布式事务实现方法、为什么选择这种方法,基于什么考虑?还是方案的优劣比较。

 

4.问问题环节。

 

第四面  总监面 大概20分钟

这一面主要会考察你在架构方面的思考,不会抠技术细节

1.因为你们系统支付流程是异步,那如何保证数据一致性呢?

这个问题首先你得了解分布式CAP理论和base理论,知道分布式系统要解决的是什么问题,分布式系统的难点是什么。具体解决方案是什么?比如我们为了保证数据的最终一致性,我们要用分布式事务,那具体的实现方法是如何保证数据最终一致性的,如何做补偿、比如对账系统设计。不仅仅从技术角度,还可以涉及到业务上,比如如何进行资金流转、风控等。

 

2.系统稳定性如何保证,比如某个服务挂掉,如何保证业务正常进行?

这个涉及到如何进行系统限流、降级。当然限流方法原理比如漏桶方法、令牌桶方法等原理和优势和劣势要了解、以及具体的实现方法是什么要知道。除了技术方法,还涉及到运维上紧急处理线上问题的预案

 

这一面比较宽泛,所以自由发挥的空间很大,但是自己的知识广度还是要够,要了解一些技术或者经典方案,这样才能有得聊。

 

第五面  hr面 大概40分钟

 

1.介绍一下自己

 

2.介绍你的项目(我还以为hr不会问这些)主要从业务上来说就好,不要说特别技术的东西。

 

3.你们团队大概有多少人,你在团队中是什么角色?

 

4.你为什么离职(每段经历都要提一下,我这边只有两段经历,诚实回答就好,但是千万不要说上一家公司或者领导的坏话,这个不是面试技巧,我个人觉得你已经离职了,无论什么原因离职,但是离职了就没必要去评价任何人,特别是把这种评价告诉另一个人)

 

5.你的职业规划大概说一下(短期和长期)

 

6.自己评价一下你在前几家公司的工作表现和领导对你的评价。如果领导和你评价不一致,你觉得是什么原因?

 

7.你对下一个工作的期望(这个问题其实我觉得你应该在找工作前就想好,你来面试一个公司肯定是有过考虑的,可以在刚开始面试时候为了了解面试流程挑几个公司练手,但是之后一定不要海投)

 

8、评价一下之前的面试官(这些都是你之后的同事或者领导,虽然我觉得这很片面,但是还是不要有过多的负面情绪,理由和4点一样,不要随意去评价一个人,特别是你连面都没见过)

 

 

总结

笔试我没有写上,因为是一面结束之后补的笔试,难度就是leetcode简单和中等。

1.面试是一个相互交流的过程,不卑不亢就好,当然保持谦虚总没错。

2.Java基础我没写上,是因为一些基础知识我觉得无论面试还是工作都得自己理解,还有spring的源码 mybatis源码这些是加分项,不是必须,但建议还是看一看源码,特别是spring源码,太经典了。

3.每个面试官注重的东西不一样,所以有些知识可能我们了解不深,如果遇到不会直接说不会,千万不要瞎扯。因为问题会层层深入,不要给人留下不真诚的印象。

4.平时积累很重要,学习是对抗焦虑的唯一方法。

 

 

 

 

 

 

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值