第一题
数组array 与集合ArrayList有什么区别?他们的使用情景是怎么样的?
答:
Array可以包含基本类型和对象类型;
ArrayList只能包含对象类型;
Array大小是固定的;而ArrayList的大小是动态变化的;
ArrayList提供了更多的方法和特性,比如addAll(),removeAll(),iterator()等等。
对于基本类型数据,集合使用自动装箱来减少编码工作量;
但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。
ArrayList和LinkedList的对比
1、ArrayList
非线程安全
基于对象数组
get(int index)不需要遍历数组,速度快;
iterator()方法中调用了get(int index),所以速度也快
set(int index, E e)不需要遍历数组,速度快
add方法需要考虑扩容与数组复制问题,速度慢
remove(Object o)需要遍历数组,并复制数组元素,速度慢
remove(int index)不需要遍历数组,需要复制数组元素,但不常用
contain(E)需要遍历数组
2、LinkedList
非线程安全
基于环形双向链表
get(int index)需要遍历链表,速度慢;
iterator()方法中调用了get(int index),所以速度也慢
set(int index, E e)方法中调用了get(int index),所以速度也慢
add方法不需要考虑扩容与数组复制问题,只需创建新对象,再将新对象的前后节点的指针指向重新分配一下就好,速度快
remove(Object o)需要遍历链表,但不需要复制元素,只需将所要删除的对象的前后节点的指针指向重新分配一下以及将所要删除的对象的三个属性置空即可,速度快
remove(int index)需要遍历链表,但不需要复制元素,只需将所要删除的对象的前后节点的指针指向重新分配一下以及将所要删除的对象的三个属性置空即可,但不常用
contain(E)需要遍历链表
第二题
&和&&的区别
答:
&是用来处理00101这样的2进制字符的位运算的,而&&是处理true和false这样的布尔逻辑运算。
&需要计算两边表达式的至,然后计算整个表达式的值。
&&布尔逻辑判断符,第一个表达式的值为false,那么整个逻辑表达式的值就为false,第二个表达式不计算。
第三题
SpringMVC运行原理
答:
- 用户发送请求至前端控制器DispatcherServlet。
- DispatcherServlet收到请求调用HandlerMapping处理器映射器。
- 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
- DispatcherServlet调用HandlerAdapter处理器适配器。
- HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
- Controller执行完成返回Model And View。
- HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
- DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
- ViewReslover解析后返回具体View。
- DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
- DispatcherServlet响应用户。
第四题
Java中报错,有哪些常见的错误?
- ArithmeticException(算术异常)
- ClassCastException (类转换异常)
- IllegalArgumentException (非法参数异常)
- IndexOutOfBoundsException (下标越界异常)
- NullPointerException (空指针异常)
- SecurityException (安全异常)
第五题
try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行, 什么时候被执行,在return前还是后?
答:
1. package TestC;
2. public class Test1 {
3. public static void main(String[] args) {
4. System.out.println("结果" + Test1.test());
5. }
6. private static int test() {
7. // TODO Auto-generated method stub
8. int i =1;
9. try {
10. System.out.println("try里面的i : " + i);
11. return i;
12. }finally {
13. System.out.println("进入finally...");
14. ++i;
15. System.out.println("fianlly里面的i : " + i);
16. }
17. }
18. }
执行结果:
try里面的i : 1
进入finally…
fianlly里面的i : 2
结果1