面试题整理【1】JAVA基础知识

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
Tom:20
call first constructor
Jack:19
Tom:20
       使用反射创建对象,只会调用Customer类的默认构造方法;使用clone()创建对象不会调用构造方法。

【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


发布了43 篇原创文章 · 获赞 50 · 访问量 14万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章