北京人本科技面试题
1、下面代码输出什么?
String s0="kvi11";
String s1=new String("kvi11");
String s2=new String("kvi11");
String s3="kv"+"i11";
String s4="i11";
String s5="kv"+s4;
System.out.println("s0==s1************"+(s0==s1));
System.out.println("s1==s2************"+(s1==s2));
System.out.println("s0==s3************"+(s0==s3));
System.out.println("s0==s5************"+(s0==s5));
System.out.println("s1.intern()==s2.intern()"+ (s1.intern()==s2.intern()));
System.out.println("s1.equals(s2)"+(s1.equals(s2)));
答案
s0==s1************false
s1==s2************false
s0==s3************false
s0==s5************false
s1.intern()==s2.intern()true
s1.equals(s2)true
2、下面输出什么?
Integer a = new Integer(3);
Integer b = 3;
int c = 3;
System.out.println(a == b);
System.out.println(a == c);
System.out.println(c == b);
答案:
false:因为自动转型,b相当于new了一个新的对象
true
true
3、下面输出什么?
A a=new A();
B b=new B();
A a2=b;
a.v1=10;
b.v1=20;
a.v2=100;
b.v2=200;
System.out.println(a.v1);//20,子类更改了父类变量(类对象可以更改类变量)
System.out.println(a.v2);//100
System.out.println(b.v1);//20
System.out.println(b.v2);//200
System.out.println(a.f());//1
System.out.println(b.f());//2
System.out.println(a2.f());//2
答案:20
100
20
200
1
2
2
public class A {
public static int v1=0;
public int v2=0;
public int f(){
return 1;
}
}
public class B extends A{
public int f(){
return 2;
}
}
4、考察异常的输出
public class Test {
public int trycatch(int[] a){
try {
a[0]=0;
throw new Exception();//1
// return 10; //2
}catch (Exception e){
a[0]=3;
return 100;
}finally {
a[0]=9;
// return 1000;//3
}
}
public static void main(String[] args){
Test p=new Test();
int[] a={1,2,3};
System.out.println("a1="+a[0]);
System.out.println("r="+p.trycatch(a));
System.out.println("a2="+a[0]);
//屏蔽1,3输出1,10,9
//屏蔽2输出1,1000,9
//屏蔽2,3输出1,100,9
}
}
5、输出语句打印什么?
public class A {
public static void f() {
System.out.println("A.f");
}
public void f(int v) {
System.out.println("A.f2");
}
public static void main(String[] args) {
B b = new B();
A ba = b;
b.f();
ba.f();
b.f(0);
ba.f(0);
}
}
public class B extends A {public static void f() {
System.out.println("B.f");
}
public void f(int v) {
System.out.println("B.f2");
}
}
考察点:子类不能重写父类静态方法,当使用泛型的时候,依然调用的是父类的静态方法,子类调用静态方法的时候,先默认从本类中寻找,找不到就调用父类的静态方法。但是泛型就没用了。
6、动态绑定和静态绑定的区别?重构和重写分别是什么?它们分别属于什么类型的绑定?
所谓静态绑定是指在程序编译过程中,把函数(方法或者过程)调用与响应调用所需的代码结合的过程称之为静态绑定。
动态绑定是指在执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法
7、查询下表购物商品两种或两种以上的购物人名称
1)表名:购物信息
购物人 商品名称 数量
A 甲 2
B 乙 4
C 丙 1
A 丁 2
B 丙 5
select name from (select DISTINCT name,type from test1 where name in (select name from test1 group by `name` having count(*) >= 2)) t group by name having count(*) >= 2;
8、写个二分查询