Java 面试题总结(复答案仅供参考)
面试首先是一个双向选择, 这个一定要牢记. 公司招聘你主要是看你能否为公司带来价值.所以你面试的时候只要让面试官觉得你能带来价值即可
首先面试者需要确认自己的target:
1、明确项目是做什么的
2、明确项目的价值。(为什么做这个项目,它解决了用户什么痛点,它带来什么价值?)
3、明确项目的功能。(这个项目涉及哪些功能?)
4、明确项目的技术。(这个项目用到哪些技术?)
5、明确个人在项目中的位置和作用。(你在这个项目的承担角色?)
6、明确项目的整体架构。
7、明确项目的优缺点,如果重新设计你会如何设计。
8、明确项目的亮点。(这个项目有什么亮点?)
9、明确技术成长。(你通过这个项目有哪些技术成长?)
--------------------正文分割线--------------------
介绍一下Collection中的list和set?
接口Collection
 

介绍一下线程安全和非线程安全?
原文:
ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?StringBuilder和StringBuffer有什么区别?这些都是Java面试中常见的基础问题。面对这样的问题,回答是:ArrayList是非线程安全的,Vector是线程安全的;HashMap是非线程安全的,HashTable是线程安全的;StringBuilder是非线程安全的,StringBuffer是线程安全的。因为这是昨晚刚背的《Java面试题大全》上面写的。此时如果继续问:什么是线程安全?线程安全和非线程安全有什么区别?分别在什么情况下使用?这样一连串的问题,一口老血就喷出来了…
非线程安全是指多线程操作同一个对象可能会出现问题。而线程安全则是多线程操作同一个对象不会有问题。
线程安全必须要使用很多synchronized关键字来同步控制,所以必然会导致性能的降低。
所以在使用的时候,如果是多个线程操作同一个对象,那么使用线程安全的Vector;否则,就使用效率更高的ArrayList。
非线程安全!=不安全
有人在使用过程中有一个不正确的观点:我的程序是多线程的,不能使用ArrayList要使用Vector,这样才安全。
非线程安全并不是多线程环境下就不能使用。注意我上面有说到:多线程操作同一个对象。注意是同一个对象。比如最上面那个模拟,就是在主线程中new的一个ArrayList然后多个线程操作同一个ArrayList对象。
如果是每个线程中new一个ArrayList,而这个ArrayList只在这一个线程中使用,那么肯定是没问题的。
介绍一下hashmap?
HashSet 去重逻辑?
去重首先要看什么才算是重复。 也就是说对象怎么样才算是相等?
这里有两个相等性: 引用相等性 和 对象相等性。
引用相等性指的是:堆上同一个对象的两个引用。 如果对两个对象进行调用hashcode算法, 会得到相等的值。 hashcode()默认的行为会返回对象特殊的序号, 大部分的java版本是根据内存位置计算的序号,所以一般不会有相同的hashcode。
如果想知道两个对象的引用是否相等,可以使用 == 来比较。
对象相等性指的是: 堆上两个不同对象在意义上是相等的。
如果想要将两个不同的对象视为相等的,就必须覆盖从Object继承下来的hashcode算法和equals算法。
所以hashset是如何检查重复的, 就是要看怎么覆盖的hashcode()算法以及equals()
逻辑: 当你把对象加入到hashset时, 会使用对象的hashcode值来判断对象加入的位置和已经加入hashset的对象的hashcode值进行比对, 如果没有找到相同的值, 则hashset会先认为没有重复的值。
但是如果找到了有相同的hashcode的值得对象, 那么也不一定代表两个对象相等。 要进一步使用equals方法检查hashcode相等的对象是否真的相同。如果真的相同,会返回给用户一个false。

为什么不同的对象会有相同的hashcode的可能?
这要根据hashcode的算法说起, hashcode算法不好会造成hashcode碰撞, 算法好则会将对象散列均匀的分布在内存中。

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号