Java开发工程师面试总结
1. Java基础
1.1 接口与抽象类的区别
- 接口里必须是抽象方法,抽象类可以没有抽象方法;
- 接口可以继承多个父接口,抽象类只能被单继承;
- 接口里的变量必须被static,final修饰并初始化,抽象类里可以普通的成员变量;
1.2 重写与重载的区别
- 重载是表示一个类中可以有多个方法名相同,参数不同(参数个数,参数类型,参数顺序不同);
- 重写是子类对父类方法的一种重写, 访问权限不能是private的;
1.3 集合
Map和collection是所有集合的父接口;
- Collection-set/List
- List-Vector,ArrayList,LinkedList 有序的,可以重复
- set-HashSet,TreeSet,LinkedHashSet 无序的,不可以重复
- Map
- HashMap线程不同步,线程不安全,允许null作为key;
- HashTable使用了syschonized,线程安全,每次需要锁住整个结构,不允许null作为key;
- ConcurrentHashMap锁的粒度很细,分为16个桶,只锁当前用到的桶;
HashMap的底层原理:Java8之前是数组+链表,Java8之后是数组+链表+红黑树
ConcurrentHashMap的实现原理:hashEntry用来封装表的键值对和segment可重入锁,每个segment保护一个HashEntry数组的元素;