热点

java题库及答案

时间:2010-12-5 17:23:32  作者:知识   来源:百科  查看:  评论:0
内容摘要: java题库及答案 昨天有个学生问我:老师,Java的==和equals到底有什么区别?我反问他:你背了那么多题库里的答案,有没有真的动手跑过一段代码验证?他愣住。这让我想起自己刚学Java时,把题

java题库及答案

昨天有个学生问我:老师,题库Java的及答==和equals到底有什么区别?我反问他:你背了那么多题库里的答案,有没有真的题库动手跑过一段代码验证?他愣住。这让我想起自己刚学Java时,及答把题库当圣经,题库结果面试官问“String s = new String('abc')创建了几个对象”时,及答我答对了,题库却解释不清为什么。及答

题库里的题库标准答案往往长这样:==比较的是引用地址,equals比较的及答是内容。但这句话害了很多人。题库你写String a = "abc"; String b = "abc"; 用==比较返回true,及答因为字符串常量池让它们指向同一对象。题库可如果你写String c = new String("abc"),及答==就返回false了。题库题库不会告诉你,常量池在JDK7以后挪到了堆里,也不会提醒你intern()方法能手动入池。这些细节,光背题根本碰不到。

再看一个高频题:HashMap和Hashtable的区别。标准答案张口就来——Hashtable线程安全,HashMap不安全,所以HashMap效率高。这话没错,但误导性极强。实际上Hashtable的线程安全是靠粗暴地给方法加synchronized,并发度低得可怜。而HashMap在JDK8以后引入了红黑树优化,当链表长度超过8且数组容量不小于64时,查询复杂度从O(n)降到O(log n)。题库里写了吗?多半没有。你真正该理解的是,为什么链表转树的阈值是8?因为泊松分布下,负载因子0.75时链表长度到8的概率小于千万分之一,这是工程权衡,不是拍脑袋。

题库里还有个经典陷阱:重写equals为什么必须重写hashCode?答案总说“为了保证两个对象相等时hashCode一致”,但没人解释清楚后果。我见过一个真实案例——有人写了个Person类,只重写equals不重写hashCode,然后往HashSet里塞人。结果同一个人(逻辑上相等)被存了两份,因为hashCode不同导致散列到不同桶。排查了一下午,最后发现是这个问题。你背一百遍“两个对象相等则hashCode必须相等”,不如亲手踩一次这个坑记得牢。

再说说异常处理。题库爱问checked exception和unchecked exception的区别,标准答案是“前者必须捕获或声明,后者不必”。但实际开发中,你见过几个团队真去捕获IOException之外的checked exception?Spring的DataAccessException把SQLException包装成unchecked,就是为了让代码更干净。我的观点是:除非你写底层框架,否则别滥用checked exception,它让调用方被迫处理不关心的错误。这跟题库的“标准”不太一样,但真实世界就是这么运转的。

最后聊个面试必考题:ArrayList和LinkedList的区别。背答案的会说“ArrayList查询快增删慢,LinkedList增删快查询慢”。但你要是真去测,JDK8以后,在中间插入数据,LinkedList未必比ArrayList快——因为ArrayList的System.arraycopy是native方法,内存拷贝极快,而LinkedList每次插入要new节点、改前后指针,还破坏CPU缓存局部性。我做过基准测试:十万条数据随机插入,ArrayList反而快两倍。题库的结论是教科书式的,但硬件和JVM优化早就改变了游戏规则。

所以我的建议是:题库拿来巩固基础可以,但别信它的“标准答案”。每个结论都自己写代码验证,跑一遍看输出,再改改条件看变化。Java这语言,坑多,但每个坑都能让你学到真东西。你背三十道题,不如亲手调试一个空指针异常。毕竟,面试官问“你遇到过什么印象深刻的bug”,你总不想回答“我背过一道题,但没遇到过bug”吧。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap