职场面试题总结(41)---四大常用函数式接口、java基本数据类型、String 、StringBuilder和 StringBuffer分析

90 阅读2分钟

1、String 、StringBuilder和 StringBuffer分析

(1)StringBuilder和 StringBuffer非常类似,均代表可变的字符序列,而且方法也一样。

(2)String:不可变字符序列。

(3)StringBuffer:可变字符序列、效率低、线程安全。

(4)StringBuilder(JDK1.5):可变字符序列、效率高、线程不安全。

(5)String使用陷阱:

String a="z";/∥创建了一个字符串

a=a+"x";//语句执行之后,原来的“z”字符串对象将被丢弃,会再产生一个字符串a+"z"("zx")。

如果执行多次改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会影响程序的性能。

2、SpringMVC请求处理的流程

(1) 在这里插入图片描述

(2) 在这里插入图片描述

(3) 在这里插入图片描述

3、线程创建的方法有哪些?

(1)继承Thread类

1)定义一个类继承Thread。

2)重写Thread类中的run方法,将自定义代码存储在run方法中。

3)调用线程的start方法:启动线程,然后调用run方法。

(2)实现Runnable接口

1)定义类实现Runnable接口。

2)覆盖Runnable接口中的run方法。

3)通过Thread类建立线程对象。

4)将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。

5)调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。

(3)通过Callable和Future创建线程

1)创建Callable接口的实现类,并实现call()方法,改方法将作为线程执行体,且具有返回值。

2)创建Callable实现类的实例,使用Futrue Task类进行包装Callable对象,FutureTask对象封装了Callable对象的call()方法的返回值。

3)使用Future Task对象作为Thread对象启动新线程。

4)调用FutureTask对象的get()方法获取子线程执行结束后的返回值。

4、四大常用函数式接口

在这里插入图片描述

5、java基本数据类型

在这里插入图片描述

6、聚簇索引与非聚簇索引的使用情况分析

在这里插入图片描述