1、List、Set、Map是否都继承Collection接口,他们的存取各有什么特点?
- List
按顺序存储,允许随机访存
元素可以重复 - Set
不保证元素的顺序,也就是无法通过索引访问元素
值唯一,通常用于值唯一的场景 - Map
存储键值对,每个键都是唯一的但是允许值重复
不保证元素顺序,也就是无法通过索引访问元素
2、String、StringBuffer和StringBuilder的区别。
- 可变性
String是不可变的,原因如下图。
其中的
private final char[] value;
是属于final修饰引用类型变量的情况,value指向的的对象不能改变但是他的内容是可以改变的,那么String是怎么实现不可变的呢?原因有两点(双final):
- String中的字符串数组被final修饰且为私有private,并且String并没有开放对外的修改value数组的接口。
- String被final修饰不可被继承,防止了破坏String的不可变。
StringBuffer和StringBuilder是可变的,他们两个都继承自AbstractStringBuilder抽象类,
其中也用字符数组保存字符串但没有final和private修饰,最关键的是AbstractStringBuilder还提供了很多修改字符数组的方法,比如append()。
- 线程安全
String中的对象是不可变的,也就可以理解为常量,线程安全。
AbstractStringBuilder是StringBuilder和StringBuffer的公共父类,定义了一下基本操作,StringBuffer对方法添加了同步锁,所以是线程安全的,StringBuilder是线程不安全的。 - 性能
每次对String类型进行改变的时候都会生成一个新的String对象,然后将指针指向新的对象。StringBuilder性能比StringBuffer好但是有线程不安全的风险。 - 总结:
操作少量的数据: 适用 String
单线程操作字符串缓冲区下操作大量数据: 适用 StringBuilder
多线程操作字符串缓冲区下操作大量数据: 适用 StringBuffer
3、重载和重写的区别
- 重载:是指在一个类中,可以有多个重名函数,但是他们的参数列表必须不同(包括参数的类型、个数、顺序)。
- 重写:是子类重写父类的某个方法,以实现子类特有的逻辑或行为,重写方法与父类方法必须有相同的签名(方法名,参数列表,返回值类型);
4、用2个玻璃球找到从一100层的大楼的某一层落下刚好会摔碎,如何制定最优策略?
5、25 匹马,5 个赛道,没有计时器,请问最低多少次可以找出跑得最快的 3匹马
标签:String,StringBuffer,复盘,面试,线程,StringBuilder,重写,final From: https://www.cnblogs.com/poteitoutou/p/180221806、 有10级台阶,一个人每次上一级或者两级,问有多少种走完10级台阶的方法。