2021年三月份Java面试题(含答案)
1.说说String,StringBuild,StringBuffer之间的区别
答案:
- String:字符串变量,final修饰,不可变! String的变量赋过一次值之后就不能被修改
- StringBuffer:字符串变量(线程安全,可变)
- StringBuilder:字符串变量(线程不安全,可变)
- StringBuffer和StringBuilder则可以使用append方法进行字符串拼接。
- 效率:stringbuild>stringbuffer>string(线程安全,则效率就会低)
当你说String是用final修饰的时候,对方可能会问一句,那么被final修饰过的类能被继承吗,答案是不能
2.访问修饰符有哪些,并写出它们的作用域:
答案:
修饰符 | 当前类 | 同包 | 子类 | 其他包 |
private | √ | × | × | × |
default | √ | √ | × | × |
protected | √ | √ | √ | × |
public | √ | √ | √ | √ |
3.用java语言写出冒泡排序:(看完之后可以自己手写一遍加深印象,一共两次循环)
// 第一层循环实现总趟数
for (int i=0; i<arr.length-1;i++){
// 第二层的循环为一趟走多少次
for (int j=0; j<arr.length-1-i; j++){
if (arr[j] > arr[j+1]){
// 临时变量,暂时存储arr[j],如果满足if条件,好将它之后赋值给arr[j+1]
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
4.说说set、List、Map三种集合之间的区别
答案:
List,Set都是继承自Collection接口
set:无序,不可重复,增加删除操作快
List:有序,可重复,访问数据块
set:HashSet,TreeSet.,LinkedHashSet
List:LinkList, ArrayList
Map:HashMap
-HashSet:以哈希表的形式存放元素,插入删除速度很快
-TreeSet:升序对对象排序的集的实现
-ArrayList:动态数组。由数组实现的List,允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。
-LinkedList:链表,队列,堆栈。对顺序访问进行了优化,向List中间插入与删除的开销并不大,随机访问则行对较慢
-HashMap:采用键值对,允许存储空对象,而且允许键是空(由于键必须是唯一的,当然只能有一个)。
5.描述一下栈和队列
答案:
栈:栈的特点是“后进先出”,也就是说后存放的先取,先存放的后取。栈只能在一端进行插入和删除的线性表。允许进行插入和删除操作的一端称为栈顶,另一端为栈底。当栈中没有元素时,称为空栈。
队列:队列是先进先出,有出口和入口,先进去可以先出来。
6.&和&&的区别
&&称为短路运算,只要&&左边的表达式值为false,则右边的表达式就不会运算,被直接短路掉。
举例:当判定用户名不是null并且不是空字符串是,应当写成:
userName!=null && !userName.equals("")。这是就不能用&运算符或者将两个表达式的位置换一下,因为如果userName为null的话,在对它用equals方法会出现nullPointerException(空指针异常)。
逻辑或运算符(|)和短路或运算符&#