摘要:记得,那是一个周末,栈长去某知名互联网公司面试,好像不到五分钟,我就被面试官亲切地赶出来了,当时我那个尴尬,内心深受打击。。。
你们可能会想,栈长这么菜的吗?5分钟都坚持不了?
本文说起来会有点尴尬,毕竟这是栈长我曾经经历过的故事。。。
那时候的栈长还真菜,每天写着 if/ for 及一些简单的业务逻辑代码,虽工作有些日子了,但技术水平还停留在刚毕业的起步阶段。。。
记得,那是一个周末,栈长去某知名互联网公司面试,好像不到五分钟,我就被面试官亲切地赶出来了,当时我那个尴尬,内心深受打击。。。
为什么会被赶出来?这道题我记得很清楚,我不确定是不是因为这道题,但却是这道题结束了整个面试,大概的经过是这样:
面试官:HashMap 和 Hashtable 的区别是什么?栈长:……(这个我答上来了,栈长整理了下,大家可以参考这篇文章:HashMap 和 Hashtable 的 6 个区别。)
面试官:那既然 Hashtable
是线程安全的,又性能不好,那你还知道别的替代品吗?栈长:……(没答上来)
面试官:好吧,那我们今天先聊到这里吧(起身送我走)……
栈长:好的,谢谢。(尴尬离场)
现在想起来都觉得尴尬。。。
现在竞争这么大,要求那么高,只会 Hashtable 的程序员真不能立足了,至少你得说得出 SynchronizedMap,虽然它的性能和 Hashtable 一样差,使用了全局对象锁来保证线程安全性,但至少你不只是会 Hashtable。
其实上面的问题,最佳答案是:ConcurrentHashMap,说完这个,有很大概率面试官又会连番问它的实现原理,以及它在 JDK 各个版本中的不同。
ConcurrentHashMap 是 JDK 1.5 添加的新集合,用来保证线程安全性,提升 Map 集合的并发效率。ConcurrentHashMap 使用了 Segment 的概念,默认有 16 个 Segment,Segment 里面依然还是数组 + 链表的数据结构,相当于给 HashMap 分桶处理了。因每次只会锁住其中一个 Segment,所以性能非常好。
然而,有意思的是,随着 JDK 1.8 中对 HashMap 的改进,同时又对 ConcurrentHashMap 进行了改进,抛弃了 Segment + 数组 + 单向链表 的设计,改为了和 HashMap 同样的 数组 + 单向链表 + 红黑树 的数据结构。
同时,ConcurrentHashMap 使用了 CAS 算法 + Synchronized 来保证集合的线程安全性,ConcurrentHashMap 相当于一个性能安全的 HashMap。ConcurrentHashMap 源码相当复杂,后面栈长会出一篇专门分析 HashMap 和 ConcurrentHashMap 源码和原理的文章,请大家关注微信公众号Java技术栈的后续推送,不要错过。
不过话又说回来,当初栈长面试 5 分钟就被送出来了,其实很正常,谁叫我当时只会 Hashtable 呢!就像我现在面试人一样,如果中高级面试者只会 Hashtable 讲不出其他更多的,我也一样也会把他送出去,初级的还可以理解。
现在很多中高级程序员,虽然年限已经达到三年或者五年以上,但实际对多线程知识了解甚少,还停留在如何实现和使用多线程的水平。这种其实和初级程序员没什么区别,竞争力明显不足,所以怎么能要得到比初级程序员更高的价格呢?天天写业务代码,又如何成为大牛呢?
所以,给 Java 程序员的一些建议,特别是中高级程序员,一定要把 Java 核心技术学好,如多线程、集合的应用、数据结构、原理等,这是中高级面试必问的。
不要年纪上去了,对于底层知识却不知道一二,不然随着年纪的不断增长,被淘汰的风险就越大,这样对于一个靠编码吃饭的程序来说,真的很可怕!
如果你被我说中了,或许考虑换一个环境?
最近栈长我会陆续分享一些个人的职场经验,踩坑经历,以及成长感悟,希望能给一些职场新猿带来帮助。
本文原创首发于微信公众号:Java技术栈(id:javastack),关注公众号在后台回复 "java" 可获取更多,转载请原样保留本信息。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72711.html
从事 Android 开发工作要满 5 年了,虽然明白自己技术很一般,但是也总是期望能够有机会进入更好的平台发展。这不,因为机缘巧合有了一次 Booking 的面试邀请(是在 hackerrank 上),然后开始临时抱佛脚 (leetcode 走起),最终选择了一个周末去完成线上测试,结果我完全没预料到。本以为会被某道题的逻辑绕昏,结果哪知道被标准输入这个东西卡得死死的,现在就记录一下这次非常糟...
摘要:前端开发工作一年小记作者云荒杯倾再过几天,就是我作为一名小小的前端工程师工作整整一年的日子了。但这可能算是一个好的开端,好的记忆。 前端开发工作一年小记 作者/云荒杯倾再过几天,就是我作为一名小小的前端工程师工作整整一年的日子了。而且,距离上一次写技术文,已经过去很久远。且逢周末,还是雨天,气温不高,心情凑合,就想写写。然而,写工作总结实际上可能仅仅是源于一种不可遏制的冲动,类似于伟...
摘要:前端开发工作一年小记作者云荒杯倾再过几天,就是我作为一名小小的前端工程师工作整整一年的日子了。但这可能算是一个好的开端,好的记忆。 前端开发工作一年小记 作者/云荒杯倾再过几天,就是我作为一名小小的前端工程师工作整整一年的日子了。而且,距离上一次写技术文,已经过去很久远。且逢周末,还是雨天,气温不高,心情凑合,就想写写。然而,写工作总结实际上可能仅仅是源于一种不可遏制的冲动,类似于伟...
摘要:前端开发工作一年小记作者云荒杯倾再过几天,就是我作为一名小小的前端工程师工作整整一年的日子了。但这可能算是一个好的开端,好的记忆。 前端开发工作一年小记 作者/云荒杯倾再过几天,就是我作为一名小小的前端工程师工作整整一年的日子了。而且,距离上一次写技术文,已经过去很久远。且逢周末,还是雨天,气温不高,心情凑合,就想写写。然而,写工作总结实际上可能仅仅是源于一种不可遏制的冲动,类似于伟...
阅读 2396·2019-08-30 15:52
阅读 2208·2019-08-30 12:51
阅读 2793·2019-08-29 18:41
阅读 2783·2019-08-29 17:04
阅读 768·2019-08-29 15:11
阅读 1636·2019-08-28 18:02
阅读 3560·2019-08-26 10:22
阅读 2478·2019-08-26 10:12