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;
}
}