文档章节

周末去面试,进去 5 分钟就出来了…

Java技术栈
 Java技术栈
发布于 2018/12/17 08:24
字数 1192
阅读 235
收藏 2
JDK

你们可能会想,栈长这么菜的吗?5分钟都坚持不了?

本文说起来会有点尴尬,毕竟这是栈长我曾经经历过的故事。。。

那时候的栈长还真菜,每天写着 if/ for 及一些简单的业务逻辑代码,虽工作有些日子了,但技术水平还停留在刚毕业的起步阶段。。。

记得,那是一个周末,栈长去某知名互联网公司面试,好像不到五分钟,我就被面试官亲切地赶出来了,当时我那个尴尬,内心深受打击。。。

为什么会被赶出来?这道题我记得很清楚,我不确定是不是因为这道题,但却是这道题结束了整个面试,大概的经过是这样:

面试官:HashMap 和 Hashtable 的区别是什么?

栈长:……(这个我答上来了,栈长整理了下,大家可以参考这篇文章:HashMap 和 Hashtable 的 6 个区别。)

面试官:那既然 Hashtable 是线程安全的,又性能不好,那你还知道别的替代品吗?

栈长:……(没答上来)

面试官:好吧,那我们今天先聊到这里吧(起身送我走)……

栈长:好的,谢谢。(尴尬离场)

现在想起来都觉得尴尬。。。

现在竞争这么大,要求那么高,只会 Hashtable 的程序员真不能立足了,至少你得说得出 SynchronizedMap,虽然它的性能和 Hashtable 一样差,使用了全局对象锁来保证线程安全性,但至少你不只是会 Hashtable。

其实上面的问题,最佳答案是:ConcurrentHashMap,说完这个,有很大概率面试官又会连番问它的实现原理,以及它在 JDK 各个版本中的不同。

ConcurrentHashMap 是 JDK 1.5 添加的新集合,用来保证线程安全性,提升 Map 集合的并发效率。ConcurrentHashMap 使用了 Segment 的概念,默认有 16 个 SegmentSegment 里面依然还是数组 + 链表的数据结构,相当于给 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" 可获取更多,转载请原样保留本信息。

© 著作权归作者所有

Java技术栈
粉丝 183
博文 176
码字总数 154798
作品 0
深圳
架构师
私信 提问
Hashtable程序员面试五分钟被请出来了

你们可能会想,栈长这么菜的吗?5分钟都坚持不了? 本文说起来会有点尴尬,毕竟这是栈长我曾经经历过的故事。。。 那时候的栈长还真菜,每天写着 if/ for 及一些简单的业务逻辑代码,虽工作有...

金铭鼎IT教育
2018/12/17
123
0
程序员周末阿里面试,5分钟就被一道题秒杀:HashMap与Hashtable

你们可能会想,我这么菜的吗?5分钟都坚持不了? 本文说起来会有点尴尬,毕竟这是我曾经经历过的故事 那时候的我还真菜,每天写着 if/ for 及一些简单的业务逻辑代码,虽工作有些日子了,但技...

我最喜欢三大框架
03/17
67
0
通知面试的时候,为什么都要问是离职还是在职?

通知面试时询问,基本都是进一步的确认,因为你离职还是在职,简历上都很容易看得出来……之所以要再确认下,是因为离职和在职有很大不同。 最显而易见的是:入职时间。 如果是离职状态,谈妥...

明哥聊求职
2018/10/12
0
0
去大公司单挑Android有前途吗?

最近由于各种原因萌发出跳槽的心思。 好几个月前投了某个大公司下面的某个网站,终于有回应,结果当天同时去面试了他们公司的两个部门。 一个下午面试的部门,由于是一次性三轮面试,面试结束...

Lear华
2013/08/15
1K
11
吐槽一下早上去面试的“公司”

前天在51上投了份简历,当即就有QQ加我(该“公司”的BOSS)。当时就给这家公司-1分。不是应该由HR电话通知面试嘛。。。接着第二天就收到一条手机发来的短信要我去面试。。。(今天才知道原来...

一如当初
2014/07/22
5.4K
33

没有更多内容

加载失败,请刷新页面

加载更多

如何在Linux中复制文档

在办公室里复印文档过去需要专门的员工与机器。如今,复制是电脑用户无需多加思考的任务。在电脑里复制数据是如此微不足道的事,以致于你还没有意识到复制就发生了,例如当拖动文档到外部硬盘...

老孟的Linux私房菜
26分钟前
2
0
SpringBoot 集成MongoDB

一、MongoDB 简介 MongoDB 如今是最流行的 NoSQL 数据库,被广泛应用于各行各业中,很多创业公司数据库选型就直接使用了 MongoDB,但对于大部分公司,使用 MongoDB 的场景是做大规模数据查询...

zw965
34分钟前
14
0
使用 Envoy 和 AdGuard Home 阻挡烦人的广告

> 原文链接:使用 Envoy 和 AdGuard Home 阻挡烦人的广告 通常我们使用网络时,宽带运营商会为我们分配一个 DNS 服务器。这个 DNS 通常是最快的,距离最近的服务器,但会有很多问题,比如: ...

米开朗基杨
今天
22
0
springboot之全局处理异常封装

springboot之全局处理异常封装 简介 在项目中经常出现系统异常的情况,比如NullPointerException等等。如果默认未处理的情况下,springboot会响应默认的错误提示,这样对用户体验不是友好,系...

Purgeyao
今天
27
0
cookie

cookie: n. 饼干;小甜点 为什么会引入Cookie(在客户端保持http状态) 因为http协议是一种无状态协议,web服务器本身不能识别出哪些请求是同一个服务器发送的,浏览器的每一次请求都是独立...

五公里
今天
27
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部