面试题及心得
今天参加了一家大公司的面试,进去先做了一套笔试题,分享给大家:
1、写出public,protected,private以及默认的(default)的作用范围
2、写出&和&&的区别
&:是按位运算符,没有短路效应,结果是0或1
&&:是逻辑运算符,有短路效应,结果是true或者false
3、
4、
5、轻易效率最高的方法得出2乘以8的答案
6、抽象类和接口的异同点
7、问下列程序的输出结果是:
public class A { static{ System.out.println(1); } public A(){ System.out.println(2); } } class B extends A{ static{ System.out.println("a");
}
public B(){
System.out.println("b");
}
}
//测试 public static void main(String[] args) { A ab = new B(); ab = new B(); }
我记得我的答案是:1a2b,结果回来问了一下朋友他说是1a2b2b
解析:(1)初始化父类的静态成员变量和静态代码块
(2)初始化子类的静态成员变量和静态代码块
(3)初始化父类的普通成员变量和构造代码块(按次序),再执行父类的构造方法
(4)初始化子类的普通成员变量和构造代码块(按次序),再执行父类的构造方法
所以在类加载时,执行父类的静态代码块,输出1,接下来执行子类的静态代码块,输出a,
①执行main函数中的第一句话:new B(); 此时需要注意在new子类之前先要去new父类,所以先执行父类的的构造代码块,输出2,再执行子类的构造代码块输出b
第一句话执行完输出1a2b
②执行main函数中第二句话,值有new B();, 此时同第一步,先执行父类的构造器再执行子类的构造器,输出2b
所以最终结果是1a2b2b
8、把编码为GB2312的字符串转成编码为ISO8859-1
String name = "lala"
String str = new String(name.getBytes("GB2312"),"ISO8859-1");
9、怎么实现对象的克隆
①反射
②Object提供了clone()方法
10、写一个线程安全高效的单例模式
懒汉式:
public class Test { public static void main(String[] args) { A.getA(); } } class A{ private static A a = null; static Object o = new Object(); //私有化方法 private A(){ } //得到实例化对象的方法(此方法必须是静态的,因为不能new对象所以需要直接点方法出来) public static A getA(){ //先判断对象是否为空 if(a==null){ synchronized(o){ //二次判断是否为空,为了避免有漏网之鱼 if(a==null){ a = new A(); } } } return a; } }
答案是懒汉式,补充一下饿汉式:
public class Test { public static void main(String[] args) { A.getA(); } } class A{ //先实例化唯一的对象,之后他的值就不能再变了,所以定义成final private final static A a = new A(); private A(){ } public static A getA(){ return a; } }
11、怎么优化sql
①创建必要索引
②使用PLSQL(可一次性执行多条sql语句)
③使用预编译查询
④
12、String和StringBuilder,StringBuffer的区别