是否可以继承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中的元素次序是不变的。
