牛骨文教育服务平台(让学习变的简单)

1. ArrayList 和 LinkedList 的使用如何选择?

很多人回答二者不同的时候会认为ArrayList不像链表那样可以灵活的增加元素或者删除元素,但二者都提供了下面的方法可以灵活增加元素:

public void add(int index, E element)

另外LinkedList还提供了offer方法可以在前后增加元素

public boolean offerFirst(E e)
public boolean offerLast(E e)

如果要是从尾部删除元素,那么LinkedList将是不错的选择,因为下面的方法是它独有的。

public E removeLast()

//Retrieves and removes the last element of this list, or returns null if this list is empty. 
public E pollLast()

2. 为什么重写类的equals方法,还要同时重写hashcode方法?

保证两个等价对象得到相同的hashcode

3. SerialVersionUID的作用

在运行时判断类的SerialVersionUID验证版本的一致性

4. java的 check 和 uncheck 异常的区别是什么?

check exception是exception的子类,这类异常必须通过try-catch进行处理,否则无法编译通过,而uncheck exception是runtime exception的子类,这类异常可以不捕获,直接向外抛出,让外界处理。

5. 简要介绍jvm的垃圾回收机制

1)标记清除:遍历对象图标记可到达的对象,然后扫描堆栈,发现未标记的对象并释放内存;

2)分代回收:将内存区域分为新生代和旧生代,使用复制算法扫描出存活对象并复制到新的未使用的空间中,指针保存在最后一个分配对象所处的位置,当新生代满了之后,就全部转移到旧生代,清空新生代区域,继续装载,直至最后内存溢出。

6. jvm内存模型

1)方法区:虚拟机加载的类信息、常量、静态变量,所有线程共享该内存区域

2)虚拟机栈:方法执行时都会创建一个栈帧,用于存储局部变量表包括方法参数、操作栈和方法出口等信息

3)本地方法栈:为Native方法服务

4)堆:被所有线程所共享,存储了所有new的对象

5)程序计数器:选取下一条需要执行的字节码指令,分支、循环、异常处理都需要它完成

7. 如何理解面向对象的开闭原则

一个软件实体如类、模块和函数应该对扩展开发,对修改关闭。

8. 简单介绍JS的事件冒泡

事件冒泡指的是子级元素先触发,父级元素后触发,事件捕获与之相反。W3C标准同时支持两种方式,任何事件发生,从顶层元素开始事件捕获直达事件发生的源元素,然后从事件源向上冒泡。可以通过addEventListener()对元素进行监听,最后一个参数为true是事件捕获。

9. 介绍利用log4j配置日志

10. 如何基于spring配置数据库事务

11. 介绍使用的数据库连接池配置

12. 抽象类可以在spring中定义成一个bean吗