Java方向如何准备BAT技术面试答案(汇总版)
ArrayList和Vector都实现了List接口,都是通过数组实现的。Vector是线程安全的,而ArrayList是非线程安全的。List第一次创建的时候,会有一个初始大小,随着不断向List中增加元素,当List 认为容量不够的时候就会进行扩容。Vector缺省情况下自动增长原来一倍的数组长度,ArrayList增长原来的50%。 17.ArrayList和LinkedList区别及使用场景#区别ArrayList底层是用数组实现的,可以认为ArrayList是一个可改变大小的数组。随着越来越多的元素被添加到ArrayList中,其规模是动态增加的。LinkedList底层是通过双向链表实现的, LinkedList和ArrayList相比,增删的速度较快。但是查询和修改值的速度较慢。同时,LinkedList还实现了Queue接口,所以他还提供了offer(),peek(),poll()等方法。使用场景LinkedList更适合从中间插入或者删除(链表的特性)。ArrayList更适合检索和在末尾插入或删除(数组的特性)。 18.Collection和Collections的区别#java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。 19.Concurrenthashmap实现原理#具体原理参考文章: 20.Error、Exception区别#Error类和Exception类的父类都是throwable类,他们的区别是:Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。 21.UncheckedException和Checked Exception,各列举几个#Unchecked Exception:a. 指的是程序的瑕疵或逻辑错误,并且在运行时无法恢复。b. 包括Error与RuntimeException及其子类,如:OutOfMemoryError,UndeclaredThrowableException,IllegalArgumentException,IllegalMonitorStateException,NullPointerException,IllegalStateException,IndexOutOfBoundsException等。c. 语法上不需要声明抛出异常。 Checked Exception:a. 代表程序不能直接控制的无效外界情况(如用户输入,数据库问题,网络异常,文件丢失等)b. 除了Error和RuntimeException及其子类之外,如:ClassNotFoundException,NamingException,ServletException,SQLException,IOException等。c. 需要try catch处理或throws声明抛出异常。 22.Java中如何实现代理机制(JDK、CGLIB)#JDK动态代理:代理类和目标类实现了共同的接口,用到InvocationHandler接口。CGLIB动态代理:代理类是目标类的子类,用到MethodInterceptor接口。 23.多线程的实现方式#继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。 24.线程的状态转换# |