华为7月面试八股文及答案
写在前面
StringBuff和StringBuilder
String类采用利用final修饰的字符数组进行字符串保存,因此不可变。如果对String类型对象修改,需要新建对象,将老字符和新增加的字符一并存进去。
StringBuilder,采用无final修饰的字符数组进行保存,因此可变。但线程不安全。
StringBuffer,采用无final修饰的字符数组进行保存,可理解为实现线程安全的StringBuilder。
compator和compatable的区别
Comparable 是一个接口,用于对象内部的比较方式,该接口需要实现的方法是:
public interface Comparable<T> { public int compareTo(T o); }
Comapator 也是一个接口,该接口有个compare方法,该接口需要实现的方法是:
public interface Comparator<T> { int compare(T o1, T o2); }
除该方法外,comparator还可以实现其他方法。
线程池类型
- newCachedThreadPool 可缓存线程池,可设置最小线程数和最大线程数,线程空闲1分钟后自动销毁。
- newFixedThreadPool 指定工作线程数量线程池。
- newSingleThreadExecutor 单线程Executor。
- newScheduleThreadPool 支持定时任务的指定工作线程数量线程池。
- newSingleThreadScheduledExecutor 支持定时任务的单线程Executor。
Arraylist和LinkedList
ArrayList和LinkedList都是可伸缩的数组,即可以动态改变长度的数组。ArrayList基于存储元素的Object[] array来实现的,它们会在内存中开辟一块连续的空间来存储,支持下标、索引访问。但在涉及插入元素时可能需要移动容器中的元素,插入效率较低。当存储元素超过容器的初始化容量大小,ArrayList均会进行扩容。ArrayList不是线程安全的,其方法不具有同步性质。LinkedList也不是线程安全的。LinkedList采用双向列表实现,对数据索引需要从头开始遍历,因此随机访问效率较低,但在插入元素的时候不需要对数据进行移动,插入效率较高。
Redis保护机制RDB AOF
RDB即将当前数据生成快照,并保存于硬盘中。可以通过手动命令,也可以设置自动触发。AOF通过日志,对数据的写入修改操作进行记录。这种持久化方式实时性更好。通过配置文件打开AOF。