你们可能会想,我这么菜的吗?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 源码和原理的文章,请大家关注我的头条号,不要错过。
不过话又说回来,当初我面试 5 分钟就被送出来了,其实很正常,谁叫我当时只会Hashtable 呢!就像我现在面试人一样,如果中高级面试者只会 Hashtable 讲不出其他更多的,我也一样也会把他送出去,初级的还可以理解。
现在很多中高级程序员,虽然年限已经达到三年或者五年以上,但实际对多线程知识了解甚少,还停留在如何实现和使用多线程的水平。这种其实和初级程序员没什么区别,竞争力明显不足,所以怎么能要得到比初级程序员更高的价格呢?天天写业务代码,又如何成为大牛呢?

总结

所以,我给 Java 程序员的一些建议,特别是中高级程序员,一定要把 Java 核心技术学好,如多线程、集合的应用、数据结构、原理等,这是中高级面试必问的。
不要年纪上去了,对于底层知识却不知道一二,不然随着年纪的不断增长,被淘汰的风险就越大,这样对于一个靠编码吃饭的程序来说,真的很可怕!
如果你被我说中了,或许考虑换一个环境?
最近我会陆续分享一些个人的职场经验,踩坑经历,以及成长感悟,希望能给一些职场新猿带来帮助。
我总结出了互联网公司java程序员面试涉及到的绝大部分面试题及答案做成了文档和架构视频资料免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习,也可以关注我一下以后会有更多干货分享。
领取面试资料方式:QQ群架构华山论剑:836442475【点击进入领取】(大牛聚集地)一起交流学习探讨!

程序员周末阿里面试,5分钟就被一道题秒杀:HashMap与Hashtable的更多相关文章

  1. 一名十年Java程序员回忆阿里面试经历——揭开阿里面试的“遮羞布”

    阿里面试经历 去阿里面试可以说非常非常的偶然和戏剧性,因为本人根本没投简历,以至于阿里hr给我电话的时候我一度认为是诈骗电话.因为深圳这家公司不错我还想在这里干个两年左右再考虑考虑. 这个时候的本人已 ...

  2. Java程序员从阿里面试回来,这些面试题你们会吗?

    前不久刚从阿里面试回来,为了这场面试可以说准备了一个半月,做的准备就是刷题和看视频看书充实自己的技术,话说是真难啊,不过还算顺利拿到了offer,有很多面试题我已经记不起来了,这些是当天回家整理好的, ...

  3. 腾讯Java程序员第二轮面试11个问题,你会几个?

    此前,分享了阿里巴巴.网易.百度等多家名企的JAVA面试题. 这也引来了不少程序员网友们的围观. 其中,也有相当一部分网友是已经从事Java开发好多年的程序员,当他们阅读完JAVA面试题的反应是:一个 ...

  4. 2020Java程序员架构师面试宝典,学习后面试必过,震惊,本人通过这篇教程,拿到了0个offer

    1. 引言 Java后端学习路线 <吐血整理>顶级程序员工具集 https://github.com/AobingJava/JavaFamily 跟上Java8 经历阿里.头条.腾讯等知名 ...

  5. 35岁Android程序员被阿里辞退,生活压力太大痛哭,中年危机如何自救?

    多数人都喜欢安逸的生活,尤其是随着年龄的增长,很多人都希望工作和生活趋于稳定,不愿意再让生活有很大的变动.可是,当达到一定的年龄时,危机还是存在的. 之前有一位阿里员工在脉脉上,晒出了自己被辞退的经历 ...

  6. 作为一名程序员,在面试中如何展现你Python的coding能力?

    来源商业新知,原文标题:如何在一场面试中展现你对Python的coding能力? 如果你已经通过了招聘人员的电话面试,那么下面正是该展现你代码能力的时候了.无论是练习,作业,还是现场白板面试,这都是你 ...

  7. 互联网寒冬,Python 程序员如何准备面试

    虽说年年都在喊互联网寒冬,最难就业季,但是今年确实有点不一样,年前年后一波又一波互联网公司宣布『人员调整,结构优化』, 这是往年没发生过的. 是不是面试机会就少了很多呢?不是的. 搜索招聘网站我们可以 ...

  8. 技术不错的Java程序员,为何面试却“屡战屡败”

    为何很多有不少编程经验,技术能力不错的程序员,去心仪公司面试时却总是失败?至于失败的原因,可能很多人都没意识到过. 01想要通关面试,千万别让数据结构拖了后腿 很多公司,比如 BAT.Google.F ...

  9. 网易Java程序员两轮面试,这些问题你能答对几个?

    一转眼,2018 年已经过去了,你是否在满意的公司?拿着理想的薪水? 虽然"钱多.事少.离家近"的工作可能离技术人比较远,但是找到一份合适的工作,其实并不像想象中那么难.但是,有些 ...

随机推荐

  1. pandas 读写 Excel 格式的数据

    import pandas as pd #读入数据: df = pd.read_excel('data_in.xlsx') #导出数据: writer = pd.ExcelWriter('data_o ...

  2. Chapter5_初始化与清理_数组初始化与可变参数列表

    一.数组初始化 数组是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.编译器是不允许指定数组的长度的,当使用语句int[] a时,拥有的只是一个符号名,即一个数组的引用,并不拥 ...

  3. PCL-CMAKELIST书写格式

    cmake_minimum_required(VERSION 2.6 FATAL_ERROR)//cmake最小版本 find_package(PCL 1.3 REQUIRED COMPONENTS ...

  4. 跟踪SQL

    在数据库中,找到以下页面,并选择事件中的Tsql下的bath...与stm...

  5. css摘要

    由于需要,今天花三个小时了解一下css,在此记录一些摘要: 参考w3school 1. 当同一个 HTML 元素被不止一个样式定义时,会使用哪个样式呢? 一般而言,所有的样式会根据下面的规则层叠于一个 ...

  6. oracle中向timeStamp类型字段插入当前时间

    to_timestamp(to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS')

  7. hbase单机版安装+phoneix SQL on hbase 单节点安装

    hbase 单机安装部署及phoneix 单机安装 Hbase 下载 (需先配置jdk) https://www.apache.org/dyn/closer.lua/hbase/2.0.1/hbase ...

  8. 20个Linux防火墙应用技巧

    转载 1.显示防火墙的状态 以root权限运行下面的命令: # iptables -L -n -v 参数说明: -L:列出规则. -v:显示详细信息.此选项会显示接口名称.规则选项和TOS掩码,以及封 ...

  9. eclipse和sublime3打开freemarker(.ftl)文件

    1.eclipse如何打开freemarker? https://jingyan.baidu.com/article/49ad8bce5ea95d5834d8fa9e.html 2.sublime3如 ...

  10. OC对象,自动释放池,OC与C语言的区别

    在C语言中,编程都是面向过程的编程,每一个代码块都严格按照从上至下的顺序执行,在代码块之间同样也是这样, 但是在OC中往往不是这样,OC和C++.java等语言一样,都是面向对象的编程语言,在代码的执 ...