1,ArrayList,Vector与LinkedList的区别?
ArrayList和Vector都是以数组形式存储数据,此数组元素数大于实际存储的数据,以便增加和插入元素。它们都允许通过索引号来查找元素。但是插入元素要涉及数组元素移动等内存操作,所以索引快而插入元素慢。Vector使用synchronized方法(线程安全),通常比ArrayList性能差,
LinkedList使用双向链表进行存储,按序号索引数据需要向前或向后遍历,按时插入数据时只需要记录本项的前后位置即可,所以插入块,索引慢。
2,HashMap和HashTable的区别?
HashMap是HashTable轻量级的实现(非线程安全的),他们都完成了Map接口,HashMap允许空(null)键(key),允许一条记录为空key但是任意数量的条目可以是空的value,由于非线程安全,所以效率比HashTable高。
最大的区别,HashTabel是synchronized的,而HashMap不是,在多个线程访问HashTable的时候,不需要自己为他的方法实现同步,而HashMap必须为之实现同步。
3,sleep()和wait()有什么区别?
sleep()是线程类(Thread)的方法,导致此线程暂停执行并指定时间,把执行机会给其他线程,但是监控状态会一直保持,到时间后会自动恢复。调用sleep()方法不会释放对象锁。
wait()是Object类的方法,调用wait()方法导致本线程放弃对象锁,进入等待此对象的等待锁定值。只有针对此对象发出notify方法或(notifyAll)方法后,本线程才会进入对象锁定池,准备获得对象锁进入运行状态。
4,error和Exception的区别?
error表示系统级的错误和程序不必处理的异常,是JAVA运行环境或者硬件问题。遇着error。不能指望程序处理这种问题。
Exception表示需要捕捉或者需要程序处理的异常,程序必须处理,也就是说如果程序正常运行,则不会发生的情况。
5,abstract class和interface有什么区别?
abstract class为抽象类,声明方法的存在而不会实现的类为抽象类。不能创建abstract类的实例对象。含有抽象方法的类必须是抽象类,而抽象类中的方法不必是抽象方法。
抽象类中定义的抽象方法必须在具体子类中实现,所以不能有抽象构造方法和抽象静态方法。
抽象类的子类为父类中所有抽象方法提供实现,否则子类也为抽象类。
interface(接口)接口中所有的方法都是抽象的,接口中的方法定义默认为public abstract类型,接口中成员变量类型默认为public static final类型。
1,抽象类中可以有构造方法,接口中不能有构造方法
2,抽象类包含非抽象的普通方法,而接口中必须是抽象方法,不能有非抽象的普通方法。
3,抽象类可以包含静态方法,而接口中不能包含静态方法。
4,抽象类中的抽象方法的访问类型可以是public和protect,但接口中的抽象方法必须是public类型的,而且默认为public abstract类型
4,一个类可以实现多个接口,但是只能继承一个抽象类。
6,forward和redirect的区别?
1,forward是服务器发送请求,服务器直接访问目标地址的URL,把那个URL的响应内容读取出来,发送给浏览器,浏览器不知道服务器发送的内容来自哪,所以URL地址栏不变
2,redirect是服务器根据逻辑,发送一个状态码,告诉浏览器去访问哪个地址,一般来说浏览器会根据刚才请求的所有参数去请求,所以session,request参数都可以获取。
7,JSP和Servlet的异同点,他们之间的联系?
JSP是Servlet技术的扩展,本质上是Servlet的简易模式,更强调应用的外部表达。JSP是编译后的“类Servlet”。
不同点:Servlet的应用逻辑在Java中,从表示层HTML中分离开来,而JSP是Java和Html可以组合成一个.jsp文件,
JSP侧重于视图,而Servlet更侧重于业务逻辑。
8,启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,以为这有JVM调用和执行。但这并不意味着线程会立即执行。run()方法,可以产生一个可以退出的标志来停止一个线程。
9,Set里边的元素是不能重复的,用什么方法来区分重复与否呢?是用==还是equals()?
Set里边的元素是不能重复的,使用iterator()方法来区别重复。equals()方法是判断两个Set是否相等。
10,线程同步的方法?
1,wait():使线程处于等待状态,并且释放所持有的对象锁。
2,sleep():使一个正在运行的线程处于睡眠状态,调用此方法要捕捉InterrupuException异常。
3,notify():唤醒一个正在处于等待状态的线程,注意,调用此方法的时候,并不能确切的唤醒某一个处于等待状态的线程,而是由JVM确定唤醒哪个线程,不按优先级。
4,Allnotify():唤醒所有处于等待状态的线程,注意并不是给所有唤醒线程一个对象锁,而是让他们竞争。
11,synchronized?(同步代码块)
Java语言的关键字。用它来修饰一个方法或代码块时,能够保证在同一时刻只能有一个线程执行该代码。
1,当两个并发线程访问同一个对象中的synchronized同步代码块时,一定时间内,只能有一个线程得到执行,当一个线程执行完毕后,另一个线程才能被执行;
2,当一个线程访问一个对象中的synchronized同步代码块时,另一个线程可以可以访问该对象中的非sychronized同步代码块。
12,java中实现多态的机制是什么?
方法重写(overriding)和方法重载(overloading)是java实现多态机制的表现。重写,是父类与子类之间多态性的表现,重载,是一个类中多态性的表现。