近期参加阿里钉钉暑期实习提前批面试,已收实习offer,在这里总结记录一下本次面试经历。
时间表:
三月三日一面;
三月十日二面;
三月二十日笔试;
三月二十六日交叉面;
三月二十八日HR面;
四月十日收到offer;
一面(55分钟)
1、自我介绍
巴拉巴拉,三要素法(姓名、核心能力、目的)
2、介绍一下你在商汤的项目经历
2.1项目效果
2.2项目难点
2.3系统高可用性的保证
2.4系统监控的解决方案(可以参考zookeeper监控方案)
3、那你觉得Docker和VM有什么区别吗?
因为商汤的项目是采用Docker、K8s、Go实现的,所以问到了这里,读者可以看一下这篇文章:https://blog.csdn.net/qq_41999455/article/details/104541477
4、介绍一下商汤之前的那份实习经历和项目
3.1 项目难点
3.2 sql优化和Redis线上问题
5、单机怎样去确保MySQL的数据一致性问题?
采用MySQL提供的事务管理和隔离级别,围绕这一块讲了一下。
6、如果单机数据存储大的时候怎样去解决?
这里就需要考虑到数据库的性能问题,考虑分库分表;
一般单表数据达到500w以上时数据库性能会下降,单库数据达到5000w以上数据库性能会下降;
7、如果是在分布式的MySQL集群中需要去考虑这样的问题,怎样去解决呢?
从这里引出了分布式系统中的分布式事务,说了一下2PC、3PC、Paxos算法、ZAB协议算法的发展
8、你做过秒杀项目,那秒杀项目有哪些需要考虑的点呢,怎样去解决?
我主要考虑了两点问题:防止刷单行为和减库存的数据一致性,主要围绕这两点说了一下项目中的解决思路;
9、那在减库存这一块的解决方案都有哪些呢?
乐观锁、悲观锁、分布式锁、同步队列等,我是采用Redis分布式锁做的。
10、那你说一下Redis分布式锁的底层实现?
Redis提供的set方法,可以同时设置锁和过期时间,其实也就是之前setnx()和expire()方法的结合体;提到了redisson框架做分布式锁,lua脚步等。
11、设计模式有了解吗,了解过哪些设计模式?
这里提到了单例、观察订阅
12、单例模式为什么线程不安全,有哪些线程安全的单例模式?
需要去考虑到多线程情况下可能读到未实例化的单例;
线程安全的单例有:内部类实现、双重检验锁实现;
13、Spring的核心是什么呢,介绍一下
AOP、IOC,分别介绍一下它们的原理及作用;
14、最近有在看什么书或者参与什么开源项目吗?
最近在看K8S云原生这一块的东西,围绕着说了一下。
15、手撕算法题环节
给定一个二维数组array[M][N],二维数组每个元素的取值为0或1,0表示白色,1表示黑色,现在需要实现一个查找最大黑色区域的功能,元素位置相邻可以连接成为一个区域,例如array[0][1]和array[0][2]相邻,array[0][1]和array[1][1]相邻,则可以连接成为一个大小为3个元素的区域。请实现一个方法,如参为上述的数组,出参为最大黑色区域的大小(包含的元素个数)。
是类似与leetcode上的求岛屿面积的题,采用DFS算法递归解决了。
二面(45分钟)
1、自我介绍
2、商汤项目,优化的点、难点,解决方案
3、CRM系统项目,难点
4、你们做的CRM系统和市面上CRM系统的优势在哪里?
从项目特色的点出发,围绕该点展开介绍
5、在公司实习期间的难点和挑战点
6、如何看待技术栈的变化?
因为我在去商汤实习之前是做Java,去商汤之后转到了Go,第一次接触Go、K8S、Docker等云原生相关的东西,相对来说是两个方向的技术栈。
7、那你如何看待频繁换公司实习的?
8、如果你来阿里,最想学哪些东西?对什么技术栈比较感兴趣?
9、说一下你的职业规划吧
10、有什么想问我的吗?
笔试(60分钟)
今年提前批内推增加了笔试环节,所有研发岗位(包括提前批、内推)都需要笔试,具体笔试题目读者可以参考这篇文章:
https://blog.csdn.net/qq_41999455/article/details/105040128
总结
这里仅记录了一二面和笔试,交叉面(25分钟)和HR面(45分钟)。
总得来讲,我的面试都是全程项目然后相关衍生问题,没有直接问基础知识,都是侧面衍生结合项目来考察的,经历了此次面试,主要有一下收获:
- 阿里还是比较看重实际项目经历的,有好的项目会是很好的加分项!
- 比较看重对源码的分析和理解;
- 对大型分布式场景的问题解决能力;
- 当然基础肯定是第一位的,每个面试官的侧重点都不一样,但需要我们自己做到简历上的东西没有盲点;
分享我自己很喜欢的一句话:
理论是灰色的,而实践之树常青!