这道面试题我真不知道面试官想要的回答是什么(1)

简介: 这道面试题我真不知道面试官想要的回答是什么(1)

面试是一个很奇怪的过程,都是拧螺丝的。但是问的都是如何造火箭,一个敢问,一个敢答。


面试不可怕,可怕的是你get不到面试官的点。


更可怕的是,你觉得你知道答案,但不是面试官想要的。


最可怕的是,面试官也不知道这题的答案是什么。


送分题?送命题?


前段时间有个小伙伴在一个群里分享了一道亲身经历的面试题,这题乍一看好像张口就能答,但是仔细一想,面试官是想要这样的回答吗?具体可以看截图。


image.png


可以想象一下那个略显尴尬的画面:


面试官:请问ConcurrentHashMap中的key为什么不能为null?


面试者:因为源码里面就是这样写的,判断为空,抛出异常。


面试官:没了?


面试者:没了。


我前思后想,对于这个问题我是真的不知道面试官想要什么样的答案。就算我写完这篇文章之后,我知道了前因后果,我还是不清楚怎么回答他的这个问题。因为我get不到他的点在哪里。


具体怎么回事,看完本文之后,你就知道了。


我提炼并升华一下这个面试题,请问:


ConcurrentHashMap为什么不能存值为null的value?


ConcurrentHashMap为什么不能放值为null的key?


SHOW ME THE CODE


我们先看一下当ConcurrentHashMap的key和value分别都为null的时候,程序的执行结果是什么:


image.png


可以看到,这里抛出了空指针异常,因为ConcurrentHashMap里面的key和value是都不能为null的。

其对应的源码部分如下(JDK 1.8):


image.png


有的时候,你看到源码说明你看的很深入了;

有的时候,你看到源码了,只是看到了表象。

比如这个地方,源码为什么这样写?或者换个问法,作者这样写是基于什么考虑的?

if (key == null || value == null) throw new NullPointerException();

 

要知道作者这样写的出发点是什么,最权威的回答就是作者自己的回答。而ConcureentHashMap就是巨佬Doug Lea老爷子写的。


image.png


Doug Lea是谁?java.util.concurrent包你知道吧?他写的 。

俗话说得好:编程不识Doug Lea,写尽Java也枉然。


image.png


image.png


知道他是谁了,接下来就好办了。因为早在2006年就有人针对ConcurrentHashMap的key和value为什么不能为null的问题写过邮件咨询过,而他老爷子亲自回答了这个问题。

本文在翻译四封相关邮件的过程中,结合老爷子的邮件,加上自己的理解来回答这个问题。


说明:本人英文水平有限,翻译出来的文章大家看的时候多多包涵。同时我也附上原文和邮件地址,大家可以访问。

目录
相关文章
|
7月前
|
算法 Java 调度
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
76 0
|
7月前
|
存储 Java
java面试题大全带答案_面试题库_java面试宝典2018
java面试题大全带答案_面试题库_java面试宝典2018
|
7月前
|
SQL 前端开发 Java
2019史上最全java面试题题库大全800题含答案(面试宝典)(4)
2019史上最全java面试题题库大全800题含答案(面试宝典)
|
7月前
|
SQL Java 数据库连接
2019史上最全java面试题题库大全800题含答案(面试宝典)(2)
2019史上最全java面试题题库大全800题含答案(面试宝典)
|
7月前
|
存储 设计模式 Java
java实习生面试题_java基础面试_java面试题2018及答案_java面试题库
java实习生面试题_java基础面试_java面试题2018及答案_java面试题库
|
7月前
|
SQL 算法 安全
java面试宝典_java基础面试_2018java面试题_2019java最新面试题
java面试宝典_java基础面试_2018java面试题_2019java最新面试题
|
7月前
|
算法 安全 网络协议
java高级面试题_java面试题大全带答案_线程面试题_java面试宝典2019
java高级面试题_java面试题大全带答案_线程面试题_java面试宝典2019
|
7月前
|
安全 算法 Java
java线程面试题_2019java面试题库
java线程面试题_2019java面试题库
|
7月前
|
前端开发 Dubbo Java
spring面试题_spring mvc面试题_springboot面试题库
spring面试题_spring mvc面试题_springboot面试题库
|
7月前
|
算法 前端开发 Java
2019史上最全java面试题题库大全800题含答案(面试宝典)(3)
2019史上最全java面试题题库大全800题含答案(面试宝典)

热门文章

最新文章