Java常见面试题

1.String为什么是final的?

答:为了效率和安全性,由于String的高度使用率,如果允许继承的话,可能会降低程序的性能,还有一个解析是防止覆盖length()方法

2.说说你知道的几个Java集合类

 答:list、set、map、hashtable

3.ArrayList和linkList的区别

答:ArrayList是实现了基于动态数组的数据结构。linkedlist基于链表的数据结构,对于随机访问,ArrayList要优于linkedlist,因为linkedlist要移动指针,从第一个开始,一直找到为止。对于新增或删除linkedlist要优于ArrayList,因为ArrayList要调整所更改位置后面的所有数据的下标而linkedlist只需要修改一下所更改位置前后的索引

4.Java中的队列有哪些,有什么区别?

答:阻塞队列、普通队列,当队列是空的时候,获取元素操作会阻塞,当队列满的时候,添加元素会阻塞。

5.反射中,Class.forName和classloader的区别?

答:它们都可用来对类进行加载,前者除了将类的class文件加载到jvm之外,还会对类进行解析,执行类中的static块,而后者值将class文件加载到jvm中,而不执行static块的加载,只有在newInstance的时候才会执行static块,Class.forName(name,initialize,loader)带参数函数也可控制是否加载static块,并且只有调用了newInstance()方法采用调用构造函数,创建类对象。

6.string和stringbuffer、stringbuilder的区别

答:string创建的是长度内容不可变的字符串常量,因此每次对string类型进行改变的时候其实就是等同于又创建了一个新的string对象。而stringbuffer则不一样,在stingbuffer对象上操作并不会产生新的对象,所以当字符串需要动态构建时,为了节省内存和提高效率,往往会用stringbuffer动态构建。stringbuilder和stringbuffer的区别是,stringbuffer是线程安全的,stringbuilder是线程不安全的。

7.HashMap和HashTable的区别

答:它们都实现了Map接口,HashMap是线程不安全的,且允许key值为null,而HashTable是线程安全的,但禁止key为null,因为线程安全的原因,HasHMap的效率要高于HashTable。

8.equals和==的区别是?

答:equals是对比两个对象的值是否相等,而==是对比两个对象所指向的值是否是同一个,比较值所占的内存是不是同一块。

9.Java的引用类型有哪几种?

答:Java有八大基本数据类型和引用类型,而引用类型分为强引用、软引用、弱引用、虚引用。gc不会回收强引用,即便内存不足也是抛出异常,而软引用当内存不足的时候会回收,弱引用和软引用的区别是:弱引用的生命周期更短,无论内存是否充足,gc一发现就会回收。虚引用,形同虚设,任何时候都可能被回收。

10.抽象类和接口的区别

答:抽象类可以有具体方法,接口不可以有;抽象类可以继承抽象类,而接口不能实现接口,但可以继承接口且可以多继承接口。子类可以不实现父类的全部抽象方法(子类也是抽象类的时候),但实现接口的类必须实现接口的全部方法。值得注意的是:jdk1.8允许接口有具体的实现方法了,我在懵逼中。

11.Java的基础类型和所占字节还有所占内存

答:八大基本数据类型:byte(1字节,8bit),boolean(1字节,8bit),short(2字节,16bit),char(2字节,16bit),int(4字节,32bit),float(4字节,32bit),double(8字节,64bit),long(8字节,64bit)。

12.JSP和servlet的区别

答:jsp本质上就是servlet(但两者的创建方式不一样),因为jvm只能识别Java的类,所以web容器会将JSP的代码编译成jvm能识别的Java类,所以jsp本质上就是servlet的简易方式。jsp更擅长于页面的显示,而servlet则是逻辑控制,应用逻辑在Java文件中,完全从表现成分离出来,还有就是servlet没有内置对象,而jsp有。

13.session和cookie的区别和联系

答:session通过服务器端记录用户信息,为cookie通过客户端记录用户信息。session的运行依赖session_id,而session_id存在cookie中,所以他们既是同一层次的概念也是不同一层次的概念,session 因为 session id 的存在,通常要借助 cookie 实现,但这并非必要,只能说是通用性较好的一种实现方案。

14.复制文件(写代码)

public void copy(String newurl,String oldurl){

try{

FileInputStrem in=new FileInputStream(new File(oldurl));

FileOutputStream out=new FileOutputStream(new File(newurl));

int i;

byte[] b=new byte[1024];

while((i=in.read(b))!=-1){

out.write(b,0,i);

}

}catch(Exception e){

e.printStackTrace();

}finally{

in.close();

out.close();

}

}

15.单例模式

public  class danli{

private danli(){

}

private static danli getdanli=null;

public danli getdanli(){

if(getdanli==null){

getdanli=new danli();

}

return getdanli;

}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值