1Java有哪些数据类型
2.Math.round(11.5) 等于多少?Math.round(-11.5)等于多少
Math.round(11.5)的返回值是 12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加 0.5 然后进行下取整。
3.final finally finalize区别
-
final可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表示该变量是一个常量不能被重新赋值。
-
finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。
-
finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调
用,当我们调用System.gc() 方法的时候,由垃圾回收器调用finalize(),回收垃圾,一个对象是否可回收的最后判断
4 Integer a= 127 与 Integer b = 127相等吗
对于对象引用类型:==比较的是对象的内存地址。
对于基本数据类型:==比较的是值。
如果整型字面量的值在-128到127之间,那么自动装箱时不会new新的Integer对象,而是直接引用常量池中的Integer对象,超过范围 a1==b1的结果是false
public static void main(String[] args) {
Integer a = new Integer(3);
Integer b = 3; // 将3自动装箱成Integer类型
int c = 3;
System.out.println(a == b); // false 两个引用没有引用同一对象
System.out.println(a == c); // true a自动拆箱成int类型再和c比较
System.out.println(b == c); // true
Integer a1 = 128;
Integer b1 = 128;
System.out.println(a1 == b1); // false
Integer a2 = 127;
Integer b2 = 127;
System.out.println(a2 == b2); // true
}
5.深拷贝和浅拷贝区别是什么?
数据分为基本数据类型和引用数据类型。基本数据类型:数据直接存储在栈中;引用数据类型:存储在栈中的是对象的引用地址,真实的对象数据存放在堆内存里。
浅拷贝:对于基础数据类型:直接复制数据值;对于引用数据类型:只是复制了对象的引用地址,新旧对象指向同一个内存地址,修改其中一个对象的值,另一个对象的值随之改变。
深拷贝:对于基础数据类型:直接复制数据值;对于引用数据类型:开辟新的内存空间,在新的内存空间里复制一个一模一样的对象,新老对象不共享内存,修改其中一个对象的值,不会影响另一个对象。
深拷贝相比于浅拷贝速度较慢并且花销较大。
6、&和&&的区别?
&&:逻辑与运算符。当运算符左右两边的表达式都为 true,才返回 true。同时具有短路性,如果第一个表达式为 false,则直接返回 false。
&:逻辑与运算符、按位与运算符。
按位与运算符:用于二进制的计算,只有对应的两个二进位均为1时,结果位才为1 ,否则为0。
逻辑与运算符:& 在用于逻辑与时,和 && 的区别是不具有短路性。所在通常使用逻辑与运算符都会使用 &&,而 & 更多的适用于位运算。
7.1List、Set、Map三者的区别?
List(对付顺序的好帮手): List 接口存储一组不唯一(可以有多个元素引用相同的对象)、有序的对象。
Set(注重独一无二的性质):不允许重复的集合,不会有多个元素引用相同的对象。
Map(用Key来搜索的专业户): 使用键值对存储。Map 会维护与 Key 有关联的值。两个 Key可以引用相同的对象,但 Key 不能重复,典型的 Key 是String类型,但也可以是任何对象。
7Array 和 ArrayList 有何区别?如何实现 Array 和 List 之间的转换?
- Array 可以存储基本数据类型和对象,ArrayList 只能存储对象。
- Array 是指定固定大小的,而 ArrayList 大小是自动扩展的。
- Array 内置方法没有 ArrayList 多,比如 addAll、removeAll、iteration 等方法只有 ArrayList 有。
Array 转 List: Arrays. asList(array) ;
List 转 Array:List 的 toArray() 方法。
8ArrayList 和 LinkedList 的区别。
-
1)ArrayList底层基于动态数组实现(数组是一块连续的区域),LinkedList底层基于双向链表实现(链表空间是分散的,不需要连续)
-
2)对于随机访问(get/set方法),ArrayList通过index直接定位到数组对应位置的节点,而LinkedList需要从头结点或尾节点开始遍历,直到寻找到目标节点,因此在效率上ArrayList优于LinkedList。
-
3)对于插入和删除(add/remove方法)开销大,因为ArrayList这需要移动数组中插入位置之后的的所有元素(使用System.arraycopy方法移动节点),而LinkedList只需修改目标节点前后节点的next或prev属性即可,因此在效率上LinkedList优于ArrayList。当 ArrayList 是顺序插入的时候,由于不需要移动节点,因此在效率上并不会比 LinkedList 差。当 ArrayList 是顺序插入的时候,由于不需要移动节点,因此在效率上并不会比 LinkedList 差。
使用场景:
(1)如果应用程序对数据有较多的随机访问,ArrayList对象要优于LinkedList对象;
( 2 ) 如果应用程序有更多的插入或者删除操作,较少的随机访问,LinkedList对象要优于ArrayList对象;
(3)不过ArrayList的插入,删除操作也不一定比LinkedList慢,如果在List靠近末尾的地方插入,那么ArrayList只需要移动较少的数据,而LinkedList则需要一直查找到列表尾部,反而耗费较多时间,这时ArrayList就比LinkedList要快。
ArrayList 和 LinkedList 哪个更占空间?
https://blog.csdn.net/DevolperFront/article/details/120299820
9 hashmap
https://joonwhee.blog.csdn.net/article/details/106324537
https://blog.csdn.net/qq_35190492/article/details/103467732
10 ConcurrentHashMap
https://blog.csdn.net/yunzhaji3762/article/details/113623168
11 String和StringBuilder、StringBuffer的区别?
String:String 的值被创建后不能修改,任何对 String 的修改都会引发新的 String 对象的生成。
StringBuffer:跟 String 类似,但是值可以被修改,使用 synchronized 来保证线程安全。
StringBuilder:StringBuffer 的非线程安全版本,没有使用 synchronized,具有更高的性能,推荐优先使用。
12.常⻅的异常类有哪些
- NullPointerException 空指针异常
- ClassNotFoundException 指定类不存在
- NumberFormatException 字符串转换为数字异常
- IndexOutOfBoundsException 数组下标越界异常
- ClassCastException 数据类型转换异常
- FileNotFoundException ⽂件未找到异常
- NoSuchMethodException ⽅法不存在异常
- IOException IO 异常
- SocketException Socket 异常
13. @Resource和@Autowired
相同点:都可以用来装配bean. 都可以写在字段上
- 区别1:@Resource是J2EE提供的,@Autowire是Spring提供的
- 区别2:@Autowired默认是按照类型来注入的,默认情况下要求依赖对象必须存在。需要按名字注入的话可以跟@Qualifier搭配使用。
@Resource是按照里面的name属性来注入的
对比项 | @Autowire | @Resource |
---|---|---|
注解来源 | Spring注解 | JDK注解(JSR-250标准注解,属于J2EE) |
装配方式 | 优先按类型 | 优先按名称 |
属性 | required | name、type |
作用范围 | 字段、setter方法、构造器 | 字段、setter方法 |
15. java1.8新特性
- 代码更少 Lambda 表达式
list.stream().forEach(data ->{
System.out.println(data.getName()+"----"+data.getAge());
});
//lambda便利 list
list.forEach(user -> {
System.err.println("id:" + user.getId() + "----name:" + user.getName() + "----age:" + user.getAge());
});
- 速度更快 – 红黑树
主要还是HashMap中链长度大于8时采取红黑树的结构存储。(1.7的时候是链表结构)
红黑树,除了添加,效率高于链表结构。 - 强大的Stream API – Stream
stringCollection
.stream()
.filter((s) -> s.startsWith("a"))
.forEach(System.out::println);
过滤包含a的字符串
- 最大化减少空指针异常 – Optional
Optional<String> optional = Optional.of("bam");
optional.isPresent(); // true
optional.get(); // "bam"
optional.orElse("fallback"); // "bam"