最近面试到了一个95年的小伙儿,单看简历,排版清晰,重点突出,列出的技术也有详有略。不过,最引人瞩目的一点是,技术博客的地址放了出来,并且是拥有5年博客经验的博主,还得到了平台的认证肯定。
我经历了之前几个虽然看似中规中矩,但经历过面试,最终都差强人意的面试后,对于眼前这个小伙儿,期待值拉满到顶。当我看过他的博客后,其实内心已经有了7、8分想offer他的意愿了。
我的技术博客基本也是稀稀拉拉地写了2年多,但是工作、生活的冲突基本还是偷懒的状态。不过,我的技术文基本都是来源于工作场景中实际遇到的问题进行提炼总结,也当是给自己做个记录了。
相比这个小伙儿的技术博客,我觉得我肯定不如他写得好。单就HashMap的原理解读,就让我眼前一亮。
HashMap这个小主题可以衍生出很多面试问题,从而可以从细微处观察面试人的基本功、java原理的掌握,关键是真实场景中的使用经验。
我一直认为大家都是从先会用,然后遇到问题,继续深挖,通读源码,然后继续使用这样的轨迹来掌握一门门的技术,以及一个个的知识点。我当时对于HashMap这个常用的Java集合也是遵照着这样的学习轨迹来深入的。
因此我觉得这个小伙儿从HashMap的数据结构,说到HashMap在1.7的JDK环境下会产生的问题,进而衍生到1.8JDK针对HashMap的优化,过程中对于HashMap的容量定义、负载因子、环链的形成,这些方方面面的细节也介绍得十分到位。
很少能看到这样一篇“集大成”之作。因此,自愧不如。同时也能发现,他已经坚持写了200多篇得博客,粉丝虽然还是四位数,而且其中也缺少了一些结合实际使用场景得介绍,但是对于一个不到5年技术经验的小伙儿来说,已经是挺难得了。
我抱着这样的期望,开启了当天的面试,而且屏幕前的小伙就是一个朴素认真的形象,眼缘也很不错。但是,我只是问了一个有关HashMap的一个小小的计算问题,一切就都不一样了……
这个问题是这样的:如果我现在预估new的一个HashMap中,将来要存放的数据元素不会超过100个的话,那么请问HashMap的初始值我应该定义成多少?
这道问题我相信即使是粗浅地了解过JDK HashMap无论哪个版本源码的人,或者仅仅是了解过HashMap效率问题的人都能答出来。因为有关rehash何时触发,如何new一个HashMap才是对我们编码最高效的方案,基本大家都会用到。
另外,加上小伙那篇文章,仅仅根据文章中写的原理进行“填空”就能很容易计算出这个问题的答案来。但是,屏幕前的小伙脸已经红了,眼神变得比较涣散,而且说话已经磕巴了,开始这个……那个……我想想啊……之类的零碎话往外蹦了。
那一刻,我知道,他已经撑不住了。
于是,我马上调整战术,预估他如果答出来2的幂次的任何一个答案,那么我也能算他及格。这样的话,我会就这个问题继续引导和提示,看他通过自己的思考能否触及正确答案……
但是,他通过一番挣扎,给了我一个不及格的答案——200……
那一刻,一个词出现在我的脑海里——纸上谈兵。那篇HashMap的技术博客中的图、原理讲解,瞬间有点装饰和拼凑的嫌疑。
接着我也试图引导,希望能够拉他一把。于是,我继续问:那你了解HashMap的长度为什么要默认为2的幂次么?
经我提醒,他似乎想起了什么:哦,对,2的幂次,这个……那个……我这块忘了,记不清了……
一丝诧异的感觉闯入了我的内心,我知道他垮掉了。这个小问题其实就是把HashMap的几个最基础的属性串联起来的总结性问题,同时也能考察如何运用HashMap的能力,并不超纲。
后面的问题只能降低难度了,接着我又问了几个不痛不痒的基础问题,令人意外却又意料之中的是,他的一些原理也没怎么答好,更不要说结合实际场景的使用经验了。
最后,我结束了我的提问。同时面试的也有其他面试官,我们线下沟通意见后,基本一致,期望和实际严重不符,移到待定了。
总结:
技术总结固然好,但是真正的掌握技术必然从实际工作的运用中得来。原理大家都能总结,关键是如何结合实际经验给到技巧,这是我们技术人应该追求的方向。
或许短时间内你能通过玩弄技术原理达到自洽,但是行内人一定知道如何找到试金石。一个小问题其实就能撬动你整个的技术能力体系,所以,千万不要学花架子,一旦你落到纸上的东西,必然要知其然,知其所以然才行。
我的技术博客不多,但是每一篇都来源于实践。我举个小例子:
java获取每月最后一天
这是我几年前写的博客文章,至今仍然有长尾流量,我想就是得益于我结合实践来讲解它的运用,大家工作中会遇到问题,然后来网上搜解决方案,看到这篇博客后,基本能解决80%~90%的问题,大家就会觉得好。
我想这才是最有效的总结,既能为自己留痕,也能给大家带来帮助。
更多面试技巧可以私信我,大家一起探讨。
以上为本人原创,请尊重知识产权,不接受任何抄袭、演绎和未经注明出处的转载。