过完年回来,估计一大票的人又急着要换工作了。整理一下面试中经常问到的问题,希望对看到该贴的人有点用处。
HashMap如何实现时间复杂度为1的
HashMap的存储结构式数组,这个数组的每个节点上存放的都是一个链表。HashMap通过hash函数,indexFor函数和key的hashcode计算出该key应该存放在数组的哪个小标,在把 key,value存入该下标的链表中。在遍历时先通过计算下标找到链表(避免hash冲突),在顺序遍历链表。这样在最好的情况下的时间复杂度是O(1),最坏的情况下的时间复杂度是O(n)。HashMap在每put一个keyvalue时,增加size,当size超过threshold时,resize数组,增加数组容量为原来的两倍。resize时会将已有的key value全部拿出来重新计算下标位置。
ConcurrentHashMap锁是什么原理来提高并发性能
采用分段锁机制来实现。其内部使用段segment来标示hash表的不同部分,每个段其实就是一个小的hash表,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。需顺序释放所有段的锁。
ClassLoader的机制
排序算法的时间复杂度
AC算法的原理及时间复杂度
TreeMap HashMap LinkedHashMap区别
TreeMap采用红黑排序二叉树的数据结构,所有元素保持固定的顺序。HashMap通过hashcode选取存储位置,其元素的顺序是不固定的。lindedHashMap特点是put进去的对象位置未发生变法,遍历linkedHashMap时先得到的记录肯定是先插入的。
对象重写equal,为何必需重写hashcode,tostring
不一定要重写,有自己的需要才重写。
为什么重写先弄明白它们的用途,equals是为了比较是否相等。
比如你有两个User,现在某个软件的要求是只要它们id属性相同就是相等的,那就可以重写eqauls,只对id进行对比。toString是为了让你更容易看懂一个对象,当对象在控制台打印出来时你想看到一堆无意义的代码吗?那就是调用默认的toString的结果。你可以重写自己想要的输出,看到对象的每个属性。
hashCode是hash集合中用来对比是否相等的根据,是一个根据对象内容算出来的数值,对比起来比equals快得多。更具体的解释你自己百度搜吧,很多东西要深入认识也不是几句话就能说明白的。
Spring事务的实现及原理
Springmvc 和 struts的区别
servlet和jsp的区别
写单元测试的注意事项
多线程sleep和wait有什么区别 多线程实现方式 线程的内存管理
js闭包 css的影响域级别
如何实现深度拷贝
继承有什么场合使用,什么场合不适用
hibernate的优缺点
算法题:一个数组里面有n个数字,然后给你一个数值x,怎么样最快找到所有相加之和等于x的数组里的数的组合,这个n可能很大
新浪微博如何实现高并发的粉丝关注数