1. ArrayList , Vector , LinkedList 的对比。
ArrayList LinkedListVector数据结构动态数组双向链表动态数组线程安全性线程不安全,只适用于单线程 ,需要提供外部同步
List list = Collections.synchronizedList(new ArrayList());线程不安全,只适用于单线程 ,需要提供外部同步 List list = Collections.synchronizedList(new ArrayList());线程安全,每个方法都实现了synchronized关键字,不需要提供外部同步,适用于多线程环境适用场合适用于get、set、按顺序add操作适用于add、delete操作 遍历方法
索引值遍历最快
for(int i=0;i<list.size();i++){
list.get(i);
}
迭代器遍历最快
Iterator iter=list.Iterator();
while(iter.hasNext()){
iter.next()
}
2.什么是单例模式(Singleton) ? 请在下面写出一个单例模式类,并支持多线程调用。
创建某类对象时,无论创建多少次该类对象只有一份在内存中,这就是单例模式。
支持多线程调用,考虑线程安全,只需要加锁即可。
3.请描述一下JVM加载class文件的原理机制?
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。
4.请谈谈对SQL注入的理解,请给出你知道的防止SQL注入的方法。
解决办法:a. 利用Javascript,在客户端进行校验 b.程序判断 c.使用PreparedStatement连接数据库。(参数化) d.利用框架技术
5.请谈谈对Hibernate的理解,并简要叙述Hibernate的一级缓存和二级缓存。
一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个session(一定要同一个session)又做了同一个操作,hibernate直接从一级缓存中拿,而不会再去连数据库取数据
二级缓存就是SessionFactory级别的缓存,顾名思义,就是查询的时候会把查询结果缓存到二级缓存中,如果同一个sessionFactory创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿结果,而不会再去连接数据库取数据