1、Object类中都有哪些方法?
hashCode()、equals()、wait()、notify()、notifyAll()、finalize()方法
2、10亿数据怎么进行排序?
将大文件切割成小文件,每个小文件内归并排序;
对所有的小文件进行归并排序。
3、一个类何时会被卸载?
一个类何时结束生命周期,取决于代表它的Class对象何时结束生命周期。
由Java虚拟机自带的类加载器所加载的类,在虚拟机的生命周期中,始终不会被卸载。J对于ava虚拟机类加载器,Java虚拟机本身会始终引用这些类加载器,而这些类加载器则会始终引用它们所加载的类的Class对象,因此这些Class对象始终是可触及的。
4、何时发生新生代和老年代垃圾回收?
大多数情况下,直接在 Eden 区中进行分配。如果 Eden区域没有足够的空间,那么就会发起一次 Minor GC;对于 Full GC(Major GC)的触发条件:也是如果老年代没有足够空间的话,那么就会进行一次 Full GC。
Ps:上面所说的只是一般情况下,实际上,需要考虑一个空间分配担保的问题:
在发生Minor GC之前,虚拟机会先检查老年代最大可用的连续空间是否大于新生代所有对象的总空间。如果大于则进行Minor GC,如果小于则看HandlePromotionFailure设置是否允许担保失败(不允许则直接Full GC)。如果允许(为true),那么会继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小,如果大于则尝试Minor GC(如果尝试失败也会触发Full GC),如果小于则进行Full GC。
5、Hash冲突的解决方法
(1)开放定址法
用开放定址法解决冲突的做法是:当冲突发生时,使用某种探查(亦称探测)技术在散列表中形成一个探查(测)序列。沿此序列逐个单元地查找,直到找到给定 的关键字,或者碰到一个开放的地址(即该地址单元为空)为止(若要插入,在探查到开放的地址,则可将待插入的新结点存人该地址单元)。查找时探查到开放的 地址则表明表中无待查的关键字,即查找失败。
拉链法解决冲突的做法是:将所有散列地址相同的结点链接在同一个单链表中。若选定的散列表长度为m,则可将散列表定义为一个由m个头指针组成的指针数组T[0..m-1]。凡是散列地址为i的结点,均插入到以T[i]为头指针的单链表中。
6、现在要测试系统的高并发性能,如何模拟高并发?
使用cyclicbarrier,cyclicbarrier初始化时规定一个数目,then计算调用了cyclicbarrier.await()进入等待的线程数,当等待的线程数达到初始化时规定的数目时,所有进入等待的线程将被唤醒并继续。
7、2012!末尾有几个0?
答:有多少对2*5就有多少个0,2的个数明显多于5,所有有多少个5就有多少个0。具体如下:
2012/5=402, 402/5=80, 80/5=16 , 16/5=3
402+80+16+3=501
所以2012!的末尾共有501个0。
8、java中函数传方式?
(1)按值传递(by value)
使用该方式传递的参数,参数原始的值不发生变化
适用范围:八种基本数据类型和String
*String也是传递的地址,但是String对象一旦被改变,就是生成新的对象
(2)按址传递(by address)
使用该方式传递的参数,在方法内部修改参数的值时,参数原始的值发生改变
适用范围:除String以外的所有复合数据类型,包括数组.类和接口
测试:
下面是测试:
public static void main(String[] args) {
int a = 0;
int b [] = {1,2,3};
String c = "str";
System.out.println("=====参数传递前====");
System.out.println("int a = " + a);
System.out.println("int b[] = " + b[0]);
System.out.println("String c = " + c);
//方法调用,参数传递
change(a, b, c);
System.out.println("=====参数传递后====");
System.out.println("int a = " + a);
System.out.println("int b[] = " + b[0]);
System.out.println("String c = " + c);
}
public static void change(int i, int [] j, String k){
i = i + 9;
j[0] = j[0] + 9;
k = "String";
}
结果: