一、二面(项目部分)
1)讲一下Spring AOP和IOC的底层实现
IoC(Inversion of Control)将程序代码内部对象控制交由外部容器(控制权反转),降低了组件之间的耦合,降低了业务对象之间替换的复杂性,使之能够灵活的管理对象。
2)说一下hashcode的作用?HashMap的底层实现?HashMap和HashTable的区别
1.hashcode的作用@b@JVM每new一个Object,会把Object存Hash表,下次做Object的比较或者取这个对象的时候(读取过程),再根据对象的HashCode再从Hash表中取这个对象,提高取对象的效率(若HashCode相同再去调用equal)。@b@2.HashMap的底层实现@b@由键值对(key-value)Entity内部类单元组成,通过对Key的哈希值对数组长度取模相当放到一个链表中,形成数组+链表结构存储方式,提供存储和查找效率。@b@3.区别@b@HashMap是非synchronized的,并可以接受null,Hashtable是synchronized,意味着Hashtable是线程安全(单线程运行,比HashMap慢),HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类
3)说一下concurrentHashMap和hashTable在性能上的区别?以及这种差异形成的原因
ConcurrentHashMap是使用了锁分段技术来保证线程安全,将hash表分为16个桶,诸如get、put、remove等常用操作只锁住当前需要用到的桶。这样,原来只能一个线程进入,现在却能同时有16个写线程执行,并发性能的提升是显而易见的。@b@@b@hashTable通过synchronized只能有一个线程进行读写操作
4)讲一下堆以及堆排序
堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。@b@@b@堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。
5)说一下B+tree和二叉搜索树的区别?说一下二叉搜索树和AVL树、红黑树之间的差别
B+Tree相对于B-Tree(二叉搜索树)有几点不同:@b@ 非叶子节点只存储键值信息。@b@ 所有叶子节点之间都有一个链指针。@b@ 数据记录都存放在叶子节点中。@b@差别@b@AVL树(平衡二叉查找树),解决单支的情况。平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。@b@红黑树的特性:@b@(1)每个节点或者是黑色,或者是红色。@b@(2)根节点是黑色。@b@(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]@b@(4)如果一个节点是红色的,则它的子节点必须是黑色的。@b@(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。(接近平衡二叉树)@b@二叉排序树 (BST) 即二叉搜索树@b@ (1)若它的左子树不空,则左子树上所有结点的值均小于它的根结构的值@b@ (2)若它的右子树不空,则右子树上所有结点的值均大于它的根结构的值@b@ (3) 它的左子树和右子树都是二叉排序树
6)给你两个文件(字符串形式的)如何找出他们之间的不同地方?
利用递归算法,比较两个字符串相同部分,将相同部分置空格,然后比较改变前后字符串取非空格部分高亮显示。
7)知道倒排索引嘛
倒排索引源于实际应用中需要根据属性的值来查找记录,lucene是基于倒排索引实现的,例如读者想看哪一个主题相关的章节,直接根据目录即可找到相关的页面。不必再从书的第一页到最后一页,一页一页的查找。