1、String、StringBuffer和StringBuffer的区别
String:
被final修饰、不可变类。拿 String str = "123";str=str+"456";举例
每次拼接都会在堆内存创建新的String对象。栈内存的地址执行新的对象。
适用于操作少量数据。
StringBuffer:
字符串可变、线程安全(方法被synchronized修饰)、适用于多线程字符串缓冲区操作大量数据。
可通过toString()方法转换为String类型。
StringBuider:
字符串可变、线程不安全、适用于单线程字符串缓冲区操作大量数据。
可通过toString()方法转换为String类型。

2、说一下封装、继承、多态
封装:
将类的数据和方法进行封装,对外提供接口进行访问。简单来说,封装就是隐藏一切可以隐藏的东西,对外可以提供简单的接口。
继承:
从已有父类继承信息创建新类的过程。提供信息的类叫做父类,得到继承信息的类叫做子类。
子类不仅可以具备父类所有属性,还可以新增自己的属性和方法。为程序提供可变因素。
多态:
不同子类对象对同一消息做出的不同响应。简单说就是不同子类对象调用相同方法却做了不同事情。
编译时多态:
方法重载,编译时多态性。
运行时多态:
方法重写,运行时多态性。
实现运行时多态的两个条件:方法重写,对象造型(父类引用指向子类对象,父类引用执行子类对象,调用同样的方法却表现不同的行为)。

3、说一下HashMap、LinkedHashMap和TreeMap的区别
相同点:
都实现了Map接口。Map及其实现类用来存键值对。不允许key重复,但允许value重复。
HashMap:
根据key的hashCode值存放数据,访问速度快,可允许一个key为null,多个value为null。
线程不安全。
LinkedHashMap:
HashMap的子类,内部维持了一个双向链表,内部实现是插入排序:输入顺序和输出顺序相同。
线程不安全。
TreeMap:
实现了NavigableMap接口和SortedMap 接口。
底层通过红黑二叉树,采用中序遍历实现排序功能。
treeMap 和HashMap 都继承自AbstractMap。
实现 NavigableMap 接口让 TreeMap 有了对集合内元素的搜索的能力。
实现SortMap接口让 TreeMap 有了对集合中的元素根据键排序的能力。默认是按 key 的升序排序