Java面试问答

HashMap和HashTable的异同

相同:底层都是数组+链表实现的,都是键值对映射,key-value

区别:

  • 产生时间不同:HashTable在java发布之初就存在,HashMap产生于JDK1.2,现在HashTable已基本废弃不用
  • 继承的父类不同:HashTable继承自Dictionary类(已废弃),HashMap继承自AbstractMap类
  • 提供的方法不同:HashTable比HashMap多提供了elments() 和contains() 两个方法
  • null值问题:HashTable既不支持Null key也不支持Null value;HashMap中,null可以作为键值,但这样的键只有一个;也可以作为value值
  • 线程安全性不同:HashTable是线程安全的,它的每个方法中都加入了Synchronize方法。在多线程并发的环境下,可以直接使用HashTable,不需要自己为它的方法实现同步。HashMap不是线程安全的,在多线程并发的环境下,可能会产生死锁等问题。(ConcurrentHashMap是线程安全的,且效率比HashTable要高,因为ConcurrentHashMap使用了分段锁,并不对整个数据进行锁定。)
  • 效率不同:HashMap的效率会比HashTable要好很多。
  • 遍历方式不同:Hashtable、HashMap都使用了Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。
  • 初始容量不同:HashTable初始为11,HashMap初始为16(创建时,如果给定了容量初始值,那么HashTable会直接使用给定的大小,而HashMap会将其扩充为2的幂次方大小)
  • 扩容方式不同:HashTable是2n+1,HashMap是2n(n为上一次的容量),也就是HashMap大小一定是2的幂
  • 计算哈希值的方法不同:HashTable直接使用对象的hashCode。hashCode是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值。HashMap为了提高计算效率,将哈希表的大小固定为了2的幂,这样在取模预算时,不需要做除法,只需要做位运算。

ArrayList和LinkedList的异同

相同:都是实现了List接口的容器类,用于存储一系列的对象引用,都可以对元素的增删改查进行操作。

区别:

  • ArrayList是基于动态数组的数据结构,LinkedList基于链表的数据结构。
  • 对于随机访问get和set,ArrayList效率优于LinkedList,因为LinkedList要移动指针。
  • 对于新增和删除操作add和remove,LinedList一般优于ArrayList,因为ArrayList要移动数据。
  • 随机查找指定节点,ArrayList速度要快于LinkedList。

SpringMVC的生存周期

  1. 发起请求到前端控制器(DispatcherServlet)
  2. 前端控制器请求HandlerMapping(处理器映射器)查找 Handler,可以根据xml配置、注解进行查找
  3. 处理器映射器HandlerMapping向前端控制器返回Handler
  4. 前端控制器调用处理器适配器去执行Handler
  5. 处理器适配器去执行Handler
  6. Handler执行完成给适配器返回ModelAndView
  7. 处理器适配器向前端控制器返回ModelAndView(ModelAndView是springMVC框架的一个底层对象,包括 Model和view)
  8. 前端控制器请求视图解析器去进行视图解析
  9. 视图解析器向前端控制器返回View
  10. 前端控制器进行视图渲染, 视图渲染将模型数据(在ModelAndView对象中)填充到request域
  11. 前端控制器向用户响应结果
     

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值