上周发了一篇文章《什么是HashMap》,引起了不少人的讨论,有一个人的留言引发了我的思考:“作为一个程序员, 真的有必要学习这些底层原理吗? 我会用了不就行了吗? 为什么面试者喜欢问这么细节的东西呢?”
是啊,在日常的工作中,如果只是做应用层面的业务开发,大多数都是直接把HashMap new 出来,调用put方法,放入key,value 就完了。
很少人会用到像public HashMap(int initialCapacity, float loadFactor)这样的构造函数,更不会去调整那个loadFactor,也不会关心HashMap的容量为什么是2的幂。
HashMap 提供了一个绝佳的范例,展示了编程中对于数据结构/算法的应用,例如位运算,Hash,数组,链表,红黑树等。我一直强调数据结构对于程序员逻辑思维能力的训练,学习下HashMap的实现原理,绝对是有好处的,但是这个好处显得比较“虚”,有没有更现实一点的意义?
我在码农翻身QQ群里做了一个调查:为什么要学习HashMap的底层原理? 除了面试以外,有什么用处?
各位同学的回答五花八门,比如内功派:
石头:为啥要学?练武功,不要内功,能成为高手么?
AT:不是合理运用底层原理才能写出好的吗?
HQT:就喜欢扒光底层原理的快感.
艺术人生: 越是底层的东西,对于想成为高级程序员越显得重要,必须得学
年年:学过了你会知道“哇靠,原来是这样”、“这个太妙了”,之后在别的问题上,这些奇妙的点可能会给你很大的启发
也有鄙视面试者的:
漠北 :感觉那个面试的人也是不知道问什么问题。
老王: 问那个问题的人学历一定不高。
有和实际工作密切相关的:
hugo : hashmap这种数据结构在开发中是很常用的, 在高并发的情况下,如果不注意这些数据结构的特性很容易出现各种问题而不知道怎么排查。
Tosh : 我感觉 完全不考虑性能问题 不考虑优化 跟搬砖就真的没区别了
代帧:对于只想拿死工资的人来说不用学习,对于想提升自己,拿到更高offer的人来说,必须要掌握。
其中“老金”和“年年”的回复和我的观点不谋而合、深得我心:
老金: 如果你能坚持看底层原理,至少可以证明是静得下心学习的人, (学会原理)证明了你和其他面试者不一样。
年年:你学了这个一是能够证明你对编程的兴趣不是停留在表面、二是证明你比较有学习的能力。最重要的一点是企业通过这个筛选招聘,你不会就不能进入好的公司,参与大的工程,难以提升自己的水平。
确实是这样,现在软件和互联网很火爆,很多人转行“入坑”,造成一个现象就是初级程序员过剩,那企业在挑选的时候怎么办呢? 他们怎么筛选呢?
对于一些技术驱动型公司来讲,他们肯定要挑选那些基础更扎实的人,因为在工作中这些基础知识会被直接使用。
对于业务驱动型公司(在国内估计是占大多数),面对大量的候选人,他们要看一个人是不是只是浮在表面, 有没有兴趣、有没有能力挖掘底层,虽然这些底层的原理在工作中并不会直接去使用! 很明显,这样的程序员成长的空间更大,也更能发挥价值。
这里边有个潜台词就是: 你把这么底层的原理都搞定了,应用层那点破事儿还不是手到擒来?!
“面试造航母,工作拧螺丝” 不无道理,听起来有点无奈和残酷。
我回想了我多年前经历的几次面试,Java这一块儿好像没有人问过我HashMap原理这样细节的问题,也许我们那个时代的先进技术在现在看来非常落伍,还在折腾MVC, AJAX这些东西, 远远比不上现在的同学们了。大家现在要学的东西,掌握的东西已经不可同日耳语了,门槛提高了!
技术的发展,知识的积累就是这样,一代更比一代强。
接下来的一个问题就是,如果大家都掌握了这些原理怎么办?
我估计门槛会再度提高, 没办法,程序员就是这么苦逼, 不过好处就是:也许你成为面试官了......
PS:你觉得为什么要学习HashMap的底层原理?除了面试之外有什么实际用处? 欢迎留言!
(完)
联系客服