美团面试


HashMap是线程安全的吗?哪个数据结构是线程安全的?除了HashTable还有什么是线程安全的?ConCurrentHashMap中的Segment是不是越多越好?为什么?

Java提供的集合类TreeMap本身就是一个红黑树的实现。红黑树的操作有着良好的最坏情况运行时间,任何不平衡都会在三次旋转之内解决,为我们提供了一个比较“便宜”的解决方案。
红黑树与伸展树、AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉树查找树的平衡,从而获得较高的检索性能。区别在于:伸展树、AVL树所追求的是全局均衡,插入、删除操作需调整整棵树,颇为费时;而红黑树使用颜色来标识节点高度,所追求的是局部平衡而不是非常严格的平衡。插入、删除数据时最多旋转3次,尤其是对随机无序数据,由于平衡要求没那么严格,旋转次数较少,因而提升了增删操作的效率。

【性质1.4-1】 节点是红色或黑色。
【性质1.4-2】 根是黑色。
【性质1.4-3】 所有叶子都是黑色(叶子是NIL节点)。
【性质1.4-4】 如果一个节点是红的,则它的两个儿子都是黑的。
【性质1.4-5】 从任一节点到其叶子的所有简单路径都包含相同数目的黑色节点(如图1.4-13)。

散列表要解决的一个问题就是散列值的冲突问题,通常是两种方法:链表法和开放地址法。链表法就是将相同hash值的对象组织成一个链表放在hash值对应的槽位;开放地址法是通过一个探测算法,当某个槽位已经被占据的情况下继续查找下一个可以使用的槽位。

  1. hash索引查找数据基本上能一次定位数据,当然有大量碰撞的话性能也会下降。而btree索引就得在节点上挨着查找了,很明显在数据精确查找方面hash索引的效率是要高于btree的;
  2. 那么不精确查找呢,也很明显,因为hash算法是基于等值计算的,所以对于“like”等范围查找hash索引无效,不支持;
  3. 对于btree支持的联合索引的最优前缀,hash也是无法支持的,联合索引中的字段要么全用要么全不用。提起最优前缀居然都泛起迷糊了,看来有时候放空得太厉害;
  4. hash不支持索引排序,索引值和计算出来的hash值大小并不一定一致。

mybatis的主要思想是sql Mapping,而hibernate是OR Mapping,mybatis应用到项目中会比较直观一点,能直接看到sql,而hibernate是通过操作 对象操作数据,可以很灵活的运用于不同的数据库之间。个人感觉mybatis用着更灵活

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值