文档章节

常见面试问题的本质剖析

xiamingyu
 xiamingyu
发布于 2015/03/13 12:55
字数 835
阅读 24
收藏 1

      有关java技术面试的几个常见的问题,估计网上的答案很少有能一针见血的戳到本质的。要戳到问题的本质,结合开源的源代码也是十分有必要的。

例1: equals()方法和==的区别?

      这个题基本上应届生的技术基础面试都会问到,网上的介绍要么过于冗长,要么隔靴搔痒。而面试官最欣赏莫过于那些一针见血戳中问题本质的人。

      首先说说==,==使用的时候是比较什么呢,其实比较的就是栈中的内容,当引用变量指向的是基本数据类型,这些数据是直接入栈的,所以在栈中只要是数据内容一致,==就能返回true;当引用变量指向的是一个对象时,对象存在堆内存中,而栈内的引用变量中放的只是对象在内存中的地址,所以这时,==比较的就是对象的地址。

      查看equals()方法的源代码可知,equals()是Object类中的方法,源代码如下:

public boolean equals(Object obj) {    
   return (this == obj);
}

      这是什么意思呢?很显然,equals()方法的内部就是用==实现的,那么这种比较还有用什么意义的呢?实际上,在Object这个维度上进行比较确实是没有意义的。但是java中有很一些类中是重写了这个equals()方法的,最典型的就是String类,我参考了String类中重写的equals()的源代码后发现里面将两个String对象的比较方法改成了比较内容,就是当两个String对象的内容相同时equals()方法返回true,很显然是扩大了返回true的范围。

     而在没有重写equals()方法的类中,他的equals()方法是从Object中继承过来的,所以默认是按==方式比较的,如果你要按内容进行比较,那你就必须重写equals()方法来让他来根据你想要的方式进行比较。

 例2:HashMap和HashTable的区别?

     这个问题也是绝对的高频啊,只要你说你了解集合框架,这个问题基本上是必问的。

     那这个问题的本质又是什么呢?

     如果你有查看API文档的习惯,你一定会发现1.6的jdk-api中对HashMap的介绍中有这样一句话: 除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。

     这句话在面试中绝对有杀伤力,具体的意思就是HashMap是非同步的,执行效率高但不安全,而HashTable是同步的,安全但效率低;HashMap允许有一个空的键和多个空的值。在使用当中,显然HashMap是更加常用的,毕竟执行的效率对一个程序来说是很重要的。但在特殊情况下,比如存在多线程并发访问的情况,用可以考虑使用HashTable。(更新中)


















© 著作权归作者所有

xiamingyu
粉丝 0
博文 4
码字总数 2425
作品 0
南京
私信 提问
加载中

评论(0)

一道产品面试题:小明要喝果汁,妈妈没空,怎么解决?

偶然看到的一道产品经理面试问答:小明要喝果汁,妈妈没空,怎么解决?看到这个题目时,就引起了我无限的遐想和好奇心(内心os:这是一道相当有趣的题目)。 题目:小明打完球回家,感觉很累...

小强测试帮
2018/02/21
0
0
算法训练营【陈皓、王争主讲】

为什么要学习算法? 算法是国内外一线互联网公司在面试中的必考知识点; 想写出性能良好的代码,提高编程效率,从普通程序员成长为优秀的工程师,必须掌握算法; 想写出被广泛使用的开源框架...

极客邦Geekbang_Event
2019/03/11
34
0
微软面试、经典算法、编程艺术、红黑树4大系列总结

无私分享,造福天下 以下是本blog内的微软面试100题系列,经典算法研究系列,程序员编程艺术系列,红黑树系列4大经典原创系列作品与一些重要文章的集锦。 一、微软面试100题系列 横空出世,席...

长平狐
2013/01/06
427
0
01_线程基础(一)之笔记

1.1 并发编程的学习的目的 + 我们为什么要去学习并发编程? + 第一点,这对面试非常重要,是企业面试程序员的标准,是考察要素: 1. 考察我公司技术你是否熟悉50%以上,或我们公司有特殊的技...

圣洁之子
2018/02/08
32
0
C/C++程序员应聘常见面试题深入剖析

C/C++程序员应聘常见面试题深入剖析 1.引言   本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛,部分试题解答也参考...

庸人谷
2012/12/14
563
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring基础

主要用于service层; 轻量级java开发框架; 各层 web层:struts,spring-MVC service层:spring dao层:hibernate,mybatis , jdbcTemplate --> spring-data Spring核心:控制反转IOC 切面编...

七宝1
15分钟前
19
0
解决overflow+border-radius+transform圆角问题

网上还有其他版本,但是对我来说都不好使,下面是我在Chrome上的代码。overflow:hidden依然是不能正常使用,换成unset就可以,读者如果有更好的解决方案,请留言,谢谢。 <figure> <img...

hi懒喵
20分钟前
39
0
《C语言》—— 数组

书籍使我变成了一个幸福的人,使我的生活变成轻松而舒适的诗。——高尔基 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues。 https://github.com/midou-tech/articles 点关注,不迷路!...

龙跃十二
33分钟前
60
0
Java小案例: 1000以内的水仙花数

要求在控制台分别展示1000以内的水仙花数。 如下:↓ 水仙花数规则: 水仙花数至少是一个3位数 每位数字的立方数的累加和,正好等于该数字本身。 例如:153就是一个水仙花数。每位数字分别...

漫路h
昨天
66
0
centos 防火墙端口设置

查看开放的端口号 firewall-cmd --lists-all 设置开放的端口号 firewall-cmd --add-service=http --permanent 1. //--permanent表示永久生效,不加这个参数的话只会针对本次执行完命令生效,重...

ACE_LCX
昨天
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部