一位朋友近日分享了他在蔚来的面试经历,现整理如下。

面试第一轮

第一轮面试让我大吃一惊,难以置信这真的是一场技术面试。

  1. 自我介绍。
  2. 讨论项目,分享其亮点。在此过程中,面试官对我的描述有些疑惑,提出了一些问题,但都不深入,停留在表面。
  3. 几个经典的知识点提问,包括JVM内存区域、LinkedList的实现以及ReentrantLock的公平与非公平锁。
  4. 在算法环节,由于我涉及的是缓存项目,面试官让我编写LRU算法。如果有同样经验的朋友,我强烈建议将LRU算法熟练掌握,面试中遇到的可能性极大!

面试第二轮

相比于第一轮,第二轮的难度可谓天差地别,主要是面试官询问项目相关内容时,我对其意图感到困惑,至今仍无法理解。

  1. 面试一开始就询问项目架构,我一时无言以对,面试官的意图是让我从业务的角度分析,讨论项目各个模块之间的联系,结果我始终在讲技术,最后他也放弃了这个话题。这让我对“业务”这个词的理解产生了困惑。
  2. 面试官问我项目是单体还是微服务。我回答说是分布式的,后端使用SpringBoot,前端用Vue,拆分了一部分业务为独立系统,但最终他认为这仍然算是单体架构,项目架构显得不够合理。
  3. JVM内存区域的问题又被问到,我顺便提到了永久代和元空间,面试官对此的反应似乎是认可的。
  4. 有关CMS收集器的收集过程。
  5. GC Roots的概念及其主要用途。
  6. Spring Bean的生命周期。
  7. 闻到Spring循环依赖时,面试官询问为何需要三级缓存而不是二级缓存。我给出自己的理解,但看他神情似乎并不是他想要的答案。
  8. 算法环节涉及回溯全排列。
  9. 最后我询问自己有哪些不足之处,面试官表示我能力很强,但如果能时时站在业务的角度思考问题,会有很大的进步。

面试总结与建议

朋友的评论质量也相当高,分享了许多实用的信息。

图片![图

在面试之前,务必重视项目经历,深入理解项目。你可以从以下几个方面准备:

  1. 对项目整体设计的感受(面试官可能会要求你绘制系统架构图)。
  2. 在项目中你负责的内容、执行的任务及担任的角色。
  3. 从该项目中学到的知识、使用的技术及新技术的掌握。
  4. 在项目中遇到过什么问题?是如何解决的?有什么收获?
  5. 你的项目使用了哪些技术?是否真正理解这些技术?举例来说,如果项目中用到了Seata进行分布式事务,相关的问题如Seata支持哪些配置中心、事务分组的处理方式、支持的事务模式及选择标准都需提前准备。
  6. 反思项目中犯过的错误以及最终是如何弥补的。