1、HashMap和HashTable区别? HashMap线程不安全,效率高。HashTable线程安全,效率低。 2、InnoDB与MyISAM的区别? 1、InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务; 2、InnoDB支持外键,而MyISAM不支持。 3、jdk1.7到jdk1.8Map发生了什么变化(底层)? 1.8 之后 hashMap 的数据结构发生了变化,从之前的单纯的数组+链表结构变成数组 + 链表 + 红黑树。也就是说在 JVM 存储 hashMap 的 K-V 时仅仅通过 key 来决定每一个 entry 的存 储槽位(Node[]中的 index)。并且 Value 以链表的形式挂在到对应槽位上(1.8 以后如果 value长度大于 8 则转为红黑树)。 4、HashMap的扩容原理? 初始化容量为16,达到阈值进行扩容。阈值 = 最大容量 * 负载因子(0.75),扩容每次2倍,总是2的n次方。 扩容机制:使用一个容量更大的数组替代已有的容量小的数组,transfer()方法将原有的Entry数组的元素拷贝到新的Entry数组里。 5、线程创建方式? ① 继承Thread类,作为线程对象存在(继承Thread对象) ② 实现runnable接口,作为线程任务存在 ③ 创建带返回值的线程 ④ 线程池创建线程 6、如何停止一个正在运行的线程? ① 使用退出标志,使线程正常退出。 ② 使用stop方法强行终止 ③ 使用interrupt方法中断线程。