经历过面试的你一定知道, 社招岗位的面试里一定会包含项目经历介绍的。面试官会问及一些特定场景下实现方案的设计,还会问你一些基础知识和基本算法。而在考察基础知识时,你一定被面试官追问过,某某组件的实现原理是什么。

那么,对于仅仅使用组件的开发人员来说,了解组件的实现原理真的很重要吗?这会不会是面试官的故意刁难呢?在回答这些问题之前,我先跟你分享一下我面试候选人的经历。

案例分析

当时,候选人已有五年的工作经验,虽然没什么大厂工作经历,但是从简历来看,他对于互联网领域常见的一些组件,比如Redis、MySQL、Dubbo、 Spring Boot等都有比较深入的了解。这对于求贤若渴的我们来说无疑有着巨大的吸引力,于是邀约了面试。

面试过程中,候选人对项目整体的把控不错,对项目中的问题以及项目未来的发展思路都有一定的见解。可是当我问及一些基础的知识以及用过的一些组件时,出现了问题:

 

 

其实你可以看到,Redis 作为高并发场景下经常使用到的组件,虽然我们仅仅只是使用它,但面试官在询问你它的内部原理时,是想了解组件中使用的基本数据结构、算法以及设计思想你是否真正地了解和掌握。也就是说,他并不是在故意刁难你,而是在考察你的基础知识是否扎实。

再举一个例子,Java面试中经常被问到的一个数据结构就是HashMap, 毫不夸张地说,十个Java面试中有八个会问到HashMap,比如我就会问到这么几个问题:

  • HashMap实现的底层数据结构是怎样的?
  • 如果发生Hash冲突,要怎么解决?常见的解决方式是怎样的?
  • JDK 8中对HashMap做了什么样的优化呢?
  • 红黑树的实现原理是怎样的?相比于链表它的优势和劣势都是什么?
  • HashMap是线程安全的吗?ConcurrentHashMap是如何做到线程安全的呢?

.....

你大可以试着回答一下,看看自己对上面几个问题是一知半解呢?还是能全部回答上来呢?你看,虽然面试官问的是JDK中一个类的实现原理,但这里面涉及了数组、链表、红黑树等基本的算法;解决Hash冲突的基本思路;并发线程安全的含义,以及解决线程不安全问题的基本思路,并且也可以引出和线程安全相关的一系列问题。

了解了这些基本原理,除了可以夯实你的基础知识以外,还可以为你的方案设计提供思路。比如说,当需要更高效的读写内存中的数据时可以怎么做,遇到并发问题时要如何来解决等等。

最后

了解了组件的基本原理,你在使用这些组件的时候才能充分发挥出他们的优点、避免踩坑,在遇到问题的时候也会有排查的思路。