重载和重写的区别(了解)

重载:发生在同一个类中,方法名必须相同,参数类型不同,个数不同,顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。
重写:发生在父子类中,方法名,参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private 则子类就不能重写该方法。

String和StringBuffer,StringBuilder 的区别是什么?String 为什么是不可变的?(必会)

对于三者使用的总结:
1. 操作少量的数据 => 使用String
2. 单线程操作字符串缓冲区下操作大量数据 => 使用StringBuilder
3. 多线程操作字符串缓冲区下操作大量数据 => 使用StringBuffer

自动装箱与拆箱(了解)

装箱:将基本类型用它们对应的引用类型包装起来;
拆箱:将包装类型转换为基本数据类型;

== 与 equals (必会)

== : 它的作用是判断两个对象的地址是不是相等。即: 判断两个对象是不是同一个对象。(基本数据类型==比较的是值,引用数据类型==比较的是内存地址)。
equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况,如下:
情况1:类没有覆盖equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
情况2:类覆盖了equals() 方法。一般,我们都覆盖 equals() 方法来两个对象的内容相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。

Java 中的异常处理(了解)

在Java 中,所有的异常都有一个共同的祖先java.lang包中的Throwable类
Exception(异常) Error(错误),二者都是Java 异常处理的重要子类,各自都包含大量子类。

接口和抽象类的区别是什么(必会)

  1. 接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),抽象类可以有非抽象的方法。
    2. 接口中的实例变量默认是 final 类型的,而抽象类中则不一定。
    3. 一个类可以实现多个接口,但最多只能实现一个抽象类。
    4. 一个类实现接口的话要实现接口的所有方法,而抽象类不一定。
    5. 接口不能用 new 实例化,但可以声明,但是必须引用一个实现该接口的对象 从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。

常见的数据结构有哪些?(了解)

l 数组:
长度固定可以用下标索引并且所有的元素的类型都是一致的
l 列表:
一般是通过一个固定长度大小的数组实现的,但是会在需要的时候自动化调整长度大小,列表可以包含重复的元素
l 集合:
集合和列表很相似,但是不能放重复的元素。
l 堆栈:
堆栈只允许对最后插入元素进行操作(先进后出)
l 队列:
第一个插入的元素也是第一个被删除的元素先进先出
l 链表:
链表是一种由多个节点组成的数据结构,并且每个节点包含有数据以及指向下一个节点的引用,在双向链表里,还会有一个指向前一个节点的引用。例如,可以用单向链表和双向链表来实现堆栈和队列,因为链表的两端都是可以进行插入和删除的动作的。当然,也会有在链表的中间频繁插入和删除节点的场景。Apache的类库里提供了一个TreeList的实现,它是链表的一个很好的替代,因为它只多占用了一点内存,但是性能比链表好很多。也就是说,从这点来看链表其实不是一个很好的选择。

Java集合体系有什么?(必会)
集合类存放于Java.util 包中,主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)。
1. Collection:Collection 是集合 List、Set、Queue 的最基本的接口。
2. Iterator:迭代器,可以通过迭代器遍历集合中的数据。
3. Map:是映射表的基础接口。

Collection (集合的最大接口)继承关系
l List 可以存放重复的内容
l Set 不能存放重复的内容,所以的重复内容靠hashCode()和equals()两个方法区分
l Queue 队列接口
l SortedSet可以对集合中的数据进行排序

List
凡是可以操作角标的方法都是该体系特有的方法:
l ArrayList 线程不安全,查询速度快
l Vector 线程安全,但速度慢,已被ArrayList替代
l LinkedList 链表结果,增删速度快
l TreeList 树型结构,保证增删复杂度都是O(log n),增删性能远高于ArrayList和 LinkedList,但是稍微占用内存

Map
Correction、Set、List接口都属于单值的操作,而Map中的每个元素都使用key——>value的形式存储在集合中。
Map集合:该集合存储键值对, 是key:value一对一对往里存, 而且要保证键的唯一性。

List 的三个子类的特点(必会)

ArrayList 底层结构是数组,底层查询快,增删慢
LinkedList 底层结构是链表型的,增删快,查询慢
Voctor 底层结构是数组 线程安全的,增删慢,查询慢

HashMap 和 HashTable 有什么区别?(必会)

HashMap 是线程不安全的,是 Map 的一个实现类,是将键映射到值得对象,不允许键值重复,允许空键和空值;由于非线程安全,HashMap 的效率要较 HashTable 的效率高一些.
HashTable 是线程安全的一个集合,不允许 null 值作为一个 key 值或者 Value 值;
HashTable 是 sychronize,多个线程访问时不需要自己为它的方法实现同步,而 HashMap 在被多个线程访问的时候需要自己为它的方法实现同步;

HashMap,HashTable,ConcurrentHashMap之间的区别,及性能对比(必会)

性能:ConcurrentHashMap(线程安全) > HashMap > HashTable(线程安全)
区别对比一(HashMap和HashTable区别):
1、HashMap是非线程安全的,HashTable是线程安全的。
2、HashMap的键和值都允许有null值存在,而HashTable则不行。
3、因为线程安全的问题,HashMap效率比HashTable的要高。
4、Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。一般现在不建议用HashTable, ①是HashTable是遗留类,内部实现很多没优化和冗余。②即使在多线程环境下,现在也有同步的ConcurrentHashMap替代,没有必要因为是多线程而用HashTable。
区别对比二(HashTable和ConcurrentHashMap区别):
HashTable使用的是Synchronized关键字修饰,ConcurrentHashMap是使用了锁分段技术来保证线程安全的。
Hashtable中采用的锁机制是一次锁住整个hash表,从而在同一时刻只能由一个线程对其进行操作;而ConcurrentHashMap中则是一次锁住一个桶。
ConcurrentHashMap默认将hash表分为16个桶,诸如get、put、remove等常用操作只锁住当前需要用到的桶。这样,原来只能一个线程进入,现在却能同时有16个写线程执行,并发性能的提升是显而易见的。

什么是线程?线程和进程的区别?(必会)

线程:是进程的一个实体,是cpu 调度和分派的基本单位,是比进程更小的可以独立运行的基本单位。
进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位。
特点:线程的划分尺度小于进程,这使多线程程序拥有高并发性,进程在运行时各自内存单元相互独立,线程之间内存共享,这使多线程编程可以拥有更好的性能和用户体验。
注意:多线程编程对于其它程序是不友好的,占据大量cpu 资源。