1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-20 22:17:09 +08:00

Create 蚂蚁金服实习生面经总结(已拿口头offer).md

This commit is contained in:
SnailClimb 2019-04-15 12:46:01 +08:00
parent e0d6639489
commit f7e84b963c

View File

@ -0,0 +1,241 @@
- [一面(37分钟左右)](#一面37分钟左右)
- [二面(33分钟左右)](#二面33分钟左右)
- [三面(46分钟)](#三面46分钟)
- [HR面](#hr面)
### 一面(37分钟左右)
一面是上海的小哥打来的3.12号中午确认的内推,下午就打来约时间了,也是唯一一个约时间的面试官。约的晚上八点。紧张的一比,人生第一次面试就献给了阿里。
幸运的是一面的小哥特温柔。好像是个海归?口语中夹杂着英文。废话不多说,上干货:
**面试官:** 先自我介绍下吧!
**我:** 巴拉巴拉...。
> 关于自我介绍从HR面、技术面到高管面/部门主管面面试官一般会让你先自我介绍一下所以好好准备自己的自我介绍真的非常重要。网上一般建议的是准备好两份自我介绍一份对HR说的主要讲能突出自己的经历会的编程技术一语带过另一份对技术面试官说的主要讲自己会的技术细节项目经验经历那些就一语带过。
**面试官:** 我看你简历上写你做了个秒杀系统?我们就从这个项目开始吧,先介绍下你的项目。
> 关于项目介绍:如果有项目的话,技术面试第一步,面试官一般都是让你自己介绍一下你的项目。你可以从下面几个方向来考虑:
>
> 1. 对项目整体设计的一个感受(面试官可能会让你画系统的架构图)
> 2. 在这个项目中你负责了什么、做了什么、担任了什么角色
> 3. 从这个项目中你学会了那些东西,使用到了那些技术,学会了那些新技术的使用
> 4. 另外项目描述中,最好可以体现自己的综合素质,比如你是如何协调项目组成员协同开发的或者在遇到某一个棘手的问题的时候你是如何解决的又或者说你在这个项目用了什么技术实现了什么功能比如:用redis做缓存提高访问速度和并发量、使用消息队列削峰和降流等等。
**我:** 我说了我是如何考虑它的需求秒杀地址隐藏记录订单减库存一开始简单的用sycHRonized锁住方法出现了问题后来乐观锁改进又有瓶颈再上缓存出现了缓存雪崩于是缓存预热错开缓存失效时间。最后发现先记录订单再减库存会减少行级锁等待时间。
> 一面面试官很耐心地听并给了我一些指导问了我乐观锁是怎么实现的我说是基于sql语句在减库存操作的where条件里加剩余库存数>0他说这应该不算是一种乐观锁应该先查库存在减库存的时候判断当前库存是否与读到的库存一样可这样不是多一次查询操作吗不是很理解不过我没有反驳只是说理解您的意思。事实证明千万别怼面试官即使你觉得他说的不对
**面试官:** 我缓存雪崩什么情况下会发生?如何避免?
**我:** 当多个商品缓存同时失效时会雪崩,导致大量查询数据库。还有就是秒杀刚开始的时候缓存里没有数据。解决方案:缓存预热,错开缓存失效时间
**面试官:** 问我更新数据库的同时为什么不马上更新缓存,而是删除缓存?
**我:** 因为考虑到更新数据库后更新缓存可能会因为多线程下导致写入脏数据比如线程A先更新数据库成功接下来要取更新缓存接着线程B更新数据库但B又更新了缓存接着B的时间片用完了线程A更新了缓存
逼逼了将近30分钟面试官居然用周杰伦的语气对我说
![not bad](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-3not-bad.jpg)
我突然受宠若惊,连忙说谢谢,也正是因为第一次面试得到了面试官的肯定,才让我信心大增,二三面稳定发挥。
**面试官又曰:** 我看你还懂数据库是吧,答:略懂略懂。。。那我问个简单的吧!
**我:** 因为这个问题太简单了,所以我忘记它是什么了。
**面试官:** 你还会啥数据库知识?
**我:** 我一听,问的这么随意的吗。。。都让我选题了,我就说我了解索引,慢查询优化,巴拉巴拉
**面试官:** 等等,你说索引是吧,那你能说下索引的存储数据结构吗?
**我:** 我心想这简单啊我就说B+树还说了为什么用B+树
**面试官:** 你简历上写的这个J.U.C包是什么啊他居然不知道JUC
**我:** 就是java多线程的那个包啊。。。
**面试官:** 那你都了解里面的哪些东西呢?
**我:** 哈哈哈这可是我的强项从ConcurrentHashMapConcurrentLinkedQueue说到CountDownLatchCyclicBarrier又说到线程池分别说了底层实现和项目中的应用。
**面试官:** 我觉得差不多了,那我再问个与技术无关的问题哈,虽然这个问题可能不应该我问,就是你是如何考虑你的项目架构的呢?
**我:** 先用最简单的方式实现它,再去发掘系统的问题和瓶颈,于是查资料改进架构。。。
**面试官:** 好,那我给你介绍下我这边的情况吧
![chat-end](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-3chat-end.jpg)
**总结:** 一面可能是简历面吧,问的比较简单,我在讲项目中说出了我做项目时的学习历程和思考,赢得了面试官的好感,感觉他应该给我的评价很好。
### 二面(33分钟左右)
然而开心了没一会内推人问我面的怎么样啊看我流程已经到大大boss那了。我一听二面不是主管吗怎么直接跳了一面。于是瞬间慌了赶紧下床学习准备二面。
隔了一天3.14的早上1056分杭州的大大boss给我打来了电话卧槽我当时在上毛概课万恶的毛概课每节课都点名我还在最后一排不敢跑出去。于是接起电话来怂怂地说不好意思我在上课晚上可以面试吗大大boss看来很忙啊跟我说晚上没时间啊再说吧
于是又隔了一天3.16中午我收到了北京的电话当时心里小失望我的大大boss呢接起电话来就是一番狂轰乱炸。。。
第一步还是先自我介绍,这个就不多说了,提前准备好要说的重点就没问题!
**面试官:** 我们还是从你的项目开始吧,说说你的秒杀系统。
**我:** 一面时的套路。。。我考虑到秒杀地址在开始前不应暴露给用户。。。
**面试官:** 等下啊,为什么要这样呢?暴露给用户会怎么样?
**我:** 用户提前知道秒杀地址就可以写脚本来抢购了,这样不公平
**面试官:** 那比如说啊,我现在是个黑客,我在秒杀开始时写好了脚本,运行一万个线程获取秒杀地址,这样是不是也不公平呢?
**我:** 我考虑到了这方面,于是我**自己写了个LRU缓存划重点这么多好用的缓存我为啥不用偏要自己写就是为了让面试官上钩问我是怎么写的这样我就可以逼逼准备好的内容了**用这个缓存存储请求的ip和用户名一个ip和用户名只能同时透过3个请求。
**面试官:** 那我可不可以创建一个ip代理池和很多用户来抢购呢假设我有很多手机号的账户。
**我:** 这就是在为难我胖虎啊,我说这种情况跟真实用户操作太像了。。。我没法区别,不过我觉得可以通过地理位置信息或者机器学习算法来做吧。。。
**面试官:** 好的这个问题就到这吧,你接着说
**我:**我把生成订单和减库存两条sql语句放在一个事务里都操作成功了则认为秒杀成功。
**面试官:** 等等,你这个订单表和商品库存表是在一个数据库的吧,那如果在不同的数据库中呢?
**我:** 这面试官好变态啊,我只是个本科生?!?!我觉得应该要用分布式锁来实现吧。。。
**面试官:** 有没有更轻量级的做法?
**我:** 不知道了。后来查资料发现可以用消息队列来实现。使用消息队列主要能带来两个好处:(1) 通过异步处理提高系统性能(削峰、减少响应所需时间);(2) 降低系统耦合性。关于消息队列的更多内容可以查看这篇文章:<https://snailclimb.gitee.io/javaguide/#/./system-design/data-communication/message-queue>
后来发现消息队列作用好大,于是现在在学手写一个消息队列。
**面试官:** 好的你接着说项目吧。
**我:** 我考虑到了缓存雪崩问题,于是。。。
**面试官:** 等等,你有没有考虑到一种情况,假如说你的缓存刚刚失效,大量流量就来查缓存,你的数据库会不会炸?
**我:** 我不知道数据库会不会炸,反正我快炸了。当时说没考虑这么高的并发量,后来发现也是可以用消息队列来解决,对流量削峰填谷。
**面试官:** 好项目聊完了我们来说说别的操作系统了解吧你能说说NIO吗
**我:** NIO是。。。
**面试官:** 那你知道NIO的系统调用有哪些吗具体是怎么实现的
**我:** 当时复习NIO的时候就知道是咋回事不知道咋实现。最近在补这方面的知识可见NIO还是很重要的
**面试官:** 说说进程切换时操作系统都会发生什么?
**我:** 不如杀了我,我最讨厌操作系统了。简单说了下,可能不对,需要答案自行百度。
**面试官:** 说说线程池?
**答:** 卧槽这我熟啊把Java并发编程的艺术里讲的都说出来了说了得有十分钟自夸一波毕竟这本书我看了五遍😂
**面试官:** 好问问计网吧如果设计一个聊天系统应该用TCP还是UDP为什么
**我:** 当然是TCP原因如下
![TCP VS UDP](https://user-gold-cdn.xitu.io/2018/4/19/162db5e97e9a9e01?imageView2/0/w/1280/h/960/format/webp/ignore-error/1)
**面试官:** 好的,你有什么要问我的吗?
**我:** 我还有下一次面试吗?
**面试官:** 应该。应该有的一周内吧。还告诉我居然转正前要实习三个月wtf一个大三满课的本科生让我如何在八月底前实习三个月
**我:** 面试官再见
![saygoodbye-smile](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-3saygoodbye-smile.jpg)
### 三面(46分钟)
3.18号三面来了这次又是那个大大boss
第一步还是先自我介绍,这个就不多说了,提前准备好要说的重点就没问题!
**面试官:** 聊聊你的项目?
**我:** 经过二面的教训,我迅速学习了一下分布式的理论知识,并应用到了我的项目(吹牛逼)中。
**面试官:** 看你用到了Spring的事务机制你能说下Spring的事务传播吗
**我:** 完了这个问题好像没准备,虽然之前刷知乎看到过。。。我就只说出来一条,面试官说其实这个有很多机制的,比如事务嵌套,内事务回滚外事务回滚都会有不同情况,你可以回去看看。
**面试官:** 说说你的分布式事务解决方案?
**我:** 我叭叭的照着资料查到的解决方案说了一通,面试官怎么好像没大听懂???
> 阿里巴巴之前开源了一个分布式 Fescar一种易于使用高性能基于Java的开源分布式事务解决方案后来Ant Financial 加入Fescar使其成为一个更加中立和开放的分布式交易社区Fescar 重命名为Seata。Github 地址:<https://github.com/seata/seata>
**面试官:** 好,我们聊聊其他项目,说说你这个 MapReduce项目MapReduce原理了解过吗
**我:** 我叭叭地说了一通,面试官好像觉得这个项目太简单了。要不是没项目,我会把我的实验写上吗???
**面试官:** 你这个手写BP神经网络是干了啥
**我:** 这是我选修机器学习课程时的一个作业,我又对它进行了扩展。
**面试官:** 你能说说为什么调整权值时要沿着梯度下降的方向?
**我:** 老大,你太厉害了,怎么什么都懂。我压根没准备这个项目。。。没想到会问,做过去好几个月了,加上当时一紧张就忘了,后来想起来大概是....。
**面试官:** 好我们问问基础知识吧说说什么叫xisuo
**我:**xisuo您说什么不好意思我没听清。这面试官有点口音。。。就是xisuo啊xisuo你不知道吗。。。尴尬了十几秒后我终于意识到他在说死锁
**面试官:** 假如A账户给B账户转钱会发生xisuo吗能具体说说吗
**我:** 当时答的不好,后来发现面试官又是想问分布式,具体答案参考这个:<https://blog.csdn.net/taylorchan2016/article/details/51039362>
**面试官:** 为什么不考研?
**我:** 不喜欢学术氛围,巴拉巴拉。
**面试官:** 你有什么问题吗?
**我:** 我还有下一面吗。。。面试官说让我等,一周内答复。
------
等了十天一度以为我凉了内推人说我流程到HR了让我等着吧可能HR太忙了3.28号HR打来了电话当时在教室我直接飞了出去。
### HR面
**面试官:** 你好啊,先自我介绍下吧
**我:** 巴拉巴拉....HR面的技术面试和技术面的还是有所区别的
面试官人特别好,一听就是很会说话的小姐姐!说我这里给你悄悄透露下,你的评级是 A 哦!
![panghu-knowledge](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-3panghu-knowledge.jpg)
接下来就是几个经典HR面挂人的问题什么难给我来什么我看别人的HR面怎么都是聊聊天。。。
**面试官:** 你为什么选择支付宝呢,你怎么看待支付宝?
**我:** 我从个人情怀公司理念环境氛围市场价值趋势导向分析了一波说白了就是疯狂夸支付宝不过说实话我说的那些一点都没撒谎阿里确实做到了。比如我举了个雷军和格力打赌5年2000亿销售额大部分企业家关注的是利益而马云更关注的是真的为人类为世界做一些事情利益不是第一位的。
**面试官:** 明白了解,那你的优点我们都很明了了,你能说说你的缺点吗?
**我:** 据说这是HR面最难的一个问题。。。我当时翻了好几天的知乎才找到一个合适的也符合我的答案我有时候会表现的不太自信比如阿里的内推二月份就开始了其实我当时已经复习了很久了但是老是觉得自己还不行不敢投简历于是又把书看了一遍才投的当时也是舍友怂恿一波才投的面了之后发现其实自己也没有很差。划重点一定要把自己的缺点圆回来
**面试官:** HR好像不太满意我的答案继续问我还有缺点吗
**我:** 我说比较容易紧张吧,举了自己大一面实验室因为紧张没进去的例子,后来不断调整心态,现在已经好很多了。
接下来又是个好难的问题。
**面试官:** BAT都给你offer了你怎么选
其实我当时好想说BT 是什么?不好意思我只知道阿里。
**我 :** 哈哈哈哈开玩笑,就说了阿里的文化,支付宝给我们带来很多便利,想加入支付宝为人类做贡献!
最后HR问了我实习时间现在大几之类的问题说肯定会给我发offer的让我等着就好了希望过两天能收到好的结果。
![mengbi](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-3mengbi.jpg)