面试题整理【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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值