面试题之Java基础篇

来源:互联网 发布:windows打开资源管理器 编辑:程序博客网 时间:2024/06/05 09:31

Q:九种基本数据类型的大小,以及他们的封装类

答 :int、double、long、float、char、byte、short 、boolean、void
对应的封装类:
Integer、Double、Long、F loat、Character、Byte、Void、Boolean、Short
详细请参考:http://blog.csdn.net/syc434432458/article/details/49964089

Q:Switch能否用String做参数?

答:可以的。

Q:equals 与 == 的区别 ?

答:== 对于基本数据类型是比较值是否相等。如果对于对象类型的引用,则是比较引用所指向的对象的地址是否相等。
equals方法是Object类中的方法,其他类可以重写。对于重写了equals方法的类,比如String、Integer其作用是比较所指对象内容是否相等。如果没有重写的,则是比较引用所指向对象地址是否相等。注意equals不能用于基本数据类型。

详细参考:http://www.cnblogs.com/dolphin0520/p/3592500.html

对象和引用的区别?

String str = new String();
str是引用,new String()是对象,没有名称。
引用存储在速度更快的堆栈中,对象存储在堆中。
str是指向new String()对象的引用。
String str2;
str2 = str;
作用是多个引用同时指向一个对象。
当然引用也可以指向其他的对象。
注意:引用存储的不是对象本身,引用存储的是对象的地址,其实和C++中指针类似。对于=操作,不是一个对象赋值给另外一个对象,实则是对象的地址传递给另外一个引用。
详细参考:http://zwmf.iteye.com/blog/1738574

简单介绍一下Java方法中参数值传递和引用传递

一般基本数据类型是按照值传递的,类的引用是按引用传递,所以
在方法体中修改类对象后,结束方法后仍然是生效的。

Object对象中的所有公有方法以及其他的作用?

java中的一种引用,强软弱虚的区别,以及它们的使用场景?

强引用:
代码中普遍存在的引用,类似”Object obj = new Object();”
这类引用只要强引用还存在,就永远不会回收调被引用的对象。所以容易
出现OOM的问题。

软引用:
当内存将要发生溢出之前,才会把软引用的对象进行回收。如果回收之后还是没有足够的内存,那么才抛出内存溢出异常。

弱引用:
强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次GC之前。当GC的时候,无论当前内存是否足够,都会回收只被弱引用关联的对象。所以很难出现OOM问题。

虚引用:
虚引用是一种最弱的引用关系,通过虚引用不能无法取得一个对象实例。为一个对象设置虚引用后,但对象被GC的时候会受到系统通知。
总结: GC的时候,针对不同的引用采用的是不同的策略。

ArrayList、LinkedList、Vector的区别?

String、StringBuffer与StringBuilder的区别?

String是字符串类
StringBuffer 和 StringBuilder功能一样,都是拼接字符串的,也都是继承抽象类,AbstractStringBuilder类 , 但是StringBuffer是加了同步锁的
StringBuilder没有加同步锁。

HashMap 和 Hashtable的区别?

HashMap 和 hashtable结构相似。
HashMap非线性安全,hashtable是线性安全的。
在hashtable中get和put都加上了同步锁。但是hashtable的地位很尴尬
使用的并不多。如果不要求线性安全的情况下,推荐使用HashMap替代hashtable,如果是
高并发的情况下,推荐使用ConcurrentHashMap来替代Hashtable。
在效率上,hashtable并不高,因为同步锁锁住某个线程,其他线程会处于阻塞状态。
ConcurrentHashMap则使用了分段锁技术,对数据进行分段加锁。这样效率上会提升很多。

TreeMap、HashMap、LinkedHashMap的区别? LinkedHashMap是如何确保插入的元素和访问的元素顺序是一样的。

HashMap不能保证插入的顺序和访问的顺序的一致性。TreeMap 和 LinkedHashMap则是可以的。
TreeMap会根据key来进行排序,存储在红黑树中。
LinkedHashMap底层结构是哈希表和双向链表,其主要结构是继承HashMap,是通过双向链表来实现可以按照插入顺序进行迭代。

更多集合的实现原理参考:
http://wiki.jikexueyuan.com/project/java-collection/

Collection类与Collections类的区别?

Collection是一个接口,作为Set 和 Map集合的父接口,HashSet 和 HashMap等为实现子类。
Collections是一个集合算法类。其中包括了一些集合的排序,查找等接口。

try catch finally,try里面有return,finally还需要执行吗?

会执行的。这种情况下使用断点调试可以跟踪到,try块语句中代码执行完毕,return语句先不执行,会先执行finally代码块,再回过来执行finally代码块。

重载和重写的区别?

重写(Override):
1、重写方法的方法名称和参数列表必须是一样的,不然不能叫重写,而是重载。
2、对于重写方法的访问权限,子类重写后的方法访问权限修饰符可以等于父类的,也可以大于。但一定不
可以访问级别变低(public > protected > default > private)
3、对于静态方法不可以重写
4、重写后的方法返回类型必须保持一致。
5、重写后方法抛出的异常只能和父类相同或者是父类异常的子类。
重载(Overrload)
1、重写只能通过相同的方法名,不同的参数列表(个数和类型)来实现。
2、对于返回类型和访问权限符不能作为重载的依据。

Synchronized 和 ReentrantLock的区别?

1、ReentrantLock是一个类,Synchronized是一个关键字。
2、ReentrantLock既然是一个类,会比Synchronized关键字灵活很多,并且也会多很多特性。ReentrantLock内部也是主要通过AQS来实现。
3、ReentrantLock可以对获取锁的等待时间进行设置,可以避免死锁的发生。
tryLock(long time, TimeUnit unit) //尝试去获取资源锁,如果在设定时间内没有获取到则不等待了,这样就不会死等,也就不会死锁现象出现。
4、ReentrantLock可以灵活的实现多路通知作用。
5、锁的底层实现机制不一样。

HashMap的实现原理分析?

1、是典型的哈希表的结构。
2、在Map中有一个内部接口Entry(K,V),在HashMap中Node(K,V)类实现了此接口。类中包含key和value以及next指针。
3、采用的链地址法。
4、哈希函数是key的hashcode值。(JDK8)

 static final int hash(Object key) {    int h;    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);}

5、存在一个Entry[], 其中长度就是哈希表链式存储中数组的长度。

put操作:
根据key,计算出哈希函数值hash,直接把value值存储到Entry[]数组中。

get操作:
根据key,计算出哈希函数值hash, 直接获取Entry[hash] ,也有可能是以此为首元素的链表。
6、在1.8之前HashMap都是数组和链表结构,但同一个哈希值上有多个元素的时候,链表查找元素会效率变低,所以在1.8中采用了红黑树来处理,当同一个hash值得元素超过8个之后,就转成了红黑树结构。这样提高存储效率。

更多请参考: http://blog.csdn.net/vking_wang/article/details/14166593
http://blog.csdn.net/tuke_tuke/article/details/51588156

LinkHashMap的底层实现原理?

1、LinkedHashMap是HashMap的子类,其中也定义了Entry内部类,
继承父类HashMap.Node,不同之处在于before和after引用,是一个双向链表。

0 0