扔物线学堂的一封致歉信

大家好,我是扔物线朱凯。

今天的内容没有配视频,因为不是技术讲解,而是如标题所说:最近做错了一件事,而且错得还挺严重的,需要把这件事公开出来说一下。

发现错误

事情起源于我们的某个收费系列课程里的一节课——《HashMap 源码解析》。这是一节有问题的课程,它从根上就是有问题的。

问题在哪?在于这是一节纯粹面向面试的课程。我经常跟我的学员说:不要为了面试而学习,要学对我们开发真正有用的,而《HashMap 源码解析》这节课违背了我一直以来的这条原则。

错了怎么办?

第一,公开告知这件事,以及道歉。

这件事我们确实是做了,而且是我带头做的。可能有人会对于「为什么这是错」(例如:源码解析怎么能叫纯粹面向面试?以及面向面试授课有什么不妥?)感到疑问,这个我放在后面说,先在此向大家说一句:对不起。

第二,补救措施。

我们决定把这节课完全公开出来,让所有人都能看到。大家扫下面的码就可以看这节课,这是一节独立的课程,没有任何的付费内容推广,你扫了就能看

但我一定要告诉大家,这节课放出来的目的,是希望让所有人都可以轻松获得这道面试题的答案,让这道面试题在面试中最终失效。所以大家如果也做面试官或者以后会做面试官,我们强烈建议大家不要学完了这节课之后转头就去把 HashMap 的红黑树作为面试题,这真的不是个很好的考察点。以及,如果你认同我的观点,也欢迎把这篇文章或者这节课转发出去。

另外,由于将付费内容公开,对之前为这节课付过费的学员来说,是一种利益侵害,因此我们将为学员们补上一节新课,这节新课也是由高杰老师教授,正在制作中,请各位学员稍候

错哪了?

有人可能会反对:HashMap 的原理知识在工作中很有用的,怎么能说是纯粹面向面试?

——是,HashMap 的原理是很有用,因为这是一种非常经典的数据结构,对于数据结构的了解在日常开发中是很有用的。比如在 Android 里,对于「映射」的场景,我们可以选择 HashMap,也可以选择 ArrayMap,甚至对于用整数做 key 的特殊场景,还能用 SparseArray。面对这些选择,我们怎么办?肯定得知道它们各自有什么优劣势才能选择的,对吧?那怎么了解呢?当然是学习它们的源码了……才怪!要了解这些,去把它们的注释看了就可以了。比如:HashMap 明明已经很好了,为什么 Android 要增加 ArrayMap?这个问题的答案在 ArrayMap 的类注释里面写得清清楚楚。

所以,我是知道也认可 HashMap 的原理对于工作开发的作用的。而我当初也是出于这个原因,让高老师在课程里加入了这个知识点。当时高老师告诉我很多学员都在问 HashMap 的问题,问我们能不能加一节 HashMap 的课。我和高老师探讨之后,一致认为 HashMap 的知识确实是对工作很有用的,于是就加了这节课。

可我们错就错在,我们这节课并没有「点到为止」,而是讲到了很多面试题里的东西。面试里 HashMap 的问题都是什么大家知道吗?可能不少人都知道,因为在面试里被问到过。我举个例子:不少面试官会问「HashMap 在 1.8 有什么重大改动」这个问题。你知道答案是什么吗?答案是「红黑树」——HashMap 在 Java 1.8 里,把 1.7 的纯链表做节点改成了可能将链表升级为红黑树的实现。大多数人听到这个答案会是什么感觉?——我太菜了,面试官好厉害啊,我连红黑树是什么都不知道,他竟然不仅知道,还知道 HashMap 里对红黑树的应用。

但是我们是干嘛的?我们是做 Android 应用开发的,掌握这个红黑树对我们完全没任何价值啊!不要说什么「做应用也要了解本质原理」,我们当然是要了解本质原理,但绝不是 HashMap 里的红黑树。我们要了解自定义 View、我们要了解 HTTP、我们要了解 Handler、我们要了解 Activity,我们要了解的太多了,这些都是对我们开发真正有用的,但 HashMap 的红黑树绝对不是。HashMap 的基本原理是有助于我们开发的时候对使用 HashMap 还是 ArrayMap 做选择,但精细到 HashMap 里红黑树的源码实现,是完全没意义的。大家明白我意思了吗?我们做程序的,当然学什么都是有用的,但我们的时间和精力是有限的,相比起 HashMap 的红黑树,对我们更重要的知识点太多了。

然而,我们的《HashMap 源码解析》这节课,很大一部分篇幅是针对这些面试题讲的。

这很严重吗?

不知道大家想过没有,我们做教学的人去教面试题,其实是对求职市场的严重扰乱,是一种很严重的作恶行为。如果你不这么认为,我再说具体一点:

我前面说 HashMap 的红黑树知识对工作没用,这真的不是我信口胡诌,每一个问这个问题的面试官自己在工作里也都不用这个知识的。但真实的现状却是,很多人发现 HashMap 是个面试的考点,就去网上刷 HashMap 的源码详解、去读 HashMap 的源码,然后在面试中回答 HashMap 的问题。可他在工作中并没有用到这些知识,而且他不知道的是,他的面试官其实也只是把这些知识用来面试别人,工作中也用不到。你想一想这种场景:一个应聘者、一个面试官,两个人都去刷了同一个知识点——HashMap 的红黑树,然后在面试中,面试官问,应聘者把背过的知识讲出来,面试就通过了。再之后,这些屠了龙的面试者,最终也成为了这样的面试官,继续去问后来的人同样的面试题。这正常吗?太不正常了。这样的话,那些没专门为了面试去刷过这些所谓「常见大厂面试题」的人,是不是就很吃亏?就可能因为没刷过题而被误解为水平差?要知道,面试官们自己问得多了,就真的会觉得 HashMap 源码是个必备知识了,就真的觉得你连 HashMap 源码都没读过你算什么高级啊。各位在看文章的、问过这道问题的面试官如果被击中,我想说我确实无意冒犯,你真的可以想一下是不是这个道理。而且从另一个角度说,那些比较「老司机」的人,是不是就可以专门去刷一刷这些「常见大厂面试题」,来轻松在面试中提高自己的得分?这就是一种畸形的现象,既不公平,也不利于招聘到真正合适的人才。

说在最后

这几年做知识输出,做出了几万粉丝,虽然不算是大 V,但客观地讲,在垂直行业里的影响力还是有点的。在这样的前提下,做出这样的事,对市场的影响是非常不好的。以后我说话做事也会更加慎重。