2016年3月7日,接到第一个面试电话,现把题目整理如下:
【1】JAVA创建对象的方式:
答案参考http://blog.csdn.net/mhmyqn/article/details/7943411
public class Customer implements Cloneable{
public String name;
public int age;
public Customer(){
System.out.println("call first constructor");
}
public Customer(String name,int age){
this.name=name;
this.age=age;
System.out.println("call second constructor");
}
public Object clone()throws CloneNotSupportedException{
return super.clone();
}
}
1.用new语句创建对象,这是最常用的创建对象的方式;
Customer c1 = new Customer("Tom",20);
System.out.println(c1.name+":"+c1.age);
2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法;
Class<?> c2 = null;
try {
c2 = Class.forName("Customer");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Customer cus = null;
try {
cus = (Customer)c2.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cus.age = 19;
cus.name= "Jack";
System.out.println(cus.name+":"+cus.age);
3.调用对象的clone()方法;
Customer c3 = null;
try {
c3 = (Customer)c1.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(c3.name+":"+c3.age);
4.运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法。
程序略。
运行结果:
call second constructor使用反射创建对象,只会调用Customer类的默认构造方法;使用clone()创建对象不会调用构造方法。
Tom:20
call first constructor
Jack:19
Tom:20
【2】JAVA的反射机制
主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
JAVA反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
JAVA反射机制的作用:1、反编译,.class->.java;2、创建对象;3、访问java对象的属性和方法
【3】栈和队列的区别,并各列一个应用
这里说的栈和队列是两种线性数据结构,可以理解成集合框架里的java.util.Stack和java.util.Queue。
队列是先进先出,栈是先进后出。
栈的应用:数制转换,比如10进制转2进制,除以2以后依次压入栈,然后弹出;
队列的应用:模拟银行业务、售票,研究开多少个业务窗口最合适,详见http://www.cnblogs.com/shenliang123/archive/2013/02/16/2913552.html
【4】JVM
【5】对于大量数据,快速排序方法初始中间值的确定
选择数组首末n[0]、n[length/2]、n[length]三个数,选取三个值的中位数作为初始中间值。若有大量数据则先分块,每块按前面的处理,然后再求中位数。
【6】集合框架的实现
【7】多线程,进程和线程的区别
一个程序至少有一个进程,一个进程至少有一个线程;
进程在执行过程中拥有独立的内存单元,而多个线程共享内存,线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉;
线程与同属一个进程的其他的线程共享进程所拥有的全部资源;
线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
详见http://blog.csdn.net/yaosiming2011/article/details/44280797
【8】算法题:
数字数组中含有数字组合315的个数。
例如:3115中有两个315;31115中有两个315;135中有0个315
HR给的提示是先找到1,然后用最快的方法找到3和5