是否可以继承String类?
答:String 类是final类,不可以被继承。
String、StringBuffer 和 StringBuilder 的区别是什么?
-
String是字符串常量,而StringBuffer和StringBuilder是字符串变量。由String创建的字符内容是不可改变的,而由StringBuffer和StringBuidler创建的字符内容是可以改变的。
-
StringBuffer是线程安全的,而StringBuilder是非线程安全的。StringBuilder是从JDK 5开始,为StringBuffer类补充的一个单线程的等价类。我们在使用时应优先考虑使用StringBuilder,因为它支持StringBuffer的所有操作,但是因为它不执行同步,不会有线程安全带来额外的系统消耗,所以速度更快。
请描述Spring MVC的工作流程?描述一下 DispatcherServlet 的工作流程?
3. 用户发送请求至前端控制器DispatcherServlet;
4. DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
5. 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
6. DispatcherServlet 调用 HandlerAdapter处理器适配器;
7. HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
8. Handler执行完成返回ModelAndView;
9. HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
10. DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
11. ViewResolver解析后返回具体View;
12. DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
13. DispatcherServlet响应用户。
ArrayList和LinkedList的区别
- ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表的数据结构。
- 对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。
- 对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
HashMap和Hashtable的区别:
-
HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。
-
HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行)。
-
HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。
-
另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。
由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。
HashMap不能保证随着时间的推移Map中的元素次序是不变的。