这是「跟我来面试」系列的第二篇,被面试人是我隔壁宿舍的好友,近期刚刚结束了蚂蚁金服的三轮技术面试,面完之后他跟我说很累,直言不想再体验了。

因为学院的安排,我们被要求暑期实习,近期也有各种内推信息发在群里,和大多数人边面试边复习不同,我的这位好友在我们疯狂投简历的时候就一直踏踏实实准备,因为我们会在自己的小群里分享自己的面试经过,他就一直潜水,直到有一天突然告诉我们蚂蚁金服的 hr 说他通过了我们才知道他已经成功上岸了。这种人,我们一般只能用五个字来形容:闷声发大财。

他的面试经历我仔细看了看,一面重点在基础知识的考查,二面重点在项目以及对框架的使用与理解上,三面压力面,是很熟悉的套路,考察的知识点也是经常问到的,具有一定的参考价值,接下来我们就来看看他的这几轮面试经历吧。

一面

笔试题很简单,多线程循环打印 1-100 奇偶数

  1. 你觉得项目中用了 MQ 给你带了什么好处,设计初衷是什么?会带来什么缺点嘛?(项目针对性比较强,不细说)
  2. 在网页键入 taobao.com,到返回一个页面,这期间都发生了什么?
  3. 你说到了 session 和 cookie,这两者有什么区别,应用场景是啥?
  4. 返回界面的文字,图片,链接,你觉得是从哪里来的,或者说储存在哪里?
  5. 描述一下 TCP 三次握手,这期间可以携带数据吗?携带了数据会造成什么后果?
  6. 描述一下四次分手,第二次和第三次中间处于何种状态?
  7. 说一下 object 类的所有方法以及他们的功能(真的是所有:clone,notify/all,finalize,wait,hashcode,equals,tostring,getclass)
  8. 抽象类和接口有什么区别?说一下你的个人理解。
  9. 详细说一下 final 关键字,修饰变量,方法,类都有什么不同?能想到什么具体应用场景吗?
  10. 说一下 equals 方法,hashmap 的底层,跟 hashtable,concurrentHashMap 都什么区别
  11. 静态分派和动态分派的区别?具体应用场景?
  12. 1.8concurrentHashMap 有什么变化,优化的意义在哪?
  13. hashmap 除了结点数大于 8,还有什么情况会树化(这个我没想出来,也可能是我没听清楚)
  14. hashcode 方法有什么特点?hashset 的底层是如何实现的?为什么用 hashmap?
  15. 说说 JVM 内存结构(这里要问清楚是 JMM 还是运行时常量池)
  16. 你刚说 1.8 后方法区移动到内存中变成元空间,为什么要移过去呢?
  17. 那为什么常量池没有移动到内存,而是转移到堆了呢?
  18. 最后一个问题,说一下线程池的饱和策略

因为项目中使用到了 MQ,所以就顺便问了下,好在并没有提问太过深入的东西,随后问题几乎每个都是高频考点,2、4、5 主要考察计算机网络中的通信过程,例如三次握手/四次挥手,7-14 考察 Java 基础,随后就是和 JVM 以及多线程有关的问题了。有需要的小伙伴可以参考这个进行针对性的复习。

二面

  1. 从项目启动到现在,介绍一下你的工作以及遇到的难点,怎么解决的?
  2. 讲一下微服务架构都有哪些模块?他们是怎么一起工作的?
  3. 让你实现一个 eureka,你会怎么实现?
  4. 用户认证,为什么要用 JWT,而没用 session-cookie,应用场景?优劣?加密用的是什么算法?
  5. 为什么使用 rabbitMQ,没用别的 mq?
  6. 说一说你项目应用了什么设计模式?适配器模式什么应用场景?
  7. 让你实现 AOP,你怎么实现?
  8. spring 事务有了解吗?是如何传播的?在你项目里的实际业务中是如何传播的?
  9. 例如有 ABC 三个事务,分别原子性,整体也原子性,A 事务出错回滚,整体事务也会回滚,你会怎么设计呢?
  10. ZooKeeper 有了解吗?redis 和 Mencache 的选型问题?
  11. 你之前的 webServer 项目介绍一下整个流程?你是如何做的多线程?socket 相关?
  12. 你怎么使用线程池?参数怎么选择?
  13. 你写线程的时候会给他们起个可爱的名字吗?为什么要起?线程错误排查工具用过哪些?
  14. spring framework 都有哪些模块?你使用到了哪些模块?怎么使用的?
  15. 使用的时候有没有对某模块功能进行扩展?
  16. 说一下集合类(线程安全角度)

到了二面,就会发现提问的重点发生了明显的变化,从之前的基础知识变成了项目架构方面的,这一轮考察的是平常学习过程中对于架构的使用与理解,现在都偏爱微服务架构,那是否思考过背后的原理?天天在用 Spring,你对他到底又有多少认知呢?都知道消息队列好,那好在哪?这些东西都是实际的项目中能接触到,但是又经常会被忽略的东西,就看你是不是一个有心人了。

三面

  1. 详细介绍一下点云扩增工具项目
  2. 你对分布式架构有什么理解?
  3. 总结一下你的本科与研究生阶段有过的成就?可以拿来说的那种?
  4. 参加过竞赛吗?
  5. 你的项目中或在学习过程中有没有遇到过很难的点?然后专心研究去解决掉他的?
  6. 周围有没有优秀的人?有没有值得你学习的点,并且你现在在跟着做的?
  7. 平时看什么书?
  8. 有没有根据兴趣学习过一些额外的计算机知识,AI 领域?
  9. 在 github 研究过哪些开源项目?
  10. 你的职业规划是什么样的?

三面是压力面,所谓压力面是指面试官有意制造紧张气氛,以了解求职者将如何面对工作压力。面试人通过提出生硬的、不礼貌的问题故意使候选人感到不舒服,针对某一事项或问题做一连串的发问,打破沙锅问到底,直至无法回答。其目的是确定求职者对压力的承受能力、在压力前的应变能力和人际关系能力。

这一轮的重点不在于对技术的考察,而在于对人的考察。我一直认为,面试最重要的是将你的核心竞争力摆上台面。之所以会问你基础知识,是因为技术能力是你的核心竞争力之一,但并不只是技术。如果面对压力,如何与人相处,是否有探索精神,这些都是很重要的,毕竟每个老板都喜欢越有压力就越有动力的员工吧。

总结

总的来说,这三次面试是很经典的套路,一面基础,二面架构,三面个人。我看完后觉得很有参考价值,便征求了原作者的同意分享给大家了。虽然他只面了这一家,但事后他说,如果可以,宁愿再也没有面试。