自用Java面试题(来源:五湖四海)
Java基础:
Java的几种基本类型,各占用的字节?
String能被继承吗?为什么?
不可以,String类有final修饰符,实现细节不允许被改变。
String, StringBuffer, StringBuilder的区别。
String(final修饰,字符串常量)
StringBuffer(final修饰,字符串变量,线程安全,其中大部分方法都进行了同步处理)
StringBuilder(字符串变量,非线程安全)
ArrayList与LinkedList的区别。
ArrayList(底层是数组形式,它可以O(1)的时间复杂度对元素进行随机访问;)
LinkedList(底层是链表形式,它可以查找元素的时间复杂度为O(n);)
- Lin比Arr的插入,添加,删除速度更快。
- Lin比Arr更占用内存,Lin的每个节点存储了向前和向后的引用。
三种单例模式。
- 懒汉式,线程不安全。
public class Single{
private static Single instance;
private static Single(){}
public static synchronized Single getInstance(){
if(instance == null)
instance = new Single();
return instance;
}
}
- 饿汉式
public class Single{
private static Single instance = new Single();
private Single(){}
private static Single getInstance(){
return instance;
}
}
- 静态内部类
public class Single{
private static class SingleHolder{
private static final Single instance = new Single();
}
private Single(){}
public static final Single getInstance(){
return SingleHolder.instance;
}
}