1:hashmap,hashtable的区别
1.继承不同,HashMap继承自AbstractMap,Hashtable继承自Dictionary
2.HashMap是线程不安全的,Hashtable是线程安全的
3.HashMap键key和值value都可以为null,但是key只能有一个为null,value可以有多个为null,Hashtable键key和值value都不能为null
4.哈希值的使用不同,Hashtable直接使用对象的hashcode值,而HashMap重新计算hash值
5.Hashtable、HashMap都使用了 Iterator进行遍历。而由于历史原因,Hashtable还使用了Enumeration的方式
6.HashMap的初始数组长度是16,扩容方式是2n,Hashtable的初始长度是11,扩容方式是2n+1
2:String,StringBuffer,Stringbuilder的区别
1.String是不可变的,对String的任何改变都会返回一个新的对象
2.StringBuffer是可变的,对StringBuffer中内容的修改都是当前这个对象
3.String创建的字符串是在字符串常量池中的,创建的字符串初始换一次,对字符串的任何改变都会产生一个新的字符串地址
4.StringBuffer是在堆中创建对象,对字符串改变不会产生新的字符串地址
5.StringBuffer是线程安全的,StringBuilder是线程不安全的,不考虑并发问题的情况下使用StringBudiler
3:抽象类和接口的区别
1.抽象类继承自Object类,而接口不是
2.抽象类有构造器,而接口没有
3.抽象类中可以有普通成员变量和常量,而接口中只能有常量,而且修饰符只能是public static final,不写默认
4.抽象类中可以有抽象方法,也可以有普通方法,接口中只能有抽象方法,而且修饰符只能是public abstract,不写默认,jdk1.8以后有static和default方法,jdk1.9以后可以有private方法
5.抽象类中可以有final方法(非抽象),接口中不能有final方法
6.抽象类只能是单继承多实现,接口可以多继承其他接口,但不能实现其他接口,也不能继承其他类
4:final,finally,finalize关键字的用法
1.final修饰类,方法,属性,修饰类不能被继承,修饰方法不能被重写,修饰属性值不能被修改
2.finally是异常处理结构的一部分,表示总是执行
3.finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集的其他资源回收,但JVM不保证此方法总被调用
5:什么是封装、继承、多态
1.封装是把数据和过程包围起来,对数据的访问只能通过已定义的界面
2.继承是子类拥有父类一切非私有的属性方法
3.多态是同一种事物的不同种表现形式
6:jvm为什么能跨平台
java程序编译后生成.class字节码文件,不是能被硬件系统直接执行的代码,不同的硬件平台上安装有不同的java虚拟机JVM,由JVM来把字节码文件翻译成对应平台所能够执行的代码
7:作用域public,private,protected,以及不写时的区别?
1.public所有类都可以进行访问
2.protected只有当前类,同包类,子类可以进行访问
3.default(不写)只有当前类和同包类可以进行访问
4.private只有当前类可以进行访问
8:ArrayList和LinkedList的区别
1.ArrayList底层是数组,查找快,增删慢
2.LinkList底层是双向链表,查找慢,增删快
9:==和equals的区别
1.==比较的是两个变量值和地址是否都相等,如果要比较两个基本数据类型用==
2.equals如果没有重写,和==意义一样,如果重写了按照重写的规则进行比较
3.重写了equals必须重写hashcode方法,否则可能出现同一个对象存储了两次
10:HashMap的底层数据结构,加载因子,初始容量,put过程
1.HashMap底层数据结构是数组+链表+红黑树(jdk1.8以后)
2.加载因子是0.75
3.初始容量是16
4.put过程
(1)首先确认数据存储在HashMap中数组的位置
计算key的hash值,然后用key的hash值与数组长度-1按位与得到在数组中的存储位置